Plan Site UX at Scale
Future UX improvements for the plan site to handle large projects with many work items, specs, bugs, and decisions.
Future UX improvements for the plan site to handle large projects with many work items, specs, bugs, and decisions.
The current plan site works well for small projects but will hit usability pain points as the number of entities grows. Specific issues:
{% backlog %} rune supports field:value filtering, but only inside page content. There's no way to narrow the sidebar itself.This spec captures a set of improvements to address these, ordered by impact. All features described here build on the infrastructure established by SPEC-014 (HTML adapter + client behaviors).
SPEC-014 — Plan Site via HTML Adapter. That work provides @refrakt-md/behaviors integration and renderFullPage(), which the features below depend on for client-side interactivity.
Priority: High
Replace the flat entity list with status-grouped, collapsible sections within each entity type:
Work Items ▸ In Progress (3) ▸ Ready (7) ▾ Review (2) WORK-031 Migrate renderer WORK-028 Add highlight support ▸ Done (24) ▸ Draft (5)
Behavior:
done, fixed, accepted, complete, superseded, deprecated, wontfix, duplicate) are collapsed by defaultin-progress, ready, review, confirmed) are expanded by defaultlocalStorage so it survives page navigationStatus ordering within each type (mirrors workflow progression):
in-progress → review → ready → blocked → draft → pending → donein-progress → confirmed → reported → fixed → wontfix → duplicatereview → draft → accepted → superseded → deprecatedproposed → accepted → superseded → deprecatedactive → planning → completeActive/in-progress statuses appear first so the most actionable items are always visible at the top.
Implementation: A new sidebar-collapse behavior in @refrakt-md/behaviors or as a plan-specific behavior. The server renders the full grouped structure; the behavior adds toggle controls and manages collapse state.
Priority: High
A text input at the top of the sidebar that filters the visible items in real-time:
[🔍 status:ready priority:high ]
Behavior:
WORK-012 Implement authentication)field:value filter syntax for precise filtering (e.g., status:ready, priority:high, tags:css){% backlog %} rune)Escape/ keyboard shortcut focuses the filter input from anywhere on the pageData requirements: Navigation items need additional data-* attributes beyond the current id, status, and label:
data-tags — comma-separated tag listdata-priority — priority value (work items)data-severity — severity value (bugs)data-assignee — assignee valuedata-milestone — milestone valuedata-complexity — complexity value (work items)These are added during buildNavRegion() (from SPEC-014) so no pipeline changes are needed.
Implementation: A small client-side behavior (~2KB). All data is already present in the DOM — no server round-trip needed. Works in conjunction with collapsible groups (filtering expands matching groups automatically).
Priority: Medium
Improve the auto-generated dashboard to give better at-a-glance project health:
Progress summary (top of dashboard):
35 work items: 12 done · 3 in progress · 7 ready · 2 blocked · 11 draft 8 bugs: 2 fixed · 1 in progress · 3 confirmed · 2 reported
A simple text-based summary — no charts or visualizations. Counts per status, color-coded with the existing status palette.
Blocked items callout: A dedicated section with red/warning styling that surfaces all items with status: blocked. These need attention first and shouldn't be buried in the general backlog. Each blocked item shows its title, ID, and — if detectable from content — what it's blocked on.
Per-milestone scoping: The dashboard groups work items and bugs by milestone when multiple milestones exist:
v0.5.0 (active) — 6 of 14 done ▸ In Progress (2) ▸ Ready (4) ▸ Done (6) v0.6.0 (planning) — 0 of 8 done ▸ Ready (3) ▸ Draft (5) Unassigned — 13 items ▸ ...
When only one milestone exists (or none), the current flat layout is used.
Recent activity: A section showing items whose status changed recently, detected via file modification time (mtime). Shows the last 10 changes with their old → new status transition if detectable.
Priority: Medium
Auto-generated pages that group entities by tag, assignee, or milestone — accessible from a "Views" section in the sidebar:
Views By tag: runes (8) · css (5) · pipeline (3) By assignee: unassigned (12) · claude (8) By milestone: v0.5 (9) · v0.6 (4)
Each view page uses the existing {% backlog %} rune with appropriate filters. Pages are generated during the aggregate pipeline phase (same as the dashboard), so they require no manual authoring.
View pages are generated only when useful:
Priority: Low
Keyboard shortcuts for fast navigation in the plan site:
| Key | Action |
|---|---|
/ | Focus the search/filter bar |
Escape | Clear filter / unfocus search bar |
j / k | Move to next / previous item in sidebar |
Enter | Navigate to the focused item |
[ / ] | Jump to previous / next entity type group |
o | Toggle collapse of the focused group |
Implementation: A keyboard-nav behavior. The sidebar items get tabindex attributes and the behavior manages a virtual focus cursor. Visual focus indicator matches the existing active link style.
Priority: Low
Work items and bugs reference each other by ID in their content. Surface these relationships explicitly:
On each entity page, a "Relationships" section (auto-injected, not authored):
Blocked by: WORK-003 (in-progress), WORK-007 (done) Blocks: WORK-012, WORK-015 Related: SPEC-005, ADR-003
Each reference is a live link. Status badges are shown inline so you can see at a glance whether blockers are resolved.
Detection: During the register pipeline phase, scan entity content for ID references matching (WORK|SPEC|BUG|ADR)-\d+ patterns. Build a bidirectional relationship index in the EntityRegistry. During postProcess, inject the relationships section into each entity page.
In the sidebar (optional, low priority): Blocked items could show a small indicator (e.g., a red dot) when their blockers are unresolved.
These features are independent and can be implemented in any order, but the suggested sequencing maximizes value:
Phase 1 (immediate post-SPEC-014):
Phase 2:
Phase 3:
In scope: UX design and behavior for the plan site rendered by plan serve and plan build.
Out of scope: