From a2466b7d9a49dfd763532b8f673d74699eaebb0b Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 1 Jun 2026 11:30:07 -0400 Subject: [PATCH] feat(web): full-screen NowPlaying view Mirrors Android's NowPlayingScreen. New /now-playing route renders outside the Shell (no top bar, no PlayerBar) so it's a focused full viewport: large square cover, title + linked artist/album, full-width scrubber with timestamps, prominent transport (prev / play-pause / next, with a 56dp circular play button), shuffle + repeat toggles, like button, volume slider, and a queue button that opens the existing queue drawer. Tapping the cover or title area in PlayerBar (compact + desktop) now navigates to /now-playing instead of the album page. Pattern matches Spotify / YouTube Music. The album link stays reachable via the album-name link inside NowPlaying itself, so no nav is lost. Back button in the NowPlaying header uses history.back() with a fallback to /. Empty state when no track is loaded points the user at Home or the Library. Scribe 528, local task #62. --- web/src/lib/components/PlayerBar.svelte | 12 +- web/src/routes/+layout.svelte | 2 +- web/src/routes/now-playing/+page.svelte | 241 ++++++++++++++++++++++++ 3 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 web/src/routes/now-playing/+page.svelte diff --git a/web/src/lib/components/PlayerBar.svelte b/web/src/lib/components/PlayerBar.svelte index 5f22633b..68caddcf 100644 --- a/web/src/lib/components/PlayerBar.svelte +++ b/web/src/lib/components/PlayerBar.svelte @@ -77,10 +77,12 @@ {:else}
- + @@ -229,8 +231,8 @@
- {#if user.value !== null && page.url.pathname !== '/login'} + {#if user.value !== null && page.url.pathname !== '/login' && page.url.pathname !== '/now-playing'} {@render children()} {:else} {@render children()} diff --git a/web/src/routes/now-playing/+page.svelte b/web/src/routes/now-playing/+page.svelte new file mode 100644 index 00000000..54ccd4a1 --- /dev/null +++ b/web/src/routes/now-playing/+page.svelte @@ -0,0 +1,241 @@ + + +{pageTitle(current ? `${current.title} · ${current.artist_name}` : 'Now playing')} + +
+
+ +
Now playing
+
+ + {#if !current} +
+ {:else} +
+
+ +
+ +
+

+ {current.title} +

+

+ + {current.artist_name} + + {#if current.album_title} + · + + {current.album_title} + + {/if} +

+
+ +
+ +
+ {formatDuration(player.position)} + {formatDuration(player.duration)} +
+
+ +
+ + + + + + + + + +
+ +
+
+ +
+ +
+ + +
+ + +
+
+ {/if} +