A "Stripe for Voice Agents" SaaS platform. Developers sign up, define an AI voice agent (STT + LLM + TTS providers, system prompt, tools), and get a hosted, scalable voice agent accessible via WebRTC or phone.
# 1. Start infrastructure
docker compose -f infra/docker/docker-compose.yml up -d
# 2. Install dependencies
pnpm install
# 3. Run database migrations
pnpm db:migrate
# 4. Start API and web (concurrently)
pnpm dev
# 5. In another terminal, start the Python worker
cd apps/agent && uv run python worker.py/apps
/api → NestJS control plane (REST API, auth, billing, sessions)
/web → React 19 + Vite + Tailwind dashboard
/agent → Python 3.12 Pipecat voice agent worker
/packages
/shared-types → TypeScript interfaces shared across apps
/db → Drizzle ORM schema + migrations
/infra
/docker → docker-compose.yml for local dev
/k8s → Kubernetes manifests
- API: Node.js 20, NestJS 10, Drizzle ORM, BullMQ, Passport.js
- Web: React 19, Vite, Tailwind CSS v4, TanStack Router, Zustand, Recharts
- Agent: Python 3.12, Pipecat, LiveKit, Silero VAD
- Database: PostgreSQL 16
- Cache/Queue: Redis 7
- Container: Docker, Kubernetes
pnpm dev # Start API + Web concurrently
pnpm build # Build all apps
pnpm lint # Lint all apps
pnpm format # Format all apps
pnpm test # Run all tests
pnpm db:generate # Generate Drizzle migration
pnpm db:migrate # Apply migrations
pnpm db:studio # Open Drizzle StudioCopy .env.example to .env in both apps/api and apps/agent, then fill in your values.
CLAUDE.md— Development conventions and coding guidelinesPLAN.md— Full 16-week technical roadmapFeatures.txt— Functional specification