Design change of the release list page #50

Closed
opened 2026-09-04 18:16:38 +00:00 by crueber · 3 comments
Owner

On the right sidebar it shouldn't repeat the same button. If no release are found, instead it should just not show that right sidebar, and center the "new release" container.

This is how it looks right now: image

On the right sidebar it shouldn't repeat the same button. If no release are found, instead it should just not show that right sidebar, and center the "new release" container. This is how it looks right now: ![image](/attachments/d547bcc8-a406-40d6-9f47-787431bc47b7)
Author
Owner

Fixed by #61 (#61): empty releases page is now one centered composition with exactly one New release CTA (the callout action; toolbar button + sidebar hidden when the list is empty). Non-empty state unchanged. Not merging - awaiting review.

Fixed by #61 (https://git.packden.us/crueber/walhub/pulls/61): empty releases page is now one centered composition with exactly one New release CTA (the callout action; toolbar button + sidebar hidden when the list is empty). Non-empty state unchanged. Not merging - awaiting review.
Author
Owner

Review of PR #61 (branch fix/issue-50, commit a61cde6) — fix for this issue (empty releases centered, no repeated CTA).

Reviewed: web/src/pages/Releases.jsx diff + docs/go/12_web_ui.md decision, verified in scratch worktree (node tests + vite build; no browser per instructions, no docker).

Findings (all non-blocking):

  • Empty branch truly hides the sidebar: the outer Show (Releases.jsx:59-61) wraps the whole grid, so no aside renders on empty. The latest hook (line 40-42) still mounts and fires one GET (404 to null, caught) but renders nothing — harmless, no fetch weirdness.
  • Exactly ONE New-release CTA on empty: toolbar button (line 71-73) and sidebar Empty+CTA (line 131-139) both live inside the when-branch; fallback (line 62-80) has only the callout action. No role gating exists in this file (base or PR) — CTA renders for all roles, server enforces; so the empty page is never CTA-less. Unchanged semantics.
  • Non-empty composition byte-identical: toolbar/list/more/aside DOM unchanged (newHref() helper returns the same string; direct ul renders the same nodes the inner Show did when non-empty). Drafts-only edge preserved: list non-empty + sidebar compact Empty (line 131-139) — sensible.
  • Refresh retained in both branches (empty: right-aligned via justify-end, line 65; non-empty: ml-auto, line 74).
  • Centered max-w composition (mx-auto max-w-xl, line 70), no new deps (imports unchanged), dark+light via shared .btn/.empty-* classes only.
  • Doc decision accurate: matches the code (sidebar unrendered, single callout CTA, refresh right-aligned, drafts-only noted, no backend/SDK change).
  • Pre-existing nits (not this PR): reportError import unused (also unused at base), initial-load flash of empty state while getPage() is undefined (same at base).

Verification: node --test web/test/unit/*.test.js — 245 pass, 0 fail; vite build — clean (108 modules, built in ~1.5s). Note: scratch worktree needed web/node_modules symlinked from the main checkout to run tests (first run failed with ERR_MODULE_NOT_FOUND solid-js; env gap only, not a code issue).

MERGE RECOMMENDATION: ready to merge.

Review of PR #61 (branch fix/issue-50, commit a61cde6) — fix for this issue (empty releases centered, no repeated CTA). Reviewed: web/src/pages/Releases.jsx diff + docs/go/12_web_ui.md decision, verified in scratch worktree (node tests + vite build; no browser per instructions, no docker). Findings (all non-blocking): - Empty branch truly hides the sidebar: the outer Show (Releases.jsx:59-61) wraps the whole grid, so no aside renders on empty. The latest hook (line 40-42) still mounts and fires one GET (404 to null, caught) but renders nothing — harmless, no fetch weirdness. - Exactly ONE New-release CTA on empty: toolbar button (line 71-73) and sidebar Empty+CTA (line 131-139) both live inside the when-branch; fallback (line 62-80) has only the callout action. No role gating exists in this file (base or PR) — CTA renders for all roles, server enforces; so the empty page is never CTA-less. Unchanged semantics. - Non-empty composition byte-identical: toolbar/list/more/aside DOM unchanged (newHref() helper returns the same string; direct ul renders the same nodes the inner Show did when non-empty). Drafts-only edge preserved: list non-empty + sidebar compact Empty (line 131-139) — sensible. - Refresh retained in both branches (empty: right-aligned via justify-end, line 65; non-empty: ml-auto, line 74). - Centered max-w composition (mx-auto max-w-xl, line 70), no new deps (imports unchanged), dark+light via shared .btn/.empty-* classes only. - Doc decision accurate: matches the code (sidebar unrendered, single callout CTA, refresh right-aligned, drafts-only noted, no backend/SDK change). - Pre-existing nits (not this PR): reportError import unused (also unused at base), initial-load flash of empty state while getPage() is undefined (same at base). Verification: node --test web/test/unit/*.test.js — 245 pass, 0 fail; vite build — clean (108 modules, built in ~1.5s). Note: scratch worktree needed web/node_modules symlinked from the main checkout to run tests (first run failed with ERR_MODULE_NOT_FOUND solid-js; env gap only, not a code issue). MERGE RECOMMENDATION: ready to merge.
Author
Owner

Fixed by PR #61 (review clean; 245/245 node tests), merged. Closing.

Fixed by PR #61 (review clean; 245/245 node tests), merged. Closing.
crueber added this to the v1 milestone 2026-09-10 22:20:52 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
crueber/walhub#50
No description provided.