# ───────────────────────────────────────────── # Server # ───────────────────────────────────────────── NODE_ENV=development PORT=8080 PUBLIC_URL=http://localhost:8080 COOKIE_DOMAIN= # 32+ random bytes, hex. Generate: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" SESSION_SECRET=replace-me-with-32-byte-hex CSRF_SECRET=replace-me-with-32-byte-hex # Comma-separated emails. Any user with one of these emails is auto-promoted to superadmin # on login/signup and gains access to /admin. SUPERADMIN_EMAILS= # ───────────────────────────────────────────── # DigitalOcean Managed Postgres # ───────────────────────────────────────────── # Format: postgresql://user:pass@host:25060/dbname?sslmode=require DATABASE_URL=postgresql://doadmin:password@db-postgresql-nyc1-xxxxx.b.db.ondigitalocean.com:25060/defaultdb?sslmode=require DATABASE_CA_CERT_PATH=./certs/do-ca.crt # ───────────────────────────────────────────── # Local file storage # Absolute path where uploaded documents are stored (outside web root). # Production example: /var/www/vhosts/elegalsoftware.com/storage # ───────────────────────────────────────────── STORAGE_PATH=./storage # ───────────────────────────────────────────── # Email (Resend) # ───────────────────────────────────────────── RESEND_API_KEY= EMAIL_FROM="eLegal Software " # ───────────────────────────────────────────── # Stripe # ───────────────────────────────────────────── STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= STRIPE_PRICE_PRO= STRIPE_PRICE_LIFETIME= # ───────────────────────────────────────────── # Sentry (optional — leave blank to disable error reporting) # ───────────────────────────────────────────── SENTRY_DSN_API= # Web DSN must be exposed to the browser bundle, so prefix with VITE_ VITE_SENTRY_DSN=