Back to Events
Past Main or above

AI Voice Coach with ElevenLabs

July 22, 2026, 02:00 Europe/Berlin

Continue with the workshop writeup

Open the canonical pages, recording, materials, and code repo.

View workshop writeup

In this workshop we build Luma, a voice coach for rehearsing difficult conversations. You talk, and the coach walks you through Nonviolent Communication. By the end, a tangled conflict has become a clear message you can say out loud.

Links

Useful resources for this workshop:

The app you will build

A voice agent has stricter requirements than a text chat. It has to listen, decide when you finish talking, and reply without sounding robotic. It also has to let you interrupt it mid-sentence, like a real person would. Building that pipeline from scratch takes a long time, so we take a shortcut. We use ElevenLabs Conversational AI, a managed voice-agent platform that gives us the whole pipeline as one service.

The trade-off matters, so let's name it. A managed platform gets us to a working prototype fastest. Use it while you're still asking whether voice helps at all. Switch to a custom pipeline once you need control over latency, cost, or the model behind the coach. We pick the managed path on purpose, because testing the idea matters more than building infrastructure.

The browser never sees the ElevenLabs API key. A small Next.js server holds the key and gives the browser a short-lived signed URL for each session. The secret stays on the server while the audio streams straight to ElevenLabs.

flowchart LR B["Browser\nNext.js client"] -->|"GET signed URL"| S["Next.js server\nholds API key"] S -->|"xi-api-key, get-signed-url"| E["ElevenLabs\nLuma agent + voice"] B <-->|"signed WebSocket\nvoice stream"| E S -->|"list voices, read spend, delete"| E

We create the agent, including the coaching prompt that makes it behave like Luma, through the ElevenLabs API. We give the coding agent the API key, and it provisions the agent for us. We skip the dashboard entirely. Under the hood ElevenLabs runs LiveKit for the real-time audio. The same connection problems you would debug in LiveKit show up here too.

Once the voice loop works, we add the things a real product needs. We track how much each session costs by reading ElevenLabs' recorded spend, and we let the user pick a voice. There's one more habit to borrow. Before we declare anything done, we make the coding agent test the whole flow with a headless browser. That way we're not the ones clicking through the UI to find out it's broken.

Hosted by

Alexey Grigorev

Alexey Grigorev

Chief Agent Officer at AI Shipping Labs

Software engineer and machine learning practitioner with 15+ years of experience building production ML systems. I focus on practical, production-grade ML and AI systems, from early prototypes to reliable systems in production.

I'm the founder of DataTalks.Club, a free community that connects tens of thousands of practitioners worldwide, and the creator of the Zoomcamp series, free, code-first programs that have reached 100,000+ learners globally.

At AI Shipping Labs, I'm building the kind of environment that would have accelerated my own career growth. After years of teaching at scale, I wanted something more focused: a space for action-oriented builders who want to turn AI ideas into real projects. The community gives members the structure, accountability, and peer support to ship practical AI products consistently, even alongside their main jobs.

alexey@aishippinglabs.com