Skip to content

Playlist mode — queue heterogeneous items in an active session #44

@Dandiggas

Description

@Dandiggas

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions