Inspiration
Every group trip has two fights: who pays, and where to go. Chai Pot already solved the first: a shared pot where an AI agent pays the group's bills, but only inside rules the group sets (per-bill cap, daily cap, allowed categories, approvals). An LLM alone is bad at the second fight. Ask it where four friends in Goa should eat tonight and you get the same famous names, with no idea what this group actually likes or can still afford.
What it does
Taste Picks is a new skill for the Chai Pot agent. Before the group spends, it suggests where, grounded in Qloo's taste graph and the pot's own ledger:
- Seeds from real spending: every merchant the pot already paid or asked to pay is resolved to a Qloo place entity (Search, types=urn:entity:place), keeping only the match in the trip's location.
- Budget from the ledger: money left per member becomes Qloo's filter.price_level.max.
- Qloo Insights: /v2/insights with filter.type=urn:entity:place, filter.location.query, a category tag (restaurant, hotel or tourist attraction) and signal.interests.entities set to the group's own past merchants. Qloo returns places people with the same taste love, with affinity, price level, rating, tags and keywords.
- The agent explains: Gemini writes one sentence on the group's taste and one reason per pick, from Qloo's facts only, so it can't invent prices.
- The rules still decide: "Pay here" turns a pick into a request for the same payment agent. A deterministic policy engine checks caps, category and funds before any PayPal sandbox payout, and every Taste Picks run is written to the audit log. If the pot's policy doesn't allow a category, the card warns that the agent would refuse to pay, even for a perfect match. ## Why it only works with Qloo
Without Qloo the agent has no taste signal: the group's history is just merchant names. Qloo turns those names into entities in its 250M+ entity taste graph and returns cross-place affinity, so a group that paid for a beachside cafe gets beach shacks and Goan kitchens, not generic top-10 lists, inside what the group can still afford.
How we built it
Next.js 16 + TypeScript on Vercel, Upstash Redis for pots. lib/qloo.ts wraps Qloo Search and Insights with timeouts and defensive parsing; POST /api/pots/[id]/agent/taste runs the agent; the UI lives in the Agent tab. Gemini structured output writes the reasons. Unit tests cover price-level mapping, seed selection and Qloo response parsing.
Challenges
Matching a free-text merchant to the right Qloo place (there are many "Cafe Goa"s worldwide): we keep only results whose address contains the trip location. Keeping the LLM honest: it only rewrites Qloo's own fields and can never move money.
What's next
Per-member taste profiles (each member's own picks as separate signals, then the overlap), music and activity picks for trip planning, and Qloo audience tags to flag a pick that won't suit someone in the group.
Testing instructions
Open https://chai-pot-qloo.vercel.app/p/demo, Agent tab, Taste Picks. Location "Goa", pick Food, Stay or Things to do, press Suggest places. "Things to do" shows the policy warning (not allowed in the demo pot). "Pay here" pre-fills a request; set amount and payee (e.g. Pay the $24 dinner at to [email protected]) and press Send to agent: a PayPal sandbox payout runs (no real money). "Reset demo" restores the seed. The Audit tab shows every Taste Picks run.
Built With
- gemini
- next.js
- paypal
- qloo
- react
- typescript
- upstash
- vercel
Log in or sign up for Devpost to join the conversation.