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.
Next tasks (10)
-
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
Recent work
50 commits since 67d8a7d..679b450
67d8a7d..679b450
-
679b45041feat(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)