lead-hunter ← portfolio

2026-11-01 01:23 UTC
overview deployed-awaiting-mailbox-password
lead-hunter
`/gsd:verify-phase 1` to run the verifier subagent over the full Phase 1 spec.
synced 2026-10-31T07:30
  • 1 `/gsd:verify-phase 1` to run the verifier subagent over the full Phase 1 spec.
    STATE.md
  • 2 `/gsd:plan-phase 2` to start Phase 02 (Enrichment + Quota Machinery — Hunter → Apollo → Clearbit waterfall).
    STATE.md
  • 3 First-deploy go-live via `ssh droplet 'bash -s' < deploy/install.sh` per the go-live checklist in `01-5-SUMMARY.md`. Eugene runs the one-off Zoho setup (6 custom fields per D-21b + LeadHunter:landscaping picklist + ZOHO_DEFAULT_OWNER_ID lookup) BEFORE first push.
    STATE.md
  • 4 10 files created + 2 modified (app/cli.py + pyproject.toml). 148 passing tests (+1 new full E2E + 1 deselected live-smoke). ruff clean. bandit HIGH=0. mypy `app/cli.py` clean (12 pre-existing strict-mode errors remain in modules from earlier plans, deferred to Phase 6). 2 commits: `1c3cdd3` deploy artifacts + Task 1 + `64d6e63` (Task 2 bundled with a parallel KB-project commit — see SUMMARY "Commit anomaly").
    STATE.md
  • 5 **deploy/leadhunter.service**: systemd unit on 127.0.0.1:5060 (NOT 5070), TimeoutStopSec=120s, full OWASP/SOC2 hardening (NoNewPrivileges, ProtectSystem=strict, etc.).
    STATE.md
  • 6 **deploy/caddy.snippet**: leadhunter.rollerup.ca → 127.0.0.1:5060, transport read_timeout 600s, OWASP security headers, /brand/* mount, JSON access log.
    STATE.md
  • 7 **deploy/install.sh**: idempotent + streamable via `ssh droplet 'bash -s' < deploy/install.sh`; pre-flight checks + venv refresh + alembic upgrade head + systemd/Caddy install + /health smoke + schema-fingerprint capture (only when missing).
    STATE.md
  • 8 **README.md**: Setup with the 6 custom Zoho fields per D-21b (Geo_Bucket, Run_ID, Scraped_At, Vertical, Place_Type, Source_Filter), LeadHunter:landscaping picklist, ZOHO_DEFAULT_OWNER_ID lookup curl, GCP billing alarm gcloud command (Phase 6 OPS-02 follow-up), full env-var table, Run/Deploy/Test/Architecture/Operator-workflow/Security sections. ROLLerUP brand-casing exact.
    STATE.md
  • 9 **DASHBOARD.md + .dashboard-signal.json**: workspace-mandate dashboard mirror with all 7 required sections (header, phase tracker, token+cost, time, connections, recent activity, blockers). Valid JSON for the signal file.
    STATE.md
  • 10 **.github/workflows/ci.yml**: ruff + bandit + secret-scan + mypy (best-effort) + pytest on push/PR to main; Python 3.12; pip cache.
    STATE.md
50 commits since 67d8a7d..679b450
67d8a7d..679b450
  • 679b45041
    feat(lead-hunter): delete handled bounce reports from the mailbox; poll every 2 min; fix reply schema
  • docs(lead-hunter): outreach live 2026-10-09, dashboard + state
  • feat(lead-hunter): send approved jewellery letters first (JVC summit week)
  • fix(lead-hunter): CASL footer links the word Unsubscribe instead of printing the URL
  • feat(lead-hunter): send-test --letter sends a real drafted letter to the operator
  • feat(lead-hunter): letters from Eugene alone with his Zoho Mail signature
  • feat(lead-hunter): per-prospect letters from CRM proof points, draft approval queue, open/click tracking
  • feat(lead-hunter): send as the b2b@ group via Eugene's mailbox; filter his inbox to outreach mail
  • feat(lead-hunter): B2B meeting outreach from b2b@rollerup.ca (milestone v1.1, Phase 7)
  • chore(infra): repoint absolute paths after moving workspace out of iCloud (~/Desktop -> ~/openclaw-workspace)