Backend
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | Yes | PostgreSQL connection string |
BETTER_AUTH_SECRET | Yes | Random secret for auth |
BETTER_AUTH_URL | Yes | Public URL of your app (e.g. https://app.example.com) |
GOOGLE_GEMINI_API_KEY | No* | Gemini API key |
OPENAI_API_KEY | No* | OpenAI API key |
ANTHROPIC_API_KEY | No* | Anthropic API key |
PERPLEXITY_API_KEY | No* | Perplexity API key |
STRIPE_SECRET_KEY | For billing | Stripe secret key |
STRIPE_WEBHOOK_SECRET | For webhooks | Stripe webhook signing secret |
NEXT_PUBLIC_APP_URL | Yes | Frontend URL |
API_URL | Yes | Backend API URL |
TEST_USER_EMAILS | No | Comma-separated emails (dev only, bypass limits) |
Frontend
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_API_URL | Yes | Backend API URL |
NEXT_PUBLIC_APP_URL | No | Public URL (for metadata, OG tags) |
NEXT_PUBLIC_CRISP_WEBSITE_ID | No | Crisp chat website ID (enables live chat when set) |
NEXT_PUBLIC_HERO_VIDEO_URL | No | YouTube or video URL for landing page hero (above the fold) |