Skip to content

feat(admin): loading skeletons + consistent empty states (v26.05.11)#22

Merged
ancongui merged 1 commit into
mainfrom
feat/admin-view-polish
May 31, 2026
Merged

feat(admin): loading skeletons + consistent empty states (v26.05.11)#22
ancongui merged 1 commit into
mainfrom
feat/admin-view-polish

Conversation

@ancongui
Copy link
Copy Markdown
Contributor

Summary

A cross-cutting polish pass over every admin view.

  • Skeleton loaders — while a view fetches data it shows a shimmer skeleton that mirrors the eventual layout (stat cards + table/cards) instead of a bare spinner, so the page doesn't jump and loads feel faster. New reusable components/skeleton.js (pageSkeleton, skeletonStatCards, skeletonTable, skeletonCard, skeletonLine); theme-aware sheen token (dark + light); honours prefers-reduced-motion.
  • Consistent empty / error states — "no data" and "failed to load" panels are now a single iconographic component (components/empty-state.jscreateEmptyState / createEmptyStateCard) with a fitting icon, a clear title and a helpful sentence, replacing the ad-hoc title+text blocks. Errors use a danger-tinted alert icon and preserve the error message.

How it was done

Reference transformation applied by hand to scheduled.js, then fanned out to the remaining 16 views via a workflow (one agent per file, editing only its own view). A second adversarial review workflow (one reviewer + verifier per view, 17 views) checked the diffs for behaviour regressions and returned 0 findings.

Verification

  • Every one of the 17 views was navigated live: header renders, 0 leftover skeletons after load, body present, and 0 console errors across the whole sweep.
  • Skeleton confirmed mid-fetch (structural + screenshot); iconographic empty states confirmed (e.g. Transactions "No sagas registered" / "No TCC transactions registered").
  • Behaviour preserved: data handling, SSE/chart lifecycle, cleanup() returns, polling, filtering untouched; secondary inline spinners (metric/bean-graph detail panels) intentionally kept.

Gates

ruff ✓ · ruff format --check ✓ · mypy --strict (577 files) ✓ · pytest tests/admin → 108 passed. JS/CSS-only (no Python changes).

Version

Bumps to v26.05.11 (pyproject 26.5.11, __version__, uv.lock). CHANGELOG updated.

Follow-up coming next: responsive/fullscreen cards (bean-graph & log viewer are fixed-height) + loggers/bean-graph improvements.

… (v26.05.11)

A cross-cutting polish pass over every admin view.

- Skeleton loaders: while a view fetches data it shows a shimmer skeleton
  mirroring the eventual layout (stat cards + table/cards) instead of a bare
  spinner. New reusable components/skeleton.js (pageSkeleton, skeletonStatCards,
  skeletonTable, skeletonCard, skeletonLine); theme-aware sheen token; honours
  prefers-reduced-motion.
- Consistent empty/error states: new components/empty-state.js
  (createEmptyState / createEmptyStateCard) with a fitting icon, clear title and
  helpful text, replacing ad-hoc title+text blocks. Errors use a danger-tinted
  alert icon and keep the error message.
- Applied across all 17 views (reference applied by hand, the rest via a
  fan-out + adversarial review workflow that returned 0 regressions).

Behaviour is otherwise unchanged: data handling, SSE/chart lifecycle and
cleanup() are untouched; secondary inline spinners (metric/bean-graph detail
panels) are intentionally kept. Verified live across every view (headers render,
0 leftover skeletons after load, 0 console errors). Gates green: ruff, format,
mypy --strict (577 files); admin tests pass.
@ancongui ancongui merged commit 45ba27c into main May 31, 2026
5 checks passed
@ancongui ancongui deleted the feat/admin-view-polish branch May 31, 2026 19:20
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.

1 participant