Commit Graph
100 Commits
Author SHA1 Message Date
vicrodh 8377956cb7 catch GTK init panic and show recovery instructions 2026-03-10 08:51:15 -06:00
vicrodh 2b75c7816b chore: update flake.nix to 1.1.19 and snapcraft source-tag to v1.1.19 2026-03-10 04:17:10 -06:00
vicrodh 808529b57a fix: favorites artists alpha index now scrolls virtualized grid/list correctly 2026-03-10 04:12:00 -06:00
vicrodh ac41832a62 fix: remove unused CSS selectors and button nesting warnings in Home/ForYou tabs 2026-03-10 03:43:20 -06:00
vicrodh 60f738901e fix: add padding and shadow to app icon for Flathub guidelines compliance 2026-03-10 03:34:30 -06:00
vicrodh 863bfc6d82 fix: shorten Flathub summary to <35 chars, update 1.1.19 release notes 2026-03-10 03:28:14 -06:00
vicrodh dd8c994d01 fix: remove deprecated pulseaudio plug from snap, update codename to Limpiando la casa 2026-03-10 03:19:24 -06:00
vicrodh a3bc2cf204 docs: add Scene Discovery and Discovery Tabs to 1.1.19 release notes 2026-03-10 03:03:38 -06:00
vicrodh 71bd97fe83 add flake.nix for NixOS users
Reference Nix flake based on the nixpkgs packaging PR (#498106).
Provides package build and dev shell with all dependencies.
2026-03-10 02:56:03 -06:00
vicrodh f8bbef41aa fix tests for NixOS sandbox compatibility
- 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
2026-03-10 02:54:18 -06:00
vicrodh 2ec36934cf fix APT install instructions: add gpg --dearmor for Ubuntu/Mint compat
Fixes #153 - GPG key needs dearmoring on Ubuntu-based distros like
Linux Mint where apt doesn't handle armored keys directly.
2026-03-10 02:47:09 -06:00
vicrodh 819c1ab03e add static assets: compass icon and radio card shadow overlay 2026-03-10 01:50:27 -06:00
vicrodh 00780fd336 Merge branch 'feature/scene-discover' into pre-release 2026-03-10 01:49:51 -06:00
vicrodh e01bffd24b fix sticky header gap by removing top padding from home-view
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.
2026-03-10 01:49:00 -06:00
vicrodh aac2b9b76d add sticky compact header on scroll with tab navigation and genre filter
Greeting fades out on scroll, replaced by a fixed compact bar with
tab buttons and genre filter pinned to top of scroll area.
2026-03-10 01:39:51 -06:00
vicrodh 1b471675f2 homologate artist card styles in ForYouTab and add Qobuz Radio Station label
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.
2026-03-10 01:37:46 -06:00
vicrodh 4a8e85b098 fix: move settings gear before genre filter for consistent positioning 2026-03-10 01:30:33 -06:00
vicrodh ffbe7474ac fix: greeting inline with header, genre filter on all tabs, enlarge filter
- 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)
2026-03-10 01:30:21 -06:00
vicrodh 72700a9ee7 feat: center tab bar, tab navigation history, persist last tab
- 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
2026-03-10 01:29:23 -06:00
vicrodh 569e06308e fix: rename sidebar Home to Discover in all locales 2026-03-10 01:20:31 -06:00
vicrodh a97c542e3d fix: top tracks card artist image square 130px with shadow overlay 2026-03-10 01:19:08 -06:00
vicrodh 0e31723f5c fix: update sidebar compass icon to match new compass.svg 2026-03-10 01:18:23 -06:00
vicrodh 21f1b04a6f fix: spotlight card row polish
- 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
2026-03-10 01:17:17 -06:00
vicrodh b36f393abe feat: replace spotlight track list with card row (Top Tracks, Radio, Playlists, Albums)
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.
2026-03-10 01:10:47 -06:00
vicrodh 667e6bb8be fix: spotlight buttons use album header action-btn-circle style 2026-03-10 00:58:43 -06:00
vicrodh 21d7bfb589 fix: replace pill-shaped follow button with rounded-corner rect 2026-03-10 00:55:11 -06:00
vicrodh f7e0c617e9 fix: remove monospace font from seekbar timers 2026-03-10 00:50:45 -06:00
vicrodh 4ff814a489 feat: radio card dark gradient, lightest-tone RADIO text, spotlight radio auto-play
- 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
2026-03-10 00:46:50 -06:00
vicrodh 6ed95304de fix: match Your Mixes card gap to album/radio card spacing (22px) 2026-03-10 00:37:05 -06:00
vicrodh 7d51d1991a feat: match radio card size to AlbumCard, diversify radio seeds
- 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
2026-03-10 00:36:29 -06:00
vicrodh 172318b49d fix: radio card art to 110px, add nav arrows to scroll sections
- 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
2026-03-10 00:30:20 -06:00
vicrodh c8cee326c2 feat: redesign Radio Station cards to match iOS reference
- 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)
2026-03-10 00:26:42 -06:00
vicrodh e6e0b18f83 fix: start playback after radio queue creation
All three radio commands (album, artist, track) were setting the queue
but not triggering playback. Add bridge.play_index(0) after set_queue.
2026-03-10 00:26:13 -06:00
vicrodh e108b91f6b feat: replace Home icon with compass SVG in sidebar
Use the custom compass SVG provided for the sidebar navigation icon,
replacing the lucide Home icon. Uses fill=currentColor for theme support.
2026-03-10 00:08:48 -06:00
vicrodh 9780948ca8 feat: add Essentials [Genre] section to For You tab
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.
2026-03-10 00:05:25 -06:00
vicrodh ff109e5c64 feat: add Similar to and Rediscover your Library sections to For You tab
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.
2026-03-09 23:52:53 -06:00
vicrodh b34b809ad5 feat: add album suggestions and forgotten favorites backend commands
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.
2026-03-09 23:50:45 -06:00
vicrodh 61b1bba8d9 feat: add Artists to Follow and Spotlight sections to For You tab
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.
2026-03-09 23:40:24 -06:00
vicrodh 35c4d5a435 feat: implement For You tab Phase 1 with mixes, radio, and reused sections
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.
2026-03-09 23:31:43 -06:00
vicrodh 93e2955dfa fix: use correct i18n keys for tab button labels
Tab buttons were using home.editorPicks ("Albums of the Week") and
home.forYou (missing key) instead of home.tabEditorPicks and
home.tabForYou.
2026-03-09 23:00:52 -06:00
vicrodh 5e71fbc9ed feat: implement Editor's Picks tab with editorial content sections
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.
2026-03-09 22:56:43 -06:00
vicrodh 34be0aa323 feat: add Home/Editor's Picks/For You tab navigation to HomeView
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.
2026-03-09 22:50:41 -06:00
vicrodh af4c0655cf fix: apply custom artist images in ArtistsByLocationView and FavoritesView ungrouped grid
- ArtistsByLocationView: resolve custom images via resolveArtistImage in candidatesToFavoriteArtists
- FavoritesView: ungrouped grid was missing withCustomImages wrapper
2026-03-09 21:49:04 -06:00
vicrodh 93d4c34b87 fix: reduce vertical gap between artist rows from 22px to 11px 2026-03-09 21:43:47 -06:00
vicrodh 0ee16c6652 fix: remove load-more counter since genre filter makes counts inaccurate 2026-03-09 21:43:00 -06:00
vicrodh 4536e4e5d2 feat: overhaul ArtistsByLocationView - hero/compact header, genre popup, albums count, inline load-more
- 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
2026-03-09 21:25:22 -06:00
vicrodh 878e0341ba fix: remove duplicate titlebar double-click maximize handler
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.
2026-03-09 20:55:02 -06:00
vicrodh 23f4373962 fix: add title tooltip to truncated artist names in favorites grid 2026-03-09 20:12:39 -06:00
vicrodh c229631390 fix: favorites album grid overlap and artist grid spacing
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.
2026-03-09 20:11:33 -06:00
vicrodh 4b6978048c feat: adjust card sizes to 210px and gaps to 22px 2026-03-09 20:01:59 -06:00
vicrodh 2552fb6fd8 feat: increase album card size from 180px to 200px
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.
2026-03-09 19:55:22 -06:00
vicrodh 8eb055d06e fix: use 230px images for album cards instead of 600px
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').
2026-03-09 19:51:31 -06:00
vicrodh 12fec1979f feat: re-enable all scene discovery caches
- 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.
2026-03-09 19:15:14 -06:00
vicrodh 6fb141f2ff feat: inline progress bar for load-more in scene discovery
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.
2026-03-09 17:35:51 -06:00
vicrodh faa68d1079 feat: real progress bar and improved loading state for scene discovery
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.
2026-03-09 17:29:14 -06:00
vicrodh 3050999d60 fix: genre filters behind toggle button, restore load-more at 100
- 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)
2026-03-09 17:21:12 -06:00
vicrodh d9258e0b15 fix: standardize back button margins across all views (ADR-004)
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.
2026-03-09 17:18:43 -06:00
vicrodh 75e07c77f0 fix: homologate scene view margins and remove load-more pagination
- Match back button margin-top/bottom (24px) with ArtistDetailView
- Add explicit padding-top/bottom: 0 to scene-view container
- Remove load-more pagination, load 200 artists at once
- Remove unused loadMore function and load-more CSS
2026-03-09 16:30:46 -06:00
vicrodh c790cff019 feat: add genre filter pills to scene discovery view
Extract unique genres from MB tags across all results and display
as clickable pills. Selecting genres filters artists client-side
(AND logic). Shows count ratio when filters active.
2026-03-09 16:27:32 -06:00
vicrodh da225499ef fix: pass known MBID from scene discovery to artist detail view
When navigating from scene discovery to artist detail, pass the
MBID we already have from MusicBrainz instead of resolving by
name. Fixes wrong metadata for homonymous artists (e.g. The
Warning MX vs The Warning US).

