The fastest way to run everything:
cp backend/.env.example backend/.env
# Edit backend/.env — add your MISTRAL_API_KEY
make devThis builds and starts both containers:
- Backend: http://localhost:8000
- Frontend: http://localhost:5173
To stop: Ctrl+C then make clean to remove containers.
For production, set the real backend URL so the frontend can reach it:
# In frontend/.env or docker-compose.yml environment
VITE_API_URL=https://your-domain.com
# In backend/.env
MISTRAL_API_KEY=your-production-keyBuild and start:
docker compose up --build -dThe frontend container serves via nginx on port 80. Place a reverse proxy (Caddy, nginx, Traefik) in front for TLS.
CallShield includes a render.yaml Blueprint for Render:
- Fork the repository to your GitHub account
- Go to Render Dashboard → New → Blueprint
- Connect your forked repo
- Render reads
render.yamland creates:- Backend web service (Python, port 8000)
- Frontend static site (built with Vite)
- Set the environment variable in the Render dashboard:
MISTRAL_API_KEY→ your Mistral API key
- Set
VITE_API_URLto the backend service URL Render assigns
Render auto-deploys on every push to main.
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # Add your MISTRAL_API_KEY
# Production server
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2For production, use a process manager like systemd or supervisord.
cd frontend
npm install
VITE_API_URL=https://your-backend-url npm run buildThe dist/ directory contains static files. Serve with any static host:
- nginx, Caddy, Apache
- Netlify, Vercel, Cloudflare Pages
- S3 + CloudFront
Example nginx config is provided in frontend/nginx.conf.
| Variable | Required | Default | Description |
|---|---|---|---|
MISTRAL_API_KEY |
Yes | — | Your Mistral AI API key |
VITE_API_URL |
No | http://localhost:8000 |
Backend URL for the frontend to call |
After deployment, verify the backend is running:
curl https://your-domain.com/api/healthExpected response:
{
"status": "ok",
"model": "voxtral-mini-latest",
"version": "1.0.0",
"demo_mode": false
}