Deployment on Render#
The live Labs deployment is split between the Python API and static web/docs surface.
Render Services#
render.yaml defines:
| Service | Type | Domain | Root/publish path |
|---|---|---|---|
supafone-labs-api | Python web service | api.labs.supafone.ai | supafone-labs |
supafone-labs-web | Static web service | labs.supafone.ai | supafone-labs/landing |
API build and start:
pip install -e . -r cloud/requirements.txt
uvicorn cloud.app:app --host 0.0.0.0 --port $PORTHealth check:
/healthzThe API has a persistent disk mounted at /var/data for its SQLite-backed state.
Connect a Voice Runtime#
Render hosts the Supafone API and documentation; it does not change how a live voice provider accepts guidance. After deployment, connect the raw provider events to SupafoneLabs.observe(...) and deliver each compiled action through that provider's supported control.
Use the copy-paste Provider Injection Examples for OpenAI Realtime, Grok Voice, Gemini Live, Ultravox, Vapi, LiveKit, and Pipecat. That guide also separates the speaking runtime, supervisor model, and injector adapter so changing the model that reasons about the call never silently changes the caller-facing voice stack.
Important Boundaries#
- Do not move
cloud/without updating RenderrootDir, build command, start - Do not move
landing/without updating the static publish path. - Public SDK packages should not include private backend/admin/billing runtime
- Keep
.envfiles, databases, provider keys, Stripe secrets, and Render
command, and health path.
files.
operational state out of public releases.
Required Environment#
Common production variables include:
ADMIN_SECRET
ANTHROPIC_API_KEY
OPENAI_API_KEY
XAI_API_KEY
DEEPGRAM_API_KEY
CARTESIA_API_KEY
ELEVENLABS_API_KEY
INWORLD_API_KEY
STRIPE_WEBHOOK_SECRET
STRIPE_SECRET_KEY
STRIPE_DEVELOPER_PRICE_ID
STRIPE_GROWTH_PRICE_ID
STRIPE_SCALE_PRICE_ID
STRIPE_CREDITS_PRICE_ID
STRIPE_DEVELOPER_URL
STRIPE_GROWTH_URL
STRIPE_SCALE_URL
RESEND_API_KEY
FROM_EMAIL
DATA_DIRThe Price IDs power account-bound Checkout sessions. The optional plan URLs must each point to that exact plan on an HTTPS Stripe host; there is no shared subscription or credit-pack fallback URL. Only set variables that the deployment actually uses. Never commit secret values.
Verification After Deploy#
curl https://api.labs.supafone.ai/healthz
curl https://api.labs.supafone.ai/v1/pricing
curl https://api.labs.supafone.ai/v1/models
curl https://api.labs.supafone.ai/v1/voicesFor hosted-agent API changes, also run:
cd supafone-labs
SUPAFONE_API_KEY=sf_live_... \
SUPAFONE_API_BASE_URL=https://api.supafone.ai \
npx tsx examples/smoke-hosted-agent.tsGitBook Replacement Notes#
This GitBook source lives under supafone-labs/gitbook/. Publish that folder as the GitBook root so README.md and SUMMARY.md drive navigation. The older native docs can remain in place during migration until the GitBook publish path is verified.