Also improve Qobuz validation to request 5 results and pick
the best match by albums_count for name collisions.
2026-03-09 16:21:19 -06:00
vicrodh 74b75c144d feat: filter overly broad genre tags from scene discovery queries
Tags like "latin", "rock", "pop", "electronic" return the entire
country's catalog as noise. These are now excluded from MB search
queries but kept for affinity scoring. If ALL genres are broad,
falls back to using them to avoid empty results.
2026-03-09 15:30:16 -06:00
vicrodh 2a82246f02 fix: scene view margins, flag size, jump-nav, and group dropdown
- Homologate margins with app-wide pattern (padding-left: 18px, padding-right: 8px)
- Flag size increased to 180px circular matching label pic dimensions
- Add alpha jump-nav sticky sidebar for grid view with grouping
- Replace simple group toggle with proper dropdown matching FavoritesView
2026-03-09 15:16:26 -06:00
vicrodh 277ac7a391 feat: rewrite scene discovery view to match Favorites Artists UX
- Country flag header from circle-flags CDN
- Client-side search filtering
- A-Z grouping toggle
- Grid/sidepanel view toggle with album browser
- Back button matching FavoritesView style
- Proper margins and layout matching existing views
- Scene label shows country name only
- Pass countryCode through location context for flag display
2026-03-09 15:04:33 -06:00
vicrodh eb199c9ba1 feat: add country_code to ArtistLocation, fix scene label
Store ISO 3166-1 alpha-2 country code (lowercase) in ArtistLocation
for flag display. Scene label now shows just country name instead of
"Country, City scene".
2026-03-09 14:15:05 -06:00
vicrodh e065af4d7e revert: show precise birth/founding location in sidebar
Restore "Born in: United Kingdom, Brixton" / "Founded in: United
Kingdom, Leyton" in the artist sidebar. The scene discovery search
uses country-level queries regardless, so the sidebar should show
the precise MB location data.
2026-03-09 14:08:07 -06:00
vicrodh 35b1626a7b simplify: search by country instead of subdivision in Lucene
MB Lucene is literal text match only - no hierarchy. Searching by
subdivision (England, California) misses most artists. Now search
directly by country: tag:"heavy metal" AND area:"United Kingdom".
Scoring handles regional relevance.
2026-03-09 14:06:51 -06:00
vicrodh 84bb4f387c feat: include country in Lucene area search for broader results
MB artists have beginarea as specific city (London, Birmingham) and
area as country (United Kingdom), never the subdivision (England).
Now the Lucene query includes the country: tag:"heavy metal" AND
(beginarea:"England" OR area:"England" OR area:"United Kingdom").
This finds all UK heavy metal artists instead of just the 9 that
literally have "England" as their area.
2026-03-09 14:01:43 -06:00
vicrodh 07961504f4 fix: load-more duplicates and stale metadata cache
- Add next_offset to LocationDiscoveryResponse for correct pagination
- Frontend uses MB-level offset instead of displayed artist count
- Frontend deduplicates by mbid when appending load-more results
- Stable sort by score desc + mbid asc for deterministic ordering
- Temporarily disable metadata cache (had stale display_name values)
2026-03-09 13:47:27 -06:00
vicrodh b20f5cd20e feat: show resolved subdivision in artist sidebar instead of birth city
Resolve city to top-level subdivision at metadata time so the artist
sidebar shows "United Kingdom, England" instead of "United Kingdom,
Brixton". Label changed from "Born in"/"Founded in" to "From" to
match the broader regional context of scene discovery.
2026-03-09 13:36:17 -06:00
vicrodh d6796fbe27 feat: walk UP to top-level subdivision for area resolution
Rewrite resolve_parent_subdivision to iteratively walk the hierarchy
until finding the subdivision whose parent is the country.
Brixton -> Lambeth -> Greater London -> England (under UK).
Los Angeles -> California (under US).
Max 5 hops to prevent infinite loops.

