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 →insightsaffinity 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
mockmode 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-urltrust 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
qloois a.cmdshim invisible to Python subprocess — neededcmd /clocally; 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
modefield — 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
- api
- css
- docker
- fastapi
- html5
- javascript
- python
- qloo
- render
Log in or sign up for Devpost to join the conversation.