Inspiration

We've all experienced "decision paralysis", standing on a sidewalk with friends on a Friday night, scrolling through Google Maps or Yelp for 45 minutes, unable to decide where to go. We realized that people don't just want a list of places; they want a plan. We wanted to gamify the experience of exploring a city, turning a mundane night out into an adventurous "SideQuest" in an RPG.

What it does

SideQuest is an intelligent itinerary generator that turns your location into a playground. Instead of showing you isolated pins on a map, it:

  • Generates Themed Quests: Dynamically bundles nearby spots into cohesive experiences (e.g., "The $20 Student Night" or "Coffee & Nature Walk").
  • Enriches with AI: Uses Google Gemini to analyze venues and events, estimating "vibe" metrics like energy level ("Low Energy" vs "High Energy"), cost, and ideal duration.
  • Real-Time Data: Pulls live events from Ticketmaster and venue details from Google Places to ensure every quest is actionable right now.
  • Gamifies Exploration: Users "accept" quests, view step-by-step itineraries, and can track their completion status.

How we built it

We built SideQuest as a full-stack web application:

  • Frontend: Built with Next.js 16 (App Router) and Tailwind CSS for a premium, responsive UI. We used the Google Maps JavaScript API with Advanced Markers for the interactive map experience.
  • Backend: A high-performance FastAPI (Python) server handles the logic.
  • AI Integration: We integrated Google Gemini Flash to process raw place data and provide helpful metadata like whether a specific bar is good for a date or a rowdy night out.
  • Data Aggregation: We created a custom QuestGenerator engine that ingests raw data from Google Places API and Ticketmaster API, filters out "boring" spots (like banks or dentists), and algorithmically chains interesting locations together based on distance and theme.

Challenges we ran into

  • Map Integration: Implementing Google Maps AdvancedMarkerElement in a React/Next.js environment was tricky, specifically syncing state between the map pins and the scrolling list of quest cards.
  • Data Noise: The Places API returns everything, including gas stations and ATMs. We had to build robust filtering logic to ensure quests only included "fun" locations.
  • AI Latency: Making real-time calls to Gemini for every item was too slow. We solved this by implementing fallback strategies and optimizing our prompt engineering to request JSON outputs that were strictly formatted for immediate frontend rendering.
  • CORS & API Security: we spent a good chunk of time debugging strict CORS policies between our localhost frontend and Python backend service.

Accomplishments that we're proud of

  • The "Human" Feel: The app doesn't feel like a directory; it feels like a local friend giving you a recommendation.
  • Seamless Map-to-List UX: We're proud of the interaction where hovering over a card highlights the pin on the map and vice-versa.
  • Robust Error Handling: If the API quotas are hit or data is sparse, the system gracefully falls back to curated "Demo Quests" (like a McMaster Campus tour) so the user always sees content.
  • Working Geolocation: Successfully getting the browser's geolocation to trigger a backend search that populates the UI in seconds.

What we learned

  • Prompt Engineering is functionality: We learned that treating the LLM as a data-formatting engine is just as powerful as using it for creative writing.
  • State Management: Coordinating global state between a map (imperative) and React components (declarative) requires careful planning.
  • The value of "Vibe": Tech often focuses on metrics (4.5 stars), but users care about "energy" and "mood." - Translating data into these human concepts was a key learning curve.

What's next for SideQuest

-cSocial Features: Adding deep-linking so you can text a specific Quest URL to a friend.

  • Customization: Adding various options like a "Vibe Slider" (e.g., Chill <-> Chaos) to let users tune the algorithm's output.
  • Monetization: Partnering with local businesses to be featured as a stop in generated quests.

Built With

Share this project:

Updates