Skip to content

feat: add Live Listen support to iPod (Remote Control)#962

Draft
ryokun6 wants to merge 1 commit intomainfrom
cursor/remote-control-live-listen-9869
Draft

feat: add Live Listen support to iPod (Remote Control)#962
ryokun6 wants to merge 1 commit intomainfrom
cursor/remote-control-live-listen-9869

Conversation

@ryokun6
Copy link
Copy Markdown
Owner

@ryokun6 ryokun6 commented Mar 15, 2026

Summary

Adds Live Listen (listen-together) support to the iPod app, enabling real-time playback sync across different clients/instances. Previously this feature was only available in the Karaoke app.

Changes

Types

  • Added listenSessionId to IpodInitialData in both src/apps/base/types.ts and src/types/appInitialData.ts

Route Registry

  • Updated /listen/:sessionId route to respect ?app=ipod query param, allowing listen session links to open in iPod instead of always defaulting to Karaoke

iPod Logic (useIpodLogic.ts)

  • Integrated useListenSync hook for real-time playback synchronization (track, play/pause, position drift correction)
  • Added useListenSessionStore subscription for session state (DJ status, listener count, etc.)
  • Added session management handlers: create, join, leave, pass DJ, send reactions
  • Added listenSessionId handling in initial data and app update events

iPod Menu Bar (IpodMenuBar.tsx)

  • Added Live Listen menu items to File menu: Start/Join (when not in session), Invite/End (when in session)

iPod App Component (IpodAppComponent.tsx)

  • Added ListenSessionBadge for non-fullscreen session indicator
  • Added ListenSessionToolbar with DJ controls, reactions, and share button in fullscreen
  • Added ReactionOverlay for animated emoji reactions in fullscreen
  • Added ListenSessionInvite dialog with QR code and share link
  • Added JoinSessionDialog for browsing/joining active sessions

How It Works

  1. Start a session: File > Start Live Listen (requires login via Chats)
  2. Invite others: Share the generated link (includes ?app=ipod to open in iPod)
  3. DJ controls: The DJ's playback state syncs to all listeners via Pusher
  4. Listeners: Automatically sync track, play/pause, and position with soft/hard drift correction
  5. Pass DJ: Transfer DJ control to another listener
  6. Reactions: Send emoji reactions visible to all participants

Testing

  • Build passes (bun run build)
  • All unit tests pass (bun run test:unit - 89/89)
Open in Web Open in Cursor 

- Add listenSessionId to IpodInitialData type
- Integrate useListenSync hook for real-time playback sync across clients
- Add session management (create/join/leave/pass DJ/reactions)
- Add Live Listen menu items to iPod File menu
- Add ListenSessionBadge, ListenSessionToolbar, and ReactionOverlay
- Add ListenSessionInvite and JoinSessionDialog
- Update route registry to support ?app=ipod for /listen/ URLs
- Handle listenSessionId in initial data and app update events

Co-authored-by: Ryo Lu <me@ryo.lu>
@ryos-deploy
Copy link
Copy Markdown

ryos-deploy bot commented Mar 15, 2026

The preview deployment for ryos-dev is ready. 🟢

Open Preview | Open Build Logs | Open Application Logs

Last updated at: 2026-03-15 01:37:25 CET

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