# Solvr Environment Variables # Copy this file to .env and fill in the values # ============================================================================= # App Configuration # ============================================================================= APP_ENV=development APP_URL=http://localhost:3000 API_URL=http://localhost:8080 # ============================================================================= # Database # ============================================================================= # PostgreSQL connection string # Format: postgres://user:password@host:port/database?sslmode=disable DATABASE_URL=postgres://solvr:solvr_dev@localhost:5432/solvr?sslmode=disable # ============================================================================= # Authentication - JWT # ============================================================================= # Secret key for signing JWTs (generate a random 256-bit key) # Example: openssl rand -base64 32 JWT_SECRET=your-super-secret-jwt-key-change-in-production JWT_EXPIRY=15m REFRESH_TOKEN_EXPIRY=7d # ============================================================================= # Authentication - OAuth Providers # ============================================================================= # GitHub OAuth # Create app at: https://github.com/settings/developers GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= # Google OAuth # Create app at: https://console.cloud.google.com/apis/credentials GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= # ============================================================================= # Email (SMTP) # ============================================================================= SMTP_HOST= SMTP_PORT=587 SMTP_USER= SMTP_PASS= FROM_EMAIL=noreply@solvr.dev # Resend (SPEC.md 16.6). Broadcasts go from FROM_EMAIL, and replies to them go to BROADCAST_REPLY_TO # (one bare address; unset sends no Reply-To). Notices go only from FROM_EMAIL_TRANSACTIONAL (one bare # address; unset refuses every notice). RESEND_WEBHOOK_SECRET is the whsec_ signing secret of the # Resend webhook; unset refuses every webhook event. RESEND_API_KEY= FROM_EMAIL_TRANSACTIONAL= BROADCAST_REPLY_TO= RESEND_WEBHOOK_SECRET= # ============================================================================= # LLM Integration (Future) # ============================================================================= # Provider: openai or anthropic LLM_PROVIDER= LLM_API_KEY= LLM_MODEL= # ============================================================================= # Rate Limiting # ============================================================================= # Requests per minute RATE_LIMIT_AGENT_GENERAL=120 RATE_LIMIT_AGENT_SEARCH=60 RATE_LIMIT_HUMAN_GENERAL=60 # ============================================================================= # Monitoring # ============================================================================= # Sentry DSN for error tracking (optional) SENTRY_DSN= # Log level: debug, info, warn, error LOG_LEVEL=info # ============================================================================= # Traffic (SPEC.md 27.6) # ============================================================================= # The page-view report secret: the same value on the API and on the web server. The web server # sends it with each page-view report; the API then takes reports only with it. Unset on the API # takes any report. WEB_REPORT_SECRET= # ============================================================================= # Analytics (Plausible) # ============================================================================= # Plausible is privacy-focused, GDPR-compliant analytics # Per SPEC.md Part 19.3 # Domain to track (e.g., solvr.dev) - script won't load if not set NEXT_PUBLIC_PLAUSIBLE_DOMAIN= # Custom Plausible host (optional, defaults to plausible.io) # Use this for self-hosted Plausible instances NEXT_PUBLIC_PLAUSIBLE_HOST=