Inspiration

We've all been in the situation where you have a free afternoon, you're bored, and you want to do something, but nothing comes to mind. Or you're visiting somewhere new and don't know where to start. I wanted to fix that by turning the real world into a game. The idea was simple: what if your phone could hand you a micro-adventure right now, tailored to how you're feeling, grounded in where you actually are?

There's also a growing mental health crisis among college students. Anxiety, burnout, and loneliness are at record highs. A huge part of that is how passive our downtime has become: we scroll instead of move, consume instead of experience. I wanted to build something that nudges people toward the things that actually make them feel better, like getting outside, moving their body, being creative, or just talking to someone new, without it feeling like a chore or a therapy app. SideQuest wraps that in a game because games work: streaks, XP, and rewards make healthy habits sticky in a way that willpower alone doesn't.

I was also thinking about how hard it is to meet people IRL, especially in a college setting where everyone's on their phone anyway. SideQuest flips that: instead of scrolling, you're out doing something. And instead of doing it alone, you might run into someone else doing the same thing.

What it does

SideQuest is a mobile-first web app that generates personalized, location-based micro-adventures using AI. Here's the core loop:

  1. Tell us your vibe — pick your mood (energized, burnt out, anxious, bored...), how much time you have, and what you're after (socialize, decompress, explore, get moving)
  2. Get a quest — Claude generates a unique micro-adventure grounded in real nearby places pulled from Foursquare and OpenStreetMap. Not "go find a coffee shop," but something specific, unexpected, and actually fun
  3. Do it — head out, complete the quest, snap a photo as proof
  4. Earn XP — level up, build a daily streak, log your adventures

Special modes include Mystery Quest, where you get cryptic clues revealed one at a time instead of full instructions (using hints costs XP), and a Nearby feed powered by Supabase that shows quests other people near you are actively doing so you can join them.

How we built it

  • Frontend: React + TypeScript + Vite, React Router v6, fully mobile-first
  • AI: Claude LLM (claude-sonnet-4-6) via the Anthropic SDK
  • Location & POIs: Browser Geolocation API for coordinates, Foursquare Places API v3 for nearby businesses, OpenStreetMap Overpass API for landmarks, parks, and monuments
  • Social layer: Supabase (Postgres) for the live nearby broadcast feed. Anonymous, location-rounded to ~100m for privacy, auto-expires after 3 hours
  • Persistence: localStorage for all game state (XP, levels, streaks, quest history, photos)
  • Deployment: Vercel with CI/CD from GitHub

Challenges we ran into

Getting quests to actually feel local. Early versions had Claude just making up generic quests that could've been anywhere. I fixed this by fetching real nearby POIs first and forcing Claude to anchor the quest around a specific real place. Even then, Claude kept defaulting to the most famous landmark nearby (UVA's The Lawn kept dominating everything). The solution was a hybrid Foursquare + Overpass pipeline with a random featured POI pre-selected before the prompt is built.

Making vibe context actually matter. Adding mood/time/goal inputs is easy. Making them meaningfully change the output is hard. I built a table that maps mood + goal combinations to category probability distributions, moved the vibe context into the system prompt for stronger enforcement, and used the actual selected time duration in the quest constraints.

Accomplishments that we're proud of

  • Quests feel genuinely local and specific, not generic AI slop. Also, someone who's anxious or burnt out gets a quest that actually respects how they're feeling, not a generic prompt everyone else gets.
  • The full game loop (roll → accept → complete → XP → level up → streak) works end to end and feels satisfying
  • Mystery mode with the progressive clue reveal and XP penalty system is actually fun to play
  • The Nearby feed lets two people on different devices doing quests in the same area see each other in real time with zero accounts or sign-up required, fostering social connection

What we learned

  • Structured JSON output from Claude requires two layers of control: enforcement in the prompt and post-parse overrides. Claude will silently violate constraints (like category or difficulty ranges) under prompt pressure. You have to treat the output as untrusted and correct it programmatically.
  • Geolocation + real POI data transforms AI-generated content from generic to genuinely useful

What's next for SideQuest

  • Participant count + meeting point on the Nearby feed — show how many people are doing a quest nearby and suggest a real landmark to meet at, so strangers can actually find each other
  • Leaderboard — a lightweight Supabase-backed global leaderboard (username + XP) to add competition
  • Difficulty progression — as your level increases, bias quest generation toward harder quests
  • Business partnerships — local cafes, shops, and gyms could sponsor quests ("grab a free coffee at X after your walk") giving businesses a hyperlocal discovery channel and players a real-world reward for completing quests

Built With

Share this project:

Updates