- Marketing site: root static files (
index.html,style.css,script.js) - Backend API foundation:
backend/(FastAPI + auth + migration) - Dashboard app placeholder:
frontend/
python3 -m venv .venv
source .venv/bin/activate
pip install -r backend/requirements.txt
cp backend/.env.local.example backend/.env.localCreate database and run migration:
createdb voiceagent_dev
export DATABASE_URL='postgresql://localhost:5432/voiceagent_dev'
./backend/scripts/run_migration.shRun API:
cd backend
uvicorn app.main:app --reloadOr run by profile from repo root:
backend/scripts/start-profile.sh minimalThe profile runner loads profile defaults first, then backend/.env.local overrides.
GET /service statusGET /api/healthGET /api/health/liveGET /api/health/readyPOST /api/auth/registerPOST /api/auth/loginGET /api/auth/mePOST /api/webhooks/twilio/voice/inboundPOST /api/webhooks/twilio/voice/gatherPOST /api/webhooks/twilio/voice/statusPOST /api/webhooks/twilio/voice/leadGET /api/notifications/events(auth required)POST /api/notifications/retry(auth required)
Security and performance knobs are in backend/.env.example:
TWILIO_AUTH_TOKENfor signature validationWEBHOOK_ASYNC_ENABLED+WEBHOOK_QUEUE_MAXSIZEfor low-latency queued writes
Deployment profiles:
backend/.env.minimal.example(Postgres only)backend/.env.scaled.example(Postgres + Redis)backend/scripts/start-profile.sh minimal|scaledbackend/scripts/check-notifications-config.sh(validate local SMS/email env vars)backend/scripts/init-local-env.sh(createbackend/.env.local)backend/scripts/retry-notifications.sh <email> <password> [max_events](auth + retry endpoint helper)
Run one command from repo root to verify backend + frontend release readiness:
scripts/release-check-all.shUseful options:
--connectivity(checks provider connectivity in backend predeploy)--apply-migrations(applies SQL migrations usingDATABASE_URL)--skip-backend-tests--require-live-frontend(requires hosted frontend API +NEXT_PUBLIC_DEMO_MODE=false)--frontend-api-base <url>(sets frontend API base for this run)--frontend-demo-mode <true|false|unset>(sets frontend demo mode for this run)--skip-frontend--skip-dead-code
Frontend live env template:
frontend/.env.production.example
Fastest path to get a backend URL:
- Create a PostgreSQL service in Render.
- Create a Web Service from this repo with:
- Root Directory:
backend - Build Command:
pip install -r requirements.txt - Start Command:
uvicorn app.main:app --host 0.0.0.0 --port $PORT
- Root Directory:
- Add env vars:
APP_ENV=productionJWT_SECRET_KEY=<long-random-secret>NOTIFICATION_DRY_RUN=trueDATABASE_URL=<Render Postgres URL>
- Health check path:
/api/health
Then your backend URL is the Render web service URL (for example https://leadline-api.onrender.com).
Blueprint option (fastest):
- Push this repo with
render.yaml. - In Render: New + -> Blueprint.
- Select the repo and apply.
- Render provisions:
leadline-postgres(PostgreSQL)leadline-api(Web Service)