Inspiration

Matching isn't the hard part of dating anymore. Turning a match into a good first date is. In Hinge's research for its Date Ideas feature, 76% of daters said a promising chat had fizzled out because they didn't know when to ask the other person out. In Lunch Actually Paktor Group's 2024 Singles Dating Survey, 66% of Singapore singles said they associate dating apps with disappointment. And picking a first-date spot for someone you've only texted is hard. You have to guess what they'd enjoy and respect needs you may not know yet (halal, no alcohol, a budget). You also have to pick somewhere that suits both personalities: a loud bar can sink an introvert.

Black Mirror's "Hang the DJ" imagined simulated versions of two people living out a relationship first. We asked a smaller, more useful question: you've matched, so where should your first dinner be?

What it does

Rehearse your first dinner lets your AI twins try dinner at every restaurant you'd both love, before you go.

  1. Two real people. You and your match each pick favourite films, music, shows and books (real Qloo entities). Each of you also answers seven first-date questions: social energy, nerves, talk or do, new or familiar, food needs, alcohol and budget. You can pick a demo twin or enter your real match.
  2. Qloo picks the restaurants. Qloo's Insights API takes both people's tastes as one signal and returns the restaurants in your city that people with both tastes love. Food needs and the budget go in as Qloo filters. We don't rank anything ourselves: Qloo's top ten are all rehearsed.
  3. The twins have dinner everywhere at once, and you watch. Each restaurant becomes a little pixel room in the style of PewDiePie's Tuber Simulator, decorated from its Qloo tags: lanterns, an aquarium, a skyline window, a wine shelf. The twins sit, order only from Qloo's menu tags, and talk in speech bubbles while their heart meters rise and fall. A plain café with no Qloo data is rehearsed too, as the baseline.
  4. You get the top three, with proof. These are the restaurants where both twins' wish for a second date rose most above the café. Each comes with the exact moments that did it: the quoted line, the minute, and which thing about one of you met which Qloo tag of the place. For example, "Mira is an introvert × Qloo: Cozy, minute 12". Tap any moment to watch it happen.

What makes it Qloo-powered: Qloo chooses every restaurant, enforces the hard needs, decides how each room looks, limits what the twins can order, and supplies the facts every proof moment must point to. Without Qloo, there's only the plain café.

How we built it

  • Next.js 15 on Vercel. API routes call Qloo and the model server-side, so no keys reach the browser.
  • Qloo hackathon API:
    • /search resolves favourites to entities;
    • /v2/insights with filter.type=urn:entity:place and both people's entities as signal.interests.entities;
    • filter.location.query for the city, plus filter.tags for restaurants;
    • dietary_option tags with operator.filter.tags=intersection;
    • filter.price_level.max for the budget.

Responses are rate-limited, retried and cached privately on the server.

  • The twins: GLM-5.3 on ILMU, over an OpenAI-compatible streaming API, with a fallback model. Each place's Qloo tags and each person's profile are numbered (F1…, A1…, B1…). The twins must cite those IDs for every moment, and the server checks each one against the transcript before showing it.
  • The rooms: a hand-written canvas pixel renderer with no game engine. It builds themed decor from Qloo's kinds and tags, animates the twins through each line's action (arrive, order, eat, laugh, walk), and lights up the cited Qloo tag at each proof moment.
  • Design: modelled on Hinge and Bumble. Serif headlines, black and white with honey yellow for the winners, one question per screen, profile cards with a heart button, and proof moments shown as prompt cards.

Challenges we ran into

  • Keeping the model honest. Early runs made up loose reasons. We numbered every profile item and Qloo tag, required citations, and dropped any moment that fails a check. That includes a favourite that isn't actually mentioned in the line, and a direction that contradicts the tag, like an introvert "won over" by a place tagged Bustling.
  • Real-world places aren't all date spots. Qloo's results include hotels, members' clubs, street addresses and whole neighbourhoods. We filter those out with Qloo's typed tags and a few rules, and we leave the ranking to the rehearsals.
  • Budgets emptied the list. Filtering by price after the query left only two restaurants. Moving the budget into Qloo's own filter.price_level.max gave ten good options.
  • Speed. Eleven rehearsals run in parallel and stream, so a full dinner plan takes under a minute.

Accomplishments that we're proud of

  • Every recommendation shows its work: a quoted line, a minute, a person's trait and a Qloo tag, all verified.
  • No ranking of ours. Qloo picks, the rehearsals decide, and the café baseline shows what Qloo's choice added.
  • You can watch the simulation instead of reading a score: ten little restaurants come to life at once.
  • It respects real needs: halal, vegetarian, no alcohol and budget are hard rules enforced through Qloo.

What we learned

  • Taste is a better guide to where two people will enjoy each other than to whether they will.
  • An LLM's "why" is only useful when it's forced to point at real facts. Numbered citations and server-side checks turned vague explanations into proof.
  • Small hard filters (diet, budget, alcohol) matter more to a good first date than clever scoring.

What's next for Garden Qloo

  • Several rehearsals per restaurant, to show how consistent each result is.
  • Booking links and opening hours for the top three.
  • Letting both people see and react to the plan, and learning from which restaurant they actually choose.
  • More of the evening: a walk or dessert after dinner, chosen the same way.

Built With

Share this project:

Updates

Submission history