Skip to content

fix(mobile): structural refactor — sheets, drill-in, and column peek - #64

Merged
praxagent merged 2 commits into
mainfrom
wip-mobile-fix
Aug 7, 2026
Merged

fix(mobile): structural refactor — sheets, drill-in, and column peek#64
praxagent merged 2 commits into
mainfrom
wip-mobile-fix

Conversation

@praxagent

Copy link
Copy Markdown
Owner

Two commits: yesterday's spaces fix (already live on the box as a built bundle — this PR brings its source to main, closing a drift where a main rebuild would have regressed the deployed UI) and today's structural mobile refactor.

The diagnosis (from a 12-panel screenshot survey at 390×844)

Desktop layouts were rendering as-is on a phone. Three earlier spot-fix passes (overflow, keyboard, one panel's chat) never touched the shapes:

  • Stacked companion chats (terminal/browser/desktop/files): each tool got ~45% of the screen with its chat inline below — the terminal showed three lines of shell above a half-screen empty chat.
  • A hidden third layer: the workspace itself mounted a second always-on 35svh chat band under Files/Library.
  • Master-detail crush (files/library): a fixed w-72 pane beside flex-1 left the detail a text-wrapped sliver.
  • Board: cards clipped mid-word at the viewport edge with no affordance.

The fixes

  • BrowserChatSidebar (shared by all four panels) is now the bottom sheet on mobile — the SpacePage pattern with its svh/z-index/keyboard lessons carried over — and byte-for-byte the old resizable sidebar on desktop. Chat defaults closed on a phone.
  • Workspace-level chat band hidden on mobile; desktop keeps its column.
  • Files + Library are drill-in: the list is the screen until something opens, then the detail takes over with a back affordance. Selection doubles as navigation state — no new state.
  • Board columns ~85vw + scroll-snap so the next column peeks.

Evidence

Before/after screenshots for every change; drill-in interaction-tested (list → file → back); sheet measured (390×506 fixed box). e2e/mobile-survey.spec.ts added as the permanent harness — screenshots found what grep missed three times. tsc clean, 41/41 unit tests.

Retracted from scope: observability/memory render nothing at ANY viewport in the dev env — a desktop control shot proved it's not a mobile bug. Filed separately.

Deployed: bundle index-Cn1dnWPh.js already live and verified on the box.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Pm9fWeUM3FQ4EH6bgX8YdQ

Two reports from a phone, one root cause each.

The Kanban board was overflow-x-auto overflow-y-hidden. On desktop that is
right — columns are full-height and scroll internally. On mobile a column is
taller than the screen, so everything below the fold was unreachable: you could
scroll sideways but not down. Below md the board now scrolls vertically and
columns size to their content, with the inner per-column scroll kept for md+
so mobile does not get a nested scroll region that traps the gesture.

The space chat was a flex sibling that split the screen. Competing with the tab
content for height on a tall board, it was pushed past the bottom edge and
simply never appeared when toggled. On mobile it is now a fixed bottom sheet at
z-40, above the tab bar at z-30 — 'over content' is the point — with
pb-mobile-nav so the composer clears the bar and gives the space back when the
keyboard opens. Desktop keeps the resizable in-flow column unchanged.
Screenshot survey of all 12 workspace panels at 390x844 found the pattern
three earlier spot-fix passes missed: desktop layouts rendering as-is on a
phone. Two shapes, five panels:

STACKED COMPANION CHATS (terminal/browser/desktop/files): every tool surface
got ~45% of the screen with its chat stacked inline — the terminal showed
three lines of shell above a half-screen empty chat. BrowserChatSidebar (the
shared component all four use) is now the bottom SHEET on mobile — the exact
pattern SpacePage already proved, svh/z-index/keyboard lessons carried over —
and byte-for-byte the old resizable sidebar on desktop. Chat defaults CLOSED
on a phone: opening covers 60% of the tool, so it is a deliberate tap, not
the landing state. The workspace-level 35svh chat band for files/library
(a third stacked zone) is hidden on mobile; desktop keeps the in-flow column.

MASTER-DETAIL CRUSH (files/library): a fixed w-72 pane beside a flex-1 pane
left the detail a text-wrapped sliver at 390px. Both are now drill-in on
mobile — the list IS the screen until something is opened, then the detail
takes over with a back affordance. Selection doubles as navigation state; no
new state, desktop untouched.

BOARD: columns are ~85vw with scroll-snap so the next column PEEKS at the
edge instead of clipping cards mid-word with no affordance.

e2e/mobile-survey.spec.ts is the permanent harness (per-panel screenshots +
an overflow assertion; needs the local dev stack). Verified after: terminal
owns the full viewport with the sheet opening over it (measured 390x506 box),
files/library lists full-width with working back round-trip, board peek
visible. tsc clean, 41/41 unit tests.

Retracted from scope after a desktop control shot: observability/memory
render nothing at ANY viewport in the dev env — not a mobile bug, filed
separately.
@praxagent
praxagent merged commit 6ec8558 into main Aug 7, 2026
1 check passed
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