How vivekkushwahaofficial/framehost works
FrameHost is a multi-device YouTube playback platform. A host creates a room; controllers and followers join with device tokens. The frontend manages room membership and permissions, while authenticated devices send playback commands over STOMP/WebSocket; the backend authorizes commands, updates room playback state, and broadcasts updates for clients to apply to YouTube players. Analytics and usage statistics form a separate capability. Relationships below are limited to README statements and source-index references or excerpts; several listed subsystems were not sampled directly.
Main entry points: RoomService.java Room lifecycle · App.tsx App orchestration · PlaybackCommandController.java Playback command route · InMemoryRoomRepository.java In-memory room store
Components 26
Frontend experience
- App orchestration
frontend/src/App.tsx - Room session UI
frontend/src/components/room/RoomSession.tsx - Room API client
frontend/src/services/api/roomApi.ts - Playback sync hook
frontend/src/hooks/usePlaybackSync.ts - STOMP client
frontend/src/services/websocket/stompClient.ts - YouTube player UI
frontend/src/components/player/YouTubePlayer.tsx - YouTube player hook
frontend/src/hooks/useYouTubePlayer.ts - YouTube API loader
frontend/src/services/youtube/youtubeApi.ts
Rooms and identity
- Room endpoints
backend/src/main/java/com/framehost/room/controller/RoomController.java - Room lifecycle
backend/src/main/java/com/framehost/room/service/RoomService.java - In-memory room store
backend/src/main/java/com/framehost/room/repository/InMemoryRoomRepository.java - Room and membership state
backend/src/main/java/com/framehost/room/model/Room.java - Device authentication
backend/src/main/java/com/framehost/device/service/DeviceAuthenticationService.java - Device token service
backend/src/main/java/com/framehost/device/service/DeviceTokenService.java - WebSocket authentication
backend/src/main/java/com/framehost/websocket/WebSocketAuthenticationInterceptor.java
Playback sync
- Playback command route
backend/src/main/java/com/framehost/playback/controller/PlaybackCommandController.java - Command authorization and state
backend/src/main/java/com/framehost/playback/service/PlaybackCommandService.java - Permission endpoint
backend/src/main/java/com/framehost/playback/controller/PlaybackPermissionController.java - Permission management
backend/src/main/java/com/framehost/playback/service/PlaybackPermissionService.java
Analytics
- Anonymous analytics tracker
frontend/src/components/analytics/AnalyticsTracker.tsx - Analytics API client
frontend/src/services/api/analyticsApi.ts - Analytics endpoints
backend/src/main/java/com/framehost/analytics/controller/AnalyticsController.java - Analytics service
backend/src/main/java/com/framehost/analytics/service/AnalyticsService.java - Analytics repositories
backend/src/main/java/com/framehost/analytics/repository/AnalyticsEventRepository.java - Usage statistics page
frontend/src/pages/StatsPage.tsx
Other components
- Host and devices
Connections 30
- Host and devices → App orchestration: use rooms
README.md - App orchestration → Room API client: requests room actions
frontend/src/App.tsx - App orchestration → Room session UI: renders session
frontend/src/App.tsx - App orchestration → Playback sync hook: starts sync
frontend/src/App.tsx - Room API client → Room endpoints: calls backend
README.md - Room endpoints → Room lifecycle: delegates room operations
backend/src/main/java/com/framehost/room/controller/RoomController.java - Room lifecycle → In-memory room store: reads and writes rooms
backend/src/main/java/com/framehost/room/service/RoomService.java - In-memory room store → Room and membership state: stores rooms
backend/src/main/java/com/framehost/room/repository/InMemoryRoomRepository.java - Room lifecycle → Device authentication: authenticates devices
backend/src/main/java/com/framehost/room/service/RoomService.java - Room lifecycle → Device token service: issues credentials
backend/src/main/java/com/framehost/room/service/RoomService.java - Device authentication → Device token service: hashes tokens
backend/src/main/java/com/framehost/device/service/DeviceAuthenticationService.java - Playback sync hook → STOMP client: uses client
frontend/src/hooks/usePlaybackSync.ts - Playback sync hook → YouTube player UI: synchronizes player
- YouTube player UI → YouTube player hook: uses player logic
frontend/src/components/player/YouTubePlayer.tsx - YouTube player hook → YouTube API loader: loads API
frontend/src/hooks/useYouTubePlayer.ts - STOMP client → Playback command route: sends playback commands
README.md - Playback command route → Command authorization and state: executes command
backend/src/main/java/com/framehost/playback/controller/PlaybackCommandController.java - Playback command route → In-memory room store: looks up room
backend/src/main/java/com/framehost/playback/controller/PlaybackCommandController.java - Playback command route → Host and devices: broadcasts state
README.md - Host and devices → WebSocket authentication: connects authenticated
README.md - Room session UI → Permission endpoint: manages permissions
- Permission endpoint → Permission management: delegates permissions
backend/src/main/java/com/framehost/playback/controller/PlaybackPermissionController.java - Permission management → In-memory room store: loads room
backend/src/main/java/com/framehost/playback/service/PlaybackPermissionService.java - Permission management → Device authentication: authenticates host
backend/src/main/java/com/framehost/playback/service/PlaybackPermissionService.java - Anonymous analytics tracker → Analytics API client: records activity
- Analytics API client → Analytics endpoints: requests statistics
- Analytics endpoints → Analytics service: delegates analytics
- Analytics service → Analytics repositories: persists events
backend/src/main/java/com/framehost/analytics/service/AnalyticsService.java - Usage statistics page → Analytics API client: loads statistics
frontend/src/pages/StatsPage.tsx - Room lifecycle → Analytics service: records room creation
backend/src/main/java/com/framehost/room/service/RoomService.java