also looking at this
docs(webmail): reconcile the status header with the phase markers
#12
1 file
+35
-9
Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.
| @@ -1,18 +1,28 @@ | ||
| 1 | 1 | # Webmail UI — Implementation Plan |
| 2 | 2 | |
| 3 | > **Status:** Phases 0–6 done + Phase 9 built & locally verified over HTTPS — full read+write client (login, 3-pane inbox, flags/move/delete, compose/reply/forward) now ships as a single binary that serves the embedded SPA over its own TLS. Prod deploy to mail.stacksjs.com is the one remaining explicit step (runbook in Phase 9). Next: trigger the deploy, or Phase 7 (search/polish). | |
| 3 | > **Status:** Phases 1, 2, 3, 5 and 6 are ✅ DONE and Phase 9 is �� built and | |
| 4 | > locally verified over HTTPS — the read+write client (login, 3-pane inbox, | |
| 5 | > flags/move/delete, compose/reply/forward) ships as a single binary serving the | |
| 6 | > embedded SPA over its own TLS. Prod deploy to mail.stacksjs.com is the one | |
| 7 | > remaining explicit step (runbook in Phase 9). Phases 0, 4, 7, 8 and 10 carry no | |
| 8 | > completion marker — Phase 4's reading UI is covered by the shipped 3-pane | |
| 9 | > client, so its marker lags the code. Next: trigger the deploy, or Phase 7 | |
| 10 | > (search/polish). | |
| 4 | 11 | > **Owner:** TBD |
| 5 | > **Last updated:** 2026-06-01 | |
| 12 | > **Last updated:** 2026-10-05 | |
| 6 | 13 | > **Estimated effort:** ~8–12 weeks (multi-phase, see [Phases](#phases)) |
| 7 | 14 | |
| 8 | 15 | This document is the single source of truth for building a browser-based webmail |
| 9 | client for this mail server. It captures (1) the **real current state** of the | |
| 10 | codebase, (2) the **target architecture**, and (3) a **phased plan** broken into | |
| 11 | shippable increments. | |
| 16 | client for this mail server. It captures (1) the **state the plan started from**, | |
| 17 | (2) the **target architecture**, and (3) a **phased plan** broken into shippable | |
| 18 | increments. | |
| 12 | 19 | |
| 13 | Read [Current State](#current-state) first — it corrects the common assumption | |
| 14 | that "there is no UI yet." There is a lot of *scaffolding and design work*, but | |
| 15 | **none of it is live and none of it serves real mail.** | |
| 20 | [Current State](#current-state) is an inventory taken on 2026-05-29, before the | |
| 21 | backend was wired up — read it as history, not as a description of the code | |
| 22 | today. At that point there was scaffolding and design work but no HTTP listener | |
| 23 | and no real mail. The per-phase markers under [Phases](#phases) are the current | |
| 24 | record: the client serves real mail over its own TLS, and what remains is | |
| 25 | deploying it to production. | |
| 16 | 26 | |
| 17 | 27 | --- |
| 18 | 28 | |
| @@ -43,11 +53,25 @@ IMAP/SMTP. | ||
| 43 | 53 | delivery queue / SES path. |
| 44 | 54 | - [ ] Works on desktop + responsive on mobile. |
| 45 | 55 | |
| 56 | > These are the v1 roll-up, deliberately still unticked. The phases that cover | |
| 57 | > them are marked done, but nothing has been verified end-to-end against a | |
| 58 | > deployed instance — tick these off the deploy, not off the phase markers. | |
| 59 | ||
| 46 | 60 | --- |
| 47 | 61 | |
| 48 | 62 | ## Current State |
| 49 | 63 | |
| 50 | > Evidence-based inventory as of 2026-05-29. Legend: | |
| 64 | > ⚠️ **Historical snapshot — 2026-05-29, superseded.** This records the state | |
| 65 | > before Phases 1–3, 5, 6 and 9 landed. It is kept for the design rationale it | |
| 66 | > explains, not as a description of the code today. | |
| 67 | > | |
| 68 | > Known superseded: `webmail.zig` is no longer "never imported anywhere" | |
| 69 | > (`main.zig` imports `api/webmail_http.zig` and starts it when `enable_webmail` | |
| 70 | > or `enable_auth` is set), and "no HTTP/HTTPS port is opened at all" no longer | |
| 71 | > holds. Still accurate: `crosswind` is not installed — | |
| 72 | > `packages/webmail/package.json` carries only `bun-plugin-stx`. | |
| 73 | > | |
| 74 | > Legend: | |
| 51 | 75 | > **�� Live** = wired in and working · **�� Code-complete but dead** = compiles |
| 52 | 76 | > but never invoked · **�� Mock** = returns fake/in-memory data · **⚪ Mockup** = |
| 53 | 77 | > static design reference · **�� Missing** = does not exist. |
| @@ -579,3 +603,5 @@ deferred deploy above. | ||
| 579 | 603 | |
| 580 | 604 | ## Changelog |
| 581 | 605 | - 2026-05-29 — Initial plan + current-state inventory. |
| 606 | - 2026-10-05 — Reconciled the status header with the per-phase markers; flagged | |
| 607 | the Current State inventory as a superseded 2026-05-29 snapshot. | |