The voice stack is deceptively small once you name the pieces. There are exactly six roles — Voice, Brain, Ears, Phone, Glue, Home — and every tool in this chapter fills one of them. This chapter is your field guide: what each tool does, when to pick it, one code snippet you can copy, and finally one workflow that ties nine of them together.
1. The Voice Automation Map
EARS BRAIN VOICE
Whisper / Deepgram Claude / GPT ElevenLabs
│ │ │
└──────── PHONE (Twilio / Vapi / Retell / Bland) ────────┘
│
GLUE (n8n, webhooks, REST)
│
HOME (Supabase, Railway, Docker)2. ElevenLabs — the Voice
Best-in-class TTS + voice cloning. Sub-second first byte with streaming. Multi-lingual (30+ languages).
3. Claude — the Brain
Anthropic's models excel at long instructions, tool use and refusing to hallucinate. Default: claude-sonnet-4-5.
4. ChatGPT / OpenAI — the Fallback Brain
gpt-4o-mini is the cheapest brain that still handles voice-agent turns competently. Great for high-volume, low-margin agents.
5. Whisper — Batch Ears
Best-accuracy STT for uploaded audio. Not real-time. Cheap.
6. Deepgram — Streaming Ears
WebSocket streaming, partial results in ~250ms. First choice for phone calls.
7. AssemblyAI — Multi-Speaker Ears
Speaker diarization built-in, 90+ languages. Great for meetings and interviews.
8. Twilio — Phone Numbers, Programmable
Owns the number, forwards audio over WebSocket to your server. $1/month per US number.
<Response>
<Connect>
<Stream url="wss://your-server.com/twilio/stream" />
</Connect>
</Response>9. Retell AI — Managed Voice Agent Runtime
Handles the phone + STT + LLM + TTS glue as a service. Fastest way to a live phone agent, at the cost of flexibility.
10. Vapi AI — Same Idea, Different Trade-Offs
Vapi lets you pick each block (Deepgram + Claude + ElevenLabs, for example). Excellent latency, strong function-calling model, pay-per-minute.
11. Bland AI — Outbound at Scale
Purpose-built for outbound calls. Batch dial 10,000 numbers, hand off to a human on positive intent.
12. n8n — the Visual Glue
Self-hostable Zapier. Every REST call, every webhook, every retry — visualised as a node.
13. Supabase — the Home for Data
Postgres + Auth + Storage + Realtime. Call logs, transcripts, CRM rows all live here.
14. Railway — the Server
Push to GitHub, get a URL. Perfect for the Node/Python service that holds your agent code.
15. Docker — Reproducible Boxes
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "dist/index.js"]16. OpenRouter — One Key, Many Models
Single API in front of Claude, GPT, Llama, Mistral. Swap models with one string change.
17. Postman — the API Sketchpad
Before you write code, prove the API works in Postman. Saves hours of confusion.
18. Webhooks — the Universal Language
A URL that a third party POSTs to when something happens. Always verify the signature.
19. REST APIs — the Bones
- GET read, POST create, PATCH update, DELETE delete.
- Auth: Authorization: Bearer or vendor header (xi-api-key).
- Bodies: JSON in, JSON or binary out.
20. One Complete Workflow
Goal: a Twilio number that answers, transcribes with Deepgram, thinks with Claude, speaks with ElevenLabs, logs the call to Supabase, and runs on Railway inside Docker.
Caller dials Twilio number
│
▼
Twilio Stream ──WS──▶ Railway (Docker) server
│ │
│ Deepgram (streaming STT)
│ │
│ Claude (turn logic)
│ │
│ ElevenLabs (stream TTS)
│ │
▼ ▼
Caller hears reply Supabase (log call + transcript)