Fix #50: empty releases centered, no repeated CTA #61

Merged
crueber merged 1 commit from fix/issue-50 into main 2026-09-04 22:17:48 +00:00
Owner

Empty releases page was three competing CTAs (toolbar button + centered callout action + sidebar callout action) next to a sidebar with nothing to show.

Change (web/src/pages/Releases.jsx only):

  • When the release list is empty: no Latest sidebar, callout in a centered max-w-xl composition, exactly ONE New release CTA (the callout router-link action survives; toolbar button and sidebar go away with their containers; refresh stays right-aligned).
  • Non-empty state unchanged: toolbar CTA + list + Latest panel from #35, including the drafts-only case where the sidebar still shows its compact Empty.
  • Dark + light via existing classes; action stays a keyboard-focusable router link with :focus-visible ring (no new tab stops — fewer, actually).

Doc: docs/go/12_web_ui.md decisions appended (law 12).

Verification:

  • node --test web/test/unit/*.test.js: 245 pass, 0 fail.
  • vite build: clean.
  • Real Chromium via CDP against scratch server (seeded repo demo/hello): empty dark + light = 1 CTA, no aside, centered; non-empty dark + light + wide = toolbar CTA + 1 card + Latest panel; zero page exceptions/console.errors (the two Log-domain 404s on the empty page are the pre-existing GET .../releases/latest 404-means-none fetch, unchanged).
Empty releases page was three competing CTAs (toolbar button + centered callout action + sidebar callout action) next to a sidebar with nothing to show. Change (web/src/pages/Releases.jsx only): - When the release list is empty: no Latest sidebar, callout in a centered max-w-xl composition, exactly ONE New release CTA (the callout router-link action survives; toolbar button and sidebar go away with their containers; refresh stays right-aligned). - Non-empty state unchanged: toolbar CTA + list + Latest panel from #35, including the drafts-only case where the sidebar still shows its compact Empty. - Dark + light via existing classes; action stays a keyboard-focusable router link with :focus-visible ring (no new tab stops — fewer, actually). Doc: docs/go/12_web_ui.md decisions appended (law 12). Verification: - node --test web/test/unit/*.test.js: 245 pass, 0 fail. - vite build: clean. - Real Chromium via CDP against scratch server (seeded repo demo/hello): empty dark + light = 1 CTA, no aside, centered; non-empty dark + light + wide = toolbar CTA + 1 card + Latest panel; zero page exceptions/console.errors (the two Log-domain 404s on the empty page are the pre-existing GET .../releases/latest 404-means-none fetch, unchanged).
Sidebar hidden when the release list is empty; toolbar New release button
renders only in the non-empty branch, so the Empty callout action is the
one New release CTA. Non-empty state (list + Latest panel) unchanged.
Doc: 12_web_ui.md decisions.
Sign in to join this conversation.
No description provided.