From 507cffbe570941e7d7ba06de36ee5a54713d0a59 Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 4 Oct 2026 07:12:19 -0400 Subject: [PATCH] Web: Sign in with Last.fm and explain the Spotify beta limit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01MzFywujuH9TiuXbr9vjoX8 --- apps/web/src/app/settings/page.tsx | 35 +++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/apps/web/src/app/settings/page.tsx b/apps/web/src/app/settings/page.tsx index 78e1c8c..64a1ae2 100644 --- a/apps/web/src/app/settings/page.tsx +++ b/apps/web/src/app/settings/page.tsx @@ -95,7 +95,9 @@ function ProfileForm({ me }: { me: MeDTO }) { function Connections() { const params = useSearchParams(); const { data: connections = [], mutate } = useSWR('/connections', fetcher); - const [error, setError] = useState(params.get('error')); + const errorParam = params.get('error'); + const spotifyLimited = errorParam === 'spotify_limited'; + const [error, setError] = useState(spotifyLimited ? null : errorParam); const byProvider = new Map(connections.map((c) => [c.provider, c])); const run = async (fn: () => Promise) => { @@ -108,7 +110,7 @@ function Connections() { } }; - const connectOAuth = (provider: 'spotify' | 'plex') => + const connectOAuth = (provider: 'spotify' | 'plex' | 'lastfm') => run(async () => { const { url } = await api<{ url: string }>(`/connections/${provider}/authorize`, { body: { client: 'web' } }); window.location.href = url; @@ -187,6 +189,16 @@ function Connections() { )} + {spotifyLimited && ( +
+ Spotify sign-in is limited during beta. Spotify only lets a few accounts sign in to new apps + directly. You can still share Spotify through Last.fm: sign in to Last.fm below, then{' '} + + connect “Spotify Scrobbling” on Last.fm + + . +
+ )} {(['lastfm', 'listenbrainz'] as const).map((p) => (
@@ -202,8 +214,19 @@ function Connections() {
{byProvider.has(p) ? ( - + + ) : p === 'lastfm' ? ( + ) : (
@@ -214,10 +237,10 @@ function Connections() { ))} -
+
Apple Music -
Coming with the iOS app
+
{byProvider.has('apple_music') ? status('apple_music') : 'Connect from the musicshare iPhone app (one tap)'}