# ============================================ # AppForge - Environment Variables # Stack: External Postgres + Better Auth + Local Storage + Express backend # Copy this file to .env and fill in your values. Never commit .env! # ============================================ # ============================================ # Database (Required) # ============================================ # Postgres connection string for your external database DATABASE_URL=postgres://user:password@host:5432/postgres # Set to true to allow self-signed / non-verified TLS on the DB connection PGSSL_NO_VERIFY=true # ============================================ # Backend Server (Required) # ============================================ # Port the Express API server listens on PORT=8787 # ============================================ # Better Auth (Required) # ============================================ # Generate a strong random secret for production (e.g. `openssl rand -hex 32`) BETTER_AUTH_SECRET=change-me-to-a-long-random-string # Public origin the browser uses (dev: the Vite app origin) BETTER_AUTH_URL=http://localhost:8080 # Optional Google OAuth (leave blank to disable Google sign-in) GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= # ============================================ # Local File Storage # ============================================ # Directory where uploaded files are stored (relative to project root or absolute) STORAGE_DIR=./server/storage # Public URL prefix used to serve stored files STORAGE_PUBLIC_PREFIX=/storage # ============================================ # Self-Hosting / App Defaults # ============================================ # Email that is auto-assigned the admin role on first signup (optional) INITIAL_ADMIN_EMAIL=admin@example.com NODE_ENV=development # ============================================ # Frontend (Vite) # ============================================ # Base URL the frontend uses to reach the backend. Empty = same origin (Vite proxy). VITE_API_URL= # Demo mode: true | false | empty (defer to database setting) VITE_DEMO_MODE=false # ============================================ # Optional Integrations (server-side; fill when needed) # ============================================ # STRIPE_SECRET_KEY= # STRIPE_WEBHOOK_SECRET= # PAYPAL_CLIENT_ID= # PAYPAL_CLIENT_SECRET= # COINBASE_API_KEY= # COINBASE_WEBHOOK_SECRET= # CODEMAGIC_API_TOKEN= # CODEMAGIC_APP_ID= # RESEND_API_KEY= # OPENAI_API_KEY= # APPETIZE_API_KEY=