---
title: "Conversational discovery — Case study — Thoughtful Robots"
description: "An AI concierge for planning the evening across eight Indian cities — code picks three real events from a live catalogue; the model only writes the words."
source: "https://thoughtfulrobots.ai/work/conversational-discovery"
---

# Three ways to spend the evening — *none of them made up.*

An AI concierge for planning the evening — movies, comedy, concerts and theatre across eight Indian cities, on web chat and WhatsApp. Code picks three real events from a live catalogue; the model only writes the words.

Designed and built for an early-stage entertainment venture · live beta January 2026 · handed off to the client’s own team

Product design in collaboration with 3SidedCoin

Idea → Design → POC → MVP · Eight weeks

## A conversation that assumes the predictable.

The venture had a decision problem, not a transaction one — listings were plentiful and already bookable. They brought the idea; we took it to a working product: a concierge that assumes what can reasonably be assumed and answers with three options, each carrying its reason.

good evening

ready to sort out your friday?

Not sure what to ask? Try:

I want to laugh

Three for the evening — and why:

![Poster art: overlapping speech bubbles in indigo](/images/work/conversational-discovery/poster-improv.png)

#### The Long Bit

8:00 PM

The Half Door, Old Mill Lane

![Poster art: microphone under a spotlight in rust tones](/images/work/conversational-discovery/poster-standup.png)

#### Nine Sharp

9:00 PM

Brass Bell Hall

![Poster art: a large geometric question mark in olive](/images/work/conversational-discovery/poster-quiz.png)

#### Wrong Answers Only

7:00 PM

The Paper Cup, Arcade Row

tomorrow instead

Tomorrow, then — same three shapes, ranked again. The improv night doesn’t run tomorrow.

![Poster art: crescent moon over curtain shapes in teal](/images/work/conversational-discovery/poster-sketch.png)

#### Small Hours

8:00 PM

Gaslight Yard

![Poster art: a large geometric question mark in olive](/images/work/conversational-discovery/poster-quiz.png)

#### Wrong Answers Only

7:00 PM

The Paper Cup, Arcade Row

![Poster art: microphone under a spotlight in rust tones](/images/work/conversational-discovery/poster-standup.png)

#### Nine Sharp

9:00 PM

Brass Bell Hall

Opening the seller’s booking page for Small Hours — 8:00 PM at Gaslight Yard.

Three moments, drawn — The frames are redrawn from the product’s designed interface — dark chat, poster carousel, steering pills. (01) The assistant greets and proposes; “I want to laugh” is the whole query — no city, no date, no genre, no language, no price band. (02) Three options arrive as a carousel, each wearing its shape on the poster — best match, popular, wildcard — with the reason carried by the narrated line above them. (03) A tapped pill is simply a new message — the steer cycle in the figure below — and the narrated compromise is the outline being voiced: same shapes, ranked again, with the change explained. Booking hands off to the ticket seller; the product never sells.

## The tool picks; the model phrases.

Every consequential decision in the exchange above is made by deterministic code. Which three options appear, how they rank, what “tonight” means, how far away a venue is — none of it is left to the language model.

#### Understand

#### Propose

#### Speak

04 The person — reads three real options · taps a pill or says more

One turn, whole — understand, propose, speak; then the person steers. Understand — four resolvers pin the message down; the gate asks or recommends. Propose — retrieve, score 40 · 30 · 20, relax if nothing fits, pick the three shapes. Speak — the three picks pass through the outline untouched; the model adds only the words. Then the person answers — a tapped pill or a typed sentence — and it runs again.

↻ a tapped pill or a typed sentence is just the next message — then it runs again

## Nothing *invented* can reach the user.

Hallucination isn’t reduced here, or prompted away — it’s eliminated by architecture. No pick, no date, no distance comes from the model.

### An option is a row, not a sentence.

Recommendations never pass through generated text: retrieval, scoring and selection happen in code against the catalogue, and the model receives finished picks to phrase. A hallucinated event has no path to the screen.

### Resolves before it reasons.

The intake is designed as a deterministic Mastra workflow — an explicit graph with typed schemas and defined branching — that pins down when, where and the mood before anything is retrieved. Structure where structure belongs; the model only where language needs it.

### Every turn has a destination.

Ask the one missing question, show three real options, or decline warmly and steer back. The conversation cannot wander, and a dead end is never shown.

**Reliability lives where you can test it** — and this is what the tests assert: which tools were called, in what order, with what arguments — including eighteen scripted attempts to pull it off-topic.

## Put the policy in tools, not the prompt.

Over the project’s life the system prompt shrank as the tools absorbed policy, and the finished agent is the argument in miniature: seven opinionated tools and a prompt a couple of screens long. Every rule that matters — what to show, when to ask, what “tonight” means — lives in code that can be tested, stepped through and fixed.

> We built the pilot; the client’s own team took it forward. **Handed off with the knowledge transfer to run it.**

Stack — Mastra · OpenAI gpt-4o-mini · Postgres · Next.js · WhatsApp Business API
