Gadfly findings on #98:
- Logout failure (4 models): the catch called setOpen(false), closing the
popover and hiding the only "Retry sign out" affordance — contradicting
its own comment. Keep the popover open on failure so the retry button
(driven by logout.isError) stays on screen.
- Public garden (2 models): the bottom-bar suppression missed /g/$token,
whose PublicGardenPage also renders a 100dvh-8rem canvas — a signed-in
viewer of a shared link got the bar overlapping it. Suppress there too.
- BottomNav base className carried text-muted, fighting the active
text-accent-strong and violating the file's own "color only in state
props" convention (3 models). Moved color entirely to the state props.
- BottomNav sections prop type was a hand-written partial copy of the
sections shape; derive `Section = (typeof sections)[number]` (2 models).
- Popover open state now resets on route change, so navigating (bottom nav
or browser back) can't strand an invisible full-screen backdrop.
- Coupled the <main> bottom clearance to BottomNav's height (both 3.5rem /
h-14, co-located with a note) and switched the template-string className
to cn().
Verified live: route-change closes the popover with no lingering backdrop.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ
The top bar was desktop-shaped — logo + Gardens/Plants/Settings + name +
Sign out crammed in one row, wrapping "Sign out" to two lines at 390px,
with no thumb-reachable navigation.
Mobile-first now:
- Slim top bar: brand (left, still the way back to /gardens) + a compact
account control (right).
- Section nav (Gardens/Plants/Settings) moves to a bottom tab bar in the
thumb zone, safe-area-aware, ≥52px targets, shown only when signed in.
- Account/sign-out is a small top-right popover (Signed in as … / Sign
out), reachable in 2 taps. Close-on-outside-tap via a backdrop button,
no document listener.
- Desktop (md:+) keeps the inline top nav; the bottom bar is md:hidden.
- The editor is a full-screen context, so it owns the bottom of the
screen — the app bottom bar hides on /gardens/$id (via useMatchRoute),
leaving no competing bars there; the editor's own mode bar arrives in
the mode-model issue.
Verified live at 390px and 1280px: bottom bar on the list, hidden in the
editor, account menu opens, desktop unchanged. tsc + vitest green.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