# Supabase
NEXT_PUBLIC_SUPABASE_URL=http://localhost:54321
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
NEXT_PUBLIC_SUPABASE_ID=
NEXT_PUBLIC_URL=http://localhost:3001
NEXT_PUBLIC_API_URL=http://localhost:3003

# Customer portal (D2). PORTAL_BASE_URL is set on the API and the worker.
# The AGPL source link is no variable: SOURCE_CODE_URL in
# packages/ui/src/brand.ts (G1), the page oemer-coskun.de/quellcode.
# Shown in the portal's Kontakt section (spec 10.2.8). The phone row is
# left out entirely when the number is empty.
NEXT_PUBLIC_CONTACT_EMAIL=kontakt@oemer-coskun.de
NEXT_PUBLIC_CONTACT_PHONE=
SUPABASE_SECRET_KEY=

# Resend
RESEND_API_KEY=
RESEND_AUDIENCE_ID=


# Redis Cache (Upstash multi-region — reads from nearest replica, writes to primary)
REDIS_URL=redis://localhost:6379

# Plain
PLAIN_API_KEY=

# Webhook
WEBHOOK_SECRET_KEY=6c369443-1a88-444e-b459-7e662c1fff9e



# Azure
AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT=
AZURE_DOCUMENT_INTELLIGENCE_KEY=

# Google Maps
NEXT_PUBLIC_GOOGLE_API_KEY=

# Invoice
INVOICE_JWT_SECRET=secret

# Midday Cache
MIDDAY_CACHE_API_SECRET=

# Sentry
NEXT_PUBLIC_SENTRY_DSN=

# File Key Secret
FILE_KEY_SECRET=secret

# Gmail
GMAIL_CLIENT_ID=<your-client-id>
GMAIL_CLIENT_SECRET=<your-client-secret>
GMAIL_REDIRECT_URI=http://localhost:3003/apps/gmail/oauth-callback

# Outlook
OUTLOOK_CLIENT_ID=<your-client-id>
OUTLOOK_CLIENT_SECRET=<your-client-secret>
OUTLOOK_REDIRECT_URI=http://localhost:3003/apps/outlook/oauth-callback

# Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_publishable_key_here

# Next.js Server Actions encryption key (base64-encoded, 32 bytes)
# Must be identical across all replicas/regions to prevent "Failed to find Server Action" errors.
# Generate with: openssl rand -base64 32
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY=