Also: bump per_genre_limit to 200, display limit to 50,
fix misleading log (showed original city instead of resolved name).
2026-03-09 13:32:07 -06:00
vicrodh 7aa707e7ee feat: smart area resolution for scene discovery
Resolve cities UP to subdivision level via MB area relations API:
- Leyton -> England, Los Angeles -> California, Brixton -> England
- Uses direction:"forward" to walk "part of" chain upward
- Two-level inline lookup for districts/boroughs (avoids recursive async)
- Bump per_genre_limit to 100 for broader coverage
2026-03-09 13:16:58 -06:00
vicrodh 9696b1d4f4 fix: pass city name separately for MB Lucene search, not compound display_name
Was searching beginarea:"United States, Los Angeles" which returns 0
results. Now passes just "Los Angeles" for the search query and builds
"United States, Los Angeles" display separately for the UI header.
2026-03-09 13:01:08 -06:00
vicrodh 694fd8dd9b feat: rewrite discovery to use genre+area Lucene search instead of blind browse
The browse API returns ALL artists from an area alphabetically with no
genre filtering. For LA that's 15K+ random artists. Now we search
tag:"thrash metal" AND beginarea:"Los Angeles" for each genre, giving
genre-relevant results directly from MusicBrainz.

Also adds dynamic loading messages that cycle through discovery steps
and temporarily disables all scene/validation caching for tuning.
2026-03-09 12:55:17 -06:00
vicrodh 82775ce63a feat: implement v2_discover_artists_by_location pipeline
Full scene discovery pipeline:
1. Resolve area MBID (if not provided) via MB area search
2. Check 30-day scene cache
3. Browse MB artists by area with tags
4. Score candidates with genre affinity algorithm
5. Validate top results against Qobuz catalog
6. Cache validation results individually (30-day TTL)
7. Cache full scene response for offset=0
2026-03-09 12:27:13 -06:00
vicrodh cc65fcc694 fix: artist_type comparison uses lowercase to match serde serialization
The Rust ArtistType enum uses serde(rename_all = "lowercase"), so
"Person" serializes as "person". Frontend was comparing against "Person"
causing all artists (including David Bowie) to show "Founded" instead
of "Born".
2026-03-09 12:18:14 -06:00
vicrodh 0f1595eba5 feat: add ArtistsByLocationView and wire scene discovery navigation
Create the artists-by-location view that displays scene discovery
results using VirtualizedFavoritesArtistGrid. Wire onLocationClick
from ArtistDetailView through +page.svelte to navigate to the new view.
2026-03-09 12:18:02 -06:00
vicrodh 4fc012e21c feat: add origin section to ArtistNetwork sidebar
Shows Founded/Born date and Founded in/Born in location from
MusicBrainz metadata. Location is a clickable link that will
navigate to the artistsByLocation scene discovery view.

