# Django SECRET_KEY=your-secret-key-here DEBUG=True ALLOWED_HOSTS=localhost,127.0.0.1 # AI Provider: 'luffy', 'claude', or 'openai' AI_PROVIDER=luffy # Luffy / Self-deployed LLM (required if AI_PROVIDER=luffy) LUFFY_API_URL=https://your-inference-host.example.com/api/generate LUFFY_API_KEY=your-luffy-api-key LUFFY_MODEL=luffy # Luffy API timeout in seconds (default: 300) LUFFY_TIMEOUT=300 # Stream and thinking toggles (true/false) LUFFY_STREAM=false LUFFY_THINK=false # System role prompt — sets the persona for the LLM. # Use pipe (|) to separate multiple system role messages. LUFFY_SYSTEM_ROLE=You are an expert resume reviewer and ATS optimization specialist. Return ONLY valid JSON — no markdown, no explanation, no extra text. # Anthropic (required if AI_PROVIDER=claude) ANTHROPIC_API_KEY=your-anthropic-api-key CLAUDE_MODEL=claude-sonnet-4-6 # OpenAI (required if AI_PROVIDER=openai) OPENAI_API_KEY=your-openai-api-key OPENAI_MODEL=gpt-4o # Rate limiting USER_THROTTLE_RATE=30/hour ANALYZE_THROTTLE_RATE=10/hour # AI max tokens AI_MAX_TOKENS=4096 # Firecrawl (URL scraping) FIRECRAWL_API_KEY=your-firecrawl-api-key # Max resume file size in MB MAX_RESUME_SIZE_MB=5 # JD URL fetch timeout (seconds) JD_FETCH_TIMEOUT=10 # CORS (comma-separated origins) CORS_ALLOWED_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 # PostgreSQL (leave empty to use SQLite locally) DATABASE_URL=postgresql://user:password@host:5432/dbname # Cloudflare R2 — S3-compatible file storage (leave empty to use local media/) AWS_ACCESS_KEY_ID=your-r2-access-key-id AWS_SECRET_ACCESS_KEY=your-r2-secret-access-key AWS_STORAGE_BUCKET_NAME=your-r2-bucket-name AWS_S3_ENDPOINT_URL=https://your-account-id.r2.cloudflarestorage.com # Redis (leave empty to use in-memory cache locally) REDIS_URL=redis://host:6379/0 # Logging DJANGO_LOG_LEVEL=WARNING APP_LOG_LEVEL=INFO