Self-hosting
Run Call Copilot on your own infrastructure. Your data, your keys, your network.
Self-hosting is available on the Team Self-Hosted plan ($200/seat/month, or one-time license — contact us). You get the same source code we run, your own deployment, and Slack support.
Why self-host
- Compliance. If your industry requires that call data stay on infrastructure you control (legal, healthcare, finance, defense, regulated EU), self-host is the only acceptable option.
- Data sovereignty. Pick the region. The product has no cloud dependencies you can't replace.
- Cost at scale. When you're past 20-30 seats, paying us monthly costs more than paying your own ops team. Self-host with a one-time license is cheaper.
- BYO models. Use your existing OpenAI / Azure OpenAI / Anthropic / Bedrock / on-prem Llama infrastructure. You already paid for those tokens.
What you need
- A Linux server (anything from 1 vCPU / 1 GB RAM upward; t3.medium / 2 GB recommended)
- Node.js 20+
- ffmpeg (for audio conversion)
- API keys for one transcription provider (Groq, OpenAI, etc.) and one LLM provider
- A domain name (recommended) and TLS cert (Let's Encrypt works)
- Optional: Docker, Kubernetes, an existing reverse proxy
Quick start (Docker Compose)
The simplest deployment, single host, no orchestrator:
# 1. Clone the repo
git clone https://github.com/meta-slayer/realtime-call-copilot.git
cd realtime-call-copilot
# 2. Create your .env
cat > .env <<'EOF'
NODE_ENV=production
PORT=3000
# Auth
JWT_SECRET=$(openssl rand -hex 32)
# Optional legacy single-user (skip if using multi-user signups)
# AUTH_EMAIL=you@example.com
# AUTH_HASH=$(node -e "console.log(require('bcryptjs').hashSync('your-password', 10))")
# Pick providers
TRANSCRIPTION_PROVIDER=groq
GROQ_API_KEY=gsk_...
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-...
# Optional: Stripe (skip for free internal use)
# STRIPE_SECRET_KEY=sk_live_...
# STRIPE_WEBHOOK_SECRET=whsec_...
# STRIPE_PRICE_SOLO=price_...
# STRIPE_PRICE_TEAM=price_...
EOF
# 3. Build + run
docker compose up -d
# 4. Visit http://localhost:3000
Bring-your-own LLM provider
The product supports a pluggable provider abstraction. Out of the box:
groq— Whisper-large-v3 (transcription) + Llama 3.x (LLM)openai— Whisper-1 + GPT-4o-mini / GPT-4omistral— Mistral Large / Mistral Smalllocal-whisper— local Whisper.cpp (transcription only)
Adding your own provider: implement transcribe(buffer, mime, opts) or generate(messages, opts) in server/providers.js and register it. See the existing implementations for a template.
Production hardening checklist
- ☐ Set
JWT_SECRETto a long random string (32+ bytes) - ☐ Run behind nginx / Caddy / Cloudflare with TLS (Let's Encrypt is fine)
- ☐ Configure SMTP env vars for transactional emails
- ☐ Put the server behind a firewall — only 443 (or your reverse proxy) public
- ☐ Back up
data/directory (contains calls.json, clients.json, users.json, audio files) - ☐ Monitor disk usage (audio files can grow fast on heavy use)
- ☐ Set up log rotation
- ☐ If multi-tenant, configure usage caps per plan in
server/usage.js - ☐ If you want auto-updates for the desktop client, host
/downloads/and bundle the right URL inelectron/main.js
Kubernetes / Helm
A reference Helm chart is in the repo at deploy/helm/ (in progress for the next release). Stateless server pod + persistent volume for audio + ingress with TLS. Reach out for production deployment review.
Updates
Self-hosted licensees get update notifications and access to the same releases as the hosted product. git pull && docker compose up -d --build is the upgrade path.
Support
Self-hosted plan customers get:
- Dedicated Slack channel
- Deployment review (we'll look at your config before you go live)
- Email response within 1 business day
- Quarterly check-in calls
License
The source code on GitHub is available for inspection and personal use. Production deployment for an organization requires a Self-Hosted license ($200/seat/month subscription or one-time license — contact us for pricing). This is the agreement that funds ongoing development.
Get started
Email hakimnmo@gmail.com with: your team size, the regulatory regime that applies (if any), and which LLM provider you'd prefer to bring. We'll send a contract within 48 hours.