Metadata fetched in parallel with relationships, cached 30 days.
Section hidden when MusicBrainz is disabled. Translations added
for en, es, de, fr.
2026-03-09 12:11:34 -06:00
vicrodh 3eb106493f feat: add v2_musicbrainz_get_artist_metadata command
Exposes artist location, life span, and affinity seeds to the
frontend. Caches results for 30 days. Reuses the existing
get_artist_with_relations API call, extracting area fields
that were previously ignored.
2026-03-09 12:07:17 -06:00
vicrodh 96ca640313 feat: add MusicBrainz location discovery backend foundation
- models.rs: Area, ArtistMetadata, ArtistLocation, LocationPrecision,
  AffinitySeeds, LocationCandidate, LocationDiscoveryResponse,
  ArtistBrowseResponse, AreaSearchResponse structs. Added area and
  begin_area fields to ArtistFullResponse and ArtistResult.

- client.rs: browse_artists_by_area (MB browse API by area MBID),
  search_area (resolve area name to MBID).

- cache.rs: mb_artist_metadata (30d), mb_scene_cache (30d),
  mb_qobuz_validation (30d) tables with get/set methods.

- genre_normalization.rs: normalize_genre, noisy tag filtering,
  extract_affinity_seeds, genre_summary. Covers rock, metal,
  electronic, hip-hop, jazz, and other genre families.

