# ---- Core ---- NODE_ENV=development NEXT_PUBLIC_APP_URL=http://localhost:3000 # ---- Database (Postgres 16 + PostGIS) ---- DATABASE_URL=postgresql://linkder:linkder@localhost:5442/linkder # ---- Redis (pub/sub for SSE chat + BullMQ queues) ---- REDIS_URL=redis://localhost:6389 # ---- Auth.js v5 ---- # generate with: openssl rand -base64 32 AUTH_SECRET= AUTH_URL=http://localhost:3000 # Optional. Leave blank and phone OTP is the only route: the "Continue with # Google" button still renders, and tells the user it is not set up. # Authorised redirect URI: {NEXT_PUBLIC_APP_URL}/api/auth/callback/google AUTH_GOOGLE_ID= AUTH_GOOGLE_SECRET= # ---- Phone OTP (Twilio Verify) ---- TWILIO_ACCOUNT_SID= TWILIO_AUTH_TOKEN= TWILIO_VERIFY_SERVICE_SID= # ---- Stripe Connect ---- STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY= # Platform commission in basis points (1500 = 15%) PLATFORM_FEE_BPS=1500 # ---- Didit (ID verification) ---- DIDIT_API_KEY= DIDIT_WORKFLOW_ID= DIDIT_WEBHOOK_SECRET= # ---- Cloudflare R2 (S3-compatible object storage) ---- R2_ACCOUNT_ID= R2_ACCESS_KEY_ID= R2_SECRET_ACCESS_KEY= R2_BUCKET=linkder-uploads R2_PUBLIC_URL= # ---- Resend (transactional email) ---- RESEND_API_KEY= EMAIL_FROM=noreply@linkder.app # ---- Launch market (city-scoped MVP) ---- NEXT_PUBLIC_CITY_NAME=Barcelona NEXT_PUBLIC_CITY_LAT=41.3874 NEXT_PUBLIC_CITY_LNG=2.1686 TWILIO_FROM_NUMBER= # Dev-only fixed login (+34600000000 / code 000000). MUST stay false/unset in production. ALLOW_DEV_LOGIN=false