Inspiration

The modern traveler is overwhelmed by generic, one-size-fits-all recommendations from traditional travel guides and popular apps. A person's taste in food, movies, and shopping is deeply interconnected, yet no single platform leverages this "cultural intelligence" to provide truly personalized travel advice. The idea for TouristBuddy was born out of a desire to move beyond star ratings and popularity, to create an AI-powered travel companion that understands a user's unique taste profile and translates it into authentic, highly relevant local experiences in a foreign country.

What it does

TouristBuddy is a personalized travel companion that helps users discover authentic and relevant local spots, such as restaurants, movies, and shopping destinations, in a foreign city. It uses a conversational AI interface to translate natural language queries into specific recommendations, moving beyond generic star ratings and popularity to deliver insights tailored to a user's unique taste profile.

How we built it

TouristBuddy is a full-stack, mobile-first web application built with a modern and robust technology stack designed for speed, scalability, and seamless integration.

Frontend: The user interface is built with Next.js and React, providing a fast, responsive, and intuitive experience. The UI is intentionally simple, featuring a central conversational prompt box to mimic a personal assistant and minimize cognitive load for the user.

Backend: All core logic runs on Next.js API Routes to create a secure proxy layer. This protects sensitive API keys and orchestrates complex, multi-step calls between our frontend and external services.

Authentication & Data: Supabase serves as our backend-as-a-service. We use it for user authentication to securely manage accounts. While an initial version might not require a database, a future roadmap includes using Supabase to store user taste profiles and saved itineraries.

Cultural Intelligence: The heart of our project is the Qloo API. We use three key endpoints:.

Conversational AI: The Google Gemini API is the conversational engine of our app. It's used in two key ways:

It provides a personalized, location-aware greeting to the user on page load.

It parses natural language queries from the user (e.g., "Find famous Italian restaurants in Rome") and translates them into a structured JSON object. This object then informs our Qloo API calls, bridging the gap between natural language and structured data.

Geolocation: We use the free Nominatim Geocoding API to convert the user's detected coordinates into a city name, which is then used to personalize the recommendations.

Challenges we ran into

Our journey was not without its challenges. The most significant hurdle was getting the LLM and Qloo API to work together seamlessly.

LLM Hallucinations & Conversational Bias: A major challenge with the Gemini API was forcing it to return a clean, structured JSON output instead of a conversational response. We solved this by using a very strict and specific prompt that provided clear instructions and examples, making it behave predictably.

Full-Stack Integration: Orchestrating API calls from the frontend through a Next.js API proxy to multiple third-party services (Qloo, Gemini, Nominatim) was a complex but rewarding task. It taught us the importance of a clear and secure architectural pattern for building modern applications.

Accomplishments that we're proud of

We are most proud of successfully integrating multiple complex and disparate APIs to create a cohesive and intelligent application. This includes:

Overcoming LLM Conversational Bias: We managed to force the Google Gemini API to reliably return structured JSON data, a significant challenge, by crafting a very strict and specific prompt. This allows our app to be conversational while still functioning as a robust, data-driven tool.

Cracking Qloo's API Validation: Through meticulous testing, we overcame numerous 400 Bad Request errors caused by strict API validation, successfully mapping natural language queries to the precise parameters and formats required by the Qloo API.

Building a Secure Full-Stack Architecture: We successfully orchestrated a secure proxy layer with Next.js API routes to handle sensitive API keys for Qloo and Gemini, ensuring that our application's architecture is both functional and secure.

What we learned

Our development journey provided several key learning experiences:

Strict API Validation: We learned that some APIs, like Qloo's, have very specific requirements for their parameters. This required us to perform methodical testing to understand the correct usage of different endpoints and parameter types.

LLM Hallucinations & Conversational Bias: We discovered the importance of prompt engineering to guide a conversational LLM toward returning structured data, turning a potential weakness into a key strength of our application.

Full-Stack Integration: We gained valuable experience in securely integrating multiple third-party services through a central API proxy, teaching us the importance of a clear and secure architectural pattern.

What's next for TouristBuddy

Looking ahead, TouristBuddy could be enhanced with:

An onboarding flow to capture initial user preferences for deeper personalization.

The ability to save recommended places to a custom itinerary.

Integration with Mapbox for a fully interactive map experience.

How to use

Step 1: Get Started Instantly.

TouristBuddy automatically detects your current location upon launch.

Our AI gives you a warm, personalized greeting (e.g., "I can see you're in Toronto!").

Step 2: Ask TouristBuddy a Question.

Simply type your query into the chat bar, no need to mention your city!

Example Prompts:

"What's trending near me?"

"Show me famous restaurants near me."

"What are the new movies playing around me?"

Step 3: Get Personalized Recommendations.

TouristBuddy provides an instant, data-driven response tailored to your exact location and query.

The app understands "near me" and filters results accordingly.

How We Stand Out from Competitors

In a crowded market of travel apps, TouristBuddy is not just another guide. We address the fundamental flaws of traditional platforms like Google Maps and Travelguard by providing a truly intelligent and personalized experience.

Beyond Popularity & Star Ratings:

Competitors: Google Maps and Travelguard primarily rely on aggregated star ratings and generic popularity lists. This often leads to recommending crowded tourist traps or places that simply don't align with a user's specific tastes. A 4.5-star restaurant isn't always the right restaurant for you.

TouristBuddy: We go a step further with Qloo's Taste AI. By understanding your unique preferences in movies, music, and brands, we can predict what you'll enjoy in a new city. Our recommendations are not just popular; they are highly relevant and aligned with your personal "taste vector."

Bridging the Language and Cultural Gap:

Competitors: These apps offer basic language translation but lack true cultural context. They can tell you what something is, but not why it's significant or how it fits into the local culture.

TouristBuddy: Our app uses a conversational LLM (Gemini) to translate not just language, but intent and context. This allows users to ask questions in natural language and get conversational, culturally-aware insights. For example, instead of just showing a list of restaurants, our AI can tell you why a particular eatery is a local gem or explain its cultural significance.

A Seamless and Intuitive Experience:

Competitors: The experience is often fragmented—a user searches, gets a list, clicks on a link, and navigates back and forth between different screens.

TouristBuddy: We simplify the entire flow into a single, conversational interface. The user provides a natural language prompt, and our backend intelligently orchestrates multiple API calls (to Qloo and our geolocation service) to provide a tailored, all-in-one response. This creates a frictionless and highly intuitive experience that feels like chatting with a knowledgeable friend, not a search engine.

Using Qloo's signal.interests.entities and signal.interests.tags in the /v2/insights endpoint to provide even more nuanced and cross-category recommendations.

Built With

Share this project:

Updates