Jonathan Sykes
defc8a7f1a
Proxy YouTube playback through server to fix intermittent 403s
...
Direct googlevideo URLs are bound to the extractor's IP and expire, so the
browser fetching them from a different IP got intermittent 403s on playback.
Route playback through a same-origin /api/play proxy that fetches the stream
server-side (matching the extractor IP) with yt-dlp's own http_headers and
forwards Range headers for seeking; fall back to piping yt-dlp for SABR/itag-18
formats a plain GET can't fetch. Prefer adaptive streams over progressive in
the playback fallback order.
2026-08-23 15:04:18 +08:00
Jonathan Sykes
ee78c8561b
fix playlist name overflow with 2-line clamp
2026-08-17 02:13:51 +00:00
Jonathan Sykes
c08558cfb4
Enhance 5 layout themes with structural CSS — topbar, nav accents, mini-bar, ambient layers
2026-08-17 00:29:52 +00:00
Jonathan Sykes
9c2146aef8
Fix layout theme grid overrides breaking mobile — wrap in min-width:861px
2026-08-17 00:21:50 +00:00
Jonathan Sykes
eb6ed215fe
Add 6 selectable layout themes to Settings (Appearance)
2026-08-16 16:33:26 +00:00
Jonathan Sykes
d01aedd4b2
Record the new playlist and set-list features in the backlog
2026-08-16 13:58:41 +00:00
Jonathan Sykes
8ef16a8b38
Add per-song notes on playlist entries
2026-08-16 13:58:22 +00:00
Jonathan Sykes
14e1d8e3dd
Add service mode set-list view with screen wake lock
2026-08-16 13:51:27 +00:00
Jonathan Sykes
c5f47514ad
Show per-playlist offline status and add a keep-offline pin
2026-08-16 13:45:19 +00:00
Jonathan Sykes
b868dabe27
Add bulk import of a YouTube playlist URL
2026-08-16 13:39:02 +00:00
Jonathan Sykes
27b28f767b
Add shareable single-playlist links with additive import
2026-08-16 13:32:18 +00:00
Jonathan Sykes
57413a07a1
Hide the list pane on the home view until the first search
2026-08-16 12:58:05 +00:00
Jonathan Sykes
5a9304780a
Give the empty-home playlist grid the full pane height instead of a clipped 16:9 box
2026-08-16 08:52:18 +00:00
Jonathan Sykes
4fd68ae88e
Document cache layout, offline thumbnails and test invocation
2026-08-16 08:48:50 +00:00
Jonathan Sykes
49198ff239
Cache video thumbnails for offline use
2026-08-15 07:26:56 +00:00
Jonathan Sykes
fa9ef000b9
Show playlists instead of the branding hero on the empty home
2026-08-15 07:19:46 +00:00
Jonathan Sykes
b2154bd9c4
Add shareable profile link to settings and sidebar
2026-08-15 06:58:43 +00:00
Claude Worker
70460232f0
feat: Add scrubber with A/B markers for video editing/downloading
2026-07-18 17:59:20 +00:00
Claude Worker
046aa67108
feat: Add visual scrubber to video editor
...
Task #69 completed by ClaudeQueue
ClaudeQueue
2026-07-18 17:50:27 +00:00
Claude Worker
8c0776f97d
feat: Add support for editing video
...
Add an Edit
2026-07-18 16:43:15 +00:00
Jonathan Sykes
94dba16ff6
Add plan-queue and run-queue skills
2026-07-16 20:51:51 +08:00
Jonathan Sykes
6fff68884b
add per-song remember-position flag and playlist play-in-full mode
2026-07-14 15:15:11 +08:00
Jonathan Sykes
3afb22b305
document repo map and local dev, add deploy-prod skill
...
- CLAUDE.md gains a repo map, endpoint list, and local dev setup
(server serves only ./public — symlink ../frontend once)
- new deploy-prod skill captures the Dokploy deploy + buildTag
verification flow; track .agents/.claude skills and skills-lock.json
- ignore server/data, test-results, .claude/worktrees
2026-07-11 13:44:57 +08:00
Jonathan Sykes
70b5214ce8
fix intermittent 403 on video save by letting yt-dlp fetch the stream itself
2026-07-11 00:45:37 +08:00
Jonathan Sykes
88c89d66af
fix portrait PWA nav dead while playing by making body the scroll container
2026-07-10 13:55:31 +08:00
Jonathan Sykes
b72c079fb4
respect repeat settings when a-b loop reaches point b
2026-07-04 18:11:21 +08:00
Jonathan Sykes
327a67004d
Show build time in GMT+8 with 'built N ago' in Settings About
2026-07-04 12:49:41 +08:00
Jonathan Sykes
b8c7ad4ad1
fix: let list pane shrink in stacked layout so settings can scroll in mid-width windows
2026-07-03 06:05:16 +08:00
Jonathan Sykes
94140a5433
feat: add passkey-style online profiles for cross-device sync and show build time in About
2026-07-03 05:16:05 +08:00
Jonathan Sykes
048817bcf4
fix: fall back to copy when OPFS move() throws on WebKit and retry failed worker downloads on the main thread
2026-07-03 05:16:05 +08:00
Jonathan Sykes
76f8ec525d
feat: add opt-in save-before-playing setting backed by server-compiled single-file downloads
2026-07-03 00:07:50 +08:00
Jonathan Sykes
ba05f0dafe
fix: make audio the playback clock in dual mode so video rebuffering never pauses or seeks live audio; harden viewport anchor guard and add modal backdrop dismiss
2026-07-02 23:58:42 +08:00
Jonathan Sykes
ed9f93b0b7
fix: stop playback stutter and save failures via async yt-dlp, per-download OPFS workers, lazy playback blobs, GPU composite trims, and landscape pane scrolling
2026-07-02 23:40:49 +08:00
Jonathan Sykes
2af2eebacc
feat: redesign portrait PWA as mobile app UI with thumb-zone transport, bottom-sheet modals, and floating mini-player
2026-07-02 22:38:14 +08:00
Jonathan Sykes
722457312c
fix: re-anchor stray iOS layout-viewport scroll that broke nav taps
2026-07-02 21:48:31 +08:00
Jonathan Sykes
a73781a048
docs: record deploy procedure, update-flow architecture, and data-model quirks
2026-07-02 21:15:35 +08:00
Jonathan Sykes
4a18990058
fix: inject BUILD_TAG into sw.js via regex so a fallback bump cannot freeze the SW version
2026-07-02 21:07:22 +08:00
Jonathan Sykes
e6f032a6f2
feat: add shuffle toggle for upcoming tracks with S shortcut
2026-07-02 21:01:28 +08:00
Jonathan Sykes
6039dc80c1
fix: hash every served frontend file into the build tag so any shell change busts caches
2026-07-02 13:40:36 +08:00
Jonathan Sykes
dd71f6b2ab
fix: fetch and activate the new service worker on Refresh UI when none is waiting yet
2026-07-02 13:40:36 +08:00
Jonathan Sykes
f36f6aeee1
fix: only treat a waiting service worker as an update when a controller exists
2026-07-02 13:40:36 +08:00
Claude Worker
8018060d26
feat: update ready keeps showing even after updating
...
Task #61 completed by ClaudeQueue
ClaudeQueue
2026-07-01 17:40:50 +00:00
Claude Worker
42ff13b135
feat: audio playback issue
...
Task #60 completed by ClaudeQueue
ClaudeQueue
2026-07-01 07:26:33 +00:00
Claude Worker
18ad8152bf
feat: fix repetitive update available prompt
...
Task #58 completed by ClaudeQueue
ClaudeQueue
2026-07-01 06:37:12 +00:00
Claude Worker
395af38246
feat: update ready reloade stuck
...
Task #55 completed by ClaudeQueue
ClaudeQueue
2026-07-01 02:38:45 +00:00
Claude Worker
50cf655b71
feat: fullscreen video button not working in pwa mode
...
Task #52 completed by ClaudeQueue
ClaudeQueue
2026-07-01 02:18:50 +00:00
Claude Worker
ffeef5d520
feat: audio playback intermittent issue
...
Task #50 completed by ClaudeQueue
ClaudeQueue
2026-07-01 01:53:09 +00:00
Claude Worker
7cf3517dd3
feat: ensure ui automatically updates regardless of version number
...
Task #53 completed by ClaudeQueue
ClaudeQueue
2026-06-30 21:14:06 +00:00
Claude Worker
2b195d3b6b
feat: add topbar adjustments for notch devices on pwa
...
Task #47 completed by ClaudeQueue
ClaudeQueue
2026-06-30 20:45:00 +00:00
Jonathan Sykes
d01f51a7d0
fix: send SKIP_WAITING to waiting SW, not active controller, to break reload loop
2026-07-01 04:43:33 +08:00