c629ff5836Register devices and report verified holdings to the server
Claude
2026-09-30 07:38:47 +00:00
76e0d2f72dplan: start 013-device-identity-and-holdings-3ba493
Claude
2026-09-30 07:31:18 +00:00
6af96622ddAdd the on-device IndexedDB file registry and hash saves while downloading
Claude
2026-09-30 07:31:18 +00:00
8b7b2a62bdplan: start 012-device-file-registry-288d55
Claude
2026-09-30 07:27:31 +00:00
b56be586eeAdd an incremental SHA-256 library for the browser and node tests
Claude
2026-09-30 07:27:31 +00:00
a27788a80aplan: start 011-browser-sha256-e1793d
Claude
2026-09-30 07:25:56 +00:00
eb3fe45761Count views and evict server copies by retention criteria before LRU
Claude
2026-09-30 07:25:56 +00:00
f12ca87131plan: start 010-views-and-retention-d0c6ca
Claude
2026-09-30 07:18:52 +00:00
ea56d286b3Hash every validated server copy and register it as verified content
Claude
2026-09-30 07:18:52 +00:00
b19193841cplan: start 009-server-content-hash-186e7f
Claude
2026-09-30 07:11:55 +00:00
167df35a97Add P2P tables, config flags and db helpers
Claude
2026-09-30 07:11:55 +00:00
2d98b25340plan: start 008-p2p-schema-and-config-127966
Claude
2026-09-30 07:04:53 +00:00
9cac21afceKeep one long-lived yt-dlp worker process instead of spawning per call
Claude
2026-09-30 07:04:53 +00:00
b8658f3a9dplan: start 007-ytdlp-worker-045800
Claude
2026-09-30 06:58:05 +00:00
556436da34Answer searches from YouTube InnerTube directly with yt-dlp fallback
Claude
2026-09-30 06:58:05 +00:00
d61809f5c4plan: start 006-innertube-search-48066b
Claude
2026-09-30 06:53:48 +00:00
b24366d6c0Warm the stream cache for likely next plays
Claude
2026-09-30 06:53:48 +00:00
67c2f6e46cplan: start 005-warm-streams-on-intent-47b3d3
Claude
2026-09-30 06:50:31 +00:00
e2a60792b9Coalesce concurrent resolveStreams calls for the same video
Claude
2026-09-30 06:50:31 +00:00
617df320c7plan: start 004-coalesce-stream-resolves-a92d40
Claude
2026-09-30 06:47:04 +00:00
663a33573aSelf-host the three web fonts and drop the render-blocking Google Fonts CSS
Claude
2026-09-30 06:47:04 +00:00
1001b85f40plan: start 003-self-host-fonts-89466b
Claude
2026-09-30 06:45:11 +00:00
794410916aServe the app shell gzip/brotli-compressed with ETags
Claude
2026-09-30 06:45:11 +00:00
7229ca16b9plan: start 002-compress-and-etag-shell-bd459c
Claude
2026-09-30 06:41:54 +00:00
7781e0a116Add startup, search and play timing marks plus yt-dlp duration logs
Claude
2026-09-30 06:41:50 +00:00
7b818baf8dplan: start 001-perf-timing-marks-105acc
Claude
2026-09-30 06:39:48 +00:00
c17bd4c9acQueue executable speed and peer-to-peer sharing plans with tested patches and harnesses
Claude
2026-09-29 19:03:12 +00:00
a0ffc1b493Refocus the improvement plan on speed and new features
Claude
2026-09-29 17:40:57 +00:00
92985d209aAdd a phased improvement plan for the app
Claude
2026-09-29 17:35:45 +00:00
56d0838391support shareable search links via a ?q= URL parameter
Jonathan Sykes
2026-09-30 00:19:20 +08:00
74777ef87fshow a lightning icon on recent searches that will load instantly
Jonathan Sykes
2026-09-30 00:18:22 +08:00
6ff9f86bd8cache /api/search results for 3 minutes to skip repeat yt-dlp spawns
Jonathan Sykes
2026-09-30 00:17:44 +08:00
4f0ee45980cache recent search results locally so re-running one is instant
Jonathan Sykes
2026-09-30 00:16:35 +08:00
6480b314d5remember recent searches on-device and show them under the search box
Jonathan Sykes
2026-09-29 22:08:16 +08:00
b6fdff2438drop the boxed background on the saved-offline card badge
Jonathan Sykes
2026-09-28 20:30:13 +08:00
ba697e5d11floor service-mode lyric font size and space out verses
Jonathan Sykes
2026-09-26 02:11:07 +08:00
05e85a0a3fGive untimed lyrics one uniform line size in service mode
Jonathan Sykes
2026-09-24 08:34:09 +08:00
d64c5f2613Lift the section rail clear of the floating mini player
Jonathan Sykes
2026-09-22 14:58:31 +08:00
f411e49e4cFloor the party panel and rail above the bottom nav in CSS so a bad measurement cannot hide their controls
Jonathan Sykes
2026-09-22 14:44:30 +08:00
aa92fb1f05Count a bottom bar that stops above the home indicator when placing the rail
Jonathan Sykes
2026-09-22 14:33:31 +08:00
c9e021a045Keep the watch party panel above the bottom bars so its leave button is reachable
Jonathan Sykes
2026-09-22 14:23:39 +08:00
6c4571cb33Measure the bottom bars so the section rail is never hidden behind the mini player
Jonathan Sykes
2026-09-22 14:09:03 +08:00
530d07d920Add a mobile section rail that follows the scroll, jumps between cards and folds the one you are on
Jonathan Sykes
2026-09-22 13:47:26 +08:00
987697e759Paint saved playlists before the launch sync and swap a background-downloaded update instantly
Jonathan Sykes
2026-09-22 13:27:12 +08:00
691e204d61Pass an effort level to agy and default it to the one that actually finishes
Jonathan Sykes
2026-09-21 23:53:02 +08:00
2a4526578fShow lyrics in place of the video for watch parties and sing-alongs
Jonathan Sykes
2026-09-21 21:03:46 +08:00
0aa6c95494Time correct lyrics from a machine transcript by aligning the two word streams
Jonathan Sykes
2026-09-21 20:16:02 +08:00
e6d14b9eb4Find lyrics with agy when LRCLIB has nothing, keeping the best of several non-deterministic answers
Jonathan Sykes
2026-09-21 11:44:43 +08:00
808306ffceKeep the five transport buttons grouped on one line at every screen width
Jonathan Sykes
2026-09-21 10:33:06 +08:00
1ce3cb8949Document the admin lyric editor, the lyrics skills and the LRCLIB matching guards
Jonathan Sykes
2026-09-20 18:07:08 +08:00
89d35562d3Match LRCLIB on the song title when the channel is not the artist, and stop generic words like Christian or worship from vouching for an artist
Jonathan Sykes
2026-09-20 18:06:04 +08:00
2987f46037Add a scrubbable timed lyric editor to the admin page, LRCLIB regeneration tooling with lyrics skills, and keep the five playback buttons on one row on phones
Jonathan Sykes
2026-09-20 17:55:49 +08:00
b983c6ca3cFetch lyrics from LRCLIB (synced when available) and serve an admin media library of uploaded video and audio with cover art and embedded lyrics
Jonathan Sykes
2026-09-20 05:59:50 +08:00
9c1ec4ac51Add presenter view, stats, lyrics worker, watch party with voice chat, timestamp sharing, soundbites, notes, transcript search, PiP, EQ, sleep fade, gestures and external players; fix the crossfade end-of-song race
Jonathan Sykes
2026-09-20 00:07:12 +08:00
ca07e1fdf1Add gapless and crossfade playlist transitions with a mode toggle, and a waveform seek bar for audio-only playback
Jonathan Sykes
2026-09-19 16:12:33 +08:00
71fc51fb50Add a lyrics-only service mode view with the sung line centred and auto-sized, and a free local faster-whisper script to transcribe saved songs
Jonathan Sykes
2026-09-19 08:33:00 +08:00
b82f17cd46Add phone remote control: pair a phone with a 6-digit code or QR to drive a desktop instance's playback, queue, volume, sleep timer and service mode
Jonathan Sykes
2026-09-18 20:19:00 +08:00
524db986d2Add shared synced lyrics, chapters and personal bookmarks with revision history, API tokens and an admin page
Jonathan Sykes
2026-09-18 18:10:10 +08:00
a20dd0a3a6Replace saved copies that fail to play, reject truncated saves, and re-check the device cache when the app returns to the foreground
Jonathan Sykes
2026-09-18 10:11:20 +08:00
64f45a102dCheck the playlist inbox when the app returns to the foreground and every two minutes while open
Jonathan Sykes
2026-09-18 09:28:01 +08:00
e4ac04cb5cSample two short windows before re-encoding a cached video and skip the full encode when HEVC will not save 15 percent
Jonathan Sykes
2026-09-14 00:51:14 +08:00
8b0060d42aRe-encode cached videos to HEVC when it saves at least 15 percent and serve them only to devices that can decode HEVC
Jonathan Sykes
2026-09-13 21:09:15 +08:00
91dab289c3Show the update banner only when the running build differs from the server and make Refresh UI land the new shell on flaky links
Jonathan Sykes
2026-09-13 17:42:50 +08:00
5fb863ba25Cache every played or saved video on the server via background jobs with a validation gate and a Broken re-download button
Jonathan Sykes
2026-09-13 09:45:01 +08:00
292a0c7e29Show the video inline in service mode and keep audio alive in the background
Jonathan Sykes
2026-09-08 17:36:55 +08:00
a3089dde74Add a service mode shortcut to the now-playing bar and a video panel toggle
Jonathan Sykes
2026-09-08 16:59:43 +08:00
3e1b56610fLet a shared playlist be sent to another user by name
Jonathan Sykes
2026-09-08 15:52:46 +08:00
9366b1749cKeep service mode full-bleed on iOS and hide the player chrome behind it
Jonathan Sykes
2026-09-08 11:55:15 +08:00
765a00b412Drop the old Windows desktop build artifacts from the tree
Jonathan Sykes
2026-09-08 11:44:14 +08:00
e91fe83cc7Fill the phone screen in service mode and open it on the playing song
Jonathan Sykes
2026-09-08 06:51:03 +08:00
06f80debc0Prefer h264 formats for saves so cached copies play on every device
Jonathan Sykes
2026-09-01 07:02:57 +08:00
a159c1e642Note deferred cookies-jar work for the YouTube bot gate in the backlog
Jonathan Sykes
2026-08-27 10:28:48 +08:00
d073d20060Retry yt-dlp against alternate player clients when YouTube demands sign-in
Jonathan Sykes
2026-08-27 07:22:02 +08:00
94fff8f862Report live streams as unsupported instead of an empty quality list
Jonathan Sykes
2026-08-24 01:07:18 +08:00
c141959654Serialize saves, disable idle timeout, cap savable length at 3h
Jonathan Sykes
2026-08-24 00:21:18 +08:00
04c419d151Coalesce save downloads, kill them on disconnect, refuse live and over-long videos
Jonathan Sykes
2026-08-23 23:50:10 +08:00
ea9e372c1eRate-limit save downloads so they no longer starve playback
Jonathan Sykes
2026-08-23 23:13:45 +08:00
d1ba9d1e9cFix play proxy cancel crashing the server on client disconnect
Jonathan Sykes
2026-08-23 22:54:31 +08:00
831063125dEnable bun as yt-dlp JS runtime to avoid throttled stream URLs
Jonathan Sykes
2026-08-23 22:41:37 +08:00
8177f5c665Chunk playback proxy at 10MB and merge adaptive streams for saves
Jonathan Sykes
2026-08-23 15:43:01 +08:00
c8a9755e93Restrict playback proxy to direct https streams, prefer adaptive
Jonathan Sykes
2026-08-23 15:15:02 +08:00
defc8a7f1aProxy YouTube playback through server to fix intermittent 403s
Jonathan Sykes
2026-08-23 15:01:28 +08:00
ee78c8561bfix playlist name overflow with 2-line clamp
Jonathan Sykes
2026-08-17 02:13:51 +00:00
c08558cfb4Enhance 5 layout themes with structural CSS — topbar, nav accents, mini-bar, ambient layers
Jonathan Sykes
2026-08-17 00:29:52 +00:00
9c2146aef8Fix layout theme grid overrides breaking mobile — wrap in min-width:861px
Jonathan Sykes
2026-08-17 00:21:50 +00:00
eb6ed215feAdd 6 selectable layout themes to Settings (Appearance)
Jonathan Sykes
2026-08-16 16:33:26 +00:00
d01aedd4b2Record the new playlist and set-list features in the backlog
Jonathan Sykes
2026-08-16 13:58:41 +00:00
8ef16a8b38Add per-song notes on playlist entries
Jonathan Sykes
2026-08-16 13:58:22 +00:00
14e1d8e3ddAdd service mode set-list view with screen wake lock
Jonathan Sykes
2026-08-16 13:51:27 +00:00
c5f47514adShow per-playlist offline status and add a keep-offline pin
Jonathan Sykes
2026-08-16 13:45:19 +00:00
b868dabe27Add bulk import of a YouTube playlist URL
Jonathan Sykes
2026-08-16 13:39:02 +00:00
27b28f767bAdd shareable single-playlist links with additive import
Jonathan Sykes
2026-08-16 13:32:18 +00:00
57413a07a1Hide the list pane on the home view until the first search
Jonathan Sykes
2026-08-16 12:58:05 +00:00
5a9304780aGive the empty-home playlist grid the full pane height instead of a clipped 16:9 box
Jonathan Sykes
2026-08-16 08:52:18 +00:00
4fd68ae88eDocument cache layout, offline thumbnails and test invocation
Jonathan Sykes
2026-08-16 08:48:50 +00:00
49198ff239Cache video thumbnails for offline use
Jonathan Sykes
2026-08-15 07:26:56 +00:00
fa9ef000b9Show playlists instead of the branding hero on the empty home
Jonathan Sykes
2026-08-15 07:19:46 +00:00
b2154bd9c4Add shareable profile link to settings and sidebar
Jonathan Sykes
2026-08-15 06:58:43 +00:00
70460232f0feat: Add scrubber with A/B markers for video editing/downloading
Claude Worker
2026-07-18 17:59:20 +00:00
046aa67108feat: Add visual scrubber to video editor
Claude Worker
2026-07-18 17:50:27 +00:00