-
-
Title card: Northbridge Taste Concierge, plans for two people with at most one question.
-
Landing view: six one-click scenarios above Avery and Morgan taste profiles.
-
Scenario running: the same page with the run button in its loading state.
-
Qloo trace: the entity and insights calls behind a recommendation.
-
Movie night for Avery & Morgan: Qloo-grounded picks, one bridge question, and the LLM-only answer.
-
Date night out for Avery & Morgan: dinner, drinks and music picks with map and reserve links.
-
Six one-click scenarios, live Qloo data
-
Same Qloo call grades both answers; 30-plan average below the headline
-
Full brief: picks, the one escalation, LLM-only column, Qloo trace
-
Architecture: Next.js/Vercel calls Qloo /search, /v2/insights, /v2/tags; scores both partners, finds the conflict, asks one bridge question
Inspiration
Most household plans are a negotiation. Avery loves Past Lives, Khruangbin and Chez Panisse. Morgan loves Dune, Radiohead and Momofuku. Ask a generic assistant for "a Friday night in" and you get The Shawshank Redemption, a chill playlist and the top-rated pizza place. That answer is popular, but it isn't based on either person's taste.
Pitch deck (9 slides, PDF): https://github.com/dl88jing/northbridge-taste/blob/main/docs/pitch-deck.pdf
What it does
Give Northbridge a vague plan (Friday night in, Date night out, Weekend trip, Gift for Morgan, or free text with an optional city or cuisine). A few seconds later you get a short, bookable brief that fits both partners. It decides quietly and asks at most one question, and only when their tastes really clash on a primary choice. Every pick has deep links (Maps, OpenTable, JustWatch, Spotify, Ticketmaster, Bookshop, Google Hotels) and a "why": per-partner fit and shared Qloo tags.
How we built it, and why it breaks without Qloo
- Resolve tastes. Each partner's seed films, artists, restaurants, shows, destinations and brands become Qloo entity IDs via
/search. Cuisines become real tag filters via/v2/tags. - Three taste graphs per decision. For each slot,
/v2/insightsruns on Avery's signals, Morgan's signals and the joint signal. - Per-partner scoring. A second
/v2/insightscall withfilter.results.entitiesscores every candidate for each partner. The pick is the bridge: the best fit for the less-happy partner. - Quiet policy. If the partners' top lists don't overlap on a primary slot and the gap is large, it asks one question (bridge, Avery's #1 or Morgan's #1). Otherwise it bridges silently and logs why.
- Chaining. Drinks are found within 1.2 km of the chosen dinner (
filter.locationPOINT + radius). A destination both love feeds the hotel and dinner searches there. - Proof. The generic LLM-only answer for each slot is resolved and scored in the same Qloo call as our candidates.
Stack: Next.js 16 + TypeScript + Tailwind on Vercel, plus the Qloo Hackathon API. There is no mock data path. No raw Qloo data is stored in the repo; there is only a private server-side cache.
Does it actually beat a plain LLM answer? 30 real plans
One headline from one plan proves little, so npm run benchmark runs 30 real plans (6 scenarios × 5 households: Avery & Morgan plus 4 fictional taste profiles) against the live app and the live Qloo API (933 Qloo calls, Oct 25, 2026).
| Concierge | LLM-only | |
|---|---|---|
| Mean fit, less-happy partner (80 paired slots) | 87.5% | 75.6% |
| Better on | 77 slots | 3 slots |
| Answers Qloo couldn't resolve to a real entity | 0 | 6 of 90 |
The mean difference is +11.8 points (95% CI ± 1.5). Method and raw data: https://github.com/dl88jing/northbridge-taste/blob/main/docs/benchmark.md
What this does and doesn't show: the LLM-only column is a set of representative static answers (no LLM is called), and the concierge picks using the same Qloo scores it is graded on. So this measures fit to this household according to Qloo's taste graph. It is not a human preference study. What it does show is that the generic answer stays the same whatever the household likes, while the concierge's answer changes with them.
Challenges we ran into
- Hackathon-key rate limits. We added a concurrency cap, 429-aware retries that read
x-second-ratelimit-reset, and a 24-hour cache for seed lookups. - "Takeout restaurants" kept returning hotels and bars. We fixed that with tag intersection plus exclusion tags.
- Defining a fair "fit" for two people. We use the less-happy partner's score and penalize a partner Qloo can't score.
Accomplishments we're proud of
- An agent that stays quiet: at most one question per plan.
- It grades its own baseline in the same API call, and the 30-plan average backs up the per-plan headline.
npm run demo(one command, live),npm test(14 unit tests, no network) andnpm run benchmark.
What we learned
Qloo is strongest at comparing people across domains. Per-partner filter.results.entities scoring is what makes conflict detection and the bridge possible.
Limitations
- The LLM-only answers are static, and the place answers are San Francisco picks, so the benchmark runs in San Francisco only.
- Fit is Qloo's affinity score, not a measured human rating.
- Intent extraction is deterministic keyword matching.
- Deep links open searches. Nothing is booked or bought.
What's next
Household memory that learns from answered escalations, group mode for 3+ people, and a live LLM baseline run alongside the static one.
Built With
- next.js
- qloo
- react
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.