ProjectBuild an AI Voice Receptionist: the explanation · Module 20: Containers and the local stack · part 22 of 23
Part 22 · Module 20: Containers and the local stack

Module 20: Containers and the local stack

21 min read·
About 40 minutes · Needs: Module 3 (infrastructure decisions, settings, Compose overview), Module 4 (the high-level architecture) · Code: backend/Dockerfile, frontend/Dockerfile, docker-compose.yml, backend/scripts/fetch_models.py

Where this fits

WHERE THIS FITS The Medilane voice receptionist this module CLIENT React API LAYER FastAPI SAFETY SPEECH IN BRAIN LangGraph SPEECH OUT KNOWLEDGE AND DATA pgvector OPERATIONS Langfuse, Prometheus Caller app browser mic Staff app desk and admin REST API staff, sessions Voice socket audio both ways Auth + RBAC staff roles, voice tokens Guardrails emergency, PII VAD Silero, turns Whisper speech to text Language en, hi, Hinglish Agent tools, confirm Open models Groq: gpt-oss, Qwen Kokoro TTS en + hi voices Retrieval multilingual Ingestion clinic documents PostgreSQL clinic, calls, vectors Redis events, limits Front desk live events, hand-offs Observability traces, metrics Evaluation WER, safety, latency
Containers wrap every running part (blue): the web app, the API with its voice socket and baked-in models, the ingestion worker, Postgres and Redis.

A voice receptionist is not one program. It is an API that loads three models, a worker, a web server, a database with a vector extension and Redis, plus a system library for speech. Getting all of that to run the same way on your laptop, in CI and on Google Cloud is this module's job. Every box on the map runs inside a container.

The rest of this project is yours to keep

This project is bought on its own, once, and stays readable afterwards, including the parts added to it later.

Or open everything with a plan