Skip to content

feat: presenter interface for common/projector canvas view#62

Open
patcon wants to merge 4 commits into
mainfrom
feat/presenter-interface
Open

feat: presenter interface for common/projector canvas view#62
patcon wants to merge 4 commits into
mainfrom
feat/presenter-interface

Conversation

@patcon
Copy link
Copy Markdown
Owner

@patcon patcon commented Apr 24, 2026

Summary

  • Adds ?interface=presenter URL param to V4 that opens a standalone read-only canvas designed for projectors or shared displays
  • Shows all participant cursors live; bypasses the mobile-only gate (it's a desktop/projector view)
  • Connects as read-only — excluded from the participant presence count
  • Suppresses personal-interaction UI: no TouchLayer, no ShareQRButton, no HapticIndicatorButton, no haptic buzz callbacks
  • Opens alone (no chip bar) since it replaces canvas in the unlocked interfaces list rather than joining it

Test plan

  • Open ?interface=presenter#v4 on desktop — full-screen canvas without mobile gate
  • Open a second tab as a regular participant and move cursor — presence count should be 1 (not 2); presenter cursor should not appear
  • Participant cursor visible on presenter screen
  • No touch interaction possible from presenter screen (TouchLayer absent)
  • No ShareQRButton or HapticIndicatorButton visible on presenter screen
  • pnpm tsc --noEmit passes
  • pnpm vitest --run passes (31 tests)

🤖 Generated with Claude Code (code and ~150 words of PR description from ~80 words of human prompts across this session)

Add `?interface=presenter` URL param to V4 that opens a standalone read-only
canvas suitable for projectors or shared displays. Shows all participant cursors
live, bypasses the mobile-only gate, connects as read-only (excluded from
presence count), and suppresses all personal-interaction UI (TouchLayer,
ShareQRButton, HapticIndicatorButton, haptic callbacks).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

patcon and others added 3 commits April 24, 2026 02:00
The Commons column was a placeholder (—) for all rows. Now it shows radio
buttons reflecting the current activity mode, mirroring the Solo column.
Both columns control the same room-wide activity for now (solo and presenter
share one activity mode); the separate column names set up the structure for
future independent control of the commons screen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add a separate `commonsActivity` room state on the server so the Commons
(presenter) and Solo (participant) screens can show different activities
independently. The emcee sets them via separate Solo/Commons radio columns
in the Interfaces tab.

- server: add `commonsActivity` field, `setCommonsActivity` message type,
  `commonsActivityChanged` broadcast
- Canvas: when `readOnly`, subscribe to `commonsActivityChanged` instead
  of `activityChanged` so the presenter screen tracks its own mode
- useRoomConfig: track and expose `commonsActivity` + `sendCommonsActivity`
- InterfacesTab: wire Commons column to `commonsActivity` / `sendCommonsActivity`
- AdminPanelV4: pass new props through to InterfacesTab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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