Files
ytplayer/BACKLOG.md

4.5 KiB
Executable File

YT Player — Improvement Backlog

The /loop works through this top-to-bottom, one item per iteration. Tick an item ([x]) only after it builds, verifies, and is committed + pushed. Add new ideas to the bottom as they come up.

Build & verify protocol (every iteration)

  1. Edit the canonical source in WSL (~/development/personal/ytplayer).
  2. Sync changed files individually into C:\ytbuild\ytplayer — never Copy-Item -Recurse onto an existing dir (it nests as frontend\frontend).
  3. npx tauri build in C:\ytbuild\ytplayer.
  4. Launch with --remote-debugging-port=922x and verify via CDP/screenshot (retry the launch a few times — Smart App Control is intermittent).
  5. Only if it builds and verifies: refresh releases/, commit (no AI attribution), git push origin main, then tick the item here.

UX / polish

  • Empty-state designs for empty playlists and empty history (match the new hero).
  • Loading skeletons for search results instead of a bare "Searching…".
  • Keyboard-shortcut help overlay (press ?), listing space / arrows / f / m.
  • Download/preload progress indicator on cards (percent or a bar, not just a pulse).
  • Remember and restore the last playback position per video.
  • Toast queue (stack multiple toasts instead of replacing).

Features

  • Drag-to-reorder videos within a playlist.
  • "Up next" queue panel showing the autoplay queue.
  • Persistent mini now-playing bar when browsing other views.
  • Cache size cap in Settings (auto-evict oldest past a limit).
  • Export / import playlists as JSON.
  • More / trending quick-search chips on the hero, rotated.
  • Share a single playlist by link, imported additively (never replaces).
  • Bulk-import a YouTube playlist URL into a new playlist.
  • Per-playlist "available offline" status + a keep-offline pin.
  • Service mode: set-list view with a screen wake lock.
  • Per-song notes (key / capo / arrangement cues) on playlist entries.

Robustness

  • Cookies jar for the YouTube bot gate (deferred 2026-08-27 — not being tackled yet). runYtdlpResilient() already recovers from "Sign in to confirm you're not a bot" by retrying against YTDLP_FALLBACK_CLIENTS, so saves no longer fail. The residual cost: while the gate is active, tv_simply/android_vr/mweb typically expose only progressive itag 18, so those saves land at 360p instead of 720p (web_embedded keeps the full adaptive ladder when it works). Fix would be to supply a Netscape cookies jar so the default client stays available: the server already honours YTDLP_COOKIES=<path> when the file exists — what's missing is mounting the jar into the container (compose volume + env) and a refresh story for when the cookies expire. Only worth doing if 360p saves become noticeable in practice.
  • Sanitize video_id in cache_download (reject path separators).
  • Gate the embedded yt-dlp behind a build flag so debug builds compile faster.
  • Surface yt-dlp extraction failures with a retry button.

Done

  • Empty-state designs for empty playlists and empty history (match the new hero). 460aaae
  • Loading skeletons for search results instead of a bare "Searching…". da2ad27
  • Keyboard-shortcut help overlay (press ?), listing space / arrows / f / m. c676786
  • Download/preload progress indicator on cards (percent or a bar, not just a pulse). 81aced9
  • Remember and restore the last playback position per video. ddfa149
  • Toast queue (stack multiple toasts instead of replacing). a4d6b82
  • Drag-to-reorder videos within a playlist. 0ba0f56
  • "Up next" queue panel showing the autoplay queue. 4376cd9
  • Persistent mini now-playing bar when browsing other views. c1855a1
  • Cache size cap in Settings (auto-evict oldest past a limit). d15d902
  • Export / import playlists as JSON. d15d902
  • More / trending quick-search chips on the hero, rotated. c6b8dfc
  • Sanitize video_id in cache_download (reject path separators). c6b8dfc
  • Gate the embedded yt-dlp behind a build flag so debug builds compile faster. d15d902
  • Surface yt-dlp extraction failures with a retry button. c6b8dfc
  • Share a single playlist by link, imported additively. 27b28f7
  • Bulk-import a YouTube playlist URL. b868dab
  • Per-playlist offline status + keep-offline pin. c5f4751
  • Service mode set-list view with screen wake lock. 14e1d8e
  • Per-song notes on playlist entries. 8ef16a8