# Database DATABASE_URL=postgresql+asyncpg://whatisup:whatisup@localhost:5432/whatisup # GitHub PAT — fallback / local scripts only. Production collection uses each owner's OAuth token. GITHUB_TOKEN= # GitHub OAuth App (callback must be {PUBLIC_APP_URL}/auth/github/callback) GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= # Session cookie signing SESSION_SECRET=change-me-to-a-long-random-string # Fernet key for GitHub access tokens: # python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" TOKEN_ENCRYPTION_KEY= # Public origin used to build the GitHub OAuth callback. # Production (Vercel): https://whatisupp.vercel.app # GitHub OAuth App callback must be {PUBLIC_APP_URL}/auth/github/callback PUBLIC_APP_URL=http://localhost:8000 FRONTEND_ORIGIN=http://localhost:5173 COOKIE_SECURE=false # Vercel (Project Settings → Environment Variables): BACKEND_URL = API origin, no trailing slash. # Do not commit the backend host or IP. # Optional Chrome extension origin, e.g. chrome-extension:// CHROME_EXTENSION_ORIGIN= # Cron secret for POST /internal/run-pipeline CRON_SECRET=change-me-cron-secret # OpenRouter — get free key at https://openrouter.ai/keys OPENROUTER_API_KEY= OPENROUTER_MODEL=meta-llama/llama-3.3-70b-instruct:free # Admin secret — local POST /admin/run-pipeline ADMIN_SECRET=change-me-to-something-random # Collector debounce (seconds) COLLECT_MIN_INTERVAL=900 # Parallel GitHub users per collect (stay under secondary rate limits) COLLECT_CONCURRENCY=8 # Public event pages per person (GitHub caps ~300 events) COLLECT_EVENT_PAGES=3