- location_discovery.rs: extract_metadata from ArtistFullResponse,
  resolve_location with city/state/country precision, country code
  to name mapping, affinity scoring, scene cache key builder,
  MB date formatting.
2026-03-09 12:04:51 -06:00
vicrodh d2430fa19f fix: migrate localStorage to user-scoped storage in views
ArtistDetailView sort preferences and PlaylistDetailView copied
playlists now use getUserItem/setUserItem for per-user scoping.

Added migrateLocalStorageV2 to handle qbz_ prefixed keys that
the original migration missed (only covered qbz- prefix). Runs
once per user independently from v1 migration.
2026-03-09 11:22:34 -06:00
vicrodh fd3586cf70 refactor: replace setTimeout with tick() for DOM scroll query
handleViewArtistDiscography now uses await tick() instead of
setTimeout(100ms) to wait for the DOM update before scrolling
to the discography section.
2026-03-09 11:05:50 -06:00
vicrodh 620dc10a3a perf: batch queue-next calls into single IPC
Replace per-track loops in queueAlbumNextById,
queuePlaylistNextById, and handleAddAlbumToQueueNext with a
single addTracksToQueueNext() call that sends all tracks in one
invoke to v2_add_tracks_to_queue_next. Backend already reverses
order internally.
2026-03-09 11:02:18 -06:00
vicrodh 05e5b3f811 perf: replace JetBrains Mono with system monospace
Use Courier New/system monospace for --font-mono instead of
bundling JetBrains Mono (270KB). Only used for log output
and duration displays where a custom font adds no value.
2026-03-09 10:59:03 -06:00
vicrodh 34b44f9ca8 perf: filter favoritesStore notifications by trackId
TrackRow instances now subscribe with their trackId, so toggling
one track's favorite only fires that row's callback instead of
all ~25 visible rows. Global listeners (FavoritesView, QueuePanel,
etc.) still receive all notifications.
2026-03-09 10:52:46 -06:00
vicrodh af7b72fde5 fix: add scrollable bottom padding to Favorites virtualized tabs
Add 80px padding-bottom inside the virtual scroll containers for
tracks, albums, and artists tabs. This is scrollable space (not fixed)
that prevents the navigate-to-top button from covering the last item.
2026-03-09 10:39:26 -06:00
vicrodh fe719a657d perf: self-host all fonts, remove Google Fonts CDN dependency
Remove @import for fonts.googleapis.com. Self-host JetBrains Mono,
Oswald, and LINE Seed JP with @font-face declarations. App now works
fully offline without external font requests.
2026-03-09 10:31:48 -06:00
vicrodh 4de2dea30c perf: remove permanent will-change: transform from virtual items
Removes will-change: transform from .virtual-item in all 4 virtualized
list components to avoid promoting 10-20 items to individual compositor
layers permanently.
2026-03-09 10:30:57 -06:00
vicrodh 3348108c40 perf: replace transition: all with specific properties (174 instances)
Replace transition: all across 63 files with explicit property lists
(color, background-color, border-color, opacity). Special cases:
- NowPlayingBar control-btn: includes transform for :active scale
- CoverflowPanel: transform + opacity for 3D carousel
- ImmersiveHeader: max-width + opacity for expand animation
2026-03-09 10:30:47 -06:00
vicrodh 01e0974abc docs: add v1.1.19 release notes and update contributors
- TAG_DETAILS.md (GitHub release body)
- CHANGELOG_HIGHLIGHTS.md (website/compact)
- CHANGELOG_FULL.md (detailed changelog)
- Add @arminfelder to About modal contributors
- Remove stale BETA_TEST_CHECKLIST_1.1.15-rc-1.md
2026-03-09 00:46:02 -06:00
vicrodh 05f1a5ec13 chore: bump version to 1.1.19
- Cargo.toml, tauri.conf.json, package.json, snapcraft.yaml
- Regenerate Cargo.lock and package-lock.json
- Add metainfo release entry for 1.1.19
2026-03-09 00:35:42 -06:00
vicrodh 46a572a0e6 chore: clean up AUR packaging
- Remove aur-source and aur-git PKGBUILDs (non-functional, unmaintained)
- Only qbz-bin (prebuilt binary) is maintained on AUR
- Update maintainer email in aur/PKGBUILD
2026-03-09 00:32:19 -06:00
vicrodh 26f20ceb3f fix: resolve tauri version mismatch and track Cargo.lock
- Update @tauri-apps/api from 2.9.1 to 2.10.1 (matches Rust crate 2.10.x)
- Update @tauri-apps/cli from 2.9.6 to 2.10.1
- Remove Cargo.lock from .gitignore (binary projects should track it)
- Fixes build errors for distro packagers (NixOS, etc.)

