# Server PORT=3001 NODE_ENV=development MONGODB_URI=mongodb://127.0.0.1:27017/toms-allotment SESSION_SECRET=replace-with-long-random-string # Browser origin (CORS + session). In dev with Vite, use the Vite dev server URL so cookies work through the proxy. CLIENT_URL=http://localhost:5173 # OIDC (optional — omit to disable sign-in; watering stays disabled) OIDC_ISSUER=https://your-idp.example.com/realms/your-realm OIDC_CLIENT_ID=toms-allotment OIDC_CLIENT_SECRET= # In dev, use Vite proxy so the callback is same-site with the UI: OIDC_REDIRECT_URI=http://localhost:5173/auth/callback # MQTT (optional — copy config/mqtt.example.json to config/mqtt.json) MQTT_CONFIG_PATH= MQTT_PASSWORD= # Single TTN device (optional — overrides packages/server/config.json device.*) # DEMO_* still supported; DEVICE_TTN_* wins if both are set. DEMO_TTN_APP_ID=demo-app DEMO_TTN_DEV_ID=demo-device # DEVICE_TTN_APPLICATION_ID= # DEVICE_TTN_DEVICE_ID= # DEVICE_NAME= # S3-compatible storage (patch images). Prefer env for secrets — do not commit keys. # Cloudflare R2: endpoint https://.r2.cloudflarestorage.com (no bucket in path). # Region is forced to "auto" for R2 when the endpoint host is r2.cloudflarestorage.com. # MinIO: set S3_ENDPOINT (e.g. http://localhost:9000) and S3_FORCE_PATH_STYLE=true S3_BUCKET= S3_PREFIX=allotment-images S3_ENDPOINT= # R2 API token or MinIO access key (AWS_* also work if unset here) S3_ACCESS_KEY_ID= S3_SECRET_ACCESS_KEY= # Optional (temporary creds / assume-role) S3_SESSION_TOKEN= S3_FORCE_PATH_STYLE= AWS_REGION= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_SESSION_TOKEN=