AI agents that replace and augment the full commercial cycle — from prospect identification to signed contract and renewal — for SMBs that can't afford a sales team.
purge-expired-records edge fn · pg_cron + pg_net daily 03:00 UTC · Twilio TF verification submitted (5-7d async)| Landing page (iqforce.ai) | Marketing | ✓ |
| Auth — sign in/up, password reset, SMTP | Auth | ✓ |
| Nico — Enrollment chatbot + plan selection | Layer 1 | ✓ |
| Ana — GTM Analyst + KPI definition | Layer 1 | ✓ |
| Max — Strategy Reviewer, 7 dimensions | Layer 1 | ✓ |
| Leo — Proposal generator, accept/reject | Layer 1 | ✓ |
| Prospects — add/delete/CSV import | Layer 2 | ✓ |
| Email outreach — single send via Resend | Layer 2 | ✓ |
| Telegram outreach — broadcast | Layer 2 | ✓ |
| Sam agent — sales chat, price presentation | Layer 1 | ✓ |
| Success agreement UI — 3 months free + KPI confirmation | Layer 1 | ✓ |
| Internal negotiation — Sam ↔ Max ↔ Leo (1 round) | Layer 1 | ✓ |
| 90% off fallback — month-to-month flow | Layer 1 | ✓ |
| Prospect save — rejected clients for future follow-up | Layer 1 | ✓ |
| Prospect — search, filters, edit, tags, dedup, detail view | Layer 2 | ✓ |
| Email — AI templates, merge fields, unsubscribe link | Layer 2 | ✓ |
| Email sequences — multi-step, auto follow-up day 3/7/14 | Layer 2 | ✓ |
| Open/click tracking — Resend webhooks | Layer 2 | ✓ |
IQForce sends on behalf of Client from `maria@<client-slug>.iqforce.solutions`. We manage SPF/DKIM/DMARC per subdomain — zero client DNS work. HITL is mandatory in the pilot; US-only targeting; rate-limited 100 sends/tenant/day. Footer: "Sent on behalf of [Client]" + Client physical address + AI disclosure + unsubscribe.
| 4a. Per-client subdomain provisioning ✅ FULLY COMPLETE (May 3) · slug helpers · tenant cols · Resend Pro · admin Tenants UI · tenant-onboard-resend · tenant-verify-resend · resend-webhook Svix · forced compliance footer · admin compliance UI · 5/5 DEV deploys · Svix secret set | Infra | ✓ |
| 4b. MarIA reply logic ✅ FULLY COMPLETE (May 3, 2026) | ✓ | |
| Resend Inbound on replies.<domain> subdomain ✓ | Infra | ✓ |
| Edge function maria-inbound — Svix HMAC + Resend payload ✓ | Layer 1 | ✓ |
| Inbound→prospect correlation (4-strategy: tags / In-Reply-To / from-email / unattributed) ✓ | Layer 1 | ✓ |
| Intent classifier (interested/question/objection/unsubscribe/wrong-person/OOO/other) ✓ | Layer 1 | ✓ |
| MarIA reply generator (Claude Sonnet 4 · AI-disclosed) — drafts only, never sends ✓ | Layer 1 | ✓ |
| Conversations writer + deals stage progression (forward-only; lost terminal on unsubscribe) ✓ | Layer 2 | ✓ |
| HITL Review Queue UI + send-reply function (RFC-2822 threading, unsubscribe enforcement) ✓ | UI | ✓ |
| Per-tenant Cal.com link + activity_logs handoff entry ✓ | Layer 1 | ✓ |
| 4c. Compliance enforcement ✅ FULLY COMPLETE (May 4, 2026) | ✓ | |
| HITL approval logging (approved_by extracted from JWT) ✓ | Layer 2 | ✓ |
| US-only ICP filter (CSV import validation + server-side gates) ✓ | Layer 1 | ✓ |
| Rate limiter — 100 sends/tenant/day (UTC counter, defer-on-cap) ✓ | Layer 2 | ✓ |
| Suppression-list endpoint (HMAC-signed click-link replaces mailto v1) ✓ | Layer 2 | ✓ |
| Pilot Agreement v1.1 UI (replaces ToS — tos_version='pilot-v1.1') ✓ | UI | ✓ |
Moved MarIA + Mia from "operate from a single email body" to "operate from a per-tenant structured knowledge base." Anti-hallucination rule: agents quote prices/specs only if they appear verbatim in the catalog; the playbook covers everything else. Fully validated end-to-end on DEV May 11.
| products table (SKU, price, MOQ, lead time, availability) ✓ | Layer 2 | ✓ May 7 |
| tenants.playbook_* — 6 free-text fields + staleness timestamps ✓ | Layer 2 | ✓ May 7 |
| Catalog admin UI — table view, edit modal, soft-delete, CSV import/export, staleness banner ✓ | UI | ✓ May 7 |
| Sales Playbook admin UI — 6 textareas with hints, staleness banner ✓ | UI | ✓ May 7 |
| AI auto-draft playbook from onboarding (manual + first-visit HITL flow) ✓ | UI + Layer 1 | ✓ May 7 |
| MarIA reply generator: reads playbook + catalog + anti-hallucination rule + compliance hedge ✓ | Layer 1 | ✓ May 11 |
| MarIA classifier: pricing_inquiry intent (8th, tie-breaks vs interested) ✓ | Layer 1 | ✓ May 11 |
| End-to-end pricing_inquiry smoke on DEV: 0.95 confidence, exact catalog quote, zero hallucinations ✓ | QA | ✓ May 11 |
| Mia outbound: shared loadTenantContext + formatPlaybookContext + formatCatalogContext helpers ✓ | Layer 1 | ✓ May 11 |
| Mia defense-in-depth: sanitizeTemplateBody + merge-field warning toast ✓ | Layer 1 | ✓ May 11 |
| End-to-end Mia outbound smoke: merge fields correct + catalog product referenced + no hallucinations ✓ | QA | ✓ May 11 |
| Public roadmap agent drill-down (Nico/Ana/Max/Leo/Sam/Mia/MarIA/Luna/Vera modal) ✓ | UI | ✓ May 11 |
Phase 8 backend COMPLETE on DEV (May 11): all 8 milestones (M1 schema · M2 MarIA enrichment · M3-M4 SMS layer · M5-M6 WhatsApp layer · M7 channel-aware Review Queue + thread merge · M8 smoke) + M-extra "Compose first SMS/WA" workflow + ADMIN_EMAILS multi-admin refactor shipped & deployed to DEV. ~5000 LOC across 7 new edge functions + 4 modified + 1 migration + app.html. Email-side smoke PASS end-to-end with real reply: extraction + write-back + rule 8(c) sms-preference draft + Review Queue + Initiate AI-draft generation all validated, zero hallucinations. M8 live SMS/WA smoke remains — gated on user-side Twilio account provisioning (10DLC conversational + WABA verification). Architectural rule (D54): IQForce is cold on email + LinkedIn only. SMS + WhatsApp are post-consent and prospect-chosen — same playbook a human SDR uses. Cold WhatsApp/SMS in the US (TCPA, Meta commerce policy, 10DLC marketing reg) is a non-starter; post-consent on shared IQForce 10DLC + WABA is compliant.
| ✓ M1 · Channel preference schema — prospects channel cols + sms_logs + whatsapp_logs tables with RLS day 1 | Layer 2 | ✓ 1h |
| ✓ M2 · MarIA reply enrichment — extractContactInfo() second-pass Claude + write-back + CHANNEL CONTEXT branching in MARIA_REPLY_SYSTEM rule 8 (buffet · respect-preference · voice=Cal.com+WhatsApp) | Layer 1 | ✓ 2h |
| ✓ M3 · send-sms (Twilio 10DLC conversational + admin-JWT + TCPA gates + STOP footer + 1600-char cap + sms_logs + activity_logs) | Layer 2 | ✓ 5h |
| ✓ M4 · twilio-sms-inbound (HMAC-SHA1 + STOP/HELP carrier-handled + status callback + SMS-tuned classifier+draft + conversations append + deal stage) | Layer 2 | ✓ 5h |
| ✓ M5 · send-whatsapp (Twilio WABA + 24h conversation window enforcement + admin-JWT + consent/suppression + 4096-char cap + status enum with 'read'/blue ticks) | Layer 2 | ✓ 5h |
| ✓ M6 · twilio-whatsapp-inbound (HMAC + STOP-equiv canonical set + 'read' status callback + WA-tuned classifier+draft + strips whatsapp: prefix + 300-char target) | Layer 2 | ✓ 5h |
| Voice = Cal.com schedule → client contacts via WhatsApp at the meeting time (no outbound voice infra; AI voice deferred to Phase 10) | UI | ✓ 0h |
| ✓ M7 · Review Queue channel-aware UI — per-channel pill 📧/📱/💬 + per-channel send routing + pre-send compliance warning block + WABA window warning + char counter + state badges + unified thread merge details + subject hidden for SMS/WA + pricing_inquiry pill color | Layer 2 + UI | ✓ 3h |
| ✓ M-extra · Compose first SMS/WA workflow — admin-compose-message endpoint with AI-draft via new INITIATE prompts + admin-initiate-list filtering + 🚀 Admin · Initiate UI tab + inline compose form + ✨ Generate with AI + staged-confirmation card UX | Layer 2 + UI | ✓ 4h |
| ✓ ADMIN_EMAILS multi-admin refactor — comma-separated list across 10 edge functions + app.html · zalogon + gsgarcia both operate HITL on DEV | Layer 2 + UI | ✓ 1h |
| ✓ Email-side smoke PASS end-to-end on DEV — real reply "text me at +1 555 123 4567 — SMS works best" → extraction + write-back + rule 8(c) draft + Initiate AI-draft + Review Queue all green with zero hallucinations | QA | ✓ |
| M8 · Live SMS/WA smoke — full circuit cold email → opt-in → SMS draft+approve+Twilio send → prospect reply → twilio-sms-inbound → WhatsApp pivot → STOP regression. Twilio account provisioned (May 17); toll-free verification submitted with Customer Care category + sms-consent.html Proof-of-Consent URL. Smoke gated on TF approval (5-7 business days async — Twilio drops A2P traffic on unverified TF; T-Mobile especially blocks). Pivot plan: WhatsApp sandbox smoke in parallel (no WABA approval required) | QA | 2h gated |
Re-sequenced May 7 to land after Phase 7 + 8 + pilot client #1. The data layer (deals table, conversations, activity_logs) already exists — the Kanban polish is internal-facing UI and can wait.
| Reuses existing PROD `deals` table (15 cols already there) | Layer 2 | ✓ schema |
| New "Opportunities" tab in app.html | UI | 3h |
| Table view — sortable, inline edit | UI | 5h |
| Kanban view — 7 stages, drag-drop | UI | 6h |
| Toggle table ⇄ kanban | UI | 1h |
| Activity timeline per deal (email_events + conversations + activity_logs) | UI | 4h |
| CSV/XLSX export | UI | 3h |
Existing CSV import (P1) covers the BYO need. This is just polish for client-friendly import formats. Centralized Apollo is killed per legal advice — clients use their own Apollo CSV exports if they have a subscription.
| Apollo CSV format adapter (clients with own Apollo subscription) | UI | 2h |
| LinkedIn Sales Navigator export adapter | UI | 2h |
| Suppression-list-aware import (skip rows already suppressed) | Layer 2 | 1h |
| US-country-only validation on import | Layer 2 | 1h |
Second cold channel after email (per D54). Sales Navigator / LinkedIn export → outreach automation → MarIA extended to LinkedIn replies. Legality gated on LinkedIn ToS posture; deferred until pilot revenue justifies the regulatory risk. Scope detailed at kickoff.
| Scope to be detailed post-pilot — placeholder for D56 ordering | Layer 1+2 | ~30-40h |
Replaces the Phase 8 "voice = Cal.com link" handoff with real AI-led calling. Two candidate providers under consideration (Vapi and Bland); choice deferred until Phase 8 + pilot data inform the picks. Requires TCPA capture + state-by-state consent flow. Post-pilot per D56.
| Scope to be detailed post-pilot — placeholder for D56 ordering | Layer 1+2 | ~30h |
Foundational telemetry so every customer-facing KPI is computed live from the DB, not Excel. No UI in this phase — just the event-capture spine. Critical-path for Phase 12 (dashboards) and Phase 13 (billing enforcement).
events table (uniform append-only log, RLS day 1) | Schema | 3h |
| Instrumentation triggers across send-* + draft lifecycle + replies | Layer 2 | 4h |
cal-booking-webhook edge fn (HMAC) → meeting_booked + meeting_held events | Edge fn | 4h |
tenants.first_meeting_booked_at denormalization + backfill script | Schema | 2h |
v_kpi_* SQL views (reply rate · meetings · time-to-first-meeting · HITL approval rate · hallucination proxy · hours saved · cohort retention) | SQL views | 7h |
Two surfaces, same SQL views, different framing — both inside app.html. Reads from Phase 11 v_kpi_* views only (no inline SQL in UI). Depends on Phase 11.
| Per-tenant ROI page — "you would have spent $X on a SDR, IQForce charged $Y, saved you $Z" | UI | 8h |
| Admin CEO dashboard — 3 tenants side-by-side · cohort retention · HITL global + per-tenant · drafts funnel | UI | 6h |
Real billing replaces the manual onboarding flow. 90-day demo → ultra-promo paying tier → standard tiers, via Stripe Checkout + webhook-driven subscription lifecycle.
Trial fields + tenant_status enum + paywall gating across all send-* functions | Schema + Edge fn | 4h |
| Stripe Checkout — three tiers (promo / Starter / Growth) | Integration | 6h |
stripe-webhook edge fn — subscription lifecycle + invoice events | Edge fn | 4h |
| Plan enforcement (prospects/mo caps) + trial countdown UI | UI + Edge fn | 1h |
Friction-zero artifacts that reinforce value for paying tenants. All read from Phase 11 views — single source of truth. Depends on Phase 11 + Phase 13.
Weekly automated tenant report (send-weekly-report) — value-moment anchor before trial expires | Edge fn + cron | 5h |
| Cost-per-meeting calculator + SDR comparison slider in per-tenant dashboard | UI | 2h |
| Time-to-first-meeting hero + HITL approval rate badge ("0% hallucination") | UI | 3h |
Binary fork after Nico so prospects who already own a customer base aren't forced through GTM/ICP discovery. NBD (New Business Development) = current default (Ana runs, cold outreach to net-new). AM (Account Management) = skip Ana, upload existing customer base, reuse Phase 7 catalog/playbook, warm-tone outreach to accounts the client already owns. UX + flow branching only; no agent rewrites — Mia + MarIA prompts get a mode-aware preamble. Opens distribution/wholesale/CPG vertical without breaking the NBD default. Gated: ≥3 paying NBD pilots live + ≥2 inbound AM-mode requests.
| Mode selector step after Nico — two cards (NBD / AM); default NBD | UI | 2h |
tenants.use_case_mode enum (nbd | am) NOT NULL DEFAULT 'nbd' + backfill | Schema | 0.5h |
| AM path: skip Ana → customer-base upload (reuses Phase 6 importer with AM column hints) | UI | 2h |
| Mia + MarIA mode-aware preamble (NBD = cold framing; AM = warm-account framing) | Layer 1 | 2h |
| Pilot Agreement addendum §A2 for AM clients (existing-relationship warranty + CAN-SPAM commercial classification) | Legal + UI | 1.5h |
AM-specific tooling beyond "skip Ana." Build only after Phase 15 ships AND ≥2 paying AM-mode pilots are live (avoids speculative build). Reuses ~70% of the existing platform (catalog/playbook, MarIA, CRM, email infra, HITL, per-client subdomains, Phase 8 multi-channel).
MarIA order_request intent (9th) — extracts {sku_refs, quantities, delivery_window} against tenant catalog; HITL "Order draft" card variant with line items + total | Layer 1 + UI | 8h |
| RFM scoring view on customer base — nightly recency/frequency/monetary per account; segments active/dormant/at-risk/churned | SQL view | 6h |
Accounts board view — Phase 5 Kanban variant with RFM segments as columns; toggle by use_case_mode | UI | 5h |
| AM-specific KPI tiles in Phase 12 dashboard — reorder rate, % inbound auto-processed, AOV lift, dormant-account reactivations | UI | 3h |
| Luna — CX KPI agent, months 1-3 | Layer 1 | 10h |
| Vera — Retention agent, month 3+ | Layer 1 | 12h |
| Stripe auto-billing at month 3 | Billing | 6h |
| C-Level Dashboard (internal) | Layer 1 | 8h |
| Proposal + Strategy PDF export | UI | 4h |
Telegram cold + inbound — same compliance profile as cold WhatsApp/SMS so out of pilot scope. Existing scaffolding stays in-tree (telegram_contacts, telegram_logs, send-telegram, telegram-webhook) and provides the pattern reused by Phase 8's SMS/WhatsApp integrations. WhatsApp is now part of Phase 8 (post-consent, MVP-required). LinkedIn cold moved to Phase 9. AI voice moved to Phase 10.
| Telegram outreach — kept on the shelf; not in pilot | Layer 2 | ~12h |
| Data enrichment — Enrich.so, ICP match scoring | Layer 3 | 8h · $49/mo |
| AI content generation — Copy.ai, blog/social/ads | Layer 3 | 10h · $49/mo |
| Social media automation — Ocoya, LinkedIn/X/FB/IG | Layer 3 | 8h · $29/mo |
| SEO + GEO — Surfer SEO, AI search optimization | Layer 3 | 6h · $89/mo |
| Paid ads — Meta + Google Ads API, budget AI | Layer 3 | 12h · free APIs |
| Demand Gen Dashboard — CPL, ROI, budget tracker | Layer 3 | 6h |