Inspiration
I ran AI workshops for about 50 travel advisors. A luxury advisor gets paid to know their clients and match their preferences to the right places all around the world. But nobody has been to the entire world, and any wrong recommendation might send a client to a competitor especially now that there are so many new advisors.
What it does
You add a client's preferences from a consultation call, or import a Google Maps list of their saved places. You can ask the Wherefore agent for any recommendations, it will use the Qloo API to find the most prommising places. The agent will read the reviews and filter out any places with red flags. Each suggestions is fully explainable with what client's favorites drove it and what people say in the reviews.
If you want a recomendation in a different part of town, you move the map and press Search this region to get recommendations in any part of town.
You decide what goes in the itinerary. When you're done, you can send a client a link, written in your voice and built around places they already love.
How I use Qloo
Every place the agent recommends comes from Qloo. A client's favorites go in as examples, and Qloo ranks places in the destination by how well they match that client's taste.
On top of that I use:
Explainability, which shows which favorites drove each pick. That's the "Why Ana" panel.
Location search, so results stay close to the day's plan or the part of the map you're looking at.
The popularity filter, so the agent shows less known places by default and only goes to the famous ones when you ask. Famous places scored 0.96 to 1.0 in my tests, so a cap just below that removes them and keeps the good neighborhood spots.
Tag, price and Michelin filters to narrow a search, and exclusions so it doesn't repeat itself.
Scoring for the advisor's own saved places, so places they already know get a match for this client too.
Opening hours and closures, so the agent knows what's open.
This is why the results are so much better. In Lisbon, the top 20 restaurants for a client and the top 20 with no taste data shared just 1 place, and the list without taste data had Time Out Market and two shopping malls.
How I built it
Next.js 16 and React 19 on Vercel. The agent runs on the AI SDK with the Vercel Workflow DevKit, so a turn keeps going evan if you reload the page. It has small tools (find_places, recommend_place, score_places, set_itinerary and a few others) and it alternates between searching and talking. The model is OpenAI gpt-6-luna. Data is in Neon Postgres with Drizzle, and Google Places and Maps handle photos and the map.
Challenges I ran into
The biggest one was making the agent reliable on serverless. One turn is a lot of searches and model calls, and any function can time out or restart halfway through. So each turn runs as a durable workflow that saves its progress after every step, and a retry picks up where it stopped. If you reload the page, you reconnect to the same run and watch it carry on. Each chat also has a lock so two turns can't run at once.
The second one was getting the most out of Qloo. It works a lot better with more examples: with a single favorite every place scored 0.99 and I got no explanation at all. But the examples also need to be relevant. My own Google Maps food list has 162 places, and from about 10 examples up Qloo only explains the strongest ones, so the favorites that matter for a search might never show up.
So I pre-filter for every search. If you ask for Thai, the search sends up to 10 favorites: first the ones matching that search's tags, then the same category, then the rest. The places stayed mostly the same, since the cuisine filter already does a lot of that work, but now the reason makes sense to the client.
Accomplishments that I'm proud of
The agent runs increadibly reliable so Wherefore is ready for real work of travel advisors. With the Qloo api the recomendations are so much better than the ones I get with chatGPT while being able to search all the same places.
I really love the UX and UI as well. It is such a simple interface which lots of visual elements so you don't have to stare at a wall of text.
What I learned
I leared about how to make an agent runtime reliable when you host your agent on a serverless enviorment and what the trade offs are compared to a dedicated server.
I also learned how differnt the results of an AI agent can be when you ground it in the right data. The "shit in shit out" phrase is so true and it is a testiment for how important conext engineering still is.
What's next
Getting this in front of the advisors from my workshops. The demo clients are fictional and I don't have customers yet, so that's the real test.
Built With
- ai-sdk
- drizzle
- google-maps
- google-places
- neon
- next.js
- openai
- postgresql
- react
- tailwindcss
- typescript
- vercel
- vercel-workflow
Log in or sign up for Devpost to join the conversation.