Overview

Every variable Conduit reads, and what breaks without it

Core (required to boot)
Variable Purpose
NEXT_APPLICATION_URL Base URL the app runs at, e.g. http://localhost:3000
BETTER_AUTH_SECRET Signing secret for better-auth sessions
DATABASE_URL Postgres connection string Prisma reads

Without DATABASE_URL the Prisma client can't connect and every page that touches data fails. Without BETTER_AUTH_SECRET, sessions can't be signed and login breaks entirely.

Google sign-in (optional)
Variable Purpose
AUTH_GOOGLE_ID Google OAuth client ID
AUTH_GOOGLE_SECRET Google OAuth client secret

Leave both unset and the "Continue with Google" button has nothing to connect to — email/password sign-in still works.

Email (verification and password reset)
Variable Purpose
RESEND_API_KEY API key for Resend, Conduit's transactional email sender
RESEND_SENDER From address for verification and password-reset emails

Without these, new accounts can register but never receive the verification email that unlocks their account.

Receipt scanning
Variable Purpose
RECEIPT_WEBHOOK_SECRET Shared secret that authenticates callbacks from the scan service back into Conduit
NEXT_SCAN_SERVICE_URL Base URL of the external service that decodes NFC-e QR codes
SCAN_JWT_PRIVATE_KEY RSA private key (PKCS8 PEM) Conduit signs scan requests with

These three only matter if you're running the scan pipeline described in Deploying with Docker. Without them, the SCAN_CODE tab on the report form has nothing to talk to — the MANUAL tab still works.

Monitoring
Variable Purpose
SENTRY_DSN Where @sentry/nextjs reports errors — Conduit's .env.example points this at a self-hosted GlitchTip instance rather than Sentry's own cloud
SENTRY_AUTH_TOKEN Upload token for source maps at build time

Docker build-time behavior#

The bundled Dockerfile gives every one of these variables a placeholder fallback (${VAR:-default}) at build time, specifically so bun run build stays green when a value is missing or only known at runtime. Real values are expected to be injected by the deploy platform (the Dockerfile's comments are written for Coolify specifically) and only need to be correct when the container actually starts.

Related: Getting Started for local setup, Deploying with Docker for how these variables reach a running container, or back to the documentation overview.

Updated

Was this page helpful?