NODE_ENV=development PORT=3000 # Match whatever you set in the root .env (POSTGRES_USER/PASSWORD/DB) — # do not commit the real value. DATABASE_URL="postgresql://changeme:changeme@localhost:5432/batchcooking?schema=public" # Required, no default on purpose — generate your own, e.g.: # node -e "console.log(require('crypto').randomBytes(48).toString('hex'))" JWT_SECRET=changeme-generate-a-real-random-secret-at-least-32-chars # Optional — defaults shown (see src/config/env.ts) # JWT_EXPIRES_IN=7d # AUTH_COOKIE_NAME=session # CORS_ORIGIN=http://localhost:5173 # INTENT_SERVICE_BASE_URL=http://localhost:8000 # Required — services/tech-step-intent-service must be running locally (see # that service's own README) for any recipe save/preview to detect # techniques at all. Must match that service's own INTENT_SERVICE_SECRET. # Generate your own the same way as JWT_SECRET above. INTENT_SERVICE_SECRET=changeme-generate-a-real-random-secret-at-least-32-chars # Only needed if you're running services/tech-step-llm-worker locally — # every /internal/tech-steps/* request is rejected outright while unset. # Generate your own the same way as JWT_SECRET above; must match the # worker's own INTERNAL_WORKER_SECRET. # INTERNAL_WORKER_SECRET=changeme-generate-a-real-random-secret-at-least-32-chars # Only needed to use the admin surface (apps/web's /admin/* routes) — every # /admin/* request 401s while unset (`requireAdmin` fails closed). MUST be a # different value than JWT_SECRET. Generate your own the same way. # ADMIN_JWT_SECRET=changeme-a-different-random-secret-at-least-32-chars # Read only by `src/scripts/create-admin.ts` when its --email/--password/ # --name flags are omitted — never by the running server. # ADMIN_INITIAL_EMAIL=ops@example.com # ADMIN_INITIAL_PASSWORD=changeme-at-least-8-chars # ADMIN_INITIAL_NAME=Ops