Copy .env.example to .env and fill in the values you need. You only need the variables for integrations you actually use.
Rules
- Variables prefixed
PUBLIC_ are safe to expose to the browser (inlined at build time)
- Variables without
PUBLIC_ are server-side only — never put secrets in PUBLIC_ vars
- All variables have safe defaults (
"") so the build never fails if they’re missing
Supabase
| Variable |
Required |
Description |
PUBLIC_SUPABASE_URL |
If using auth |
Your Supabase project URL |
PUBLIC_SUPABASE_ANON_KEY |
If using auth |
Supabase anon/public key |
Stripe
| Variable |
Required |
Description |
PUBLIC_STRIPE_KEY |
If using billing |
Stripe publishable key (pk_live_...) |
STRIPE_SECRET_KEY |
If using billing |
Stripe secret key (sk_live_...) — server only |
PUBLIC_STRIPE_PORTAL_URL |
Optional |
Customer billing portal URL |
PUBLIC_STRIPE_PRO_LINK |
Optional |
Stripe Payment Link for the Pro plan |
Email
| Variable |
Required |
Description |
RESEND_API_KEY |
If sending email |
Resend API key (re_...) |
RESEND_FROM |
Optional |
Override sender address (must be verified domain) |
| Variable |
Required |
Description |
WAITLIST_ENDPOINT |
Optional |
POST endpoint for waitlist/contact forms. Defaults to /api/waitlist |
Analytics
All analytics variables are optional. Leave blank to disable.
| Variable |
Provider |
PUBLIC_PLAUSIBLE_DOMAIN |
Plausible |
PUBLIC_POSTHOG_KEY |
PostHog |
PUBLIC_GA4_ID |
Google Analytics 4 |
Live Chat
| Variable |
Required |
Description |
PUBLIC_CRISP_WEBSITE_ID |
Optional |
Crisp chat widget ID |