Inspiration
Group decisions default to the loudest voice or a bland compromise. Nobody can predict what four people with different tastes will all enjoy. Existing tools guess; they have no model of anyone's taste. Common Ground gives the group an agent that actually knows what each person likes.
What it does
- Add 2+ group members.
- The agent interviews each member: in Eat mode it asks about cuisines, dishes, and restaurants they love; in Watch mode about movies and shows.
- Each answer is resolved to a Qloo entity via /search (autocomplete in the UI).
- The agent combines everyone's taste signals and queries Qloo /v2/insights for candidate restaurants or movies.
- Results are ranked by group affinity, each with per-person match scores and a plain-English "why" line.
How I built it
Node/TypeScript backend (plain http, no framework) + single-page frontend, no build step. The Qloo client uses the hackathon API (https://hackathon.api.qloo.com, X-Api-Key header): /search for entity resolution, /v2/insights with signal.interests.entities for recommendations. The key differentiator in the scoring: each member's score for a candidate comes from where that candidate ranks in their OWN personal top-12 taste results, not from a tag heuristic. So the group ranking tells a real story: in testing, The Godfather Part II scored 0.95 for the Godfather lover and 0.25 for the GoodFellas lover, and the agent correctly ranked Scarface (0.85/0.95) as the better group pick. Deterministic interview flow (state machine, no LLM API key needed, zero running cost).
Challenges I ran into
The live API shapes differed from the docs I built against: /search returns a direct results array (not {results:{entities}}), and /v2/insights entities carry a singular type field with tags as {id,name} instead of {tag_id,name}. Fixed with a normalization layer verified against the live API. Also, cross-domain entity signals (music taste to restaurants) returned weak results and tag-based signals timed out, so the interview guides users toward domain-relevant loves, which is where Qloo's taste graph is strongest.
Accomplishments I'm proud of
Real Qloo Taste AI integration, verified live: entity search, multi-signal insights, and per-member personalization where every score is traceable to a real API ranking. The "obvious pick is not the group pick" moment is the kind of thing only a taste graph can produce.
What I learned
Building against a live API instead of its docs: the response shapes differed on both endpoints I used, so I built a normalization layer and verified every assumption against real responses. I also learned where the taste graph is actually strong. Same-domain signals are sharp (Godfather to GoodFellas to Scarface), cross-domain signals are weak, and tag-based signals timed out entirely. That pushed the design toward domain-guided interviews, which turned out to be the better product decision anyway. The biggest surprise was the scoring: ranking each candidate inside each member's own personal top 12 instead of blending everything into one heuristic is what produces the "obvious pick is not the group pick" moment. And running the interview as a deterministic state machine instead of an LLM call kept the whole thing at zero running cost with no API key to manage.
What's next- Common Ground
Saving group profiles across sessions, a "surprise me" mode that optimizes for discovery over consensus, and calendar integration for the actual dinner or movie night.
Built With
- ai
- api
- node.js
- typescript
Log in or sign up for Devpost to join the conversation.