MOTIR-415Done
6.12.7 The public roadmap view — status tracking (submitted → planned → in_progress → done)
Estimate: 55m · Depends on: 6.12.4
Build the public ROADMAP per the 6.12.1 design, over the 6.12.4 public projection. The status-grouped, vote-counted public view of a project’s public-facing items — the Canny / Productboard / Featurebase public-roadmap shape.
- Status grouping: columns by a public-facing status mapping — submitted → planned → in progress → done — derived from the project’s workflow statuses (decide the mapping from the real status set to these four public buckets; a status not meant to be public — e.g. canceled / triage — is NOT shown). Each card shows the request title + kind + vote count + a link to the public request detail (6.12.6 upvote/comment).
- The read goes through the public projection (6.12.4) so no internal field leaks; it is paginated / lazy per column (the at-scale rule — a busy public roadmap is unbounded). As the project admin advances an item’s status (via the normal internal flow), the public roadmap reflects the new bucket.
- The view UI uses ONLY shipped
components/ui/*+--el-*/[data-display-style]tokens, renders the empty-roadmap + loading + error states, and uses the palette for the per-status tones (not grey-only).
Stay 4-layer: the route parses + calls one service method returning the public roadmap projection (grouped + counted); no raw Prisma in the route.
Acceptance criteria
- The public roadmap renders status-grouped columns (submitted → planned → in progress → done) of public-facing items, each with its vote count + a link to the request, per the 6.12.1 design; non-public statuses (canceled / triage) are not shown.
- The read uses the 6.12.4 public projection (no internal field leaks) and is paginated / lazy; advancing an item’s status moves it to the right bucket.
- Only
--el-*+[data-display-style]tokens + shippedcomponents/ui/*; empty / loading / error states render; per-status tones use the palette (AA-safe). - 4-layer respected (the roadmap projection in the service/repository, no raw Prisma in the route).
Context refs
- 6.12.4 — the public projection the roadmap read derives from + the design (6.12.1) it renders.
motir-core/lib/workflows/defaultWorkflow.ts+ the project status set — the source statuses mapped to the four public buckets.- Canny roadmap (https://canny.io/use-cases/feature-request-management) + Productboard portal (https://support.productboard.com/hc/en-us/articles/360056315454) — the status-column + vote-count public roadmap mirrored.
motir-core/components/ui/*+app/globals.css;motir-core/CLAUDE.md§ colour + shape tokens.