Inspiration
Most people can name their favorite show, album or book in a second. Ask what they'd like to do this Saturday, or which hobby they'd enjoy, and they freeze. They end up back at the same three places, or scrolling "top 10 things to do" lists that know nothing about them.
That gap is what Qloo's taste graph is for. It already knows that someone who loves Severance and Phoebe Bridgers tends to like a particular kind of bookshop, café or pottery studio. Echo puts an agent on top of that knowledge so that what you love on a screen turns into something you do in the world. Then it follows up, so the next suggestion is better than the last.
What it does
Echo is a mobile-first web app with no sign-up. In about a minute it learns your taste, then it plans real things for you to do and keeps improving from how they went.
- Tell it what you love. Tap titles in a shuffled grid with real cover art. As you tap, Qloo suggests more you'd likely love. Add anything missing by typing or talking, then set your area.
- Swipe through activities. One card per activity, with a photo: swipe right for "want to try", left for "not for me", or tap "I already do this".
- Get one thing to do. Home proposes a concrete plan, such as "Tomorrow, 6pm: Halo Pottery", with a reason tied to your taste. Say "I'm in" or ask for another.
- Ask for anything. "Pottery Tuesday evening, somewhere quiet." You watch the agent work: categories it checks, places appearing as cards, options it sets aside and why ("closes at 5pm", "a golf course, not a café", "already in your plans, so I found you a new studio").
- Commit. You get one pick and a backup, with hours checked for that day. One tap adds it to your calendar, and the event carries a check-in link. A share link lets friends answer "I'm in".
- Check in. "Did you go?" Tap an answer or say how it went. Echo replies, notes what it learned ("prefers open studio over big classes") and suggests the next step.
- Grow a hobby. Turn a first visit into a dated six-week plan. Each step can find its own place, and after each one Echo rewrites the rest.
- Plan with friends. Compare tastes: shared ground and real differences from Qloo. Then each person's Echo talks it over and agrees on a plan scored for every person. Friends without Echo can be added from three things they love.
- Your echo. A taste profile: summary, traits you confirm or dismiss, leanings, and cross-domain picks, each with a "because you like…" reason. Share it as an image or copy it as a prompt for any AI assistant.
Echo can also talk back. Once you speak to it, it answers out loud in a natural voice.
How we built it
Claude does the reasoning and writing, Qloo supplies the places and the taste matching, and code checks the result. Every recommendation traces back to a Qloo result; the model never invents a place.
Why it needs Qloo. A language model on its own can name popular places, but it can't rank the pottery studios in one neighborhood by how well they fit someone who loves Phoebe Bridgers and Severance, or say which of their tastes drove the match. Qloo's Insights API does exactly that, with explainability, and Echo is built around it: the ranking, the "because you like…" reasons, the per-person fit in group plans and the cross-domain picks all come from Qloo.
A plan is a Claude Sonnet agent with tools. It picks kinds of place, calls find_places (Qloo Insights with the person's tastes as signals and explainability on) and search_categories (Qloo Tags), sets options aside with reasons, then submits. Code rejects anything that didn't come from a search, is closed at that time or falls outside the time window, and Claude fixes it. If Qloo has nothing nearby for a category, Echo first searches farther, then falls back to clearly labelled OpenStreetMap places rather than inventing any.
| Qloo endpoint | Where Echo uses it |
|---|---|
| Search | Matching tapped and typed titles to entities during onboarding |
| Insights, media | "Echo thinks you'll like" while you pick, and cross-domain picks on your echo |
| Insights, places with explainability | Every place in a plan, ranked by taste, with which of your tastes drove the match; per-person fit in group plans |
| Tags | Finding a category for anything outside the known list |
| Analysis Compare | Shared ground and differences between friends |
- Models: Claude Sonnet for planning and the group conversation, Claude Haiku for reading free text, writing the profile and check-ins. All use structured outputs.
- Quota and cost: every Qloo response is cached in Postgres and shared across serverless instances. Live calls are spaced to 5 a second, retried once, and capped daily with a monthly reserve. Claude spend is metered from real token usage against a daily budget, with per-user limits on every route.
- Stack: Next.js 16 and React 19 on Vercel, Supabase Postgres with anonymous accounts and row-level security, OpenAI text-to-speech for Echo's voice, and the Web Speech API for listening.
Challenges we ran into
- A fixed quota and a public link. The hackathon key allows 10,000 calls a month at 5 a second, and judges will use the app at the same time as everyone else. Every Qloo response is cached in Postgres and shared; live calls are spaced and retried, with a daily cap and a monthly reserve; development runs offline against the cache by default.
- Keeping the model honest. An LLM planner will happily invent a café or an opening time. Echo's planner can only use places that came back from a tool call, and code checks every plan (place came from a search, open at that time, inside the time window) before accepting it.
- Not quietly swapping what you asked for. Early versions answered "try pottery" with a bookshop because the nearest studio was just past the distance limit, or already in your plans. Echo now searches farther before giving up, can go up to twice your usual distance for what you asked for, keeps already-planned places as an option, and says so.
- Gaps in place data. Some categories have no Qloo results in some areas. Echo falls back to real places from OpenStreetMap, clearly labelled, rather than inventing any.
- Odd matches. A golf course tagged as a café, a children's bookshop for an adult outing. The planner drops off-category places, visibly, with a reason.
- Cost on a public demo. Claude spend is metered from real token usage and checked against a global daily budget before any work starts, with per-user limits on every route. Speech has its own budget.
Accomplishments that we're proud of
- Every recommendation is traceable. Each place in a plan came from a Qloo search (or a labelled OpenStreetMap fallback), with Qloo's own explanation of which of your tastes drove the match.
- You can watch the agent think. Its tool calls stream to the screen as steps and place cards, including what it rejected and why.
- Group plans that are fair to everyone. Echo uses Qloo's explainability to estimate how well each place fits each person, by how much each person's tastes drove the match. The Echos then argue for their person and agree on something that scores well for the whole group.
- A loop, not a list. Check-ins feed notes back into the profile, hobby plans rewrite themselves after each step, and new suggestions avoid places you've already planned.
- About a minute to a first plan, with no account, and a sample profile so judges can see a plan straight away.
- Cheap to run. A full plan costs a few cents of Claude and a handful of Qloo calls, most of them served from the cache.
What we learned
- Taste carries across domains better than expected. A handful of shows, songs and games is enough for Qloo to rank bookshops, cafés and studios in a way people recognize as "me". Explainability makes that legible instead of magic.
- Agents need guardrails in code, not just in the prompt. Validation that sends a plan back with specific problems ("closed at 7pm", "not in the results") works better than any instruction to be careful.
- Less input, better output. Our first version had a voice interview, six onboarding steps and a settings form. Taps, a swipe deck and sensible defaults got people to a plan faster, and the plans didn't get worse.
- What you asked for beats the best match. If someone wants to try pottery, a slightly farther studio beats a closer bookshop every time.
What's next for Echo
- Reminders that reach you: push notifications for check-ins and for each step of a hobby plan.
- Events, not just places: classes, shows and screenings with real times, so "Tuesday evening pottery" can mean a specific session.
- A native iOS app on the same API, with location and calendar access built in.
- Plans that learn from groups: what a group actually enjoyed shapes the next group plan.
- A business side: venues, studios and local guides could use the same taste matching to reach the people most likely to love them, without ads or selling personal data.
Built With
- anthropic
- claude
- next.js
- openai
- openstreetmap
- postgresql
- qloo
- react
- supabase
- tailwindcss
- typescript
- vercel
- vitest
- web-speech-api
- zod
Log in or sign up for Devpost to join the conversation.