Own product · iOS
SpeakTable
Live voice role-play rooms for language practice. Real people and AI personas share a scene while a private coach whispers corrections to each learner.
- Role
- Founder & lead engineer — agents, API, mobile, infra
- Year
- 2026
- Status
- In App Store review
- Links
- speaktable.com ↗

- 1.14 s
- voice pipeline p50, end of speech → first reply
- ≈ $0.50
- model cost of a 15-minute session
- 18
- scenarios through an LLM lint + rehearsal pipeline
- 4
- UI languages incl. Arabic (RTL)
The problem
One-to-one AI conversation partners are everywhere now. Human-only practice groups exist too. The intersection — practising with people while an AI runs the scene and coaches you privately — was almost empty. That is the product.
A room has up to four seats. Each seat holds a human or an agent. “1 human + 3 agents” and “3 humans + 1 agent” are the same engine with a different seating plan. If no one joins within two minutes, empty seats fill with personas and the scene starts.
Why not a speech-to-speech model
Speech-to-speech models sound great but are built for one voice in, one voice out. A room needs several humans with known identities, several personas with different voices, someone deciding whose turn it is, and a side channel for private corrections. So the voice path is a cascaded pipeline — STT → director → LLM → TTS — where every layer sits behind an interface and can be swapped per language.
- Room: LiveKit. Every participant arrives on their own audio track, so speaker identity is free — no diarization.
- Director: mostly deterministic code. It hands out the floor, pulls quiet learners in, breaks silences, advances phases and handles barge-in. Personas never decide on their own to speak.
- Personas: an LLM prompt per role, scenario and learner level.
- Coach: reads the transcript off the hot path and sends at most one important correction per line, only to that learner’s screen. Nobody is corrected in front of the room.
Prompts ask; code guarantees. Turn order, reply length, phase timers, daily limits and moderation all live in code.
Measured, not guessed
Latency was the riskiest item, so it was measured first. After the user clearly finishes, the pipeline answers in 1.14 s p50; with level-aware patience for A1–A2 learners the end-to-end median is longer on purpose. A 15-minute session costs about $0.50 in model spend, TTS being the biggest share. Those two numbers set the subscription price.
A content pipeline instead of hand-written scenes
Scenarios are data (YAML with roles, phases, intake questions and target phrases per CEFR level). Three CLI tools make the catalog scale: scenario-gen drafts them, scenario-lint validates the contract, and scenario-rehearse plays a full scene with a simulated learner and an LLM judge. Only scenes that pass all three — and a human — ship.
Shipping it
NestJS API with Prisma and Postgres, Redis-backed matchmaking, Sign in with Apple/Google verified in our own API, RevenueCat subscriptions, a two-layer moderation filter, and everything self-hosted on Hetzner behind Caddy. The Expo app ships in Turkish, English, Arabic and German. App Review has been a project of its own — background audio modes, AI data disclosure and consent all had to be redesigned and documented.


