Groundwork for moving the app to app.qrmaster.net: the session has to survive the host change from www.qrmaster.net to app.qrmaster.net. - Add COOKIE_DOMAIN and apply it to the auth, CSRF, attribution and OAuth flow cookies. Honoured only in production, because browsers reject dotted domains on localhost - a prod .env copied into a dev environment would otherwise break every login instead of just ignoring the value. - Expire both the host-only and the domain-scoped variant on logout. Next's ResponseCookies is keyed by cookie name and rewrites the entire set-cookie header from its internal map on every set(), so the two variants must be appended manually - otherwise one overwrites the other and the surviving stale cookie keeps the user signed in. - Pass COOKIE_DOMAIN as both build arg and runtime env: process.env is inlined into the Edge middleware bundle, so a runtime-only value would leave the middleware and the route handlers disagreeing about the cookie scope. No behaviour change while COOKIE_DOMAIN is unset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
67 lines
2.1 KiB
Plaintext
67 lines
2.1 KiB
Plaintext
# Environment Configuration
|
|
NODE_ENV=development
|
|
PORT=3000
|
|
|
|
# Database Configuration (PostgreSQL)
|
|
POSTGRES_USER=postgres
|
|
POSTGRES_PASSWORD=postgres
|
|
POSTGRES_DB=qrmaster
|
|
|
|
# For local development (without Docker):
|
|
# DATABASE_URL=postgresql://postgres:postgres@localhost:5435/qrmaster?schema=public
|
|
# For Docker Compose (internal Docker network):
|
|
DATABASE_URL=postgresql://postgres:postgres@db:5432/qrmaster?schema=public
|
|
|
|
# NextAuth Configuration
|
|
NEXTAUTH_URL=http://localhost:3050
|
|
NEXTAUTH_SECRET=your-secret-key-here-change-in-production
|
|
|
|
# Session cookie scope. Leave EMPTY for local development (browsers reject dotted
|
|
# domains on localhost). In production set to `.qrmaster.net` so the session is shared
|
|
# between www.qrmaster.net and app.qrmaster.net. Only honoured when NODE_ENV=production.
|
|
COOKIE_DOMAIN=
|
|
|
|
# OAuth Providers (Optional)
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
# Redis Configuration (Optional - for rate limiting and caching)
|
|
REDIS_URL=redis://redis:6379
|
|
|
|
# Security
|
|
# Used for hashing IP addresses in analytics
|
|
IP_SALT=your-ip-salt-here-change-in-production
|
|
|
|
# Features
|
|
ENABLE_DEMO=false
|
|
|
|
# SEO Configuration
|
|
# Set to 'true' in production to allow search engine indexing
|
|
NEXT_PUBLIC_INDEXABLE=true
|
|
|
|
# Stripe Payment Configuration (Optional - for subscription payments)
|
|
# Get your keys from: https://dashboard.stripe.com/apikeys
|
|
STRIPE_SECRET_KEY=
|
|
STRIPE_WEBHOOK_SECRET=
|
|
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
|
|
|
|
# Stripe Price IDs (create these in your Stripe dashboard)
|
|
# NEXT_PUBLIC_STRIPE_FREE_PRICE_ID=price_xxx
|
|
# NEXT_PUBLIC_STRIPE_PRO_PRICE_ID=price_xxx
|
|
# NEXT_PUBLIC_STRIPE_BUSINESS_PRICE_ID=price_xxx
|
|
|
|
# Analytics (Optional - PostHog)
|
|
NEXT_PUBLIC_POSTHOG_KEY=
|
|
NEXT_PUBLIC_POSTHOG_HOST=https://app.posthog.com
|
|
|
|
# Analytics (Optional - Microsoft Clarity session recordings & heatmaps)
|
|
NEXT_PUBLIC_CLARITY_PROJECT_ID=
|
|
|
|
# TikTok Content Posting API (Hermes Agent automated posting)
|
|
TIKTOK_CLIENT_KEY=
|
|
TIKTOK_CLIENT_SECRET=
|
|
TIKTOK_REDIRECT_URI=https://qrmaster.net/api/tiktok/callback
|
|
# Optional: protects /api/tiktok/connect from being triggered by strangers
|
|
TIKTOK_ADMIN_KEY=
|
|
TIKTOK_EXPECTED_OPEN_ID=
|