Skip to main content

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

#MilestoneDescriptionPrerequisitesFileStatus
1Foundation and repositoryMonorepo, DB schema, migrations, config, app skeleton, i18n (next-intl)M01-foundation.mdDone
2Auth and tenant identitySign up/in, password reset, tenant from slug, middleware, /no-workspaceM01M02-auth-tenant.mdPending
3App shell and navigationLayout, nav, tenant switcher, theme, empty/loading statesM02M03-app-shell.mdPending
4Onboarding and tenant settingsOnboarding wizard, Settings → General, feature flagsM03M04-onboarding-settings.mdPending
5Inbox managementInbox CRUD, connect (IMAP/OAuth), encryption, status UIM04M05-inbox-management.mdPending
6Email pipeline and workerWorker, fetch/send, S3, dedupe, thread match, edge casesM05M06-email-pipeline.mdPending
7Ticket list and detailList, detail, thread, reply, tags, assignee, pollingM06M07-tickets.mdPending
8Notifications and snippetsIn-app + email notifications, preferences, snippetsM07M08-notifications-snippets.mdPending
9Invites and teamInvite flow, Team settings, audit logM08M09-invites-team.mdPending
10Billing and trialStripe Checkout/Portal, webhooks, trial lifecycle, lockedM09M10-billing-trial.mdPending
11SLA and business hoursSLA policies, business hours, status, breach cronM10M11-sla.mdPending
12SearchFull-text search, filters, ticket list integrationM11M12-search.mdPending
13ReportingBasic + advanced reports, Reports pageM12M13-reporting.mdPending
14IntegrationsWebhooks, Public API (REST + API key)M13M14-integrations.mdPending
15Marketing siteLanding, pricing, contact form, legal pagesM14M15-marketing.mdPending
16Polish and observabilityError pages, command palette, profile, CI/CD, SentryM15M16-polish.mdPending
17Add-ons (post–first launch)SSO, Gmail Push, Graph change notificationsM16M17-addons.mdPending
18Customer-facing documentationDocusaurus site in inboxops-docs; docs.inboxops.app; Markdown contentM16 or M17M18-documentation.mdPending

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

  1. Planning: Use the index to see scope and order; open the milestone file for the phase you are starting.
  2. Execution: Work through tasks in order within a milestone; check off acceptance criteria before marking the milestone complete.
  3. Traceability: Each task and AC references PRODUCT-AND-ARCHITECTURE section numbers where applicable.
  4. 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

WhenWhat
By end of M02E2E 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.
M02First 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.
M03App 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.
M04Onboarding E2E: New user completes onboarding steps; redirect to tickets when done; Settings → General (minimal smoke).
M05Inbox management E2E: Create inbox; connect (IMAP form or OAuth with test account); inbox appears in list with status; reconnect / disconnect from UI.
M06Email 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).
M07Tickets E2E (critical path): Open tickets list; open a ticket; reply (if worker is stubbed or fast); list and detail reflect tenant.
M08Notifications and snippets E2E: In-app notification appears (or trigger path); notification preferences save; insert snippet in reply and confirm it appears.
M09Invites and team E2E: Send invite; accept via link (new and existing user); new member sees workspace; team list and audit log visible to Admin.
M10Billing E2E: Checkout redirect (Stripe test mode); Portal redirect; locked state when subscription locked; trial → paid flow smoke.
M11SLA E2E: Configure SLA policy and business hours; ticket shows SLA status/breach; breach notification path (in-app or email) verifiable.
M12Search E2E: Search by text returns results; filters (sender, tag) narrow results; results and ticket list stay in sync.
M13Reporting E2E: Reports page loads; at least one report (e.g. basic) renders with data or empty state; export flow smoke if in scope.
M14Integrations E2E: Webhook endpoint CRUD from UI; optional "Test" delivery; API key create/revoke from Settings.
M15Marketing site E2E: Landing and pricing pages load; contact form submit (success or stub); legal pages (terms, privacy) load.
M16CI: 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.
M17Add-ons E2E (if implemented): SSO login flow or Gmail/Graph connect flow smoke with test accounts.
M18Docs 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.