Skip to main content
Self-hosting means connecting your own provider accounts. The provider list below is based on the current codebase and .env.example.
The Docker Compose baseline runs Convex, the voice gateway, and the web dashboard on one host with Caddy for public HTTPS. Split hosting (for example voice on Fly.io and web on static hosting) is optional and requires more manual URL and secret wiring.

Required for live calls

Convex stores business data, call records, contacts, appointments, knowledge, billing state, and app settings. It also runs backend functions and HTTP endpoints used by Twilio, the voice gateway, calendar callbacks, and downloads.Docker Compose: uses the open-source backend image ghcr.io/get-convex/convex-backend plus the Convex dashboard container. Configure CONVEX_URL, CONVEX_SITE_URL, and sync secrets into the deployment with pnpm self-hosted:convex:env.Convex Cloud dev: contributors use pnpm convex dev with CONVEX_DEPLOYMENT in .env.local. That path is for development, not production self-hosting.The web dashboard reads CONVEX_URL and CONVEX_SITE_URL at build time.
Twilio provides phone numbers, inbound voice webhooks, Media Streams, SMS delivery, and phone verification.Live voice requires a Twilio number with its voice webhook pointing at the voice gateway. Onboarding phone verification requires TWILIO_VERIFY_SERVICE_SID.
OpenAI powers live voice conversations through the Realtime API. Configure OPENAI_API_KEY on the voice gateway.You pay OpenAI directly for self-hosted usage.
The voice gateway is a Node.js service with a public HTTPS URL. Twilio must be able to reach it for inbound calls and media streams.Docker Compose (recommended): the voice gateway runs as a Compose service. Caddy exposes VOICE_HOSTNAME with TLS. Set VOICE_GATEWAY_BASE_URL to the public voice URL and configure Twilio accordingly.Split deployment (advanced): host the voice gateway separately—for example with fly.voice-gateway.toml on Fly.io—and point VOICE_GATEWAY_BASE_URL and Twilio webhooks at that URL.

Optional providers

Google Calendar enables calendar availability and booking sync. Configure Google OAuth variables and SESSION_ENCRYPTION_KEY.
Firecrawl powers website knowledge import. Without it, operators can still add text entries and upload documents.
Gemini is used for embeddings and non-realtime text generation in knowledge and SMS flows.
Resend sends password reset and email-change emails. Without email delivery, those auth flows will not work correctly in production.
PostHog is used for analytics and telemetry when configured.