- Section header (h2 + description) and section blocks as h3; unified
block padding and title size
- Global settings forms use label-left / control-right rows, stacked
below md; control width fixed by type (number short, text/select
medium, wide/textarea full)
- Per-block SaveBar pinned at the block end with dirty hint; naming
template saves moved from the header to the bar
- Console shell uses overflow-x-clip so the sticky header and sticky
section nav actually stick; anchor jumps re-align while async content
loads and land below the header
- Section content uses a single minmax(0,1fr) column so wide tables
scroll inside their card instead of widening the page
- useSettings fills missing keys from DEFAULT_SETTINGS so an older
backend no longer crashes the metadata section
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- /login: setup/login/TOTP states driven by server error codes, fixed-height error slot
- console layout: GET /auth/session gate, redirect to /login, account popover (change password, logout)
- home: six dashboard sections with SSE-driven refresh, automation switch and read-only reconcile toggle
- settings tabs: downloaders, media servers, library roots, path mappings, site credentials,
API keys (one-time plaintext), Pi upstream, cache/organize/retention/budget, automation
- engine: runs list (status/name filters, cursor paging, stats tiles), run detail (step timeline,
json payloads, signals, cancel)
- audit: filterable list with detail sheet
- vite: allow repo root in server.fs so deno-installed deps under node_modules/.deno load in dev
Co-Authored-By: Claude Opus 5.5 <[email protected]>