Files
mangaBookmark/backend/.impeccable/critique/2026-07-26T17-08-41Z__backend-templates-app-html.md
sulthan a587b16423 Web UI: Updated tab, inline errors, mobile card fixes (#3)
Third pass on the password-gated web UI, on top of #1 and #2.

## Updated tab
New `?tab=new` tab listing only series with an unread published chapter, plus per-tab empty states for Favourites and Updated. Covered by `TestUIListNewTab`.

## Inline error feedback
htmx does not swap on a non-2xx response, so a failed favourite/chapter/delete looked like an ignored tap. Errors now render in a `.error-inline` slot on the card and clear after 5s. The chapter-edit form and delete-confirm row also close each other — only one per-card panel open at a time.

## Mobile fixes (P0)
`.chapter-form` held three children on one unwrapped flex row, pushing Save off screen: **97px of page overflow at 390px, 127px at 360px**. That broke correcting a chapter number on the primary device class.

- `.chapter-form` and `.confirm-row` wrap; hint and prompt take their own full-width row
- `.chapter-form input` uses `flex: 1 1 0; min-width: 0` — with `flex: 1` (basis auto) a number input holds its ~20ch intrinsic width and refused to shrink, which pushed Save to a third row
- `white-space: nowrap` on the confirm prompt alone reintroduced 26px of overflow; the full-width row is what actually fixes it

Verified live: `document.body.scrollWidth <= window.innerWidth` with every chapter-form and confirm-row open, at 360/390/768/1280, light and dark.

## Icons
`☆ ✎ 🗑 ▶` replaced with hand-authored inline SVG on `currentColor` — the emoji font rendered each in a different face, weight, and colour, ignoring the card's own type and colour system. `.icon.on` / `.icon.danger` / `.primary` keep driving colour. No icon font or library added.

## No-cover empty state
Series whose source site gave no `og:image` render a title-initial monogram (`Bookmark.Initial()`) instead of a blank `--surface-2` rectangle that read as a cover still loading. Shared between the card cover and the Continue-reading strip.

## Verification
- `go build ./... && go test ./...` — pass
- Live interaction run: favourite toggle round-trips, chapter save 210.5→211, All/Updated/Favourites swap, delete-confirm removes the card, no console errors

Reviewed-on: #3
Co-authored-by: Sulthan Zaki <sultankiki05@gmail.com>
Co-committed-by: Sulthan Zaki <sultankiki05@gmail.com>
2026-07-27 00:42:19 +07:00

3.7 KiB

target, total_score, max_score, na_heuristics, p0_count, p1_count, timestamp, slug
target total_score max_score na_heuristics p0_count p1_count timestamp slug
backend/templates (web UI) 26 40 1 0 2026-07-26T17-08-41Z backend-templates-app-html

Method: dual-agent (A: a67675dd3039e8156 · B: aa64e48aafb9db799), regression independently re-verified live

Design Health Score

# Heuristic Score Key Issue
1 Visibility of System Status 3 htmx dimming/error-inline verified live and working
2 Match System/Real World 4 "Continue reading," "Updated," site names all read naturally
3 User Control and Freedom 3 Cancel works; no undo after delete (acceptable, single-user tool)
4 Consistency and Standards 2 Disclosure-toggle pattern consistent; bare-emoji icons vs. tuned typography mismatch
5 Error Prevention 2 Chapter input still has no max, hint is prose-only
6 Recognition Rather Than Recall 2 The hint meant to aid recall is what causes the overflow bug
7 Flexibility and Efficiency 3 Search, tabs, direct Continue link present
8 Aesthetic/Minimalist Design 2 Clean tokens undercut by a live horizontal-scroll bug and flat no-cover placeholder
9 Error Recovery 3 "No connection - try again" verified firing on network abort
10 Help and Documentation 2 No help affordance beyond hover tooltips

Total: 26/40 - Acceptable band. Trend: 21 -> 26.

Design Specificity Verdict

Real measured progress: site-tinted badges and --new ribbon hue verified via computed contrast (5.3-9.0:1), genuine product-specific signal. Working against it: bare OS-emoji icons (star/pencil/trash/play) clash with tuned typography; no-cover placeholder still a flat contentless box.

Deterministic scan: CLI 0 findings (clean). Live detector: overused-font/single-font expected (deliberate single-typeface Operate surface). flat-type-hierarchy already accepted. monotonous-spacing and text-occlusion confirmed FALSE POSITIVES (detector's own accumulated debug overlays). edge-flush-cards on Continue-reading strip likely false positive (deliberate scrollable carousel with edge-bleed). ai-color-palette flagging new site-tint hues - plausible false positive (contrast-verified, restrained) but unconfirmed.

Priority Issues

P0 - Chapter-edit form causes 97-127px horizontal page overflow on mobile, Save button pushed off-screen. .chapter-form has display:flex with no wrap, now holds 3 children (hint/input/button) in one unwrapped row. Confirmed live at 390px and 360px. Regression from the harden command - hint text was verified to render but never checked for container overflow at mobile width. Fix: flex-wrap:wrap + .hint{flex:1 0 100%}, same pattern already used in .actions/.confirm-row. P3 - Icon-glyph inconsistency: bare emoji vs tuned type/color system. P3 - No-cover placeholder reads as stuck loading skeleton, not designed empty state. P3 - .confirm-row text wraps awkwardly ("Remove/this?") - cosmetic only, no overflow.

Persona Red Flags

Casey (mobile, primary): chapter-form overflow directly hits her core task (one-handed chapter correction), unexpected sideways scroll needed. Sam (accessibility): well-served overall, but no custom :focus-visible on icon/action buttons.

Minor Observations

Continue-reading strip still not tab-scoped. updated_at ordering verified live via actual favourite-toggle round-trip. ai-color-palette on site tints worth a second glance, unconfirmed either way.

Questions to Consider

  1. Did the harden command's verification ever check mobile viewport width with the hint text present, or only that it rendered?
  2. Is the emoji-icon look deliberate "undesigned" for a single-user tool, or just expedient?
  3. Is a missing og:image common enough in practice to deserve real empty-state design?