← back to Govarbitrage
.env.example
59 lines
# ---- Database (local Postgres 14 already running on this machine) ----
DATABASE_URL="postgresql://macstudio3@localhost:5432/govarbitrage?schema=public"
# ---- Local AI (Ollama) — product identification runs local-first, $0/query ----
OLLAMA_BASE_URL="http://localhost:11434"
OLLAMA_TEXT_MODEL="qwen3:14b"
OLLAMA_VISION_MODEL="qwen2.5vl:7b"
# ---- Cloud AI fallback (opt-in only; leave blank to stay 100% local/$0) ----
ANTHROPIC_API_KEY=""
AI_PROVIDER="ollama" # "ollama" (default, local, free) | "anthropic" (opt-in, paid)
# ---- Background jobs ----
# Redis is OPTIONAL. If REDIS_URL is unset, the research worker runs in
# direct/in-process mode (fine at this scale). Set it to enable BullMQ.
REDIS_URL=""
# ---- Auth / security ----
AUTH_SECRET="dev-only-change-me"
ENCRYPTION_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" # 32 bytes = 64 hex chars (AES-256-GCM)
# Optional write-guard: if set, import + admin write endpoints require the
# matching `x-import-token` header. Unset = open (local dev).
IMPORT_TOKEN=""
# ---- Data source: official GSA Auctions API (free, no scraping) ----
# DEMO_KEY works for testing; get a real key at https://api.data.gov/signup/
GSA_API_KEY="DEMO_KEY"
# ---- GovDeals via Apify actor parseforge/govdeals-scraper (bypasses bot-wall) ----
# Reading finished datasets is free; running the actor for fresh data costs
# ~$0.0037/listing. Token is routed here by the secrets manager.
APIFY_TOKEN=""
APIFY_GOVDEALS_ACTOR="SZdBCF9FpwOzvByvM"
APIFY_GOVDEALS_DATASET=""
# ---- App ----
NODE_ENV="development"
# ---- Twice-daily "Top 10 Opportunities" digest (scripts/send-digest.ts) ----
# George (DW Gmail HTTP agent) credentials are read at runtime from the George
# MCP env in ~/.claude.json by scripts/run-digest.sh — NOT stored here.
DIGEST_TO="steve@designerwallcoverings.com"
APP_URL="http://localhost:3737"
# ---- Public newsletter (double opt-in; TEST mode until Steve approves live) ----
# TEST mode (default): confirmation/unsubscribe emails are logged to console +
# logs/newsletter-outbox.jsonl, never sent. Live requires BOTH
# NEWSLETTER_SEND_MODE=live AND NEWSLETTER_SEND_APPROVAL_TOKEN set — and the
# actual send transport (George/SMTP) is deliberately not wired yet.
NEWSLETTER_SEND_MODE="test"
NEWSLETTER_SEND_APPROVAL_TOKEN=""
NEWSLETTER_FROM_NAME="GovArbitrage Deal Digest"
NEWSLETTER_FROM_EMAIL=""
# CAN-SPAM: physical postal address, required in every commercial email footer.
NEWSLETTER_MAILING_ADDRESS=""
# Public origin used in confirm/unsubscribe links (falls back to request origin).
NEWSLETTER_BASE_URL=""