Closes #151
2026-03-09 00:23:49 -06:00
vicrodh 804a0fd6d5 feat: subtle corner vignettes using darkest album art color
- Extract darkest saturated pixel from artwork (clamped to very dark)
- Render radial gradients at all 4 corners with source-over blending
- Bottom corners slightly stronger for track info text readability
- Bass-driven radius pulse and per-corner position drift for organic feel
- Dark color lerps smoothly on track change like the main palette
2026-03-08 23:39:02 -06:00
vicrodh 21f70b958a feat: Comet visualizer adopts album art colors and fades on silence
- Extract dominant hues from album artwork via canvas sampling
- Replace all hardcoded hue values with palette-derived colors
- Smooth palette transitions when track changes (lerp on hue circle)
- Add time-based mutation for continuous color evolution
- Wisps, rings, and clouds fade to near-invisible when silent
- Black hole shrinks significantly when no audio energy
2026-03-08 23:34:45 -06:00
vicrodh d6db593018 fix: Neon submenu positioning, width, and hover gap
- Remove shared dropdownFadeIn from submenu (caused translateX jump)
- Add dedicated submenuFadeIn animation (slide from left)
- Anchor submenu at bottom instead of top (no position jump)
- Reduce gap to 2px and add invisible hover bridge
- Match submenu width to parent dropdown width
2026-03-08 23:09:31 -06:00
vicrodh 5b1af6346e feat: amplify Comet visualizer music reactivity
Reduce frontend smoothing (0.72->0.52) for faster audio response.
Lower beat detection thresholds and cooldown for more frequent spawns.
Increase bass/high multipliers on wisp speed, width, alpha, tunnel ring
radius, ring stroke width, feedback zoom, and phase advance. Wisps now
visibly surge on beats, rings pulse with bass, and the whole scene
breathes with the music instead of appearing randomly animated.
2026-03-08 23:03:57 -06:00
vicrodh 219609e528 fix: clean sidebar transition when switching between artists
Reset all sidebar data (relationships, discovery, MB state) immediately
on artist change to prevent stale content flash. Add subtle fade-in
animation on sidebar sections for smooth content appearance.
2026-03-08 22:51:54 -06:00
vicrodh a07ee71090 feat: tag-scoped thumbs down for discovery recommendations
Add dismissal system for "You May Also Like" discovery artists. Dismissals
are scoped to the genre tag used for the search, so dismissing AC/DC from
electronic recommendations won't affect metal recommendations.

- New discovery_dismissals table in reco DB (tag + normalized artist name)
- v2_dismiss_discovery_artist command persists dismissal per tag
- Discovery pipeline filters dismissed artists for both primary and secondary tags
- Backend returns 8 results (frontend shows 6, keeps 2 reserves)
- Thumbs-down button appears on hover, instantly replaces with reserve
- Returns primaryTag in DiscoveryResponse for frontend dismiss context
2026-03-08 22:49:06 -06:00
vicrodh 9f709efdc6 fix: artist network sidebar UX and equalizer paused state
- Sidebar opens by default with localStorage persistence
- Simplified header: "Artist Network" title + PanelRightClose icon
- Hide RELATIONSHIPS section when no data (no empty placeholder)
- Restore sidebar after queue/lyrics panel closes
- Clean up sidebar state on artist view destroy
- TrackRow: show track number instead of frozen bars when paused
2026-03-08 22:40:29 -06:00
vicrodh e13fa48707 feat(immersive): show modal on performance auto-degrade with dismiss option
Replace toast notification with a proper modal dialog when the
performance watchdog degrades background mode. Modal includes a
"Don't show again" checkbox that persists to localStorage.

Threshold: < 15 FPS sustained for 5 seconds (after 3s warmup).
User can always re-enable effects from Settings > Appearance.
2026-03-08 21:55:10 -06:00