# ============================================================================ # Route Commerce — Environment variables # ============================================================================ # Copy to `.env.local` and fill in real values for local development. # Production: set these in your hosting dashboard (Vercel / Netlify / etc.). # ============================================================================ # ── App ───────────────────────────────────────────────────────────────────── NEXT_PUBLIC_BASE_URL=http://localhost:4000 NEXT_PUBLIC_SITE_URL=http://localhost:4000 # ── Database (Neon Postgres, direct pg driver) ───────────────────────────── # Single connection string used by the pg Pool in src/lib/auth.ts and the # admin-permissions / data-service layer. Format: # postgresql://USER:PASS@HOST:PORT/DBNAME?sslmode=require DATABASE_URL=postgresql://postgres:postgres@localhost:5432/route_commerce # ── Neon Auth (Better Auth) ─────────────────────────────────────────────── # Get these from: neonctl neon-auth status # Base URL: "Auth Base URL" field # Cookie secret: openssl rand -base64 32 (min 32 chars) NEON_AUTH_BASE_URL=https://your-branch.neonauth.region.aws.neon.tech/neondb/auth NEON_AUTH_COOKIE_SECRET=replace-me-with-a-32-char-secret # ── Stripe ───────────────────────────────────────────────────────────────── STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY= STRIPE_PRICE_STARTER= STRIPE_PRICE_FARM= STRIPE_PRICE_ENTERPRISE= STRIPE_PRICE_HARVEST_REACH= STRIPE_PRICE_WHOLESALE_PORTAL= STRIPE_PRICE_WATER_LOG= STRIPE_PRICE_AI_TOOLS= STRIPE_PRICE_SQUARE_SYNC= STRIPE_PRICE_SMS_CAMPAIGNS= # ── Resend (transactional email) ──────────────────────────────────────────── RESEND_API_KEY= RESEND_WEBHOOK_SECRET= # ── AI providers ────────────────────────────────────────────────────────── OPENAI_API_KEY= ANTHROPIC_API_KEY= GOOGLE_API_KEY= XAI_API_KEY= MINIMAX_API_KEY= MINIMAX_BASE_URL=https://api.minimax.io/v1 # ── Square (optional) ───────────────────────────────────────────────────── SQUARE_APP_SECRET= SQUARE_ENVIRONMENT=sandbox # ── MinIO / S3-compatible object storage ───────────────────────────────────── # Endpoint: host:port only (no https://). Use MINIO_PUBLIC_URL for the public base. MINIO_ENDPOINT=s3.crispygoat.com MINIO_REGION=us-east-1 MINIO_USE_SSL=true MINIO_ACCESS_KEY=routecommerce MINIO_SECRET_KEY=miniochangeme123 # Override public URL if different from endpoint (e.g. Cloudflare CDN in front) MINIO_PUBLIC_URL=https://s3.crispygoat.com # Bucket names — create these in MinIO first (mc mb myminio/route-products, etc.) MINIO_BUCKET_PRODUCTS=route-products MINIO_BUCKET_BRAND_LOGOS=route-brand-logos MINIO_BUCKET_WATER_LOGS=route-water-logs # ── Cron / automation ─────────────────────────────────────────────────────── CRON_SECRET=replace-me-with-a-random-string # ── Water Log ─────────────────────────────────────────────────────────────── # The Water Log module reuses the existing `DATABASE_URL` and (for photo # uploads) the `MINIO_BUCKET_WATER_LOGS` bucket above. It also reuses the # brand's Twilio / SMS config for high/low threshold alerts. The # Tuxedo brand UUID is a public default used as a fallback for cold-start # paths when the calling admin user is a platform_admin with brand_id=null. # It does NOT need to be set as an env var — the value is hardcoded in # the server actions — but you can override it with: # TUXEDO_BRAND_ID=64294306-5f42-463d-a5e8-2ad6c81a96de # See docs/water-log.md for the full module guide. # ── Smartsheet (Water Log integration) ──────────────────────────────────── # AES-256-GCM key used to encrypt each brand's Smartsheet API token at # rest in `water_smartsheet_config.encrypted_api_token`. 32 random bytes, # base64-encoded. REQUIRED in production — refuses to start without it. # Generate with: openssl rand -base64 32 SMARTSHEET_TOKEN_ENC_KEY= # Bearer secret for /api/water-log/smartsheet-sync cron route. Falls # back to CRON_SECRET (above) if unset. Use a unique value per env to # avoid cross-route authorization bleed. SMARTSHEET_CRON_SECRET= # HTTP timeout (ms) for outbound Smartsheet API calls. Default 8000. # SMARTSHEET_SYNC_TIMEOUT_MS=8000