Skip to content

Redesign audience reaction UI with FAB and popup grid#9

Merged
jackson-jpeg merged 2 commits intov2from
claude/redesign-voting-ui-H4pCz
Feb 21, 2026
Merged

Redesign audience reaction UI with FAB and popup grid#9
jackson-jpeg merged 2 commits intov2from
claude/redesign-voting-ui-H4pCz

Conversation

@jackson-jpeg
Copy link
Copy Markdown
Owner

Summary

Redesigned the audience reaction interface from a horizontal button bar to a modern floating action button (FAB) with an expandable popup grid. This improves mobile UX by reducing screen clutter and providing better visual feedback. Also added solo mode support for plot twist voting.

Key Changes

Audience Reaction UI Redesign

  • Replaced horizontal button bar with a floating action button (FAB) positioned at bottom-right that toggles a 4-column reaction grid popup
  • Added floating emoji animations that rise from the FAB when reactions are received, providing visual feedback without cluttering the screen
  • Implemented popup menu with glassmorphic design (backdrop blur, semi-transparent background) that animates in/out smoothly
  • Enhanced FAB styling with dynamic colors (orange when open, dark when closed) and a cooldown ring SVG indicator around the button
  • Added last reaction memory - FAB displays the emoji of the last reaction sent, defaulting to a lightning bolt
  • Improved labels - Updated reaction labels ("Applause" → "Clap", "Mind Blown" → "Wow") for brevity in the compact grid layout
  • Added outside-click detection to close the popup menu when tapping elsewhere
  • Removed old CSS - Deleted 100+ lines of gradient button styles and conic-gradient cooldown sweep animations that are no longer needed

Host View (Unchanged)

  • Host view continues to display floating reactions and compact count badges at the top-right
  • No changes to host-side functionality

Solo Mode Plot Twist Support

  • Added auto-apply logic for plot twists in solo mode (skips audience voting)
  • Randomly selects a twist and immediately injects it into the script
  • Generates AI dialogue in the background without blocking the performance
  • Falls back gracefully if injection fails

Code Quality

  • Imported MOTION animation presets from @/lib/animations for consistent spring/easing
  • Removed redundant comments and cleaned up code formatting
  • Consolidated state initialization (single-line object literals)
  • Added isSoloMode prop to HostPerforming component for mode detection

Implementation Details

  • Uses Framer Motion's AnimatePresence for smooth enter/exit animations
  • Popup grid items stagger in with delay: i * 0.03 for a cascading effect
  • Cooldown progress visualized via SVG circle with strokeDasharray for smooth ring animation
  • Floating emojis use randomized rotation and scale for organic feel
  • Backdrop blur applied via CSS backdrop-filter with webkit fallback for iOS support

https://claude.ai/code/session_014T4yzapvSSZdPBJCJgsRkP

Replace the cramped 8-emoji horizontal pill bar (which overflowed on
small phones) with a clean FAB + popup grid pattern:

- Single floating action button on bottom-right, above nav controls
- Tap to expand a frosted-glass popup with 4x2 emoji grid
- Each reaction has proper touch targets with labels
- Cooldown shown as an SVG ring around the FAB
- Floating emoji rise from FAB when reactions come in
- Auto-dismiss on selection or tap outside
- Host view unchanged (count badges + floating emojis)

Removes all old .reaction-btn CSS (including duplicate block) since
mobile reactions are now fully inline-styled in the component.

https://claude.ai/code/session_014T4yzapvSSZdPBJCJgsRkP
Solo mode changes:
- Server: when host triggers CHAOS in solo mode, immediately pick a
  random twist and inject it instead of starting a 15s vote timer
  with no audience to vote
- Host UI: hide AudienceReactionBar and PlotTwistVoting in solo mode
  (no audience to show reactions from or voting UI to)
- Rename CHAOS button to TWIST in solo mode
- Update toast message for solo ("PLOT TWIST incoming!" vs audience voting)

Voting phase was already skipped server-side for solo mode
(teleprompter.service.ts goes straight to RESULTS).

https://claude.ai/code/session_014T4yzapvSSZdPBJCJgsRkP
@vercel
Copy link
Copy Markdown

vercel bot commented Feb 21, 2026

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

Project Deployment Actions Updated (UTC)
plot-twists Ready Ready Preview, Comment Feb 21, 2026 5:22pm

@jackson-jpeg jackson-jpeg merged commit 3626b58 into v2 Feb 21, 2026
3 checks 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.

2 participants