# Database (MySQL 8.0 — migrated from PostgreSQL in Phase 7, see # docs/phase-7-summary.md; the production host only supports MySQL). DATABASE_URL="mysql://user:password@localhost:3306/nextchair" # Optional: cap the connection pool (see src/lib/db/prisma.ts). Lower this # for a hosting provider with a small max-connections limit. DATABASE_CONNECTION_LIMIT="5" # Auth.js (NextAuth v5). Generate with: npx auth secret AUTH_SECRET="replace-me-with-a-32-byte-random-string" # Google OAuth — https://console.cloud.google.com/apis/credentials AUTH_GOOGLE_ID="" AUTH_GOOGLE_SECRET="" # Base URL of the app (used for callback URLs, email links, etc.) NEXT_PUBLIC_APP_URL="http://localhost:3000" # Email (Phase 7) — see src/services/notifications/providers. # "console" logs would-be emails to the server console instead of sending # (safe default — never send real email from an unconfigured environment). # "brevo" sends for real over Brevo's SMTP relay via nodemailer (see # brevo-email-provider.ts for why SMTP rather than Brevo's REST API). EMAIL_PROVIDER="console" EMAIL_SMTP_HOST="smtp-relay.brevo.com" EMAIL_SMTP_PORT="587" EMAIL_SMTP_USERNAME="" EMAIL_SMTP_PASSWORD="" EMAIL_FROM_ADDRESS="" # EMAIL_FROM_NAME is optional and is only used when no business name can # be resolved. Normal business emails use the installed business name # automatically (see docs/phase-8-email-sender-summary.md) — you do not # need to set or keep this in sync with Business Settings. EMAIL_FROM_NAME="" # Web Push (Phase 7) — generate with: npx web-push generate-vapid-keys # NEXT_PUBLIC_VAPID_PUBLIC_KEY must be the same value as VAPID_PUBLIC_KEY — # it's duplicated because the browser needs it for pushManager.subscribe. # PUSH_PROVIDER="web-push" to actually send; defaults to "console" (logs only). PUSH_PROVIDER="console" VAPID_PUBLIC_KEY="" NEXT_PUBLIC_VAPID_PUBLIC_KEY="" VAPID_PRIVATE_KEY="" VAPID_SUBJECT="mailto:owner@example.com" # Background notification processing (Phase 7) — shared secret an external # scheduler presents as `Authorization: Bearer ` to # /api/cron/process-notifications. Generate with: openssl rand -hex 32 CRON_SECRET="" # First-run installation wizard (Phase 8) — required before /install will # create the first business/administrator. Generate with: # openssl rand -hex 32 INSTALLATION_TOKEN="" # Staff Google Calendar sync (Phase 8) — separate OAuth client from # AUTH_GOOGLE_ID/SECRET above (different scopes; see # src/services/calendar/google-calendar.provider.ts). Leave unset to keep # calendar sync disabled — Settings shows a "not configured" state rather # than crashing. GOOGLE_CALENDAR_CLIENT_ID="" GOOGLE_CALENDAR_CLIENT_SECRET="" GOOGLE_CALENDAR_REDIRECT_URI="http://localhost:3000/api/staff/calendar/google/callback" # Encrypts stored refresh tokens at rest. Generate with: openssl rand -hex 32 CALENDAR_TOKEN_ENCRYPTION_KEY=""