Inspiration

Moving countries changes everything except what you love. An Egyptian arrives in Dubai and doesn't want "restaurants near me" — he wants the feeling of Friday koshary at Abou Tarek. His mother wants her playlist; his father wants his café. Generic LLMs answer this with confident hallucinations ("visit the Dubai Mall!"). We asked: what if "I love X from back home — what's the equivalent here?" became an answerable question? And we built it Arabic-first, because the Arab world's taste data is invisible to almost every tool — for the hundreds of millions of people who think in Arabic before English.

What it does

TasteBridge (ثقافتي) is a bilingual (Arabic/English, full RTL↔LTR) cultural translation agent with two modes:

  • Solo — "وحدك": type any home taste (a dish, café, song, brand) + your new city → living equivalents across dining, music, film and fashion, each with a real affinity score, venue descriptions, ratings and images.
  • Group — "مع مجموعتك": each family member adds tastes as chips (dad, me, the kids) → the agent merges them through Qloo's audience affinities and negotiates one plan that fits everyone. Every answer carries a visible agent reasoning panel (what was asked, which domains were queried, how results ranked) and honest live/demo data labeling. Live: https://tastebridge-ar.onrender.com

How we built it

  • Backend: FastAPI (Python 3.12) + a thin agent layer; vanilla JS frontend (no build step).
  • Qloo pipeline: api search → entity resolution → insights affinity ranking → client-side geocode filtering. The seed selection is city-aware and venue-type-aware (prefers real restaurants over landmarks).
  • Deployment: one Docker image (Python + Node 24 + @qloo/qloo-harness) on an always-on Render instance; the key lives only in server env vars.
  • Honesty by design: a mock mode runs the full UI offline with clearly-labeled sample data; unit tests cover the agent; failures surface visible error messages instead of silent emptiness.

Challenges we ran into

  • The key is endpoint-locked. Our hackathon key returns 401 on api.qloo.com; the CLI needed qloo config set base-url trust setup — and on Docker, Node 20 crashed the harness (it needs 22+; our local was Node 24). Environment parity is everything.
  • Windows vs Linux quirks. npm's qloo is a .cmd shim invisible to Python subprocess — needed cmd /c locally; Linux calls it directly.
  • Search ranking surprises. A mixed-script query ("كشرى dubai") ranked Dubai Mall above every restaurant; entity types arrive as URNs (urn:entity:place) that naive matching misses; Arabic spellings (كشري vs كشرى) return different result sets. We answered with multi-query retries, URN-aware and venue-aware seed selection.
  • Layered bugs. Our agent rebuilt the client's response and silently dropped the mode field — the UI kept showing "demo data" on live responses. Tracing the full path, layer by layer, fixed it.
  • A stranger owns tastebridge.onrender.com. A same-named project from another participant held our first-choice URL — we shipped on tastebridge-ar and moved on.

Accomplishments that we're proud of

  • A live, bilingual, production-deployed agent — not a demo script — serving real Qloo affinities to anyone with the URL.
  • Typing "كشرى" → Dubai genuinely returns Egyptian restaurants in Dubai (Hamor, Al Aumdah, Al Amoor), ranked by measured cultural affinity — the taste graph doing what no LLM can.
  • Group taste negotiation across multiple seeds — one ranked shortlist a whole family can accept.
  • One taste input fanning out to four entity types, exposing Qloo's cross-domain magic on every run.

What we learned

  • Affinity beats keywords. Qloo's value is "people who like X also like Y" — visible, scored, and often surprising across domains.
  • APIs have edges. Silent parameter ignoring, search normalization gaps, and rate ceilings (2 req/min documented) shaped our agent's sequential design.
  • Visible reasoning builds trust. Judges (and users) forgive limits they can see explained.
  • Environment parity (Node versions, PATH, shells) is a deployment discipline, not luck.

What's next for TasteBridge (ثقافتي)

  • Taste Profile (ملف الذوق): a local-only, structured taste fingerprint that grounds future answers — personalization with zero personal data leaving the device.
  • City taste heatmap powered by where_popular — see which neighborhoods in your new city actually match you.
  • Arabic transliteration layer for search + an LLM explanation layer for bilingual "why this fits you" text.
  • More cities, more cuisines, PWA offline mode — and all the limitations we documented, turned into integrations as Qloo's API grows.

Built With

Share this project:

Updates

posted an update —

TasteBridge is live!

Asked the agent: "I love koshary from back home — what's the equivalent in Dubai?"

It answered with Hamor Seafood, Al Aumdah, Al Amoor — real venues in Dubai, ranked by measured cultural affinity from Qloo's taste graph. Not keywords. Not hallucinations. Affinity.

Try it (Arabic & English): https://tastebridge-ar.onrender.com

  • Solo mode: translate one home taste across dining, music, film & fashion
  • Group mode: family tastes in (dad, me, the kids) → one plan out
  • Visible agent reasoning on every answer

Log in or sign up for Devpost to join the conversation.

Submission history