Jisr helps someone who just moved feel at home in a new city. It uses the Qloo Taste API (Insights, Search, Tags, Explainability, Heatmap) to turn favorite places and culture from a home city into an explainable 7-day first-week plan — every stop can say “because you love…”. Live demo: https://jisr-qloo.onrender.com (health shows mock:false; real Qloo). Repo: https://github.com/barood-labs/jisr-qloo. Includes MCP tooling plus a deterministic planner fallback when LLM is off.

Inspiration

Moving to a new country is lonely in a very specific way: nothing tastes or sounds familiar. Recommendation apps give newcomers the same "top 10" as everyone else, and chatbots fall back on stereotypes. We wanted an agent that starts from your taste, the singer your family played on Fridays or the bakery on your old street, and finds its echo in your new city.

What it does

You enter a few favorites from home (artist, place, TV show, film, book) and your new city. Jisr:

  • resolves each favorite to a Qloo entity,
  • finds places in the new city with the highest taste affinity to them (optionally narrowed by a craving through a real Qloo tag),
  • finds artists and films/shows that locals with your taste love, so you build bridges instead of a bubble,
  • shows where in the new city your taste clusters (Qloo heatmap), so you know which neighborhoods to explore or look for an apartment in,
  • writes a 7-day plan where every pick says which of your favorites drove it, using Qloo explainability,
  • works in English and Arabic (full right-to-left layout), with more languages possible.

How we built it

  • Qloo: /search for entity resolution, /v2/tags for craving tags, /v2/insights with filter.location.query for places, signal.location.query for music and screen, feature.explainability for the "because you love…" lines, and filter.type=urn:heatmap for "where your taste lives". Every request mirrors the shape Qloo's official harness workflows use (find_tags, recommend, where_popular), and a live-check script verifies them against the hackathon API. All calls go to hackathon.api.qloo.com.
  • Agent: a tool set shared by three surfaces: an OpenAI-compatible function-calling loop (any model), a deterministic planner fallback, and an MCP server, so Claude Desktop, Cursor or any MCP agent can use Jisr's tools.
  • App: zero-dependency Node 20 server with a streaming NDJSON agent trace and a single-page bilingual UI. MIT licensed, 8 offline tests (Node 20 and 22), Dockerfile plus render.yaml.

Challenges

  • Cross-city matching only works if favorites resolve correctly, so place favorites are searched with the home city as context.
  • Keeping an LLM honest: the system prompt allows only tool-returned entities, and the "why" line must cite favorites with explainability scores.
  • Arabic RTL rendering mixed with Latin place names.

Accomplishments

  • The core query, "places in City B loved by people who love this exact bakery in City A", only exists because of Qloo's cross-domain graph.
  • One tool set that serves as a web agent, a CLI-free MCP tool and an API.

What we learned

Taste is a better bridge than nationality. People from the same country can have completely different tastes, and Qloo lets the agent respect that.

What's next

Group mode (a family's combined taste), Ramadan and holiday modes, and partnerships with refugee resettlement agencies and university international offices.

Responsible data use

Only public favorites (artist, place and title names) and city names go to Qloo, with no names, emails or device IDs. The Qloo key lives only on the server. Results are framed as "people who love X also love Y", never as a prediction about one person.

Links

Built With

Share this project:

Updates

Submission history