Inspiration

We all have something we love or care about: a hobby, a cause, a skill to teach or learn. Yet finding people nearby who share it is surprisingly hard. Event listings are sorted by popularity or keywords, so related tastes get missed. Someone who loves jazz might enjoy an open-mic poetry night but would never search for one. Organisers have the opposite problem: they guess what a group will enjoy, then chase availability and RSVPs by hand.

We wanted an app that understands taste, not just keywords, and helps strangers become a small group that actually meets.

What it does

Culture Connect turns shared interests into real-world connections.

  • Members describe what they enjoy in their own words and say what they want from each interest (enjoy, teach, learn, discuss, collaborate). Qloo turns each interest into Qloo entities, tags and audiences, and Qloo Insights expands it into a taste profile. Members then get small local groups called Circles and real activities, each with a labelled reason: You said, Qloo or App.
  • Hosts and organisations create Circles and organisations, publish several activities, and track RSVPs, attendance and feedback.
  • Supervised AI agents do the busywork:
    • discovery after sign-up
    • forming Circles from people who accept an invitation
    • drafting activities from Qloo cultural anchors and places near the Circle
    • collecting votes, publishing after host approval, and following up
  • Transparency: every Qloo request appears in an in-app Qloo calls panel, and every agent step is logged with the data it used.

How we built it

  • Backend: Python + FastAPI, SQLite with reversible migrations, and a persistent job queue with a background worker. Agent runs survive restarts, avoid duplicates and retry Qloo or network errors with backoff.
  • Qloo integration (server-side only): GET /search, GET /v2/tags and GET /v2/audiences resolve interests. GET /v2/insights provides taste tags, cross-domain recommendations, group anchors with explainability, and places near an area. The server keeps only Qloo IDs that Qloo actually returned, caches responses and records every call in an audit log.
  • Matching is explainable. A Circle $c$ is ranked for a member with documented application points, never presented as a Qloo score:

$$ \text{score}(c) = 3\,n_{\text{same Qloo id}} + n_{\text{intent fit}} + \min!\big(1.5\,n_{\text{Qloo-insight links}},\ 3\big) + \mathbb{1}_{\text{same area}} $$

Hard constraints come first: consent, blocks, avoided topics, language, and area for in-person Circles.

  • Organiser programmes: a transparent bridge score links people, summed over the evidence $e$ between person $i$ and person $j$:

$$ B(i,j) = \sum_{e \in E_{ij}} w_e, \quad w \in {3 \text{ same id},\ 5 \text{ teach}\leftrightarrow\text{learn},\ 2 \text{ same label},\ \le 2 \text{ shared taste},\ \le 1.5 \text{ shared recs},\ 1.5 \text{ crossover},\ 1 \text{ area}} $$

A no-Qloo baseline runs on the same inputs, so the value Qloo adds is visible side by side.

  • Frontend: a vanilla JavaScript single-page app with three themes and photo uploads for profiles, Circles, events and organisation logos.
  • Planner: rule-based by default, with an optional LLM. Every claim must cite its evidence.
  • Quality: 50 automated tests cover accounts, Circles, events, RSVPs, discovery, agents and uploads.

Challenges we ran into

  • Free text → the right Qloo ID. "Jazz" can be an artist, an album or a tag. We show candidates, let people confirm them, and re-check every ID on the server.
  • Keeping evidence honest. We separated what a person said, what Qloo returned and what our rules computed, in both storage and the UI. We never invent venues, dates, attendee counts or bookings.
  • Reliable agents. Background workflows needed to be idempotent, resumable and safe to retry without double invitations or duplicate events.
  • Graceful degradation. When Qloo is slow or unavailable, the app uses cached insights, marks the results as degraded and schedules retries instead of faking success.
  • Privacy by design. Qloo receives only interest text and IDs (plus a Circle's area for venue search), never names, emails, photos or budgets. Invitations show counts, not identities.

Accomplishments we're proud of

  • A complete loop from a stranger signing up to a group meeting in person, where every recommendation can be traced to a declaration, a Qloo response or a documented rule.
  • Agents that propose while people decide.

What we learned

  • Taste signals are most powerful when they explain themselves. Showing why something is recommended builds more trust than a score.
  • Agentic systems need the same discipline as any backend: persistence, idempotency, audit trails and clear human checkpoints.

What's next

  • Verified external event sources
  • Real-time chat
  • Multilingual interest matching
  • Analytics that show organisations which cultural themes bring people back

Built With

Share this project:

Updates

Submission history