InboxOps Implementation Plan — Milestone Index
This directory contains the complete implementation plan: one index file (this file) and one detailed milestone file per phase. Each milestone file lists detailed tasks and acceptance criteria traceable to PRODUCT-AND-ARCHITECTURE.md.
Base order: IMPLEMENTATION-ORDER.md
Milestones Overview
| # | Milestone | Description | Prerequisites | File | Status |
|---|---|---|---|---|---|
| 1 | Foundation and repository | Monorepo, DB schema, migrations, config, app skeleton, i18n (next-intl) | — | M01-foundation.md | Done |
| 2 | Auth and tenant identity | Sign up/in, password reset, tenant from slug, middleware, /no-workspace | M01 | M02-auth-tenant.md | Pending |
| 3 | App shell and navigation | Layout, nav, tenant switcher, theme, empty/loading states | M02 | M03-app-shell.md | Pending |
| 4 | Onboarding and tenant settings | Onboarding wizard, Settings → General, feature flags | M03 | M04-onboarding-settings.md | Pending |
| 5 | Inbox management | Inbox CRUD, connect (IMAP/OAuth), encryption, status UI | M04 | M05-inbox-management.md | Pending |
| 6 | Email pipeline and worker | Worker, fetch/send, S3, dedupe, thread match, edge cases | M05 | M06-email-pipeline.md | Pending |
| 7 | Ticket list and detail | List, detail, thread, reply, tags, assignee, polling | M06 | M07-tickets.md | Pending |
| 8 | Notifications and snippets | In-app + email notifications, preferences, snippets | M07 | M08-notifications-snippets.md | Pending |
| 9 | Invites and team | Invite flow, Team settings, audit log | M08 | M09-invites-team.md | Pending |
| 10 | Billing and trial | Stripe Checkout/Portal, webhooks, trial lifecycle, locked | M09 | M10-billing-trial.md | Pending |
| 11 | SLA and business hours | SLA policies, business hours, status, breach cron | M10 | M11-sla.md | Pending |
| 12 | Search | Full-text search, filters, ticket list integration | M11 | M12-search.md | Pending |
| 13 | Reporting | Basic + advanced reports, Reports page | M12 | M13-reporting.md | Pending |
| 14 | Integrations | Webhooks, Public API (REST + API key) | M13 | M14-integrations.md | Pending |
| 15 | Marketing site | Landing, pricing, contact form, legal pages | M14 | M15-marketing.md | Pending |
| 16 | Polish and observability | Error pages, command palette, profile, CI/CD, Sentry | M15 | M16-polish.md | Pending |
| 17 | Add-ons (post–first launch) | SSO, Gmail Push, Graph change notifications | M16 | M17-addons.md | Pending |
| 18 | Customer-facing documentation | Docusaurus site in inboxops-docs; docs.inboxops.app; Markdown content | M16 or M17 | M18-documentation.md | Pending |
Dependency Graph (summary)
M01–M07 form the core path (foundation through tickets and reply). M08–M16 complete launch readiness. M17 is optional post-launch. M18 (customer docs) depends on M16 or M17 and can be developed in parallel once the product is stable.
How to use
- Planning: Use the index to see scope and order; open the milestone file for the phase you are starting.
- Execution: Work through tasks in order within a milestone; check off acceptance criteria before marking the milestone complete.
- Traceability: Each task and AC references PRODUCT-AND-ARCHITECTURE section numbers where applicable.
- Testing: Plan unit/integration (Vitest) and E2E (Playwright) per milestone; auth (M02) and tenant (M02–M03) are critical for E2E early. See Testing strategy (E2E and unit) below for where to add E2E.
Testing strategy (E2E and unit)
Tooling: Unit and integration tests use Vitest; end-to-end tests use Playwright (Section 3.12). E2E tests live in apps/web (or a dedicated e2e/ package if preferred) and run against a local or seeded app instance.
When to introduce E2E
| When | What |
|---|---|
| By end of M02 | E2E setup: Add Playwright to the repo (e.g. in apps/web); config (baseURL, test project); optionally a smoke test (e.g. home or login page loads). Use a test DB (e.g. separate schema, or reset/seed before suite) so auth and tenant tests are deterministic. |
| M02 | First E2E scope: Auth flows — sign up → redirect to onboarding; sign in → redirect to tickets (or no-workspace); sign out → redirect to login; password reset (request + set password); unauthenticated access to /app/[slug] redirects to login; user with no tenants sees /no-workspace. |
| M03 | App shell E2E: Logged-in user sees sidebar and top bar; nav links use correct tenant path; theme toggle and sign out from shell work; /app/[slug] redirects to /app/[slug]/tickets; placeholder pages (tickets, settings, profile) render. |
| M04 | Onboarding E2E: New user completes onboarding steps; redirect to tickets when done; Settings → General (minimal smoke). |
| M05 | Inbox management E2E: Create inbox; connect (IMAP form or OAuth with test account); inbox appears in list with status; reconnect / disconnect from UI. |
| M06 | Email pipeline E2E (UI-visible): Send reply from app; message appears in thread (or poll until visible); new email → ticket appears in list (with test inbox or stub). |
| M07 | Tickets E2E (critical path): Open tickets list; open a ticket; reply (if worker is stubbed or fast); list and detail reflect tenant. |
| M08 | Notifications and snippets E2E: In-app notification appears (or trigger path); notification preferences save; insert snippet in reply and confirm it appears. |
| M09 | Invites and team E2E: Send invite; accept via link (new and existing user); new member sees workspace; team list and audit log visible to Admin. |
| M10 | Billing E2E: Checkout redirect (Stripe test mode); Portal redirect; locked state when subscription locked; trial → paid flow smoke. |
| M11 | SLA E2E: Configure SLA policy and business hours; ticket shows SLA status/breach; breach notification path (in-app or email) verifiable. |
| M12 | Search E2E: Search by text returns results; filters (sender, tag) narrow results; results and ticket list stay in sync. |
| M13 | Reporting E2E: Reports page loads; at least one report (e.g. basic) renders with data or empty state; export flow smoke if in scope. |
| M14 | Integrations E2E: Webhook endpoint CRUD from UI; optional "Test" delivery; API key create/revoke from Settings. |
| M15 | Marketing site E2E: Landing and pricing pages load; contact form submit (success or stub); legal pages (terms, privacy) load. |
| M16 | CI: GitHub Actions runs unit/integration (Vitest) on every PR; E2E (Playwright) on main or nightly (or on PR if fast enough). Section 3.12, M16 §16.4. |
| M17 | Add-ons E2E (if implemented): SSO login flow or Gmail/Graph connect flow smoke with test accounts. |
| M18 | Docs site E2E (optional): Docusaurus build; key docs pages load (e.g. getting started, API reference); deploy smoke. |
Unit / integration tests
- Per milestone: Add Vitest tests for non-UI logic (auth helpers, rate limit, slug utils, API handlers, tRPC procedures) as features are built. No single “add all unit tests” milestone; spread across M02–M16.
- M01: Turbo pipeline already includes
test; packages use placeholder"test": "echo \"No tests yet\""until real tests are added.