Commit Graph

123 Commits

Author SHA1 Message Date
Jonathan Sykes
9a37715da4 Unify transport controls with themed SVG symbols and accessible playback states 2026-10-09 15:54:22 +08:00
Jonathan Sykes
4ba5130c80 Merge Phase 6 and reconcile offline completion, response capture and contract tests 2026-10-09 15:12:14 +08:00
Jonathan Sykes
2001e77cee Use theme-aware SVGs for download and offline actions 2026-10-09 14:28:42 +08:00
Jonathan Sykes
4b1f5204f8 Restore native boot scheduling without an extra core request 2026-10-08 11:25:03 +08:00
Jonathan Sykes
a86fa1cebe Cache the page-owned app response before starting the worker 2026-10-08 09:04:20 +08:00
Jonathan Sykes
e7a7cdc6b9 Preload classic layout CSS before the blocking head loader 2026-10-08 08:50:51 +08:00
Jonathan Sykes
b335f95f45 Load Stats view separately from listening-stat tracking 2026-10-08 04:46:40 +08:00
Jonathan Sykes
0475a1826c Load sharing and external-player tools on demand 2026-10-08 04:44:35 +08:00
Jonathan Sykes
94ea211605 Lazy-load watch-party sessions behind synchronous playback hooks 2026-10-08 04:42:35 +08:00
Jonathan Sykes
8e7fa1959a Load remote UI on intent and preserve synchronous host hooks 2026-10-08 04:41:30 +08:00
Jonathan Sykes
5fb9564468 Load the presenter client only on presenter entry 2026-10-08 04:39:52 +08:00
Jonathan Sykes
3c9a24ae45 Extract eager shell and shared view renderers before app boot 2026-10-08 04:38:37 +08:00
Jonathan Sykes
fab444b7b8 Start font preloads before the layout bootstrap 2026-10-08 04:12:16 +08:00
Jonathan Sykes
c1a546a5c6 Keep shared layout visibility defaults in eager styles 2026-10-08 03:56:47 +08:00
Jonathan Sykes
40b92ebc0d Request selected layout styles before common CSS blocks the bootstrap 2026-10-08 03:50:57 +08:00
Jonathan Sykes
5d6a1545df Load layouts and optional features from staged asset caches 2026-10-08 01:29:50 +08:00
Jonathan Sykes
54a07a0a2a Synchronize verified assets incrementally and guard update activation 2026-10-07 23:40:20 +08:00
Jonathan Sykes
be1d939afd Merge branch 'codex/prewarm-next'
# Conflicts:
#	frontend/index.html
2026-10-07 22:44:11 +08:00
Jonathan Sykes
d65b9e032a Prewarm upcoming queue streams 2026-10-07 16:30:15 +08:00
Jonathan Sykes
233bf94e4c Pause non-playback UI timers while the page is hidden 2026-10-07 03:30:57 +08:00
Jonathan Sykes
0bda242a98 Add Framework7 Swipe layout with swipeout rows, up-next sheet and mini-bar gestures 2026-10-06 02:01:56 +08:00
Jonathan Sykes
4e5b1584c6 Restore Bento theme integration lost during recovery 2026-10-04 22:47:33 +08:00
Jonathan Sykes
e100d47143 Style Bento library rows and download recovery controls 2026-10-04 22:42:22 +08:00
Jonathan Sykes
838798ca9b Build the new Bento Hub shell and browsing tiles 2026-10-04 03:09:15 +08:00
Jonathan Sykes
04b620e3c7 Polish download action buttons in Classic and Glass Stage 2026-10-04 02:48:08 +08:00
Jonathan Sykes
2042c9b6fc Recover related videos with bounded discovery and retryable fallbacks 2026-10-04 02:42:02 +08:00
Jonathan Sykes
df4acfc9f1 Keep iPhone audio playing through background handoffs 2026-10-04 02:29:10 +08:00
Jonathan Sykes
536555e12d Add selectable fullscreen orientation and an iPhone landscape overlay 2026-10-04 02:26:54 +08:00
Jonathan Sykes
3c0adb2577 Keep Glass Stage section navigation and panel content clear of playback chrome 2026-10-03 21:45:34 +08:00
Jonathan Sykes
5661eea6e6 Preview compatible fragmented MP4 transfers while saving the verified copy 2026-10-03 20:43:03 +08:00
Jonathan Sykes
08ff8398b5 Transfer saved songs directly between paired devices with resumable OPFS writes 2026-10-03 20:32:45 +08:00
Jonathan Sykes
5e78374efb Explain save failures and keep download diagnostics available 2026-10-03 19:23:07 +08:00
Jonathan Sykes
f2c9459a54 Unify Glass Stage navigation and page controls with Now Playing 2026-10-03 18:19:56 +08:00
Jonathan Sykes
8ea92c1aac Report phone playback metadata once per browser session 2026-10-03 17:56:01 +08:00
Jonathan Sykes
ca836e0cd2 Align saved video actions and confirm storage removal 2026-10-03 16:10:46 +08:00
Jonathan Sykes
cf9b6f4133 Clarify download states and make the empty page useful 2026-10-03 16:05:42 +08:00
Jonathan Sykes
0374e19396 Add lazy piano transcription and optional leased server worker 2026-10-03 15:47:53 +08:00
Jonathan Sykes
d4354d220e Preserve and display bilingual and phonetic lyric cues 2026-10-03 15:20:52 +08:00
Jonathan Sykes
c8ab741d72 Upgrade to ten-band EQ with migrated curves and headphone widening 2026-10-03 15:16:09 +08:00
Jonathan Sykes
0b3e82a768 Add voice search and large-control Car mode 2026-10-03 15:10:30 +08:00
Jonathan Sykes
172e8231f0 Import worship setlists with confirmed song matches and keys 2026-10-03 15:09:51 +08:00
Jonathan Sykes
de89508bf4 Add centre-panned vocal reduction to live and saved audio 2026-10-03 14:59:44 +08:00
Jonathan Sykes
7d84fdb3dc Add transparent OBS lyrics output through presenter pairing 2026-10-03 14:58:20 +08:00
Jonathan Sykes
05e05ebace Add learnable MIDI pedal controls with hot-plug support 2026-10-03 14:56:06 +08:00
Jonathan Sykes
b72d2e36a6 Add floating synced lyrics with picture-in-picture fallback 2026-10-03 14:54:23 +08:00
Jonathan Sykes
d7721045fb Add host-approved party suggestions and live upvotes 2026-10-03 14:52:10 +08:00
Jonathan Sykes
75dbc468cc Add download controls and device storage breakdown 2026-10-03 14:47:57 +08:00
Jonathan Sykes
09ae6a2a85 Organize settings into searchable sections with responsive navigation 2026-10-03 14:42:39 +08:00
Jonathan Sykes
5d94acf3f0 Chapter picker: tap the chapter badge to jump to any chapter
The CH badge by the scrubber is now a button opening a list of every chapter
(number, title, start time); the playing one is highlighted and scrolled into
view, a tap seeks there (and resumes if paused). Works with shared chapters and
YouTube's.
2026-10-03 07:50:15 +08:00
Jonathan Sykes
ea9e11d054 Loudness levelling (EBU R128, -14 LUFS) measured in the browser with WebAssembly
- frontend/wasm/loudness.c → loudness-wasm.js (1.5 KB, base64-embedded; built by
  scripts/build-loudness-wasm.sh with clang or Zig's clang): K-weighting + 100 ms
  energy steps. loudness.js does the 400 ms gating (abs -70 LUFS, rel -10 LU)
  with an identical JS fallback. EBU Tech 3341 sine cases measure -23.0/-33.0
  on both engines; a real track reads -21.7 vs ffmpeg ebur128 -21.8.
- The device measures from audio it already has (saved copy or the server
  cache's m4a sidecar, songs up to 12 min, decoded natively at 22.05 kHz) and
  reports the number to /api/loudness, so each song is measured once for
  everyone; the server stores numbers only, no audio processing.
- The EQ graph gains a level stage (gain -> limiter) that eases each track
  toward -14 LUFS (-12..+9 dB). Settings -> Playback -> Level volume: on by
  default on Android/desktop, opt-in on iPhone (Web Audio stops sound when the
  screen locks there).
2026-10-03 07:44:44 +08:00