Overview
This guide covers production deployment considerations for Conformly.ai across all three projects, including security, environment configuration, and reliability.Production Environment Variables
conformly-core (Backend)
| Variable | Production Value |
|---|---|
ENVIRONMENT | production |
DEBUG | false |
ALLOWED_ORIGINS | https://www.conformly.ai,https://beta.conformly.ai |
STRIPE_SUCCESS_URL | https://beta.conformly.ai/payment-success?session_id={CHECKOUT_SESSION_ID} |
STRIPE_CANCEL_URL | https://www.conformly.ai/#pricing |
STRIPE_API_KEY | sk_live_... (live key, not test) |
REDIS_URL | Your managed Redis endpoint |
conformly-frontend (Platform App)
| Variable | Production Value |
|---|---|
VITE_API_BASE_URL | https://beta-api.conformly.ai/api/v1 |
VITE_WEB_URL | https://www.conformly.ai |
VITE_SUPABASE_URL | Your Supabase project URL |
VITE_SUPABASE_ANON_KEY | Your Supabase anon key |
conformly-web (Marketing Site)
| Variable | Production Value |
|---|---|
VITE_API_BASE_URL | https://beta-api.conformly.ai/api/v1 |
VITE_APP_URL | https://beta.conformly.ai |
VITE_SUPABASE_URL | Your Supabase project URL |
VITE_SUPABASE_ANON_KEY | Your Supabase anon key |
Security
Secrets Management
- Never commit
.envfiles to version control - Use secrets management services (AWS Secrets Manager, HashiCorp Vault, or Vercel encrypted env vars)
- Rotate API keys (Stripe, Supabase, Google, OpenAI) regularly
- Use separate credentials for development, staging, and production
Authentication
- All API traffic over HTTPS/TLS
- CORS restricted to production domains only (no
localhost) - Rate limiting enabled (
RATE_LIMIT_PER_MINUTE,RATE_LIMIT_BURST) - JWT token expiration tuned for security (
ACCESS_TOKEN_EXPIRE_MINUTES=30) - Supabase Row-Level Security (RLS) enforced on all tables
Stripe Webhooks
- Verify the
Stripe-Signatureheader usingSTRIPE_WEBHOOK_SECRET - Use a dedicated webhook endpoint (
POST /api/v1/payments/webhook) - Handle
checkout.session.completedandcustomer.subscription.deletedevents
Database
- Supabase manages connection pooling and SSL
- RLS policies enforce workspace-level tenant isolation
- The
profilestable uses a CHECK constraint onrole(admin,engineer,manager,viewer) - The
handle_new_user()trigger automatically creates profiles on signup
Backend Infrastructure (EC2)
The production backend runs on EC2 with Docker:--reload:
Reverse Proxy (Nginx)
Performance
Scaling
- Backend: Horizontal scaling behind ALB or nginx; each instance runs the full Docker stack
- Celery Workers: Scale independently —
docker compose up -d --scale celery-worker=5 - Redis: Use managed Redis (ElastiCache) for high availability
- Database: Supabase manages read replicas and connection pooling
Caching
- Redis caches frequently accessed data and session state
- Analysis results are persisted to Supabase tables — no re-computation on page refresh
- Frontend uses TanStack Query with stale-while-revalidate caching
Monitoring
- Celery Flower: Task monitoring dashboard (
docker compose --profile monitoring up -d) - Container logs:
docker compose logs -f backend celery-worker - APM: Integrate Datadog, New Relic, or Sentry for error tracking
- Metrics: Prometheus + Grafana for system-level monitoring
- Health checks:
GET /healthendpoint for load balancer probes
Reliability
High Availability
- Deploy across availability zones
- Use managed Supabase (automatic failover)
- Redis persistence enabled for job state recovery
- Health checks and auto-restart via Docker
restart: unless-stopped
Backup
- Supabase manages automated database backups
- Application logs shipped to centralized storage
- Document recovery procedures and test them regularly
Deployment Checklist
- All environment variables set with production values
-
ALLOWED_ORIGINSrestricted to production domains - Stripe keys switched from
sk_test_tosk_live_ -
STRIPE_SUCCESS_URLandSTRIPE_CANCEL_URLpoint to production URLs - HTTPS/TLS enabled with valid certificates
- Nginx reverse proxy configured with forwarded headers
-
--reloadflag removed from production compose - Rate limiting enabled
- Monitoring and alerting configured
- Supabase email templates configured (confirmation, password reset)
- Database
handle_new_user()trigger verified
Docker Deployment
Learn about Docker-based deployment