Inspiration

Choosing places together sounds simple until two people have very different tastes. Most recommendation tools optimize for one person, rely on broad popularity, or ask an AI model to generate suggestions without a clear evidence boundary.

Tarsima explores a different question: Can an agent help two people discover places that genuinely fit both of them, while keeping recommendation authority grounded in cultural data rather than the language model?

That became the core idea behind Tarsima: shared-taste place discovery powered by Qloo, with deterministic ranking and a bounded agentic explanation layer.

What it does

Two people each choose 3–5 things they like, such as films, brands, books, artists, or other cultural entities, and provide a destination city.

Tarsima resolves those inputs through Qloo and builds separate taste profiles for both people. It then retrieves live place evidence and deterministically reconciles the results to identify a small set of destinations supported by both profiles.

The final experience presents three complementary types of shared picks:

  • Culture
  • Outdoors
  • City life

Each recommendation includes a concise explanation of why it works for the pair.

Tarsima currently supports both English and Arabic, including RTL presentation.

How we built it

The application is built with Next.js, React, TypeScript, Node.js, Qloo, Google Gemini, the OpenAI Agents SDK, next-intl, and Vercel.

The recommendation pipeline deliberately separates three responsibilities:

  1. Qloo provides the cultural and place evidence.
  2. Deterministic application logic performs intersection, ranking, fallback, and deduplication.
  3. The agent explains the already-selected recommendations.

The language model is not allowed to invent, substitute, or reorder venues. Its role begins only after deterministic selection has finished.

Agent output is validated before it reaches the UI, and the application includes a deterministic explanation fallback if the model is unavailable.

This architecture keeps Qloo central to the product while still using an agent where natural-language reasoning adds value.

Challenges we ran into

One of the hardest problems was defining the boundary between recommendation logic and agentic behavior.

Allowing the model to freely choose places would have made the system easier to prototype, but it would also make the results harder to reproduce, validate, and trace back to Qloo evidence. We therefore moved recommendation authority into deterministic code and limited the agent to post-selection explanation.

Another challenge was reconciling two independent taste profiles. A place that ranks highly for one person is not necessarily a good shared recommendation. We implemented deterministic shared ranking and category fallback rules so that the final set balances both profiles instead of optimizing only for the strongest individual preference.

We also had to handle live API variability, explanation failures, responsive mobile behavior, localization, and Arabic RTL layout without weakening the underlying recommendation contract.

What we learned

The biggest lesson was that an agentic product does not need to give the LLM control over every decision.

For Tarsima, the stronger architecture was to combine:

  • live cultural intelligence from Qloo,
  • explicit deterministic recommendation authority,
  • bounded agentic explanation,
  • and deterministic validation at the output boundary.

That separation made the system easier to test, reason about, and trust.

It also showed us that shared-taste discovery is fundamentally different from ordinary personalization: the goal is not to find what one person likes most, but to find the strongest evidence-backed overlap between people.

What's next

The current submission focuses on a reliable two-person shared discovery flow.

Future work could extend the same architecture to larger groups, richer preference signals, more destination categories, and deeper explanations while preserving the same core principle: evidence first, deterministic selection second, agentic explanation last.

Built With

Share this project:

Updates

Submission history