|
| 1 | +# maild roadmap (internal) |
| 2 | + |
| 3 | +## Goal |
| 4 | + |
| 5 | +Deliver a technically robust BYO-SMTP outbound operations control plane with |
| 6 | +strong reliability, safety controls, and operator workflows. |
| 7 | + |
| 8 | +## Version history |
| 9 | + |
| 10 | +### v0.4.0 (April 14, 2026) ✓ |
| 11 | +Frontend product UX expansion. |
| 12 | + |
| 13 | +Completed: |
| 14 | +- [x] Operator dashboard redesign (Warm Brutalist design system) |
| 15 | +- [x] Onboarding checklist workflow with domain readiness checks |
| 16 | +- [x] Incident management screens with timeline and attempt history |
| 17 | +- [x] Landing page, signup/login flow, user dashboard |
| 18 | +- [x] Session-based auth layer with Redis session store |
| 19 | + |
| 20 | +## Current state (as of April 14, 2026) |
| 21 | + |
| 22 | +### Open bugs |
| 23 | +- [#7](https://github.com/srmdn/maild/issues/7): missing nav link back to dashboard from `/ui` pages |
| 24 | +- [#8](https://github.com/srmdn/maild/issues/8): `/ui` pages accessible without authentication |
| 25 | + |
| 26 | +### Product work completed |
| 27 | + |
| 28 | +- [x] Core message pipeline: API -> queue -> worker -> SMTP send. |
| 29 | +- [x] Bounded retry and status transitions. |
| 30 | +- [x] Suppression and unsubscribe enforcement. |
| 31 | +- [x] Domain readiness checks (SPF, DKIM, and DMARC). |
| 32 | +- [x] Signed webhook ingest, dead-letter handling, and replay. |
| 33 | +- [x] Provider failover (manual and automatic). |
| 34 | +- [x] Tenant policy controls. |
| 35 | +- [x] Metering, analytics summary, and export. |
| 36 | +- [x] Operator console (`/ui/logs`) with logs, timeline, retry, suppression, domain checks. |
| 37 | +- [x] Landing page with product value props and signup CTA. |
| 38 | +- [x] User auth layer with session-based login. |
| 39 | +- [x] User dashboard at `/dashboard`. |
| 40 | + |
| 41 | +### Commercial validation status |
| 42 | + |
| 43 | +- [~] Design partner and paid pilot activities are intentionally deferred. |
| 44 | +- [~] Case study publication is deferred until commercial work resumes. |
| 45 | + |
| 46 | +Deferred commercial context (kept for later resume): |
| 47 | +- [~] Recruit five design partners. |
| 48 | +- [ ] Convert two design partners into paid pilots. |
| 49 | +- [ ] Publish one partner case study draft with real metrics. |
| 50 | +- [ ] Freeze GA v1 scope with explicit in-scope and out-of-scope list. |
| 51 | + |
| 52 | +## How users use `maild` today (backend-first) |
| 53 | + |
| 54 | +Users do not need a full frontend product to run `maild`. |
| 55 | + |
| 56 | +1. API-first integration from their app/backend. |
| 57 | +- App/backend calls `POST /v1/messages`. |
| 58 | +- Existing SMTP accounts remain in place. |
| 59 | +- `maild` adds policy, retries, logs, and webhook processing. |
| 60 | + |
| 61 | +2. Operator workflows through lightweight UI. |
| 62 | +- Operators use `/ui/logs` and `/ui/policy`. |
| 63 | +- They inspect status, run retries, apply suppression and unsubscribe rules, |
| 64 | + and run domain readiness checks. |
| 65 | + |
| 66 | +3. Operational automation via scripts/CLI. |
| 67 | +- Teams call endpoints with `curl`, cron jobs, and runbooks. |
| 68 | +- This is enough for technical pilot teams. |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## Version plan |
| 73 | + |
| 74 | +### v0.5.0: Auth hardening and pilot prep |
| 75 | + |
| 76 | +**Goal**: Fix auth gaps, prepare for design partner onboarding. |
| 77 | + |
| 78 | +Focus areas: |
| 79 | +- [ ] Fix [#8](../issues/8): require auth for `/ui/*` pages in all environments |
| 80 | +- [ ] Fix [#7](../issues/7): add dashboard nav link in `/ui` pages |
| 81 | +- [ ] Add workspace-scoped auth (current user can only access their workspace) |
| 82 | +- [ ] Add session expiry and refresh handling |
| 83 | +- [ ] Add "remember me" extended session option |
| 84 | + |
| 85 | +Exit criteria: `/ui/*` pages properly protected, session UX smooth. |
| 86 | + |
| 87 | +--- |
| 88 | + |
| 89 | +### v0.6.0: Design partner onboarding |
| 90 | + |
| 91 | +**Goal**: Enable five design partners to onboard successfully. |
| 92 | + |
| 93 | +Focus areas: |
| 94 | +- [ ] Build design partner onboarding runbook (document in `docs/internal/`) |
| 95 | +- [ ] Add onboarding progress tracker in UI |
| 96 | +- [ ] Add workspace invitation flow (email invite to workspace) |
| 97 | +- [ ] Add first-login onboarding checklist |
| 98 | +- [ ] Add API key rotation UX in user dashboard |
| 99 | + |
| 100 | +Exit criteria: Runbook complete, five design partners onboarded. |
| 101 | + |
| 102 | +--- |
| 103 | + |
| 104 | +### v0.7.0: Paid pilot conversion |
| 105 | + |
| 106 | +**Goal**: Convert two design partners to paid pilots. |
| 107 | + |
| 108 | +Focus areas: |
| 109 | +- [ ] Define success metrics for paid pilots (setup time, delivery rate, incident recovery time) |
| 110 | +- [ ] Add usage metrics dashboard per workspace |
| 111 | +- [ ] Add billing-ready metering export |
| 112 | +- [ ] Add per-workspace SMTP usage tracking |
| 113 | +- [ ] Prepare case study template |
| 114 | + |
| 115 | +Exit criteria: Two paid pilots, measurable before/after metrics captured. |
| 116 | + |
| 117 | +--- |
| 118 | + |
| 119 | +### v0.8.0: Multi-tenant workspace management |
| 120 | + |
| 121 | +**Goal**: Allow workspace owners to manage team members. |
| 122 | + |
| 123 | +Focus areas: |
| 124 | +- [ ] Add workspace member roles (owner, admin, viewer) |
| 125 | +- [ ] Add member invite and remove flows |
| 126 | +- [ ] Add workspace settings UI (name, domain, limits) |
| 127 | +- [ ] Add workspace-level API key management |
| 128 | +- [ ] Add audit log for workspace actions |
| 129 | + |
| 130 | +Exit criteria: Workspace owner can manage team without direct database access. |
| 131 | + |
| 132 | +--- |
| 133 | + |
| 134 | +### v0.9.0: SMTP credentials per workspace |
| 135 | + |
| 136 | +**Goal**: Replace single global SMTP account with per-workspace credentials. |
| 137 | + |
| 138 | +Focus areas: |
| 139 | +- [ ] Add SMTP account CRUD per workspace |
| 140 | +- [ ] Add SMTP account activation/deactivation |
| 141 | +- [ ] Add credential rotation UX |
| 142 | +- [ ] Add SMTP health check endpoint |
| 143 | +- [ ] Deprecate global SMTP account config |
| 144 | + |
| 145 | +Exit criteria: Each workspace has its own SMTP credentials, global config removed. |
| 146 | + |
| 147 | +--- |
| 148 | + |
| 149 | +### v0.10.0: Webhook event persistence and delivery |
| 150 | + |
| 151 | +**Goal**: Provide webhook history and retry controls for workspace events. |
| 152 | + |
| 153 | +Focus areas: |
| 154 | +- [ ] Persist outbound webhook events (not just dead-letter) |
| 155 | +- [ ] Add webhook delivery status history per event |
| 156 | +- [ ] Add outbound webhook retry UI |
| 157 | +- [ ] Add webhook delivery failure alerts |
| 158 | +- [ ] Add per-workspace webhook endpoint configuration |
| 159 | + |
| 160 | +Exit criteria: Users can see webhook delivery history and retry failed webhooks. |
| 161 | + |
| 162 | +--- |
| 163 | + |
| 164 | +### v0.11.0: GA v1 scope freeze |
| 165 | + |
| 166 | +**Goal**: Lock GA v1 feature set and declare completeness. |
| 167 | + |
| 168 | +Focus areas: |
| 169 | +- [ ] Finalize in-scope / out-of-scope list |
| 170 | +- [ ] Add migration guide for v0.x to v1.0 upgrade |
| 171 | +- [ ] Add deprecation notices for any v0.x-only features |
| 172 | +- [ ] Complete architecture documentation sync |
| 173 | +- [ ] Publish case study from pilot data |
| 174 | + |
| 175 | +Exit criteria: GA v1 scope documented, migration path clear, case study drafted. |
| 176 | + |
| 177 | +--- |
| 178 | + |
| 179 | +## Deferred tracks (resumed after v0.7.0) |
| 180 | + |
| 181 | +### Track D: pilot acquisition and onboarding |
| 182 | + |
| 183 | +- [ ] Build a list of 20 candidate teams (founders, agencies, and SaaS). |
| 184 | +- [ ] Run outreach and secure five onboarding calls. |
| 185 | +- [ ] Onboard first three design partners with the onboarding runbook. |
| 186 | +- [ ] Define partner success metrics before traffic starts. |
| 187 | + |
| 188 | +### Track E: paid conversion and proof |
| 189 | + |
| 190 | +- [ ] Convert at least two onboarded partners to paid pilots. |
| 191 | +- [ ] Capture before/after metrics for one partner: |
| 192 | + - setup time, |
| 193 | + - unknown delivery state rate, |
| 194 | + - incident recovery time, and |
| 195 | + - weekly manual ops effort. |
| 196 | +- [ ] Publish one case study draft from real pilot data. |
| 197 | + |
| 198 | +--- |
| 199 | + |
| 200 | +## GA v1 scope draft (working) |
| 201 | + |
| 202 | +### In scope |
| 203 | + |
| 204 | +- BYO-SMTP setup and validation. |
| 205 | +- Transactional message pipeline and retries. |
| 206 | +- Suppression and unsubscribe guardrails. |
| 207 | +- Domain readiness checks. |
| 208 | +- Webhook ingest, dead-letter handling, and replay. |
| 209 | +- Operator console for core operations. |
| 210 | +- Multi-tenant workspace management. |
| 211 | +- SMTP credentials per workspace. |
| 212 | +- Webhook event persistence and delivery. |
| 213 | + |
| 214 | +### Out of scope |
| 215 | + |
| 216 | +- campaign builder, |
| 217 | +- inbox and reply management, |
| 218 | +- IMAP, POP, and JMAP features, |
| 219 | +- multi-region active-active deployment, and |
| 220 | +- AI content generation. |
| 221 | + |
| 222 | +--- |
| 223 | + |
| 224 | +## Exit criteria for this roadmap cycle |
| 225 | + |
| 226 | +- Technical backlog items for console, reliability tests, and runbooks are |
| 227 | + completed or explicitly deferred. |
| 228 | +- No unresolved critical reliability gaps in retry/replay/failover flows. |
| 229 | +- Root docs stay aligned with shipped behavior. |
0 commit comments