Skip to content

Mobile usability assessment: measured, not assumed - #125

Draft
kmatzen wants to merge 1 commit into
mainfrom
worktree-mobile-usability-audit
Draft

Mobile usability assessment: measured, not assumed#125
kmatzen wants to merge 1 commit into
mainfrom
worktree-mobile-usability-audit

Conversation

@kmatzen

@kmatzen kmatzen commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Findings only — no behaviour changes.

Method

Drove the app through Chromium device emulation (touch flags, DPR, device viewports) on iPhone 13 (393×664), Pixel 5, iPhone SE (320), iPhone 13 landscape (750×342) and iPad Mini portrait (768×1024), measuring every visible interactive element in the live DOM. The pixel sizes in the report are measured, not estimated. Screenshots committed under docs/mobile-audit/screens/.

Verdict

Responsive, but not touch-designed. The layout reflows correctly — no horizontal overflow at any width tested, and the drawer/sheet scaffolding exists — but the controls inside it are desktop controls at desktop density.

The findings that matter most

  • Nothing in the editor chrome meets 44×44. The NumberInput row — the control you touch most — is 296 × 18. The four toolbar buttons that are a phone user's entire navigation are 32 × 24. Viewport tools are 28 × 28, tree rows 26, their action buttons 20 × 20. Palette tiles (56 × 48) are the only pass.
  • Reparenting nodes is impossible on a phone. The tree uses HTML5 drag-and-drop, which is not generated from touch input on iOS or Android.
  • The mobile empty state is a blank screen. The "No model yet" copy lives inside NodeTreeContent, hidden behind a 32×24 icon.
  • Every input triggers iOS zoom (12–14 px), and NumberInput has no inputMode, so dimension entry opens a QWERTY keyboard.
  • The chat drawer has no close button and is 4 px misaligned (top-10 vs a 44 px h-11 toolbar).
  • Zero mobile platform integration: no env(safe-area-inset-*), no viewport-fit=cover, no dvh units, no overscroll-behavior.
  • iPad Mini portrait (768) gets the desktop layout — two sidebars squeeze the 3D viewport to ~200 px, the project name clips, and Sign In wraps out of the toolbar.
  • No mobile e2e coverage exists, so every one of these passes CI today.

Full detail, per-control measurements, file:line references and a P0/P1/P2 recommendation list in docs/mobile-audit/README.md.

🤖 Generated with Claude Code

…lows

The mobile scaffolding here is real — drawer, bottom sheet, an md: breakpoint,
an overflow menu — so it is easy to read the layout as "done". Driving it on
emulated iPhone 13 / Pixel 5 / iPhone SE / landscape / iPad Mini and measuring
every visible control in the live DOM says otherwise: the layout reflows fine
and no width overflows, but the controls inside it are still desktop controls
at desktop density.

The measurements are the point, so they are recorded rather than described.
The primary editing control — a NumberInput row — is 18px tall. The four
toolbar buttons that are a phone user's entire navigation are 32x24. Only the
palette tiles clear 44px. Tree reparenting is HTML5 drag-and-drop, which does
not fire from touch at all, so the core operation of a CSG modeler has no
mobile path. And the first-run mobile screen is blank, because the "No model
yet" copy lives inside a drawer hidden behind an icon.

Screenshots are committed alongside the findings for the claims that are
easier to see than to read: the blank empty state, the duplicated NODE TREE
header, the property sheet opening at 33%, and iPad portrait landing on the
desktop layout with a ~200px viewport and a wrapped Sign In button.

Findings only — no behaviour changes. The recommendations are ordered by what
a user hits first, and the last one is a mobile Playwright project, since
there is no mobile e2e coverage today and every one of these would pass CI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

🚀 Preview deployed: https://worktree-mobile-usability-au.sinter.pages.dev

(updates on every push to this PR)

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