Adds cold B2B supplier outreach pipeline isolated from transactional emails. Subtask 1 — Migration + constants: - Migration 0024: 4 new columns on suppliers (outreach_status, outreach_notes, last_contacted_at, outreach_sequence_step); NULL status = not in pipeline - EMAIL_ADDRESSES["outreach"] = hello.padelnomics.io (separate reputation domain) - "outreach" added to EMAIL_TYPES Subtask 2 — Query functions + routes: - get_outreach_pipeline() — counts by status for pipeline cards - get_outreach_suppliers() — filtered list with status/country/search - GET /admin/outreach — pipeline dashboard - GET /admin/outreach/results — HTMX partial - POST /admin/outreach/<id>/status — inline status update - POST /admin/outreach/<id>/note — inline note edit - POST /admin/outreach/add-prospects — bulk set from supplier list Subtask 3 — CSV import: - GET/POST /admin/outreach/import - Accepts name+contact_email (required), country_code/category/website (optional) - Deduplicates by contact_email, auto-generates slug, capped at 500 rows Subtask 4 — Templates: - outreach.html (pipeline cards + HTMX filter + results table) - outreach_import.html (CSV upload form) - partials/outreach_results.html, partials/outreach_row.html - base_admin.html: Outreach sidebar link - suppliers.html + supplier_results.html: checkbox column + bulk action bar Subtask 5 — Compose integration: - email_compose() GET: ?from_key=outreach&email_type=outreach&supplier_id=<id> pre-fills from-addr, stores hidden fields, defaults wrap=0 (plain text) - email_compose() POST: on outreach send, advances prospect→contacted, increments outreach_sequence_step, sets last_contacted_at - email_compose.html: hidden email_type + supplier_id fields, outreach banner - supplier_detail.html: outreach card (status, step, last contact, send button) Subtask 6 — Tests: - 44 tests in web/tests/test_outreach.py covering: constants, access control, query functions, dashboard, HTMX partial, status update, note update, add-prospects, CSV import, compose pre-fill, compose pipeline update Subtask 7 — Docs: - CHANGELOG.md and PROJECT.md updated Manual step after deploy: add hello.padelnomics.io in Resend dashboard + DNS. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
26 KiB
26 KiB