# Database DATABASE_URL=postgres://projectx:projectx@localhost:5432/projectx # App PORT=3000 NODE_ENV=development # Auth JWT_SECRET=change-me-in-production JWT_EXPIRES_IN=15m JWT_REFRESH_EXPIRES_IN=7d # Required in production for initial /auth/setup (x-setup-token header) SETUP_BOOTSTRAP_TOKEN= # Storage # App data directory for covers, author images, user avatars, and cache. # This path resolves relative to server/ (where the process runs). # ../local/data points to /local/data. APP_DATA_PATH=../local/data # File write scheduler and concurrency tuning (optional) # FILE_WRITE_DEBOUNCE_MS=3000 # FILE_WRITE_MAX_CONCURRENT_WRITES=2 # OIDC (optional — configure via admin settings UI; these are just for reference) # OIDC config is stored in the database (app_settings table, key: oidc_config) # OIDC runtime tuning (optional — uncomment to override defaults) # OIDC_STATE_TTL_SECS=600 # OIDC_DISCOVERY_CACHE_TTL_SECS=3600 # OIDC_JWKS_CACHE_TTL_SECS=3600 # OIDC_CLOCK_TOLERANCE_SECS=30 # OIDC_TOKEN_EXCHANGE_TIMEOUT_MS=10000 # App URL (used for building password reset links in emails) APP_URL=http://localhost:5173 # Email encryption key (optional but recommended — 64-char hex string for AES-256) # Generate with: openssl rand -hex 32 # EMAIL_ENCRYPTION_KEY= # Migration encryption key (optional but recommended — 64-char hex string for AES-256) # Encrypts source connection config (database passwords) at rest. # Generate with: openssl rand -hex 32 # MIGRATION_ENCRYPTION_KEY= # SMTP for system emails (password reset) is configured via the admin UI, # not via environment variables.