Split the admin surface into four bookmarkable pages with a nav row #138
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Parent
Spec #134 (admin dashboard: pages, Lane observability, poll pass log, per-Series intervention).
What to build
The owner can bookmark a part of the admin surface instead of scrolling one long page.
/adminbecomes four addresses -- Overview, Lanes, Readers, Series -- each carrying one nav row of four display-face tabs with the active tab underlined, and a right-aligned topbar cluster holding Library and Log out. The roster moves off the landing page onto its own page, keeping both of its existing actions at their current top-level addresses (renaming them for symmetry edits working templates for no gain).This ticket also lands the shared visual foundation the later pages build on, ported from the Claude Design project
BookmarkManager Web UI(969ac210-fe02-4c01-ae1b-9a271dcc779a), fileadmin.css. The three-variant sketch on branchprototype/admin-surface-122is superseded exploration -- variant B won; port from the design project, not from that branch.Foundation: one new token
--measure-wide: 1080px, admin-only, both colour branches touched together; the 760px reading measure unchanged. Section heads are mono uppercase led by a 34px patina tick, not a full-width hairline. Tables are aligned borderless columns -- one CSS grid per table, a hairline header of mono uppercase labels, hairline row rules, no vertical rules, no card backgrounds, no corners. Gutters are cell padding, never a column gap, because a gap slices the row rule into segments. Actions are right-aligned 12px ghosts hovering in the patina accent. No ember anywhere on admin: patina is the accent, danger is for lane trouble and destruction.Overview, Lanes and Series are shells here -- the Lanes page hosts the existing self-refreshing block unchanged, and the other two get their content in later tickets. Access model is untouched:
requireOwnerstays the entire model, and every new route joinsadminRoutesrather than checking inside itself, so the gate and the route list cannot drift.Acceptance criteria
GET /admin,GET /admin/lanes,GET /admin/readersandGET /admin/seriesall render, and all four are registered throughadminRoutessoAdminPatternscovers them by construction--measure-wideis defined in both colour branches and no admin style references the ember tokensgo test ./...greenBlocked by
None — can start immediately.
Verified against HEAD
030ffdc(feat: split admin surface into bookmarkable pages): all eight acceptance criteria are implemented. adminRoutes/AdminPatterns gate all four pages, navigation and active state render, Reader actions stay on their existing endpoints, only Lanes has the 30s timer, admin.css defines measure-wide in both color branches with no ember references, responsive rules stack rows, and go test ./... passes (450 tests in 10 packages). Closing as complete.