How omarsuniaga/suniplayer works
SuniPlayer is a cross-platform live-performance tool: musicians prepare repertoire and timed sets, then run them through a player with queue and live/edit modes. The web app is the more mature implementation; native provides mobile audio and persistence, while core holds shared domain state and services. The graph includes documented import, history/recovery, track-profile, and collaboration capabilities. Several UI-to-service links are dashed because the relevant implementations were not sampled; solid links are limited to relationships shown in excerpts or the source index.
Main entry points: SessionManager.ts Session manager · Player.tsx Live player · _layout.tsx Native app · useProjectStore.ts Project state
Components 21
Web experience
- Web app
apps/web/src/App.tsx - Set builder
apps/web/src/pages/Builder.tsx - Library and import
apps/web/src/pages/Library.tsx - Live player
apps/web/src/pages/Player.tsx - History dashboard
apps/web/src/pages/History.tsx - Native app
apps/native/app/_layout.tsx
Shared domain
- Set generation
packages/core/src/services/setBuilderService.ts - Project state
apps/web/src/store/useProjectStore.ts - Player state
packages/core/src/store/usePlayerStore.ts - Session recovery
apps/web/src/services/showSessionStorage.ts
Platform services
- Browser storage
apps/web/src/platform/browser/IDBStorage.ts - Native audio engine
apps/native/src/platform/ExpoAudioEngine.ts - Native storage
apps/native/src/platform/SQLiteStorage.ts - Storage bridge
packages/core/src/store/storage.ts
Live collaboration
- Track markers
apps/web/src/features/collaboration/markers - Sync controls
apps/web/src/services/network/SyncEnsembleOrchestrator.ts - Session manager
packages/core/src/network/SessionManager.ts - Clock synchronization
packages/core/src/network/clockSyncService.ts - Shared state
packages/core/src/network/crdt/YjsStore.ts - P2P transport
packages/core/src/network/P2PTransport.ts
Other components
- Musician
Connections 19
- Musician → Web app: prepares and performs
README.md - Musician → Native app: uses mobile app
README.md - Set builder → Set generation: generates sets
- Library and import → Project state: manages repertoire
- Live player → Player state: controls playback
- Live player → Native audio engine: plays audio
- Live player → Track markers: edits markers
- History dashboard → Session recovery: recovers sessions
- Session recovery → Project state: captures and restores
apps/web/src/services/showSessionStorage.ts - Project state → Player state: uses shared state
apps/web/src/store/useProjectStore.ts - Storage bridge → Browser storage: delegates storage
- Storage bridge → Native storage: delegates storage
- Session manager → P2P transport: registers handlers
packages/core/src/network/SessionManager.ts - Session manager → Shared state: connects shared state
packages/core/src/network/SessionManager.ts - Session manager → Clock synchronization: uses clock sync
packages/core/src/network/SessionManager.ts - Session manager → Player state: updates session state
packages/core/src/network/SessionManager.ts - Sync controls → Session manager: coordinates sessions
- Native app → Native audio engine: uses audio engine
- Native app → Native storage: persists locally