1) About the Project
💡 Inspiration
Every "best places in India" list reads the same — the same ten monuments, written by people who never went. Meanwhile, the real recommendations live in thousands of creator videos and local blogs that no search box can cross-reference.
We wanted a travel concierge that starts from who you are — the films you love, the music you play, the food you crave — and answers with places real creators actually vouched for, not SEO sludge.
Qloo's Taste AI made the first half possible: taste is cross-domain, so loving A.R. Rahman and Interstellar can genuinely predict a destination. We built the second half ourselves — a creator-verified evidence graph of India.
🧭 What It Does
TasteTrail is an agentic, cross-domain travel concierge for India:
- You describe your taste in plain language. Qloo's Taste AI expands it into destinations and the films, shows, music & books that share your taste DNA — shown as an explainable graph.
- For each place, you get creator-verified spots — every recommendation is backed by a real YouTube creator or blog, with the exact quote and timestamp ("✓ See the proof").
- It layers on an interactive India map (day-by-day pins, nearest airport, one-tap flight search), a live cultural scene (festivals in season during your trip), a local culture pack (greetings, etiquette, must-try dishes), and trails to extend one city into a themed route.
- It's resilient: if every LLM is rate-limited, a deterministic planner still assembles a full, verified plan from Qloo + the evidence graph.
🛠️ How We Built It
Two systems:
- The evidence graph (Python pipeline → Supabase):
Agate → extract → resolve → scorepipeline ingests creator videos (YouTube transcripts) and travel blogs, extracts claims about specific places with an LLM, resolves them to canonical entities, and scores them.
It is exported to a static JSON snapshot the app reads — 1,700+ POIs across 120+ cities, backed by 70+ creators, keyless-geocoded (Photon/OSM) for the map.
- The app (Next.js 16 + React 19 on Vercel):
A tool-calling agent orchestrates Qloo's/search,/insightsand taste-expansion endpoints, cross-ranks our verified places against Qloo's own venue picks, and composes a narrated itinerary.
Share links and saved trips persist in Vercel KV (Upstash).
Conceptually, a place $p$ is ranked by creator consensus, confidence, and whether Qloo independently corroborates it:
$$ \text{score}(p) \;=\; \sigma!\big(k\,(f_p - 1)\big)\,\cdot\,\bar{c}_p\,\cdot\,\big(1 + \lambda\,\mathbb{1}[\text{Qloo corroborates }p]\big) $$
where $f_p$ is the number of distinct creators vouching for $p$, $\bar{c}_p$ is the mean extraction confidence, $\sigma$ is the logistic function, and the last term boosts places Qloo's Taste AI surfaces on its own.
📚 What We Learned
- Taste is a better travel prompt than a search query. Qloo's cross-domain signal routes "trekking + Coldplay + mountain cafes" to the right kind of place, not just keyword matches.
- Trust is a feature. Judges and users relax the moment they see the receipt — the creator's face, the quote, the timestamp.
- Free tiers have sharp edges. Daily caps, per-minute token limits, and geocoder throttling each quietly broke a batch until we designed around them (provider fallbacks, bulk-friendly Photon, pooler-safe DB connections).
🧗 Challenges We Faced
- Serverless has no disk. Our share feature wrote files to a read-only filesystem — invisible locally, broken in production. Fixed with Vercel KV.
- Bundling a 3 MB snapshot on Vercel. A dynamic
fsread wasn't traced into the function bundle (500s in prod) until we forced it withoutputFileTracingIncludes. - Geocoding at scale. Nominatim hard-throttles bulk runs; we switched to Photon and made the geocoder hold no DB connection across network calls.
- Vague prompts. "Himalayas please" first returned only destination options; we taught the agent to commit to a region-appropriate northern city (Kashmir → Srinagar, Ladakh → Leh) instead of a static default.
🚀 What's Next
Multi-city routing, a mobile PWA, and opening the evidence pipeline so creators can claim and enrich their own places.
Built With
- framer-motion
- geojson
- google-gemini
- groq
- javascript
- leaflet.js
- next.js
- nominatim
- openai
- openstreetmap
- photon
- postgresql
- python
- qloo
- react
- supabase
- typescript
- upstash
- vercel
- youtube
Log in or sign up for Devpost to join the conversation.