Skip to content

fix(web): unify header/navbar chrome across picker + v2 pages#76

Merged
steve-krisjanovs merged 1 commit into
mainfrom
fix/web-header-navbar
Jul 1, 2026
Merged

fix(web): unify header/navbar chrome across picker + v2 pages#76
steve-krisjanovs merged 1 commit into
mainfrom
fix/web-header-navbar

Conversation

@steve-krisjanovs

Copy link
Copy Markdown
Contributor

Summary

  • Same navbar bug fixed in cordfuse/crosstalk today, applied here: the hamburger's #1c2128 background sat on a header with no background (floating-chip look), the hamburger had a redundant border, and the header wrapped to 2-3 rows on narrow phones (brand+host+page-title+live-status+version crammed into flex children with no truncation).
  • llmux had two independent hand-copies of this chrome (picker's server.ts and v2's layout.ts) that had already drifted from each other — extracted both into one shared module, src/shared/web/header.ts, so they can't drift again.
  • Header now: single non-wrapping row (brand + ellipsis-truncated page title + trailing status pinned via flex:0 0 auto), background matches the hamburger, hamburger border removed. Host name + version dropped from the masthead (both already shown in the nav drawer).

Test plan

  • npm run typecheck clean
  • npm run build (tsup) clean
  • Visual: v2 pages (account, a deliberately long-hostname case) rendered directly via the real, exported pageShell()
  • Visual: picker header verified via a snapshot built from the real headerCss()/drawerCss()/renderHeader() output (pickerPage() itself isn't exported and reads live tmux state, so it wasn't safe to execute directly for a screenshot)
  • Confirmed .stale/.error refresh-dot color states untouched

🤖 Generated with Claude Code

https://claude.ai/code/session_01Au8T9RPCb6wbgiEecQrBfZ

…h, collapse to one row

The picker (daemon/web/server.ts) and the v2 auth pages (v2/web/layout.ts)
each hand-copied their own header + #nav-toggle + drawer CSS, and had
already drifted independently. Both had the same crosstalk-family bugs:
the hamburger's #1c2128 background sat on a header with no background at
all (floating-chip look), the hamburger carried a redundant border, and
the header wrapped to multiple rows on narrow phones because it crammed
brand+host+page-title (+ live-status+version in the picker) into one or
two flex children with no truncation.

Extract the fix into one shared module — src/shared/web/header.ts
(headerCss/drawerCss/renderHeader) — so the two can't drift again:
- header now gets the SAME background+border as the hamburger button
- the hamburger's border is gone
- header collapses to a single non-wrapping row: brand + ellipsis-
  truncated page title, with any trailing status (the picker's live/
  stale/error dot) pinned at the end via flex:0 0 auto
- host name + version dropped from the masthead (both already shown in
  the nav drawer's nav-host / nav-footer) so there's nothing to truncate
  away in practice

Verified: typecheck + build clean, and visually via the real
headerCss/drawerCss/renderHeader output plus pageShell() (v2 pages render
directly; the picker's pickerPage() isn't exported and reads live tmux
state, so its header was verified via a snapshot built from the real
shared-module output). One row holds even under a deliberately long
hostname, since host is no longer in the masthead at all.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Au8T9RPCb6wbgiEecQrBfZ
@steve-krisjanovs steve-krisjanovs merged commit 32f3c3b into main Jul 1, 2026
1 check passed
@steve-krisjanovs steve-krisjanovs deleted the fix/web-header-navbar branch July 1, 2026 14:03
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