Local Guide Finder for Solo Travelers

Local Guide Finder

Connect with local experts for an authentic solo travel experience.

${guide.tagline}

${tagsHtml}
`; card.addEventListener('click', () => openModal(guide.id)); guidesContainer.appendChild(card); }); } function openModal(guideId) { const guide = guidesDB.find(g => g.id === guideId); modalContent.innerHTML = `

${guide.name}

${'⭐'.repeat(Math.round(guide.rating))} ${guide.rating}

|

$${guide.price}/hr

${guide.bio}

Languages: ${guide.languages.join(', ')}

Reviews

"${guide.reviews[0].text}"

- ${guide.reviews[0].author}

`; modal.classList.remove('hidden'); document.getElementById('close-modal-btn').addEventListener('click', () => modal.classList.add('hidden')); } searchBtn.addEventListener('click', () => renderGuides(interestFilter.value)); document.getElementById('pdf-download-btn').addEventListener('click', () => { const { jsPDF } = jspdf; const pdf = new jsPDF(); const filter = interestFilter.value; const filteredGuides = guidesDB.filter(guide => filter === 'all' || guide.interests.includes(filter)); pdf.setFontSize(22); pdf.text(`Local Guide Recommendations`, 105, 20, { align: 'center' }); let y = 35; filteredGuides.forEach((guide, index) => { if (y > 260) { pdf.addPage(); y = 20; } pdf.setFontSize(16); pdf.setTextColor(40, 40, 180); pdf.text(`${index + 1}. ${guide.name} - ${guide.city}`, 15, y); y += 7; pdf.setFontSize(11); pdf.setTextColor(50, 50, 50); pdf.text(`"${guide.tagline}"`, 20, y); y += 6; pdf.text(`Interests: ${guide.interests.join(', ')}`, 20, y); y+= 10; }); pdf.save('local-guide-list.pdf'); }); // Initial render renderGuides(); });
Scroll to Top