Configuration reference
Copy .env.example to .env for local development. Variable names are documented here; values belong only in the approved secret store or local ignored file.
| Group | Variables | Local requirement | Purpose |
|---|---|---|---|
| Core runtime | DATABASE_URL, SESSION_SECRET, NODE_ENV, HOST, PORT, APP_URL | DATABASE_URL required; use a non-production database | Database, session signing, listener, and public URL |
| Object storage | R2_ENDPOINT, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAME | Required only for upload/download paths | Object-store client and bucket |
RESEND_API_KEY, EMAIL_ENABLED, EMAIL_FROM_ADDRESS, EMAIL_DEBUG_TO, EMAIL_MAX_RPS, SUPPORT_EMAIL, INQUIRY_NOTIFY_EMAILS, HR_NOTIFY_EMAILS, EMAIL_NOTIFY_ON_NEW_DOCUMENT | Email is disabled unless explicitly enabled | Outbound notification controls | |
| Public anti-bot | VITE_RECAPTCHA_SITE_KEY, RECAPTCHA_SECRET_KEY, DEBUG_RECAPTCHA, DISABLE_RECAPTCHA | Required only for protected public forms | Browser/server anti-bot verification |
| Observability | SENTRY_DSN, SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_TRACES_SAMPLE_RATE, SENTRY_TEST_ENDPOINT_ENABLED | Optional; no provider is configured by this documentation | Error-tracking integration when an approved DSN is bound |
| AI integration | AI_INTEGRATIONS_OPENAI_API_KEY, AI_INTEGRATIONS_OPENAI_BASE_URL | Optional | Approved AI integration configuration |
| Paperclip feedback routing | PAPERCLIP_API_URL, PAPERCLIP_API_TOKEN, PAPERCLIP_COMPANY_ID | Optional | Feedback-to-Paperclip routing |
| Platform metadata | RAILWAY_GIT_COMMIT_SHA | Platform-provided | Release/observability metadata |
| Audit and screenshot tools | AUDIT_CLEANUP_MARKER, AUDIT_VERIFY_BASE_URL, SCREENSHOT_BASE_URL, SCREENSHOT_ADMIN_EMAIL, SCREENSHOT_ADMIN_PASSWORD, SCREENSHOT_STAFF_EMAIL, SCREENSHOT_STAFF_PASSWORD, SCREENSHOT_CLIENT_EMAIL, SCREENSHOT_CLIENT_PASSWORD, SCREENSHOT_IDS_JSON, SCREENSHOT_OUT | Test-only | Explicit audit/visual-test input; never commit values |
HOME is read only by legacy local scripts and is not application configuration.
Guardrails
- Production values, credentials, and provider configuration are never copied into documentation, test output, issues, or commits.
NODE_ENV=productionrequiresSESSION_SECRET; the app exits at startup without it.- Do not set
EMAIL_ENABLED=trueorSENTRY_TEST_ENDPOINT_ENABLED=trueduring an unapproved verification run. - New variables require a matching
.env.exampleand this page in the same PR.
