Commit Graph

21 Commits

Author SHA1 Message Date
Claude Worker
8c0776f97d feat: Add support for editing video
Add an Edit
2026-07-18 16:43:15 +00: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
e6f032a6f2 feat: add shuffle toggle for upcoming tracks with S shortcut 2026-07-02 21:01:28 +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
d9371fdea4 feat: fix portrait mode design in pwa — YouTube-style bottom bar
Task #46 completed by ClaudeQueue

ClaudeQueue
2026-06-30 17:02:25 +00:00
Claude Worker
02153d877d feat: add portrait orientation design for mobile that only triggers in portrait pwa mode
Task #42 completed by ClaudeQueue

ClaudeQueue
2026-06-30 06:51:31 +00:00
ClaudeQueue
05e78677b0 feat: side bar playlist and other items not present on some screensizes. make completely responsive
Task #40 completed by ClaudeQueue

ClaudeQueue
2026-06-30 01:06:54 +00:00
Jonathan Sykes
84d6487125 feat: wire up WEB-mode OPFS offline cache for PWA
The PWA conversion shipped sw.js, opfs.js, manifest and icons, but app.js
was never updated to use them — it still routed cache_* calls through the
native bridge (call('cache.list', ...)), which throws 'No native bridge
available' in a browser. That surfaced as 'Offline cache unavailable /
not available in this build' on the Saved videos and Settings pages.

- Add WEB mode detection (no Tauri/zero bridge present)
- Route cache_* through OPFS (opfsDownload/Status/List/Delete/Clear)
- Proxy downloads via /api/download so the browser never hits YouTube CDN
- Load fingerprint.js + opfs.js; add manifest link and PWA meta tags
- Relax CSP to allow blob: media/img and worker-src 'self' for the SW
2026-06-30 08:37:45 +08:00
Jonathan Sykes
20cd2f29ba feat: sleep timer, A-B loop, related panel, smart playlists, history delete/search, batch ops, auto-backup 2026-06-21 18:43:26 +08:00
Jonathan Sykes
3ad2e40606 Refresh Windows release artifacts and sync build outputs 2026-06-21 16:15:30 +08:00
Jonathan Sykes
f497eecebd Merge branch 'main' of ssh://git2.hesed.sbs:6612/josh/ytplayer
# Conflicts:
#	frontend/app.js
2026-06-21 15:43:45 +08:00
Jonathan Sykes
38511fa450 feat: queue, channel view, downloads/saved pages, repeat/loop, accessibility, perf, multithreading 2026-06-21 15:39:58 +08:00
Claude Worker
95dc9e3f98 feat: Prevent UI hanging during video save or playlist add
Task #1 completed by ClaudeQueue

ClaudeQueue
2026-06-18 18:43:48 +00:00
Jonathan Sykes
c1855a1a91 Add persistent mini now-playing bar
Fixed bar at bottom of window when video is playing. Shows title,
channel, progress, play/pause toggle. Click to restore player view.

Files:
- frontend/index.html: mini-bar markup
- frontend/app.js: showMiniBar/hideMiniBar/updateMiniBar, wiring
- frontend/styles.css: .mini-bar, .mini-bar-inner, .mini-progress styles
2026-06-14 15:18:57 +08:00
Jonathan Sykes
4376cd9e88 Add up-next queue panel
Shows upcoming videos in the autoplay queue below now-playing meta.
Clickable to jump to any video. Hidden when queue has 1 item or empty.
Updates on playFromList, playNext, playPrev. Hidden in empty player state.

Files:
- frontend/index.html: upnext section in player pane
- frontend/app.js: renderUpNext(), wired into playFromList/playNext/playPrev
- frontend/styles.css: .upnext, .upnext-item, .upnext-list styles
2026-06-14 14:44:52 +08:00
Jonathan Sykes
a4d6b825d5 Replace single toast with stacked toast queue
Multiple toasts can appear simultaneously, capped at 3. Oldest
toast auto-evicts when cap is reached. Each toast auto-dismisses
with a fade-up exit animation.

- frontend/app.js: toast() now creates DOM elements in toastContainer
- frontend/index.html: single #toast replaced with #toastContainer
- frontend/styles.css: .toast-container flexbox row, .toast-exit animation
2026-06-14 14:36:07 +08:00
Jonathan Sykes
c676786144 Add keyboard-shortcut help overlay
Press '?' to open a styled overlay showing all keyboard shortcuts,
Esc to close. Lists Space (play/pause), arrow keys (seek/volume),
F (fullscreen), M (mute), ? (help), Esc (close).

Files:
- frontend/app.js: toggleShortcutHelp(), wireShortcutHelp(), '?' and Esc handlers
- frontend/index.html: shortcut-overlay markup with .shortcut-grid
- frontend/styles.css: .shortcut-overlay, .shortcut-panel, .shortcut-row, kbd styles
2026-06-14 14:19:42 +08:00
Jonathan Sykes
4d5d105e70 Redesign landing page: hero with gradient brand wordmark, value pills (no ads / no sign-in / offline playlists), and clickable quick-search chips; refresh Windows installers 2026-06-14 12:03:14 +08:00
Jonathan Sykes
63560a8e61 Add offline cache & preload, Save/add-to-playlist UI, Settings page; player stream fallback + progressive-first ordering; protocol-asset feature; refresh Windows installers 2026-06-14 11:36:01 +08:00
Jonathan Sykes
bac6665b3d Add Windows support via a Tauri (WebView2) shell
zero-native has no Windows target yet, so add a parallel Tauri shell
for Windows that reuses the same frontend:

- src-tauri/: Rust commands (yt_search, yt_streams, store_load,
  store_save) mirroring the Zig bridge; spawns bundled yt-dlp.exe with
  CREATE_NO_WINDOW; data stored in app_data_dir
- frontend bridge now auto-detects window.__TAURI__ vs window.zero and
  routes accordingly; CSP updated for Tauri IPC
- tauri.conf.json bundles yt-dlp.exe as a resource and builds nsis/msi
- scripts/make-icon.js generates appicon.png for 'tauri icon'
- README: native Windows build steps + WSLg fallback note
2026-06-14 10:04:27 +08:00
Jonathan Sykes
a171cae417 Add ad-free YouTube player built on zero-native
Desktop YouTube player with no login and no ads. Extracts direct
video/audio streams with yt-dlp and plays them in a native window via
zero-native (Zig + system WebView) for a tiny footprint vs Electron.

- Dual-stream engine: muted video synced with separate audio track for
  high quality without ffmpeg muxing; progressive fallback
- On-device playlists, watch history, audio-only mode
- Full custom controls: seek, volume, speed, quality, fullscreen, queue
- Zig bridge handlers spawn yt-dlp and return slimmed JSON to the web UI
- Cinematic dark UI: Bricolage/Hanken/JetBrains Mono, vermilion accent
2026-06-13 23:33:16 +08:00