How cardinal117/mistake-watch works
Mistake Watch is a private, guest-first watch/listen-together application. Users enter or create persistent, shared, themed, or temporary rooms, then browse media, build a queue, and participate in synchronized playback; signed-in users can manage saved rooms and private listening preferences. Watch and Listen are presentation modes over shared room state. Separate capabilities include first-party media uploads and catalogue playback, personalized discovery, and optional local rhythm analysis. The README documents the product boundaries; sampled code confirms selected API and client flows, so uncertain service wiring is omitted.
Main entry points: listen-mode-layout.tsx Listen mode · media Media catalogue and sessions · supabase Durable product data · room-experience.tsx Room experience
Components 23
Rooms and identity
- Room dashboard
app/page.tsx - Room entry
app/rooms/[roomId]/page.tsx - Room lifecycle
lib/rooms - Guest and account identity
lib/identity
Room experience
- Room experience
components/room/room-experience.tsx - Watch mode
components/room/watch/watch-mode-layout.tsx - Listen mode
components/room/listen/listen-mode-layout.tsx - Queue and ordering
lib/queue/model.ts - Playback and synchronization
lib/player/sync.ts
Media workflows
- YouTube search and playback
lib/youtube - Add media and playlists
components/room/shared/add-media/use-add-media-controller.ts - Owner upload workflow
components/room/watch/uploads/use-owner-upload-manager.ts - Media catalogue and sessions
lib/media
Discovery and learning
- Personalized discovery
lib/recommendations - Listening preferences
app/api/recommendations/preferences/route.ts - Local rhythm companion
extensions/watch-audio-companion
Live and durable services
- Live room authority
spacetime/src - Durable product data
lib/supabase
Other components
- Room participant
- YouTube service
- Object storage
- CloudConvert
- Google identity provider
Connections 27
- Room participant → Room dashboard: opens
- Room participant → Room entry: joins
- Room dashboard → Room lifecycle: creates or lists
- Room entry → Room experience: enters
- Room lifecycle → Durable product data: persists rooms
- Guest and account identity → Durable product data: uses accounts
- Guest and account identity → Google identity provider: authenticates with
- Room experience → Watch mode: presents Watch
- Room experience → Listen mode: presents Listen
- Watch mode → Queue and ordering: manages queue
- Listen mode → Queue and ordering: manages queue
- Watch mode → Playback and synchronization: controls playback
- Listen mode → Playback and synchronization: controls playback
- Room experience → Live room authority: syncs room state
- Playback and synchronization → Live room authority: synchronizes playback
- Add media and playlists → YouTube search and playback: previews playlists
- Add media and playlists → Media catalogue and sessions: matches assets
- YouTube search and playback → YouTube service: searches and fetches
- Owner upload workflow → Media catalogue and sessions: creates and resumes uploads
- Media catalogue and sessions → Durable product data: stores metadata
- Media catalogue and sessions → Object storage: stores media objects
- Media catalogue and sessions → CloudConvert: processes by approval
- Personalized discovery → Durable product data: reads and records
- Listening preferences → Personalized discovery: authorizes preference operations
- Listening preferences → Durable product data: reads and updates settings
- Listen mode → Personalized discovery: shows room picks
- Local rhythm companion → Listen mode: provides local rhythm