Inspiration
Travel apps recommend the same ten places to everyone. But if you love Serial Experiments Lain, Hotline Miami, and MF DOOM, you don't want "top attractions." You want the dim listening bar, the tiny arcade, and the back-alley ramen shop that feel like those things. Your taste is specific, and nobody plans trips around it.
We wanted a travel planner that starts from what you love instead of where you're going.
What it does
VibeSync Itinerary turns your favorite obscure media into an hour-by-hour weekend plan.
- You enter the anime, games, albums, or artists you love, plus a city.
- An LLM reads the underlying vibe: the mood, aesthetic, and sensibility behind your favorites.
- The agent queries Qloo's taste graph to find real places in that city that match your taste profile.
- It ranks and diversifies those places, then builds a day-by-day itinerary with times, descriptions, and a "why it fits" note for every stop.
Every stop is grounded back to a Qloo place, and the UI shows a taste-match score for each. If a stop is generic filler, it says so. If any data is sample data, a banner says so.
The app is live and the code is public. Use the "Try it out" links on this page to open the live demo, or read the source in the GitHub repository.
How we built it
- Frontend: React (Vite), Tailwind CSS, Lucide icons, hosted on Vercel. A risograph-inspired design made for a zine-and-record-store audience.
- Backend: Node.js and Express, hosted on Render. It holds all API keys, so nothing secret reaches the browser.
- Reasoning: Groq running OpenAI's gpt-oss-20b in JSON mode, with gpt-oss-120b as an automatic fallback model and retry logic.
- Taste data: the Qloo API. We resolve each favorite with
/search, then call/v2/insightswith those entity IDs as signals, filtered to places in the target city.
The agent runs as a multi-step pipeline:
- Extract the vibe. The LLM produces a vibe title, summary, keywords, and clean entity names to look up.
- Resolve entities in Qloo. Names become taste-graph entity IDs.
- Retrieve taste-matched places. Qloo returns places ranked by affinity for that city.
- Rank and diversify. Results are re-balanced across place types so the plan isn't twelve bars in a row.
- Compose the itinerary. The LLM schedules stops using only the retrieved places, referenced by ID.
- Ground the output. Every stop is matched back to a real Qloo place. Repeats are removed and unmatched stops are flagged.
Reliability features: exponential backoff on Qloo rate limits and server errors, response caching, JSON validation and retry on LLM output, and a per-IP rate limiter to protect API quotas. If Qloo is ever unavailable, the live site can degrade to clearly labeled sample data instead of failing, and the interface shows a banner whenever that happens.
Challenges we ran into
- LLMs invent places. Early itineraries mixed real recommendations with plausible-sounding fakes. Giving each retrieved place an ID and requiring the model to reference it, then checking every stop afterward, fixed this.
- Structured output from a fast, free-tier model. The model occasionally returned malformed or incomplete JSON. We added validation, retries with lower temperature, and a fallback model.
- Rate limits. Free-tier limits forced us to keep prompts compact and cache repeated requests.
- Building before the API key arrived. We built a mock Qloo provider with the same response shape as the real client and an explicit switch, so the full product could be built and tested early. Mock data is always labeled in the UI. When the hackathon key arrived, going live meant changing one environment variable, and we added a small check script to verify live responses.
- Variety. Pure affinity ranking clustered similar venues, so we added diversity re-ranking.
Accomplishments that we're proud of
- A complete, working agent pipeline from raw taste to a scheduled itinerary, deployed publicly.
- Honest outputs: every stop is tied to a real taste-graph match, filler is labeled, and sample data is never passed off as live.
- A distinctive interface that feels made for the people who use it, with a visible "how the agent built this" trace so users can see each step.
What we learned
Retrieval first, generation second is what makes AI travel planning trustworthy. The taste graph supplies the facts, and the LLM supplies the sequencing and the story. Qloo's cross-domain signals also meant we could seed place recommendations directly from favorites in anime, games, and music, with no place-specific input from the user.
What's next
- Use Qloo's explainability data to show exactly which favorite drove each recommendation.
- Query more categories, such as restaurants, events, music venues, and shops, and blend them across the day.
- Real routing: opening hours, travel times, and a map view.
- Shareable itinerary links and group trips that merge several people's tastes.
- A feedback loop: thumbs up or down on stops to refine the taste profile.
Built with
React, Vite, Tailwind CSS, Node.js, Express, Groq, OpenAI gpt-oss, Qloo API, Render, Vercel
Built With
- express.js
- groq
- javascript
- llama-3.3
- node.js
- qloo-api
- react
- tailwind-css
- vite
Log in or sign up for Devpost to join the conversation.