Skip to content

UX overhaul: stop being an admin tool, build live-event confidence, feel alive#1

Merged
jeroenniesen merged 30 commits into
mainfrom
ux-overhaul
May 11, 2026
Merged

UX overhaul: stop being an admin tool, build live-event confidence, feel alive#1
jeroenniesen merged 30 commits into
mainfrom
ux-overhaul

Conversation

@jeroenniesen
Copy link
Copy Markdown
Contributor

Summary

Three coordinated tracks of UX work driven by an Apple HIG audit of the operator-facing surfaces.

Phase 0 — Shared primitives (5 commits)
Sheet, ConfirmDialog, Toast (with undo), Button, Skeleton — the foundation every later phase reuses.

Phase 1 — Stop being an admin tool (7 commits)

  • Humane role labels replace EventAdmin/RoomOperator/Viewer PascalCase enums in the UI
  • Setup auto-derives tenant slug + auto-signs-in (no more re-login after first-run)
  • Branding page swaps its raw JSON textarea for a visual token + threshold editor; default message background flipped from alarm-red to warm amber
  • + New event sheet with illustrated empty state (Events page previously instructed the user to run --seed)
  • Every window.confirm() replaced with the new ConfirmDialog primitive (6+ sites)
  • Sign-in errors are now humane (apiErrorMessage) instead of a generic string
  • Empty states for Schedule / Templates / Members / 404 rewritten with helpful copy + CTAs

Phase 2 — Live-event confidence (8 commits)

  • Hub errors normalized via humaniseHubError (no more raw Microsoft.AspNetCore.SignalR.HubException: StaleVersion strings)
  • Persistent AppShell with event switcher + Run/Setup tabs (every screen now knows where it is)
  • TransportControlsV2 — dominant Start action, Reset/Skip moved to overflow menu
  • CueStrip on room control surfacing the next cue with relative time hints
  • Keyboard shortcuts on room control: Space / S / R / M / 14 / ?
  • Undo toast for deleted schedule items (8s grace window)
  • Branded Connecting… screen on speaker/door/lobby (no more 14px grey text on black)
  • Larger, higher-contrast SessionHeader/Footer for confidence monitors

Phase 3 — Feel alive (5 commits + 1 lint fix)

  • Countdown gets a 250ms color crossfade on phase change + final-10s pulse
  • Message overlay slide+fade in/out
  • Skeleton placeholders replace Loading… text everywhere
  • Lobby RoomCard phase-color transitions + subtle ring indicator
  • Global visible focus rings restored, aria-live on countdown's final minute

Notes

  • Frontend-only (src/web/). No domain or hub changes. POST /api/events already existed.
  • Hub-side connected-client presence tracking is deliberately out of scope for the access-code rotation sheet (would need backplane-aware presence registry — separate plan).
  • Plan: docs/superpowers/plans/2026-05-11-ux-overhaul.md.
  • Each task went through two-stage review (spec + quality) per task, plus a final cross-task integration review.

Test plan

  • cd src/web && npm install && npm run build — green
  • cd src/web && npx vitest run — 50/50 tests across 12 files
  • First-run setup → auto sign-in → empty events list with illustrated CTA
  • Create event → land on dashboard inside the AppShell
  • Open room control → CueStrip + dominant Start visible; press ? for shortcuts overlay
  • Delete a schedule item → Undo toast appears, click Undo, item restored
  • Reset access code → ConfirmDialog sheet with explanatory copy
  • Open Branding page → visual editors, no JSON textarea
  • Open speaker view → branded Connecting state, then large readable header/timer

🤖 Generated with Claude Code

jeroenniesen and others added 30 commits May 11, 2026 13:32
…ld editors

Introduces ThemeTokenEditor (grouped colour swatches with reset-to-default),
wires ThresholdsEditor into BrandingPage, removes all raw JSON textareas, and
flips the default message overlay from alarm-red to warm amber (#c9b380 / #0a0a0a).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces every confirm() call in EventDashboardPage, ScheduleEditorPage,
MembersPage, and MessageTemplatesPage with state-tracked ConfirmDialog
instances; EventDashboardPage also gains toast feedback on access code rotation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…set/Skip

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds useShortcuts hook (ignores input/textarea focus), ShortcutsOverlay
sheet, forwardRef on MessageInput, and wires all shortcuts into
RoomControlPage.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jeroenniesen jeroenniesen merged commit c9eba0a into main May 11, 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