# Agile Epics & Backlog ## Epic map | Epic ID | Name | Phase | Priority | |---------|------|-------|----------| | E1 | Campaign & role model | 1 | P0 | | E2 | Recipe engine | 1 | P0 | | E3 | Campaign dispatcher | 1 | P0 | | E4 | Reply rate engine | 1 | P0 | | E5 | Statistics & reporting | 1 | P0 | | E6 | AI content safety | 1 | P0 | | E7 | Spam rescue v2 | 2 | P0 | | E8 | Web dashboard | 2 | P1 | | E9 | DNS & deliverability checks | 2 | P1 | | E10 | Job queue | 2 | P1 | | E11 | Multi-tenant SaaS | 3 | P2 | | E12 | Peer network (optional) | 3 | P3 | | E13 | External integrations | 3–4 | P3 | --- ## E1 — Campaign & role model ### Stories | ID | Story | Points | |----|-------|--------| | E1-1 | As an operator, I can mark a mailbox as primary or satellite | 3 | | E1-2 | As an operator, I can create a warmup campaign for a primary | 5 | | E1-3 | As an operator, I can assign/remove satellites from a campaign | 3 | | E1-4 | As an operator, I can run multiple campaigns for different primaries | 5 | | E1-5 | As a developer, migrate existing Inbox rows to new schema | 3 | **Integration:** Prisma migration + `/api/campaigns` routes --- ## E2 — Recipe engine ### Stories | ID | Story | Points | |----|-------|--------| | E2-1 | As an operator, I can select Grow recipe with 30-day duration | 5 | | E2-2 | As an operator, I can select Flat recipe | 3 | | E2-3 | As an operator, I can select Randomized recipe | 5 | | E2-4 | As an expert, I can define Custom per-day schedule | 8 | | E2-5 | As an operator, I can preview ramp chart before starting | 3 | | E2-6 | System enforces min 1, max 50 emails/day | 2 | | E2-7 | System enforces 48h +20% volume cap | 5 | **Integration:** `packages/recipe-engine` or `src/services/recipe.service.ts` --- ## E3 — Campaign dispatcher ### Stories | ID | Story | Points | |----|-------|--------| | E3-1 | Satellites send only to assigned primary | 5 | | E3-2 | Primary replies only to assigned satellites | 5 | | E3-3 | Sends respect daily schedule from recipe | 5 | | E3-4 | Sends distributed with jitter in send window | 5 | | E3-5 | Campaign auto-completes after durationDays | 3 | | E3-6 | Maintenance mode at 20% volume post-campaign | 5 | **Integration:** Replace `dispatcher.job.ts` with campaign-aware version --- ## E4 — Reply rate engine ### Stories | ID | Story | Points | |----|-------|--------| | E4-1 | Operator sets reply rate 30% (default) | 2 | | E4-2 | System caps reply rate at 45% | 1 | | E4-3 | Rescuer samples replies probabilistically | 8 | | E4-4 | Non-replied messages still rescued and flagged | 3 | | E4-5 | Dashboard shows reply rate actual vs target | 3 | --- ## E5 — Statistics & reporting ### Stories | ID | Story | Points | |----|-------|--------| | E5-1 | API returns today's planned vs actual sends | 5 | | E5-2 | API returns daily time series for 30 days | 5 | | E5-3 | API returns spam detected/rescued counts | 3 | | E5-4 | API returns inbox placement rate | 5 | | E5-5 | Nightly rollup job materializes DailyStat | 5 | | E5-6 | Workspace overview endpoint for all primaries | 5 | --- ## E6 — AI content safety ### Stories | ID | Story | Points | |----|-------|--------| | E6-1 | Validator rejects bracket placeholders | 3 | | E6-2 | Validator rejects tier-1 spam words | 3 | | E6-3 | Auto-regenerate up to 3 times on failure | 3 | | E6-4 | Mailbox profile supplies real name/company | 3 | | E6-5 | Plain text only, no links in warmup body | 2 | --- ## E7 — Spam rescue v2 ### Stories | ID | Story | Points | |----|-------|--------| | E7-1 | Match spam UID to single WarmupLog | 5 | | E7-2 | Track placement inbox vs spam | 3 | | E7-3 | Auto-discover spam folder per provider | 5 | | E7-4 | Auto-pause campaign on high spam rate | 5 | --- ## E8 — Web dashboard ### Stories | ID | Story | Points | |----|-------|--------| | E8-1 | Dashboard shows all active campaigns | 5 | | E8-2 | 4-step campaign wizard | 8 | | E8-3 | Campaign detail with charts | 8 | | E8-4 | Add mailbox with provider presets | 5 | | E8-5 | Connection test from UI | 3 | | E8-6 | Global activity log view | 3 | --- ## Integration breakdown (build order) ```mermaid flowchart TD E1[E1 Campaign model] --> E2[E2 Recipe engine] E2 --> E3[E3 Dispatcher] E1 --> E4[E4 Reply rate] E3 --> E5[E5 Statistics] E3 --> E6[E6 AI validator] E4 --> E7[E7 Spam rescue v2] E5 --> E8[E8 Web UI] E6 --> E8 E7 --> E8 ``` ## Suggested first sprint (2 weeks) 1. E1-1, E1-2, E1-3 (campaign CRUD + roles) 2. E2-1, E2-6 (Grow recipe + validation) 3. E6-1 (placeholder validator) **Sprint goal:** Create FillCare campaign via API; preview Grow schedule; no sends yet. ## Story point scale | Points | Meaning | |--------|---------| | 1–2 | Few hours | | 3 | Half day | | 5 | 1 day | | 8 | 2–3 days | ## Backlog hygiene - Every story links to spec doc section - Acceptance criteria required before sprint commit - Demo: FillCare primary visible in stats after each epic