- credentials: skip encryption/roundtrip tests when config dir is not
writable (NixOS sandbox has no HOME)
- fft_processor: relax last-bar frequency assertion from 15000 to 10000
(with 16 bars, max t=15/16 only reaches ~13kHz)
Fixes#154
Match ArtistDetailView pattern: zero top padding on scroll container,
padding-top moved to home-header instead. Sticky header now sits flush
at the top edge with no gap.
Update follow-artist-card and artist-card CSS to match HomeView's Discover
card style (210px, bg-secondary, border, 12px radius, 140px image, hover).
Add "Qobuz Radio Station" subtitle to spotlight radio card.
- Greeting back inline on the left of the header row
- Genre filter visible on all 3 tabs (shared state)
- Settings gear only on home tab
- Genre filter button enlarged to match tab bar size (13px, 7px 14px)
- Center button group in content area, independent of greeting
- Increase tab button size (padding 7px 16px, font 13px)
- Each tab is an independent history entry (back/forward works)
- Persist last used tab in localStorage across restarts
- Context navigation returns to correct home tab (forYou/editorPicks)
- Rename sidebar Home to Discover in all 4 locales
- Play button in hero now triggers top tracks (not radio)
- Spotlight actions vertically aligned
- TOP TRACKS card: artist image centered (100px circle)
- Playlist image: object-fit contain (shows full rectangular image)
- Radio card: removed "and more" subtitle
- Added nav arrows to spotlight content row
- HorizontalScrollRow items aligned to top
Spotlight section now shows a horizontal scroll row with nav arrows:
- TOP TRACKS card: white bg, black text, loads all top tracks to queue
- RADIO card: homologated to Radio Stations style with color extraction
- Playlist cards: from artist's Qobuz playlists (if any)
- Up to 6 album cards from artist releases (albums, live, EPs)
Removes the old track list and standalone radio card layout.
- Add dark bottom gradient to radio card visual for RADIO text contrast
- Extract lightest color from album art for RADIO text, with bright white
fallback for very dark covers (brightness < 60)
- Update handleSpotlightRadio to call startRadioPlayback for auto-play
- Radio card now 210x210px (same as AlbumCard large), art 130x130px
- Radio stations now mix 3 recent + 3 favorites + 3 top-artist albums
(9 total, shuffled, no duplicates) instead of mirroring recently played
- Build radio stations once when data arrives to avoid re-shuffling
- Reduce radio album art to 110x110px
- Wrap Radio Stations, Rediscover your Library, and Artists to Follow
in HorizontalScrollRow for < > navigation buttons
- Remove redundant custom scroll row CSS
- Shrink album art to 114px centered within 180px card
- Extract dominant color from artwork for card background
- Add AlbumCard-style hover overlay with play button and blur
- Nicer animated spinner during radio creation
- Fix RADIO label centering with padding-left matching letter-spacing
- Remove redundant title overlay (already shown below card)
Add v2_reco_get_top_genres command that queries the user's most-played
genres from reco_events. Frontend loads top genre and fetches
ideal-discography featured albums filtered by that genre.
Wire v2_get_album_suggestions and v2_reco_get_forgotten_favorites backend
commands into ForYouTab. Similar to picks a random recent album as seed.
Rediscover shows favorites not played in the last 30 days.
Add v2_get_album_suggestions (album/suggest endpoint with blacklist filtering)
and v2_reco_get_forgotten_favorites (favorites not played in N days) for the
For You tab's Similar to and Rediscover your Library sections.
Artists to Follow: fetches similar artists from user's top artists,
filters out already-followed, shows circular images with Follow button
that triggers toggleArtistFavorite.
Spotlight: picks random top artist, loads artist page data, shows
hero image with play/profile buttons, top 5 tracks, and artist radio
card with shadow overlay.
Create ForYouTab.svelte component with:
- Your Mixes (DailyQ, WeeklyQ, FavQ, TopQ)
- Radio Stations from recent albums with shadow overlay
- Continue Listening tracks
- Recently Played albums
- Your Top Artists
- Favorite Albums
Add i18n keys for all For You sections in 4 locales.
Wire ForYouTab into HomeView replacing placeholder.
Shows newReleases, editorPicks, qobuzissimes, pressAwards, mostStreamed,
essentialDiscography, and qobuzPlaylists in fixed order without home
customization controls. Removed isSectionVisible guards from data
fetching so editorial data is always available across tabs.
Add tab button group inline with greeting header. Existing home content
shows only on Home tab. Editor's Picks and For You tabs have placeholders.
i18n keys added to all 4 locales.
- Hero header (140px flag) scrolls with content, compact sticky header appears on scroll-past
- Genre filter popup matches GenreFilterPopup style: dark cards, check-circles, title bar, clear footer
- Add qobuz_albums_count to LocationCandidate and display on artist cards
- Move load-more from fixed bottom to inline footer inside virtual scroll
- Add header/footer snippet props and scroll-past detection to VirtualizedFavoritesArtistGrid
- Increase CARD_HEIGHT from 230 to 250 to accommodate albums count line
The titlebar has -webkit-app-region: drag which natively handles
double-click-to-maximize via Tauri. The JS ondblclick handler was
firing in addition to the native one, causing maximize then
immediate restore.
Remove flex-wrap from album grid rows (virtualizer handles row
splitting). Increase artist card height to 230px to prevent row
overlap, truncate artist names to single line with ellipsis.
Update AlbumCard large from 180->200, standard from 162->180.
Increase grid gaps from 14px to 20px across all views.
Update all skeleton/placeholder sizes and virtualized grid constants.
Prioritize image.small (230px) over image.large (600px) for all
AlbumCard artwork and queue track thumbnails. Hero/detail views
retain 600px via getQobuzImageForSize(image, 'large').
- Metadata cache (artist location/genres, 30-day TTL)
- Scene cache (full discovery response for first page, 30-day TTL)
- Qobuz validation cache (per-artist name match, 30-day TTL)
Second visit to same scene loads instantly from cache.
When loading more results, the button is replaced by a compact
progress bar with percentage, reusing the same backend progress
events as the initial load.
Backend emits 'scene-discovery-progress' events with phase, progress
percentage, and detail. Frontend listens and shows a real progress bar
(0-40% MB search, 40-95% Qobuz validation, 100% done).
Loading state: hides header, cycles icons (Music/Globe/Network) at
1.5s intervals in a 96px pulse circle, shows progress bar with
percentage text.
- Genre filter buttons now hidden behind a Filter icon toggle in
the nav bar, with badge showing active filter count
- Revert to 100 results with load-more pagination (200 was too slow)
All text-based .back-btn now use margin-top: 24px, margin-bottom: 24px,
color: var(--text-muted), padding: 0. Fixes inconsistent spacing when
navigating between views. Also change genre filter pills from pill
shape (border-radius: 16px) to rounded rectangle (8px).
13 views fixed + ADR-004 created.