-
Build a group, choose a public meeting area and a venue type; the public example opens with 0 Qloo requests.
-
The zero-request public cafe snapshot, with named interests, one shared shortlist, ordinal ranks, and nomination contributions.
-
The comparison at a 390 px viewport; the rank table stays inside a dedicated horizontal scroller.
A group with different tastes needs one place to meet. One person chooses Arrival (2016), another Miles Davis, and another Brian Eno. Qloo's live results make the tension visible: in our October 6 run, Top of the Rock ranked first for the Arrival profile but eighth and seventh for the other two. Sear Sound ranked first for Miles Davis but ninth and fifth for the others. Common Ground chose the New Museum at fourth, fourth and first. It was nobody's individual winner, but it kept the largest sacrifice to fourth place.
Most group recommenders blend people into one profile and hide who gave up what. We keep every person's confirmed interests separate, ask Qloo to rank the same shortlist for each person, and choose the venue that minimizes the worst ordinal-rank regret. Mean regret breaks a tie; a stable venue ID is the final tie-break. We never average raw affinity scores from different profiles.
What it does
- Each person searches for a public cultural interest such as a film or artist and confirms the intended match.
- The group enters a public meeting area and chooses Cafe, Bar, Restaurant, or Live music venue.
- Common Ground sends the matching cached Qloo place tag, gathers nominations, and ranks one shared shortlist separately for every person.
- The comparison names each person's interests, shows ordinal ranks side by side, and puts the smallest compromise first.
- Selecting a venue reveals the retained Qloo signal contributions behind its nominations. The group can exclude a choice and restore it later.
The venue filter came from a failure in the first version. An unconstrained place search mixed plausible meeting spots with landmarks, a recording studio, and a guitar shop. Asking for the intended kind of venue makes the shortlist useful without changing the fairness rule.
A public example that does not spend the demo budget
Try a public example opens a fixed Qloo snapshot for Arrival (2016), Miles Davis, and Brian Eno in Manhattan. The snapshot was captured on October 8, 2026 with the Cafe filter. It contains the shared shortlist, ordinalized per-person rankings, venue descriptions, and sanitized nomination contributions.
Opening or reopening it makes 0 new Qloo requests. The previous version rebuilt that example for every new session, spending six requests each time against one shared 1,000-request operator cap. The page now shows the remaining allowance, while a live comparison is cached only when the group, area, and venue type remain unchanged in the same session.
The snapshot currently puts American Wing Cafe first in the compromise order, with ranks 2, 5, and 3 for the three profiles. This is an inspectable example of the method, not a claim that every group will prefer that venue.
How we built it
- Qloo: entity search, tagged place recommendations, shared-shortlist ranking, and nomination explainability
- Decision rule: minimize the worst ordinal-rank regret, then mean regret; never combine cross-profile raw scores
- Web app: React UI with a Node/Vite implementation and a Vinext/Cloudflare Worker deployment
- State and safeguards: anonymous 20-minute D1 sessions, atomic request accounting, a durable 1,000-request operator cap, and one-second spacing
- Agent interface: seven stdio MCP tools for search, confirmation, comparison, exclusion, restoration, state, and reset
The server is the only place that can read the Qloo credential. The client sends public cultural IDs, a public area, and a selected venue type; it does not send names, contact details, or account identifiers. Provider failures stop explicitly instead of falling back to fictional data.
Challenges and decisions
Fairness without fake precision. Raw affinity values from different profiles are not a meaningful common scale. We convert each person's results to ordinal ranks and expose the compromise instead of presenting a blended score.
One comparable shortlist. Each person's nominations can differ, but the final ranking columns must refer to the same venue IDs. The candidate-pool step preserves first nominations, fills the remaining bounded pool with shared nominations, and then asks each profile to rank that exact set.
Explainability with the right claim. Qloo's contribution data explains why a venue was nominated. The UI associates those contributions with the relevant person and interest, but does not call them enjoyment probabilities.
A judgeable demo under a shared allowance. The public snapshot keeps the complete comparison inspectable at zero marginal cost. Live mode remains available, visibly budgeted, and fail-closed.
What we verified
- 52 software tests pass, including snapshot reuse, venue-tag forwarding and cache separation, explainability preservation, ranking, transport accounting, HTTP sessions, and MCP schemas.
- The Node/Vite and Vinext production builds pass; the hosted source passes ESLint.
- A bounded local live search returned 12 confirmation choices and used exactly three Qloo requests.
- On the redeployed public page, opening the fixed example made no Qloo request, and one public
Arrivalsearch returned 12 confirmation choices using exactly three requests. - At a 390 px viewport, the page has no document-level horizontal overflow; the wide comparison table scrolls within its own container. Keyboard focus remains visible.
These checks establish implementation behavior, not recommendation quality or user adoption. Opening hours, prices, and availability are not verified, and Common Ground does not book, purchase, or send messages.
AI assistance: Codex was used for implementation, tests, and documentation. Source license: MIT.
Built With
- cloudflare-workers
- javascript
- mcp
- node.js
- qloo
- react
- sqlite
- typescript
Log in or sign up for Devpost to join the conversation.