Problem
Practice sessions aren't single-item. A real session jumps between an MP3, a YouTube reference, sheet music, maybe a second tune. Today the session UI assumes one media source (either YouTube OR uploaded audio) and switching mid-session means starting over.
Expected behaviour
A Playlist tab inside the active session lets users queue heterogeneous items:
- MP3 / uploaded audio
- YouTube URL
- Sheet music (PDF or image)
- (Open to other types later — Spotify, local video, etc.)
Behaviour:
- Items can be added, removed, and reordered during the session without stopping the timer.
- Clicking an item immediately swaps the active media source to that item (YouTube player mounts, audio player loads, sheet-music viewer opens, etc.).
- The previously-playing item pauses cleanly; scrub position on the previous item is optionally remembered so jumping back resumes where you were.
- Playlist persists with the instrument project (alongside BPM, notes, song title), so reopening the project restores the queue.
Open design questions (for brainstorming)
- Where does the Playlist tab live? Sidebar in the session view? A toggle that replaces the main media panel with a list?
- Auto-advance when a track finishes, or pure click-through?
- How do sheet-music items behave inside the same surface as a media player (different interaction model)?
- Does the playlist live on the project or per-session? Per-project is more useful; per-session is simpler.
Implementation notes
- Existing session already supports two distinct media modes (
youtube / audio) via mediaSource state. Playlist generalizes this into a list of typed entries.
- Unified item shape probably:
{ id, type: 'youtube' | 'audio' | 'sheet', source: string, title?: string }.
- Persist under the instrument project in localStorage alongside existing fields; schema migration needed for existing projects (empty playlist = fine default).
- Scope: this is a bigger feature than the metronome volume control — expect brainstorm → spec → plan → subagent-driven execution.
Problem
Practice sessions aren't single-item. A real session jumps between an MP3, a YouTube reference, sheet music, maybe a second tune. Today the session UI assumes one media source (either YouTube OR uploaded audio) and switching mid-session means starting over.
Expected behaviour
A Playlist tab inside the active session lets users queue heterogeneous items:
Behaviour:
Open design questions (for brainstorming)
Implementation notes
youtube/audio) viamediaSourcestate. Playlist generalizes this into a list of typed entries.{ id, type: 'youtube' | 'audio' | 'sheet', source: string, title?: string }.