feat(web): apple-style UX pass — design system, operator console, event dashboard#2
Merged
Merged
Conversation
…nt dashboard
A pre-ship design pass aimed at moving the product from "competent admin tool"
to "stagecraft instrument." Three areas changed:
1. Design system & first-impression surfaces
- New primitives: Card (translucent surface with backdrop-blur), HoldToConfirm
(1s ring-fill destructive confirm), Tabs, DurationInput (MM:SS mask),
LiveIndicator (with snapshot freshness), Wordmark.
- Typography pass: dropped uppercase tracking-widest on operator/admin pages
(kept on stage displays where it reads as intentional), standardized h1s,
SF Pro Text in the font stack.
- One accent token (--cta = #0a84ff) drives all CTAs, links, focus rings.
--primary refined to #34c759 for the countdown above thresholds.
- Soft focus ring via box-shadow + color-mix instead of hard outline.
- Sign-in / Setup / ConnectingScreen redone with Wordmark + greeting + Card.
- Apple-style easing tokens (--ease-out / --ease-in-out) applied uniformly.
2. Operator console (RoomControlPage)
- New OperatorHero: cue header + countdown + next-item footer in one card,
with a radial halo that picks up the active threshold colour.
- Transport row pinned (no wrap); Stop pinned to the right edge to maximise
separation from the dominant action; destructive actions hold-to-confirm.
- r/s keyboard shortcuts upgraded to Shift+R/Shift+S with ConfirmDialog.
- Tools panel: TimeAdjustments + MessageInput in a single tabbed Card,
phase-aware default tab; m shortcut switches + focuses the input.
- lg+ layout becomes 2-column: control surface left, sticky compact
ScheduleRail right. Narrow viewports fold Schedule into the Tools tabs.
3. Event dashboard (EventDashboardPage)
- EventIdentity strip: display title, date/time/timezone, live-derived
status pill (Starts in X / Live · N rooms running / Ended X ago).
- LobbyCard with inline QR, copy-to-clipboard, prominent code, proper
Open lobby button, overflow menu for reset.
- RoomTile: subscribes to each room's snapshot (via new shared
useEventRoomSnapshots hook), shows phase chip + current item +
countdown when running, "Up next at HH:MM" when idle; one Control CTA
and a single ⋯ menu replacing 3 icon buttons + 4 blue links.
- UpcomingToday strip: next-90-min timeline across all rooms.
Additional changes
- Schedule item form migrated from rolled modal to Sheet.
- Branding page simplified to logo + accent colour, advanced per-token
editor behind disclosure.
- Setup hub gains sub-nav (Templates / Branding / Members / Audit).
- Persistent context bar on /rooms/:id via useRoomEvent (cache scan).
- ThresholdsEditor: tone chips + duration preview bar.
- DurationInput across schedule item / room / threshold forms.
New deps: qrcode.react (~5 KB) for lobby + access-code QR rendering.
Tests added: HoldToConfirm (5), DurationInput + helpers (10). 14/14 test files
pass, 69/69 tests pass, typecheck clean, build succeeds.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A pre-ship design pass aimed at moving the product from "competent admin tool" to "stagecraft instrument." Three areas changed:
1. Design system & first-impression surfaces
Card(translucent surface withbackdrop-blur),HoldToConfirm(1s ring-fill destructive confirm),Tabs,DurationInput(MM:SS mask),LiveIndicator(with snapshot freshness),Wordmark.uppercase tracking-wideston operator/admin pages (kept on stage displays where it reads as intentional). Standardized h1s withtracking-tight. SF Pro Text leads the font stack.--cta = #0a84ffdrives all CTAs, links, focus rings.--primaryrefined to#34c759(SF green) for the countdown above thresholds.box-shadow+color-mixinstead of a hard outline.ConnectingScreenredone withWordmark+ greeting +Card.--ease-out/--ease-in-out) applied uniformly. Sheets now scale+fade in instead of hard-appearing.2. Operator console (
RoomControlPage)OperatorHero: cue header + countdown + next-item footer combined in one signature card, with a radial halo that picks up the active threshold colour.r/supgraded to⇧R/⇧Sand routed throughConfirmDialog.TimeAdjustments+MessageInputin one tabbed Card, phase-aware default tab.mshortcut switches to Message + focuses the input.ScheduleRailright. Narrow viewports fold Schedule into Tools as a third tab.3. Event dashboard (
EventDashboardPage)EventIdentitystrip: display title, date/time/timezone, live-derived status pill (Starts in X/Live · N rooms running/Ended X ago).LobbyCard: inline 88px QR, copy-to-clipboard, prominent monospace code, properOpen lobbybutton, overflow menu for reset.RoomTile: subscribes to each room's snapshot (via new shareduseEventRoomSnapshotshook). Shows phase chip + current title + speaker + tabular countdown when running/paused/pre-roll; "Up next at HH:MM · in 12 min" when idle. OneControl →CTA and a single⋯menu replacing 3 icon buttons + 4 blue links.UpcomingTodaystrip: next-90-min horizontal timeline across all rooms with a CTA-blue "now" line and proportional schedule blocks.Other improvements
ScheduleItemFormmigrated from rolled modal toSheet(getsEsc/⌘↩for free)./rooms/:idvia newuseRoomEventcache scan.ThresholdsEditorrebuilt with semantic tone chips ("Heads-up / Wrap up / Final stretch") + inline duration preview bar.DurationInput(MM:SS) applied to every duration / pre-roll / threshold field.border-zinc-800softened toborder-white/5orborder-white/10for tonal calm.New dependencies
qrcode.react(~5 KB) — for the lobby's inline QR and the access-code popover.Test plan
npx tsc -bcleannpm test— 14 test files / 69 tests pass (10 new tests added forHoldToConfirm+DurationInputhelpers)npm run buildsucceedsRoomTiles, Upcoming-today timelinelg+with hero + transport + tools + schedule railStopfor 0.8s in the transport row to confirm; same for Skip/Reset in the More menu⇧Sand⇧Ropen ConfirmDialog (not immediate destructive);Spacestill pause/resumes;mswitches to Message tab + focuses input⌘↩submits)🤖 Generated with Claude Code