LiveDesign Lab

Mobile UX — problems & fixes

Preview

Five mobile problems found by driving the live dashboard at 360–390px (anonymous), each with a proposed fix shown Now vs Proposed. Mobile chrome only — the globe is untouched.

What this is

Each card below is one concrete problem a phone user hits today, with the on-device measurement that proves it and a proposed fix. Nothing here changes the live app — adopt the parts that land. The five, in rough order of how broken they look:

  1. 1.Header brand wraps to two lines at ≤360px and touches the profile pill
  2. 2.Bottom-sheet peek leaks half-clipped tabs + search at the seam
  3. 3.Legal footer is pinned over the sheet — 11px from its controls
  4. 4.Settings says “Press Esc / click outside” — neither exists on touch
  5. 5.Tapping an article gives no visible feedback (detail opens off-screen)
1

Header brand wraps at narrow widths

Problem. On a 360px phone the centred brand block gets only 130px between the hamburger and the profile pill, so “COMMAND CENTER” and “GLOBAL INTELLIGENCE” each wrap to two lines and the brand’s right edge butts directly against the pill with zero gap. It reads as broken, not branded — and it’s worse on a 320px iPhone SE.

Fix. Below 380px: keep the brand on one line by trimming its letter-spacing, drop the “GLOBAL INTELLIGENCE” subtitle (it’s decorative, not load-bearing), and collapse the anonymous profile pill to a 32px icon-only chip. The full label + subtitle return at ≥380px. Frees ~80px and the brand never wraps.

measuredbrand block 130px wide @360px → wraps; right edge 186px = pill left edge (0px gap)
Now
COMMAND CENTERGLOBAL INTELLIGENCE
ANONYMOUS ▾
360px · wraps
Proposed
COMMAND CENTER
360px · single line
2

The peek leaks half-clipped tabs + search

Problem. The peek is a fixed 120px, but its header (handle + Briefing + DEFCON) is only ~64px — so the remaining ~56px reveals the FEED/ANALYST tab row and a hard-clipped sliver of the search box, cut off mid-field right at the footer line. The peek is supposed to show “Briefing + status only”; instead the seam looks like a rendering bug.

Fix. Make the peek a deliberate status bar: handle + Briefing + DEFCON/sync on one row, plus a right-aligned “Feed ⌃ 240” chevron that names the gesture. Clip the body exactly at the header bottom and add a short fade so nothing reads as cut. Tabs + search live only once the sheet is actually open.

measuredpeek y=636→756 (120px); FEED/ANALYST tabs render at 711→734, search at 742→772 — clipped at 756
Now
◗ BriefingDEFCON ELEVATEDsync 4m · 240 events
FEEDANALYST
Command Center Global — Real-time global…
peek · bleeding seam
Proposed
◗ BriefingDEFCON ELEVATEDsync 4m agoFeed240
Privacy·Terms·Pricing
peek · clean status bar
3

Legal footer is pinned over the sheet

Problem. The marketing-style footer (description sentence + four legal links) is pinned below the bottom sheet on the dashboard, permanently eating ~88px. Even fully expanded, the sheet’s “PULL FEEDS / last sync” row sits 11px above it, the description truncates mid-word (“…AI voice br…”), and at 360px the links wrap. It’s the single biggest source of cramping at the bottom.

Fix. The crawler/compliance requirement is that the Privacy + Terms links are present in SSR HTML and visible on mobile — not that the marketing blurb is. On the dashboard, collapse to a single ~30px line of links only (“Privacy · Terms · Pricing”). Keep the full descriptive footer on the marketing pages. Reclaims ~58px and removes the truncation + wrap.

measuredfooter 756→844 (88px) in every state; PULL FEEDS bottom 745 → 11px gap; description truncated
Now
last sync 19:49 UTCPULL FEEDS

Command Center Global — Real-time global intelligence dashboard. Stories from hundreds of news outlets, plotted on a 3D Earth, with optional AI voice br

AboutPrivacy PolicyTerms of ServicePricing
88px · truncates + collides
Proposed
last sync 19:49 UTCPULL FEEDS
+ one more article fits here
Privacy·Terms·Pricing
30px · links only

Compliance-sensitive: Google OAuth rejected the site twice for a mobile-hidden privacy link. This proposal keeps the Privacy + Terms links visible on every viewport in SSR HTML — it only drops the non-required marketing sentence on the dashboard view. Verify with the crawler before shipping.

4

“Press Esc / click outside” on a touchscreen

Problem. The full-screen Settings (“Operator Console”) panel pins a bottom hint reading “Press Esc to close, or click outside.” On a phone there is no Esc key, and because the panel is full-width there is nothing “outside” to tap. The only real dismissal — the ✕ top-right — isn’t mentioned, so the instruction is both wrong and unhelpful.

Fix. Branch the hint on pointer type (coarse → touch). On touch: drop the Esc/outside line and add a full-width “Done” button at the bottom, in the thumb zone, alongside the existing ✕. Keyboard users keep the Esc hint.

measuredsettings panel = full-screen on mobile; hint text references keyboard + click-outside only
Now
Operator Console
Press Esc to close, or click outside.
desktop language
Proposed
Operator Console
touch language + Done
5

Tapping an article does nothing visible

Problem. Tapping a feed card expands its detail inline — but the expansion (and the only “SOURCE →” link) renders far down the sheet’s scroll. With the sheet at peek the detail lands ~370px below the fold, so a tap highlights a card the user can’t see and surfaces a link they can’t reach. It feels like the tap was ignored.

Fix. Tapping a card opens a dedicated detail sheet that slides up in view — title, outlet coverage, summary and a thumb-height SOURCE button — instead of an inline expand buried in the scroll. Immediate feedback, always in view, one tap to dismiss. Try it:

measuredafter tap: card detail + SOURCE link render at y≈1123, viewport is 844 — ~370px below the fold
Interactive — tap a card
feed → detail sheet

The detail sheet is the same spring + drag-handle language as the main bottom sheet, so it reads as part of the system rather than a new surface (honours the two-overlay convention — it’s a localised context sheet, not a third global overlay).

Alternative if a dedicated sheet is too much: tapping a card while collapsed auto-snaps the sheet to middle and scrolls the tapped card to the top — cheaper, but the dedicated sheet gives cleaner focus and a guaranteed-visible Source button.

Where each fix lands in the codebase

  • 1 · 4 Header + dismissal — MobileHeader.tsx, SettingsPanel (branch on useIsCoarsePointer()).
  • 2 · 5 Peek + article tap — MobileShell.tsx peek header + MobileBottomSheet.tsx overflow clip.
  • 3 Footer — layout.tsx compliance strip (compliance-sensitive — verify with crawler).

None of these touch the globe render path or the per-frame pub/sub invariants. They’re chrome-only — the riskiest is the footer (compliance), which is why it’s flagged separately above.

These pages are isolated experiments — nothing here is wired into the shipping dashboard until you adopt it.All experiments →