Environment
ShipFree validates environment variables insrc/config/env.ts and provides a template in .env.example.
Minimum required values
Set these to start the app locally:DATABASE_URLBETTER_AUTH_SECRETBETTER_AUTH_URLNEXT_PUBLIC_APP_URL
Common optional values
Auth
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRETGITHUB_CLIENT_ID,GITHUB_CLIENT_SECRETMICROSOFT_CLIENT_ID,MICROSOFT_CLIENT_SECRET,MICROSOFT_TENANT_IDFACEBOOK_CLIENT_ID,FACEBOOK_CLIENT_SECRET
EMAIL_PROVIDER(resend,postmark,nodemailer,plunk,custom,log)RESEND_API_KEY,RESEND_DOMAINPOSTMARK_API_TOKENPLUNK_API_KEYSMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS,SMTP_SECUREDEFAULT_FROM_EMAIL,DEFAULT_FROM_NAME
Payments
PAYMENT_PROVIDER(stripe,polar,lemonsqueezy)STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRET,STRIPE_PRICE_IDPOLAR_ACCESS_TOKEN,POLAR_WEBHOOK_SECRET,POLAR_ORGANIZATION_ID,POLAR_PRODUCT_IDLEMONSQUEEZY_API_KEY,LEMONSQUEEZY_STORE_ID,LEMONSQUEEZY_WEBHOOK_SECRET
Storage
CLOUDFLARE_ACCOUNT_IDR2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEYR2_BUCKET_URL,R2_STORAGE_BASE_URLR2_PUBLIC_BUCKET,R2_PRIVATE_BUCKET
Monitoring
SENTRY_DSN
Premium template purchase
PREMIUM_PURCHASE_STRIPE_SECRET_KEYPREMIUM_PURCHASE_STRIPE_PRICE_IDPREMIUM_PURCHASE_STRIPE_WEBHOOK_SECRETNEXT_PUBLIC_PREMIUM_PURCHASE_STRIPE_PUBLISHABLE_KEYNEXT_PUBLIC_PREMIUM_PURCHASE_DISCORD_INVITE_LINK
Use
.env.example as the source of truth and keep it updated whenever you add a new variable.