Inspiration

Couples therapy has one of the highest dropout rates of any therapeutic intervention — not because people don't want help, but because the space between sessions is where relationships actually live. We wanted to build something that could meet couples in that space: not a replacement for a therapist, but a guided structure that helps two people slow down, listen, and actually talk. The idea of a conversation that adapts based on how you're feeling — not just what you're saying — felt like the right place to start. What it does

ThinSlice is a couples therapy co-pilot that guides a conversation one prompt at a time. A couple starts a session, sees an open-ended discussion prompt on screen, and talks. When they're done, they click a button. Compass analyses the audio — not just the words, but the emotions underneath them — and uses that understanding to generate the next prompt, one that builds naturally on what just happened in the room. The conversation evolves with the couple, gently surfacing tension, celebrating connection, and keeping both people engaged without a therapist present. How we built it

The core loop runs on two sponsor integrations working in sequence.

After a couple clicks "Done", the recorded audio is sent to Modulate's Velma-2 batch API, which returns a full transcript with per-utterance emotion labels — values like Frustrated, Affectionate, Anxious, or Hopeful assigned to each speaker turn. We summarise those into a compact emotion profile: dominant emotions overall and a per-speaker breakdown.

That summary, along with the transcript and the prompt that was just discussed, gets passed to an Airia pipeline backed by Claude. The pipeline is configured with a system prompt that instructs it to behave as a therapy conversation guide — generating the next prompt in a way that's open-ended, non-blaming, and emotionally responsive to what the couple actually just experienced.

The frontend is Next.js with Tailwind and shadcn/ui. The backend is FastAPI. Sessions and round data are stored in Supabase, and we built a small Lightdash dashboard connected to that Postgres database to visualise emotion trends across sessions over time. Challenges we ran into

The sequential nature of the Modulate → Airia chain meant latency was a real concern — a 90-second recording could mean 10+ seconds of processing time between prompts, which kills the emotional momentum of a conversation. We had to think carefully about how to make that wait feel intentional rather than broken.

Getting the emotion summarisation right took more iteration than expected. Raw per-utterance emotion counts aren't very meaningful on their own — the signal that actually matters for prompt generation is the contrast between speakers and the shift from earlier in the conversation. Tuning the summariser and the Airia system prompt together to produce prompts that felt therapeutically coherent took most of our mid-build time.

We also had to handle the reality that MediaRecorder output format varies across browsers, and Modulate's batch API has specific expectations. Locking the demo environment to Chrome early saved us from a painful debugging spiral. Accomplishments that we're proud of

The loop actually works — and when it works, it's genuinely surprising. Watching a generated prompt land on something emotionally specific to what a couple just said, without any human in the loop, felt like a real moment. The Airia + Modulate integration isn't decorative; both are doing real work that shapes the output in ways you can see and feel.

We're also proud of the restraint in the design. It would have been easy to clutter the screen with emotion readouts, scores, and analytics. Instead the couple sees one thing: the next prompt, in large text, centered on the screen. Everything else is invisible infrastructure. What we learned

Emotion data is only as useful as the layer that interprets it. Raw labels from Modulate are rich, but passing them naively into a prompt generation pipeline produces generic output. The real work was in the summarisation step — deciding what to surface, what to suppress, and how to frame it so the LLM could do something therapeutically meaningful with it.

We also learned that for demo-day products, the emotional arc of the demo matters as much as the technical architecture. We scripted our three-round demo with a deliberate warm → tension → resolution shape, because the product only lands if the content of the conversation makes the adaptive prompting feel necessary.

What's next for ThinSlice

The most obvious next step is longitudinal memory — right now each session starts fresh. A version that remembers recurring themes, unresolved tensions, and growth over weeks would be far more valuable as a therapeutic tool. We'd also want to explore a light therapist-facing view: a dashboard a real clinician could review between sessions to see where their clients are struggling and where they're making progress. And on the Modulate side, we only used emotion labels — prosody, pacing, and speaker balance over time could unlock a much richer picture of how a couple's dynamic is shifting in real time.

Built With

  • airia
  • elevenlabs
  • fastapi
  • lightdash
  • modulate
  • nextjs
  • supabase
Share this project:

Updates