# Job Pipeline service config. # Copy to .env and fill in values. .env is gitignored; never commit it. # --- Network --- # Host IP to bind the service port to. 127.0.0.1 keeps it local-only; # use your LAN IP (or 0.0.0.0 behind a firewall) to reach it from other machines. HOST_BIND_IP=127.0.0.1 # --- Auth --- # Bearer token required on every endpoint except /health and /jobs/ui. # Generate one: python -c "import secrets; print(secrets.token_hex(32))" # Use the SAME value in the n8n header-auth credentials (see docs/SETUP.md). API_BEARER_TOKEN= # --- Anthropic --- # One key is enough. ANTHROPIC_JOB_KEY exists so you can point the package # writer at a separate key/billing bucket; it falls back to ANTHROPIC_API_KEY. ANTHROPIC_API_KEY= ANTHROPIC_JOB_KEY= # Model for the resume/outreach writer (the reviewer/triage model is Haiku, set in code). WRITER_MODEL=claude-sonnet-5 # --- Recruiter mode (optional; see docs/RECRUITER-MODE.md) --- # Where outreach_packages.py stages drafted LinkedIn/email files + per-campaign # CSV/JSON exports. Defaults to /out/outreach. OUTREACH_DIR= # --- Postgres --- # Defaults match docker-compose.yml. If you run your own Postgres, point these at it. PG_HOST=postgres PG_PORT=5432 PG_DB=jobpipeline PG_USER=pipeline PG_PASSWORD=change-me # Password the compose file provisions Postgres with (keep in sync with PG_PASSWORD). POSTGRES_PASSWORD=change-me # --- Apify (used by the n8n workflows, not this service) --- # Get a token at https://console.apify.com/settings/integrations # The workflows call the public actor Mfrostbutter/linkedin-jobs-scraper by default. APIFY_TOKEN= # --- Slack (optional) --- # Incoming-webhook URL for run summaries. Leave blank to disable Slack posts. # n8n reads this as $env.SLACK_WEBHOOK_URL (set it in n8n's environment too if # your n8n runs outside this compose file). See docs/SETUP.md for setup steps. SLACK_WEBHOOK_URL= # --- Misc --- TZ=America/New_York