Room creation and identity flow
A host enters a video link and name, receives a private room code, and shares that link with guests while lightweight participant identity is preserved locally for smoother re-entry.
Realtime media case study
Realtime watch-party platform with synced playback, voice chat, source compatibility, and room persistence
AasPas Private Theater is a realtime watch-party platform built to make remote video sessions feel controlled and social instead of chaotic. The product lets a host create a room around a video source, share a join link, and keep playback synchronized for everyone through Socket.IO state updates. It supports YouTube, Google Drive, direct video files, HLS streams, Streamable links, and generic embedded players. The room also includes WebRTC voice, realtime chat, emoji reactions, MongoDB-backed room recovery, identity persistence, automatic room expiry, and compatibility checks so users do not create broken rooms accidentally.
Room topology
System map
This project is strong portfolio material because it combines media playback, realtime authority rules, collaboration behavior, and persistence instead of only rendering a video player on screen.
A host enters a video link and name, receives a private room code, and shares that link with guests while lightweight participant identity is preserved locally for smoother re-entry.
The room creator is the master controller for play, pause, and seek. Other participants receive versioned state updates so the room does not split into multiple conflicting playback timelines.
A parsing layer classifies YouTube, Google Drive, HLS, direct media files, Streamable, and embedded players so the app can route each source through the correct playback strategy.
Socket.IO powers presence, synced playback events, chat, emoji reactions, room join events, and voice participant discovery in one connected collaboration flow.
SimplePeer-based WebRTC voice gives participants a built-in audio room with mic and speaker controls, making the experience feel closer to a real shared hangout than passive co-watching.
Playback state, activity timestamps, chat history, and member profiles are persisted in MongoDB, while inactive room expiry and runtime reset behavior prevent stale state from growing endlessly.
Product surfaces
The project spans room creation, collaborative viewing, voice and chat interaction, and backend lifecycle control. That breadth is exactly what makes it look like a real product instead of a single screen demo.
The landing experience is built around speed: create a private room quickly, detect the kind of media link the user pasted, and prevent obviously broken sources before the room opens.
The main room screen combines the player, host controls, participant presence, and fullscreen-friendly interaction patterns into one viewing surface.
The social layer is not bolted on. Voice chat, live room messages, floating reactions, and participant status are integrated into the watch session itself.
The backend decides room lifecycle, persistence, sync authority, and media validation so the product remains recoverable and predictable.
Technical architecture
The stack spans media players, realtime room sync, Mongo persistence, WebRTC voice, compatibility checks, and a responsive client experience that behaves well under real multi-user usage.
The UI is built as a client-heavy realtime product with a create-room flow, join-room flow, fullscreen behavior, and collaboration-first room layout.
A universal player interface routes YouTube, direct media, HLS, Streamable, and iframe-like sources through the right playback implementation while exposing a consistent control API.
Room playback behavior is coordinated through Socket.IO messages, versioned state snapshots, drift thresholds, and explicit recovery sync requests.
MongoDB stores room state, chat, and member profiles, while TTL expiry keeps temporary collaboration rooms from becoming permanent clutter.
WebRTC voice is layered on top of socket signalling so participants can speak inside the room without relying on third-party meeting software.
The backend helps evaluate remote media responses so users are warned about unsupported HTML previews, blocked downloads, or non-streamable content before a broken room is created.
Playback compatibility
One of the deepest parts of the system is the way it treats media sources as a real product problem instead of assuming every URL behaves like a perfect MP4.
YouTube detection with quality-aware embedded playback
Google Drive link extraction, direct-url conversion, and fallback URLs
Direct MP4, WebM, MOV, MKV-style link recognition
HLS stream handling for `.m3u8` media
Streamable and generic embed detection for iframe playback
Pre-room compatibility inspection to prevent obviously broken sources
Realtime behavior
Realtime correctness matters here. The room needs a clear source of truth, drift correction, and recovery behavior when clients buffer, refresh, or re-enter.
Socket.IO room join, leave, and participant presence events
Host-only shared playback control enforcement
Versioned player snapshots with timestamps and updated-by markers
Drift-aware sync rules plus explicit request-sync recovery
Realtime guest join notifications and room population awareness
Live emoji reactions and chat events across active participants
Collaboration layer
The product becomes memorable because watching is not the only action. Users can talk, react, and stay socially connected inside the same room surface.
Ownership
This project matters in a portfolio because it proves I can think across media, realtime sync, communication, persistence, and product UX without needing a big team.
Technology index