Inspiration

Ask any LLM where to travel and you get the same answer: Paris, Tokyo, Lisbon. Ask Google Flights Explore and you get the world sorted by price. Neither knows anything about you. But your taste already says a lot about where you'd be happy. Someone who loves Khruangbin, Past Lives and Parts Unknown should hear about Oaxaca and Reykjavik's record shops, not another top-10 list. We wanted an agent that sorts the world by taste first, then finds the cheapest way there.

What it does

Tell TasteTrip the music, films, shows and food you love, plus where you fly from. The agent:

  • Reads your taste in Qloo's graph. Artists, films and shows become Qloo entities. Interests like "natural wine" or "street tacos" become Qloo tags.
  • Ranks destinations worldwide. It queries Qloo Insights for destinations across six world regions and shows each match score along with which of your favorites drove it, using Qloo's explainability.
  • Prices every match live. It finds the cheapest Google Flights fare into each city's nearby airports and flags fares below the typical price.
  • Plans the city. It picks Qloo-matched places to eat, get coffee, drink, hear music, see and stay, each with photos, ratings and a Maps link.
  • Blends a group fairly. It scores the same cities against each friend's taste separately, so the pick works for everyone.

Every destination, venue, score and price on screen comes from a tool call. The model is not allowed to invent any of them.

How we built it

A Next.js app with a Vercel AI SDK tool-calling agent (ToolLoopAgent) and four tools: findDestinations, priceTrips, planCity and blendGroup. Qloo powers taste lookup, destination ranking, venue matching and per-person scoring (filter.results.entities). SerpAPI provides live Google Flights fares, OurAirports maps cities to airports, and Wikipedia supplies destination photos.

The best-value pick trades taste against price:

$$\text{value} = \frac{\text{match}}{\sqrt{\text{price} / \text{cheapest price}}}$$

Group trips weight the least-happy person as much as the average, because a trip one friend hates is a bad trip:

$$\text{group score} = 0.5 \cdot \text{mean}(m_i) + 0.5 \cdot \min_i(m_i)$$

Challenges we ran into

  • Home-culture bias. Qloo's raw destination results clustered around the user's home culture (all California, for American favorites). We query each world region separately, merge the results, and drop near-duplicate neighborhoods within 60 km.
  • Same-name cities. "Portland" could be Maine or Oregon. We carry Qloo's state through to the agent and accept a photo only if its coordinates sit near Qloo's.
  • Not everything is an entity. "Specialty coffee" isn't an artist or a film, so interests resolve to Qloo tags, with a fallback in both directions.
  • Real-world flight data. Rome mapped to a small airport with no flights from Miami, and the model picked dates that had already passed. We now search every airport within 80 km and roll past dates forward.
  • Grounding. Early versions named cities that weren't in the results. The model now gets compact tool summaries and strict rules, and must call a tool before writing anything.

What we learned

Cross-domain taste works. The links from music and film to places produced recommendations no plain LLM gives. The hard part was making every number trustworthy, so the agent's personality sits on top of real data, not in place of it.

What's next

Price calendars to find the cheapest week, hotel prices, Spotify and Letterboxd import, and shareable group-trip links.

Built With

Share this project:

Updates

Submission history