feat: DORA dashboard -- cross-project board rollup #20
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/pal-e-docs-app!20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "19-feat-dora-dashboard-cross-project-board"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
/dashboardroute providing a cross-project DORA-style overview of all boardsChanges
src/lib/api.ts: ExportCOLUMNSconstant for reuse; extendBoardIteminterface withcreated_atandupdated_atfields (already returned by pal-e-docs API)src/routes/dashboard/+page.server.ts: New server load function that fetches all boards and their items in parallel, computes global column counts, identifies needs-attention items (needs_approval column + in_progress 3+ days), and builds per-project summariessrc/routes/dashboard/+page.svelte: New dashboard page with global distribution bar, needs-attention section with accent border, and responsive per-project card grid (1/2/3 columns). Consistent dark theme and column colors matching the board detail pagesrc/routes/+layout.svelte: Add "Dashboard" nav link between logo and NotesTest Plan
/dashboardand verify global distribution bar renders with correct column colorsneeds_approvaland items stuck inin_progressfor 3+ days/boards/{slug}npm run buildpasses,npm run checkpasses (0 errors)Review Checklist
Related
plan-2026-03-13-pal-e-frontend-- DORA dashboard featureReview: PASS
4 files changed, 355 additions, 1 deletion.
Checks
npm run build-- passesnpm run check-- 0 errors (1 pre-existing warning in search page)npx eslinton changed files -- cleanAssessment
Promise.allfor parallel board item fetches -- good performanceneeds_approvalitems andin_progressitems stuck 3+ daysBoardItemtype extended withcreated_at/updated_at-- matches API schema, backwards compatibleCOLUMNSexport is additive (non-breaking change)Nit (non-blocking)
COLUMN_COLORSduplicated between board detail and dashboard pages. Issue spec acknowledges this: "constants consolidation is a separate epilogue item."No fixes needed. Ready for merge.
PR #20 Review
BLOCKERS
None. The implementation is clean, correct, and well-scoped.
NITS
COLUMN_COLORS duplication (3 files) --
COLUMN_COLORSis now copy-pasted insrc/routes/dashboard/+page.svelte,src/routes/boards/[slug]/+page.svelte, andsrc/routes/projects/[slug]/+page.svelte. Same values in all three. Should be extracted to$lib/colors.tsalongside the existingtypeColorexport. Growing tech debt.columnDisplayName()also duplicated -- Thecol.replace(/_/g, ' ')helper appears in both the dashboard and board detail pages. Another candidate for$lib/colors.tsor a new$lib/columns.tsutility.updated_atis a loose proxy for "time in column" -- The stuck detection usesitem.updated_atto computedaysInColumn, butupdated_atreflects the last modification of any kind (title, label, position), not when the item entered its current column. An item that was relabeled yesterday while stuck inin_progressfor a week would show as "1 day in column." This is an API limitation, not a code bug, but worth documenting as a known imprecision. If the pal-e-docs API ever adds acolumn_changed_atfield, this should be swapped in.Inline
border-leftvs Tailwindborderclass -- The needs-attention items useclass="... border border-[#1a1a2e] ..."combined withstyle="border-left: 3px solid #e94560;". This works because inline styles override, but it is fragile -- the Tailwind class sets all four borders, then the inline style overrides only left. A cleaner approach would beborder-l-[3px] border-l-[#e94560]in Tailwind or dropping the Tailwindbordershorthand.SOP COMPLIANCE
19-feat-dora-dashboard-cross-project-boardreferences #19)plan-2026-03-13-pal-e-frontend)Closes #19presentCODE QUALITY NOTES
listBoards()call, then parallelPromise.all()for all board items. No N+1 problem.COLUMNScorrectly re-exported asconstfromapi.tsand spread into the return value to avoid readonly array issues.sm:grid-cols-2 lg:grid-cols-3) handles mobile/tablet/desktop correctly.BoardItemtype extension (created_at,updated_at) is non-breaking -- fields already returned by the API.VERDICT: APPROVED