Skip to content

fix(scratchnode-v5): mobile visual reset (type scale + accent/mono discipline, cut first-viewport chrome)#499

Merged
HomenShum merged 4 commits into
mainfrom
claude/v5-mobile-reset-clean
Jun 3, 2026
Merged

fix(scratchnode-v5): mobile visual reset (type scale + accent/mono discipline, cut first-viewport chrome)#499
HomenShum merged 4 commits into
mainfrom
claude/v5-mobile-reset-clean

Conversation

@HomenShum
Copy link
Copy Markdown
Owner

ScratchNode v5 — mobile visual reset (one isolated commit on top of current main)

Single commit, 2 files (public/proto/home-v5.html + its changelog lane). Cherry-picked clean onto current origin/main so it carries only the mobile reset — no scratchnode-line baggage, no wiki-CTA conflicts.

Root cause (not "too many elements")

  1. :root had color/radius/motion tokens but no type scale — every component hardcoded its size, so nothing ranked.
  2. --accent / --mono had no discipline — accent sprayed on logo/code/CTA/links; mono on human prose, not just machine IDs.
  3. The first viewport re-explained the room 4× and leaked host/debug labels.
  4. A flex-gap bug split the "Scratch Node" wordmark (.h-logo {flex; gap:6px} made Scratch and <span>Node</span> two flex items).

Changes (presentational + copy only — send/render path, dedup, data-sn-live untouched)

  • Type scale in :root (--fs-display/title/base/sub/label/mono); one display size per screen; hero → 22px; empty-state title is the single 18px display element. Mono reserved for machine IDs (room code + /ask) — de-mono'd the strip, "LIVE ROOM" divider, menu headers, "Set name".
  • Wordmark wrapped in .h-logo-word → renders ScratchNode.
  • Room code → quiet muted mono chip (was a heavy accent button); menu → borderless icon; accent reserved for the one primary action (send).
  • Event strip: dropped "0 FAQ"; gated ●Event mode + L0 Manual capture (host/debug) to data-role="host"; de-mono'd.
  • De-duped: removed the hero's joined-count (lives once in the strip); "Disposable event brain" → "Live event log · public wiki when it ends". Welcome banner quieted + hidden on mobile.
  • Composer: placeholder → "Message or /ask…" (fixes the clipped placeholder); helpline 2 lines → 1; privacy shows "Public" / "Private 🔒" text instead of an ambiguous open-lock glyph.
  • Empty state: removed the giant "Ask the first question →" accent CTA (the composer IS the CTA); composer-first copy.
  • Keyboard-open fix: visualViewport--keyboard-offset pins the fixed composer above the keyboard; footer + welcome collapse while typing → no more footer leaking behind the keyboard.
  • Menu: "Continue in NodeBench" gated to named users; "Keyboard shortcuts" hidden on mobile.

Hero merge note: kept main's <h1> tag (a11y) and applied my type-scale + copy on top.

Verification

  • 28/28 chromium e2e against this exact rebased file: scratchnode-live-route-honesty (incl. home-v5-output-contract) + scratchnode-public-wiki — main's canonical suite.
  • Static launch scan PASS; before/after + keyboard-open + menu screenshots at 390px.

Required CI (Typecheck / Runtime smoke / Build) gates this PR.

🤖 Generated with Claude Code

…scipline, cut first-viewport chrome

Root cause was not "too many elements": :root had no type-size tokens (every
component hardcoded sizes, so nothing ranked) and no accent/mono discipline
(accent sprayed on logo/code/CTA/links; mono on human prose, not just IDs).
Plus a flex-gap bug split the "ScratchNode" wordmark into "Scratch Node".

- :root: add --fs-display/title/base/sub/label/mono type scale; reserve
  solid accent for the single primary action
- header: fix wordmark flex-gap split; room code -> quiet muted mono chip;
  borderless menu icon
- event strip: drop "0 FAQ"; gate L0 capture + event-mode to data-role=host
  (host/debug controls that leaked to attendees); de-mono to --ui
- hero: drop duplicate joined count; "Disposable event brain" -> "Live event
  log - public wiki when it ends" (static + JS rewrite)
- welcome banner: quiet (no accent card) + hidden on mobile
- composer: placeholder -> "Message or /ask..." (fixes clipped placeholder,
  which came from JS not static markup); helpline 2 lines -> 1; privacy shows
  "Public" / "Private (lock)" text instead of an ambiguous open-lock glyph
- empty state: remove giant "Ask the first question" CTA (composer is the CTA);
  "No messages yet" is the one 18px display element; copy teaches all 3 actions
- keyboard: visualViewport --keyboard-offset pins the fixed composer above the
  keyboard; footer + welcome collapse while typing (data-input-focused) ->
  no more footer leaking behind the keyboard
- menu: gate "Continue in NodeBench" to named users (was visible to anonymous
  guests under the hidden "Your notes" header); hide "Keyboard shortcuts" on mobile

Presentational + copy only. Send/render path, seenIds dedup, and data-sn-live
are untouched. Desktop layout unchanged (composer stays sticky-top).

Verified: 49/49 chromium e2e (scratchnode-live-route-honesty 46 incl.
home-v5-output-contract, + scratchnode-public-wiki 3); static launch scan PASS
(0 blockers/warnings); before/after/keyboard/menu screenshots at 390px.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nodebench-ai Ready Ready Preview, Comment Jun 3, 2026 9:55pm

Request Review

@HomenShum HomenShum merged commit 7959fc1 into main Jun 3, 2026
15 of 16 checks passed
@HomenShum HomenShum deleted the claude/v5-mobile-reset-clean branch June 3, 2026 22:06
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

Demo: walkthrough of the surfaces this PR changed is available as a workflow artifact (pr-demo-499) at https://github.com/HomenShum/nodebench-ai/actions/runs/26916000595

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.

2 participants