Skip to content

feat(dashboard): port Overview/Cache/Tasks/Runs pages to Solid#27

Merged
Exelord merged 1 commit into
mainfrom
claude/dashboard-port-pages
May 12, 2026
Merged

feat(dashboard): port Overview/Cache/Tasks/Runs pages to Solid#27
Exelord merged 1 commit into
mainfrom
claude/dashboard-port-pages

Conversation

@Exelord
Copy link
Copy Markdown
Member

@Exelord Exelord commented May 12, 2026

PR 8/10 of the dashboard track. Replaces the legacy static-HTML page
modules (still living in packages/run/src/dashboard-ui/ until PR #28)
with proper Solid components.

What's in

  • Routing: @solidjs/router <HashRouter> — URLs stay shaped
    like the legacy app (#/overview, #/runs, #/runs/:id) so
    bookmarks survive and the bundle works as a flat static asset
    without SPA-fallback server config.
  • src/api.ts — response types (OverviewResponse,
    RunSummary, SlowestTask, CacheEntryRow) + fetchJson<T>().
  • src/format.tsformatAge / formatPercent / shortHash /
    shortRunId added on top of the existing formatBytes /
    formatDurationMs / formatRelativeTime. All exhaustively tested
    (24 assertions across 7 describes).
  • Shared chrome via a <Shell> root component (header + nav +
    footer); pages render into it through the router outlet
    (props.children).
  • <AsyncView resource={r}> — small primitive that converts a
    Solid createResource into uniform loading / error / data states,
    so every page reads the same way.
  • Card / Empty primitives for the recurring summary-card and
    empty-state shapes.

What's NOT in

Bundle size

dist/index.html                  0.44 kB │ gzip:  0.30 kB
dist/assets/index-*.css          5.46 kB │ gzip:  1.43 kB
dist/assets/index-*.js          45.83 kB │ gzip: 15.95 kB

Test plan

  • bun run format clean
  • bun run lint clean (oxlint + tsgolint)
  • bun test packages/*/src/ apps/*/src/ — 276 pass / 0 fail
  • bun x vite build succeeds, 35 modules transformed
  • Manual smoke test (loads against a live vzn dashboard server)
    — punted until PR feat(dashboard): serve apps/dashboard/dist; remove legacy dashboard-ui/ #28 wires the two together; the dev proxy
    to :4280 works against the legacy server already.

Generated by Claude Code

…ents

PR 8/10 of the dashboard track. Replaces the legacy static-HTML page
modules (still living in packages/run/src/dashboard-ui/, to be removed
in PR #28) with proper Solid components.

- @solidjs/router HashRouter — URLs stay shaped like the legacy app
  (#/overview, #/runs, #/runs/:id) and the bundle works as a flat
  static asset without SPA-fallback server config
- src/api.ts: response types (OverviewResponse, RunSummary,
  SlowestTask, CacheEntryRow) + fetchJson<T>
- src/format.ts: formatAge / formatPercent / shortHash / shortRunId
  added, with tests; pre-existing formatBytes / formatDurationMs /
  formatRelativeTime kept
- Shared chrome via a <Shell> root component; pages render into it
  via the router's outlet
- <AsyncView resource={r}> for uniform loading/error/data handling
  on top of createResource
- Card / Empty primitives for the recurring summary-card and
  empty-state shapes

Run-detail + flamegraph land in PR #29; legacy dashboard-ui/ removal
+ server-side static-serving rewrite is PR #28.

Production bundle: ~46 KB raw / 16 KB gzipped JS, 5 KB CSS.
@Exelord Exelord merged commit ce52648 into main May 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants