# Flask FLASK_ENV=development API_SECRET_KEY= # PocketBase POCKETBASE_URL=http://pocketbase:8090 POCKETBASE_ADMIN_EMAIL= POCKETBASE_ADMIN_PASSWORD= # Redis / RQ — shared with Firecrawl REDIS_URL=redis://bettersight-redis:6379 # OpenRouter OPENROUTER_API_KEY= OPENROUTER_FREE_MODELS=google/gemini-flash-1.5,meta-llama/llama-3.1-8b-instruct,mistralai/mistral-7b-instruct OPENROUTER_FALLBACK_MODEL=anthropic/claude-haiku-4-5 # Firecrawl (self-hosted) FIRECRAWL_URL=http://firecrawl:3002 # Proxy — Primary (Webshare) WEBSHARE_USER= WEBSHARE_PASS= # Proxy — Fallback (Bright Data — pay-as-you-go, auto-escalated per domain) BRIGHTDATA_USER= BRIGHTDATA_PASS= # Proxy settings PROXY_ESCALATION_THRESHOLD=2 # Stripe STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= STRIPE_PRICE_ANALYSE= STRIPE_PRICE_DISCOVER= STRIPE_PRICE_INTELLIGENCE= # Transactional email RESEND_API_KEY= # Error tracking SENTRY_DSN= # Hetzner Object Storage (backups) HETZNER_S3_ACCESS_KEY= HETZNER_S3_SECRET_KEY= HETZNER_S3_ENDPOINT=https://fsn1.your-objectstorage.com HETZNER_S3_BUCKET=bettersight-backups # Gotify (owner monitoring — never client-facing) GOTIFY_URL= GOTIFY_APP_TOKEN= # Google Sheets (existing from app.py — moved here in Phase 2) GOOGLE_SERVICE_ACCOUNT_JSON= SHEET_ID= STANDARD_TAB= NGS_TAB= # Bettersight template Sheet — hosted share URL, served via GET # /account/template (CLAUDE.md §15 Template Import) TEMPLATE_SHEET_URL= # Frontend (Vite) VITE_SENTRY_DSN= VITE_ENV=development