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 + shipped components/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