Commit Graph
100 Commits
Author SHA1 Message Date
vicrodh 60fcc7253d fix: playlist track quality column alignment and CD Quality fallback
- TrackRow: Always render quality column to maintain consistent layout
- PlaylistDetailView: Show exact quality (24bit/96kHz) when available
- PlaylistDetailView: Fall back to 'Hi-Res' or 'CD Quality' label
- Prevents column shift when quality data is missing
2026-01-11 19:45:42 -06:00
vicrodh c06ef5541f fix: queue panel scroll detection with wheel event capture
- Added onwheel stopPropagation on .content to capture scroll events
- Scroll on .content (not .tracks) so entire queue area scrolls
- Thin 4px scrollbar visible when content overflows
- Scrollbar brightens on hover (0.15 → 0.25 → 0.4)
- overscroll-behavior: contain for isolation
2026-01-11 19:40:18 -06:00
vicrodh 411cc5176f fix: queue scroll now works on tracks list with thin auto-hide scrollbar
- Moved scroll from .content to .tracks container
- Added wheel event stopPropagation to prevent main content scroll
- Thin 4px scrollbar that brightens on hover
- overscroll-behavior: contain for scroll isolation
- Fixed flex layout so tracks list fills available space
2026-01-11 19:37:41 -06:00
vicrodh 70f03a1003 fix: quality badge accuracy and queue drag-to-reorder
Quality Badge Fix:
- Extended BackendQueueTrack with hires, bit_depth, sample_rate fields
- Updated all queue track builder functions to pass quality data
- Fixed quality badge showing CD instead of Hi-Res for playlist tracks
- Extended session persistence to save/restore quality info

Queue Drag-to-Reorder:
- Added move_track function to Rust QueueManager
- Added move_queue_track Tauri command
- Implemented HTML5 drag-and-drop in QueuePanel
- Visual feedback with drag-over indicator and dragging opacity
- Disabled drag when search filter is active
- Prevented text selection during drag operations
2026-01-11 19:28:34 -06:00
vicrodh 24c8ee5cad fix(queue): scroll isolation and UX improvements
- Add overscroll-behavior: contain to prevent scroll chaining to main content
- Add visible fancy scrollbar (webkit) with hover effect
- Move search bar below Now Playing section for better UX
- Scroll now works independently when cursor is over queue panel
2026-01-11 19:12:03 -06:00
vicrodh f9cf4f06cd feat(ui): queue panel improvements and playlist album column
Queue Panel:
- Fix scroll by constraining panel between TitleBar and NowPlayingBar
- Add search bar to filter entire queue (not just first 20)
- Reduce font sizes by 1px for compact layout
- Reduce item height from 48px to 40px

TrackRow:
- Add album prop to display album column

PlaylistDetailView:
- Pass album data to TrackRow for album column display
2026-01-11 18:51:38 -06:00
vicrodh 4d2fdce1aa fix(ui): playlist navigation and title font sizes
- Fix clicking another playlist from sidebar while on playlist view
  (was not notifying listeners because view type hadn't changed)
- Use $effect to reload playlist data when playlistId prop changes
- Reduce playlist title from 48px to 24px
- Reduce album title from 26px to 24px
- Max font size is now 24px (same as home greeting)
2026-01-11 18:43:37 -06:00
vicrodh a9f80a15b0 docs: update roadmap - playlist import fully working 2026-01-11 18:41:00 -06:00
vicrodh 00a7c97322 fix(playlist-import): fix Tidal API rate limiting and chunk size
- Add 200ms delay between API calls to avoid 429 Too Many Requests
- Reduce chunk size from 50 to 20 (Tidal API limit for filter[id])
- Improve error messages to include response body for debugging
2026-01-11 18:40:45 -06:00
vicrodh 25fe2e363f docs: update roadmap with playlist import status 2026-01-11 17:43:17 -06:00
vicrodh 22cf6d9051 feat(playlist-import): integrate Codex playlist import feature
Cherry-pick and integrate playlist import from playlist-import-impl branch:
- Add playlist_import Rust module with providers (Spotify, Apple, Tidal, Deezer)
- Add track matching algorithm (ISRC first, then fuzzy matching)
- Add PlaylistImportModal.svelte with progress log UI
- Wire up import button in Sidebar
- Add modal state management in uiStore
- Register Tauri commands for preview and execute

Original implementation by Codex, integrated manually due to branch divergence.
2026-01-11 17:42:52 -06:00
vicrodh 4b7e6b9c17 Add launch roadmap documentation
Document 6-point roadmap for v1.0 launch:
1. Session persistence (partial)
2. Device select/passthrough/exclusivity (done)
3. Tray icon (pending)
4. MiniPlayer (pending)
5. DLNA/AirCast (ChromeCast only)
6. Playlist management (pending)

Also documents completed features from recent sessions.
2026-01-11 17:04:16 -06:00
vicrodh 7bb2b20767 Show quality info on separate line in track notifications 2026-01-11 12:51:46 -06:00
vicrodh f9baecfbdb Pass bitDepth and samplingRate to playTrack in all handlers 2026-01-11 12:41:50 -06:00
vicrodh bc7e13d756 Improve track notifications with artwork and quality info 2026-01-11 12:38:21 -06:00
vicrodh 2d908c7b12 Remove unnecessary polling from AudioOutputBadges, refresh on hover instead 2026-01-11 12:32:23 -06:00
vicrodh 3efac409bc Fix window drag by adding data-tauri-drag-region attribute 2026-01-11 11:51:53 -06:00
vicrodh 0eb0b2ec1f Add audio device reinit for proper exclusive mode release 2026-01-11 11:47:47 -06:00
vicrodh b6b019e659 Add PipeWire device names via pactl and fix badge margins 2026-01-11 11:37:45 -06:00
vicrodh 78e3af691f Reposition DAC/EXC badges below QualityBadge in vertical layout
Changed quality-indicator to column flex layout with badges row below
the QualityBadge. Both badges now expand to fill the width equally,
matching the QualityBadge width.
2026-01-11 11:30:05 -06:00
vicrodh 23ac19a68f Fix pretty names to handle actual ALSA device name formats 2026-01-11 11:23:22 -06:00
vicrodh dd758d3523 Fix session restore and audio badges visibility
Session restore:
- Add pendingSessionRestore state to playerStore
- When restored track is played, load from Qobuz first
- Seek to saved position after track loads

Audio badges:
- Always show DAC/EXC badges (very muted when off)
- Adjust margins and sizing for better alignment
2026-01-11 11:19:34 -06:00
vicrodh 3fd3d25bdc Add device validation before using saved audio device
- Validate device has supported output configs before using
- Fall back to default if saved device is invalid
- Reduces polling frequency to 10 seconds
2026-01-11 11:10:02 -06:00
vicrodh f6b2b07f5d Fix cover art and badge margins, add audio error detection
UI:
- Cover art now has 2px margin vs song-card edges
- Quality badges have 2px margin on right side

Audio:
- Track consecutive sink failures to detect broken streams
- Stop playback gracefully after 3 failures
2026-01-11 11:08:25 -06:00
vicrodh bae83ad7e8 Enlarge cover art to 56px with 2px margins, align badges to top-right 2026-01-11 11:02:25 -06:00
vicrodh dd9d5558fa Add audio output badges and pretty device names
- Add AudioOutputBadges component showing DAC/Exclusive mode status
- Badges are reactive to actual player state, not just settings
- Add device tooltip on hover showing current output device
- Create audioDeviceNames helper for ALSA name to friendly name mapping
- Use pretty names in Settings dropdown while storing raw names
- Add get_audio_output_status backend command
- Store current device name in player SharedState
2026-01-11 11:00:31 -06:00
vicrodh 4b07618ed0 Improve audio device dropdown: wider, compact, expand-left 2026-01-11 10:42:08 -06:00
vicrodh c80f2d9583 Wire audio device selection from settings to player
- Player::new() now accepts optional device name
- Uses OutputStream::try_from_device() for specific device
- AppState reads saved device from audio settings on startup
- SettingsView loads/saves audio settings to backend
- Changes take effect on app restart
2026-01-11 03:54:56 -06:00
vicrodh f2d3b0e65b Add handoff document for audio device selection implementation 2026-01-11 03:47:01 -06:00
vicrodh 29079458cf Add audio settings storage and commands
Backend:
- Create config/audio_settings.rs with SQLite persistence
- Store output_device, exclusive_mode, dac_passthrough, sample_rate
- Add Tauri commands: get_audio_settings, set_audio_*
- Register state and commands in lib.rs

Note: Player modification to USE these settings is pending.
See HANDOFF.md for implementation details.
2026-01-11 03:46:21 -06:00
vicrodh ddc9497286 Implement session persistence between app restarts
Backend (Rust):
- Create session_store module with SQLite database
- Store queue tracks, current index, position, volume, shuffle/repeat
- Add Tauri commands: save_session_state, load_session_state, etc.
- Use WAL mode for better concurrent access

Frontend (TypeScript):
- Create sessionService.ts with save/load functions
- Restore session after login (queue, track info, volume, modes)
- Save session on beforeunload and visibility change
- Clear session on logout
- Debounced position saving during playback

Users can now close the app and resume where they left off.
2026-01-11 03:37:49 -06:00
vicrodh e9e82329bd Fix TitleBar double-click and improve link button styles 2026-01-11 03:05:37 -06:00
vicrodh d9a850302b Add window permissions for CSD controls (Tauri 2.0) 2026-01-11 03:02:37 -06:00
vicrodh 7da17126b6 Make About modal 40% wider, reduce Mexico flag size 2026-01-11 03:01:17 -06:00
vicrodh 3f114e11da Improve TitleBar: fix drag/controls and modernize design
- Use startDragging() API for reliable window dragging
- Create dedicated drag-region div for consistent drag behavior
- Double-click to maximize/restore
- Cleaner Discord/Spotify-inspired minimal design
- Reduce height to 32px for more content space
- Use Maximize2/Minimize2 icons for clearer visual feedback
- Fix button event handlers with proper async/await
2026-01-11 02:59:27 -06:00
vicrodh 96dc524c92 Implement Client-Side Decorations (CSD) with custom title bar
- Disable native window decorations in tauri.conf.json
- Create TitleBar component with minimize/maximize/close controls
- Add drag region for window movement
- Integrate TitleBar into main layout and LoginView
- Adjust content heights to account for 36px title bar
- Prepare for future mini player implementation
2026-01-11 02:56:17 -06:00
vicrodh 57bfc0eb48 Fix About modal links and improve Linux integration
- Use Tauri opener plugin for all external links in About modal
- Convert anchor tags to buttons with openUrl() for proper browser opening
- Add GTK_USE_PORTAL=1 for native file dialogs on Linux (KDE Plasma)
- Add Tux.svg and mexico-flag.svg for About modal signature
2026-01-11 02:53:03 -06:00
vicrodh bd8d7f8315 fix(about): use Mexico flag and Tux SVGs in signature 2026-01-11 02:43:24 -06:00
vicrodh 69a9063397 fix(about): update author to Victor RH with GitHub profile link 2026-01-11 02:39:43 -06:00
vicrodh 5926bd6fd5 feat(about): replace user avatar with app logo and add About modal
- Replace avatar with app logo (72x72 icon)
- Add hover glow effect on logo without layout shift
- Click logo opens About modal with:
  - App description and links (GitHub, website)
  - Version, license, build info
  - Library/API attributions (Qobuz, Tauri, Svelte, etc.)
  - Author credit and signature message
2026-01-11 02:37:56 -06:00
vicrodh 29ded155d1 feat(ui): add compact mode to TrackRow for Continue Listening
- Add compact prop to TrackRow: smaller height (44px), artist as column
- Apply compact mode to Continue Listening section in Home
- Reduces vertical space and improves scannability
2026-01-11 02:21:26 -06:00
vicrodh 174b7742ca feat(artist): add favorite button to artist detail view
- Add Heart icon button next to artist name
- Check favorite status on mount from get_favorites API
- Toggle favorite with add_favorite/remove_favorite API
- Show filled heart when artist is favorited
2026-01-11 02:19:16 -06:00
vicrodh 1a2a9ee728 feat(cache): add SQLite-based API cache for albums, tracks, and artists
- Create api_cache module with TTL-based expiration (24h default)
- Cache get_album, get_track, and get_artist responses
- Check cache before API calls, store results after fetch
- Reduces API calls and speeds up Recently Played loading
2026-01-11 02:17:43 -06:00
vicrodh 5499add37d fix(home): use hybrid approach for Continue Listening to show recent plays immediately
Instead of relying solely on pre-computed scores (trained on login),
now merge the 4 most recent plays with scored items. This ensures
newly played tracks appear at the top without waiting for retraining.
2026-01-11 02:17:37 -06:00
vicrodh e864e3272e fix(home): use fixed positioning for loading overlay to prevent scroll displacement 2026-01-11 02:08:56 -06:00
vicrodh 1b90a45212 refactor(favorites): centralize track favorites in favoritesStore
- Create favoritesStore.ts for centralized favorites state management
- Refactor TrackRow to be self-sufficient with internal favorites handling
- TrackRow now subscribes to store and toggles favorites internally
- Remove redundant favoriteTrackIds state from AlbumDetailView and PlaylistDetailView
- Remove manual onAddFavorite prop drilling from all views
- Add trackId prop to TrackRow for store lookup (optional for local tracks)
- Add hideFavorite prop for local tracks that don't have Qobuz IDs
- Load favorites once on app init in +page.svelte
2026-01-11 02:08:14 -06:00
vicrodh 48a010c597 fix(home): improve loading overlay + favorite button in Continue Listening
Loading overlay:
- Wait for ALL visible sections to finish loading before hiding overlay
- Count total visible sections and track when each finishes
- Content renders behind overlay, then overlay fades out smoothly

Continue Listening:
- Add menuActions with onAddFavorite to TrackRow
- Import handleAddToFavorites from trackActions service
- Favorite button now works in Continue Listening section
2026-01-11 02:00:58 -06:00
vicrodh c529a28c6e fix(ux): favorite button click + home loading overlay
TrackRow:
- Convert favorite indicator div to interactive button
- Add stopPropagation to prevent row click (play) when clicking favorite
- Add hover state and proper button styling

HomeView:
- Add loading overlay that waits for at least 2 sections to load
- Overlay fades out smoothly when content is ready
- Prevents jarring "sections appearing and reordering" effect
2026-01-11 01:55:09 -06:00
vicrodh 0ca7d50615 fix(lyrics): resolve scrolling in ExpandedPlayer full screen view
- Add min-height: 0 and height: 100% to .right-section for proper
  flex constraint cascade
- Add overflow: hidden to .lyrics-container for mask effect
- Add max-height: 100% and overflow-y: auto to .lyrics-lines
- Fix reset effect to track content changes vs array reference
- Remove debug console.logs
2026-01-11 01:50:08 -06:00
vicrodh fd178b8643 fix(lyrics): resolve scrolling issue in ExpandedPlayer
- Fix reset effect to track actual content changes instead of array
  reference, preventing constant lastScrolledIndex resets in Svelte 5
- Add min-height: 0 to lyrics-container for proper flex height calculation
2026-01-11 01:35:12 -06:00
vicrodh e1ee5215ec debug: add detailed scroll logging to diagnose issue 2026-01-11 01:28:48 -06:00
vicrodh 6ec57e5702 debug: add scroll logging and make prevActiveIndex reactive 2026-01-11 01:23:50 -06:00
vicrodh ac7615f321 fix: use direct expressions in LyricsLines class bindings for reactivity 2026-01-11 01:21:30 -06:00
vicrodh 50fd847ce2 debug: add logging to diagnose lyrics sync issue in ExpandedPlayer 2026-01-11 01:12:12 -06:00
vicrodh 68d5704083 fix: restore lyrics sync in ExpandedPlayer and improve performance
- Add startActiveLineUpdates() trigger to ExpandedPlayer
- Reduce transition times (200ms instead of 400ms) to fix lag
- Simplify karaoke gradient for clearer visual effect
2026-01-11 01:10:04 -06:00
vicrodh 8cbb65aaee feat: add Qobuzissimes and Editor's Picks sections
- Add qobuzissimes and editorPicks sections (disabled by default)
- Conditional loading to save API calls when sections are hidden
- Note: These API types may not be confirmed working
2026-01-11 01:07:26 -06:00
vicrodh 23e6df6efe feat: add ML indicator badge for recommendation sections
- Change source type from 'user' to 'ml' for ML-powered sections
- Add green "ML" badge in settings modal to distinguish from Qobuz content
2026-01-11 01:05:42 -06:00
vicrodh 721dc2996c feat: add Popular Albums section with conditional loading
- Add mostStreamed section using album/getFeatured most-streamed
- Optimize API calls by only fetching visible sections
- Default to hidden (enable via Home settings)
2026-01-11 01:04:39 -06:00
vicrodh 87b89f0709 fix: restore lyrics sync in FocusMode and add shimmer effect
- Add explicit effect in FocusMode to ensure lyrics updates run
- Increase immersive mode font size by 2pts (24px/30px)
- Smoother easing with cubic-bezier curves (400ms)
- Add shimmer gradient effect for karaoke-style highlighting
- Add subtle accent glow on active lyrics line
2026-01-11 01:04:23 -06:00
vicrodh 99c157d100 fix: resolve infinite loop in home settings subscription
- Remove immediate listener call in subscribe() to prevent effect loop
- Use onMount instead of $effect for subscriptions to avoid reactive tracking
- Combine onMount callbacks in HomeView
2026-01-11 00:49:38 -06:00
vicrodh 3f863b5b40 fix: restore ML-based recommendations in HomeView 2026-01-11 00:43:12 -06:00
vicrodh d86db5745e feat: add Home customization with greeting and section ordering
- Add homeSettingsStore for persistent settings (localStorage)
- Create reusable Modal component with overlay
- Create HomeSettingsModal for customizing home layout
- Add time-based greeting (Good morning/afternoon/evening/night)
- Support custom greeting text with {name} placeholder
- Allow reordering and toggling visibility of sections
- Show Qobuz badge for editorial sections (New Releases, Press Awards)
- Add settings icon in home header using home-gear.svg
2026-01-11 00:40:23 -06:00
vicrodh 6f8dc41a98 feat: add Qobuz featured albums (New Releases, Press Awards)
- Add album/getFeatured endpoint to API
- Create get_featured_albums Tauri command
- Add New Releases and Press Awards sections to HomeView
- Featured albums load first for faster perceived performance
2026-01-11 00:25:57 -06:00
vicrodh bb996a4002 feat: improve HomeView with multiple fixes
- Reduce album card size by 10% (180px -> 162px)
- Move quality badge below artist name with subtle styling
- Fix Spanish texts to English for consistency
- Add missing onTrackPlay and onArtistClick handlers
- Implement progressive loading for faster home render
- Use fast reco_get_home query instead of ML-based one
2026-01-11 00:20:52 -06:00
vicrodh 8b46660c99 fix: handle song-card links for local tracks
When playing a local track:
- Album link navigates to local library view
- Artist link shows toast (no Qobuz artist ID available)
2026-01-10 23:56:40 -06:00
vicrodh 73ef1f91db feat: album/playlist header menu and UI consistency
Album/Playlist Menu:
- Remove + and Download buttons from headers
- Add AlbumMenu component with: Play Next, Play Later, Share (Qobuz/song.link), Download
- Implement queue handlers (handleAddAlbumToQueueNext, handleAddAlbumToQueueLater)
- Implement share handlers (shareAlbumQobuzLink, shareAlbumSonglink)
- Apply same menu to PlaylistDetailView

Button consistency (no more pills):
- AlbumDetailView: border-radius 20px → 8px
- PlaylistDetailView: border-radius 24px → 8px
- ArtistDetailView: border-radius 20px → 8px
- FavoritesView: border-radius 20px → 8px
- LocalLibraryView: border-radius 24px/20px → 8px

UserCard simplified (previous commit)
2026-01-10 23:54:25 -06:00
vicrodh c4203a195d fix: song-card responsive width with proper spacing
- Song-card now grows responsively (flex: 1, max-width: 800px)
- 50px gap between sections (100px total separation)
- Left/right sections no longer shrink (flex-shrink: 0)
- Removed fixed min-width from left/right sections
2026-01-10 23:43:08 -06:00
vicrodh 17bc752169 feat: UI refinements for album/playlist views and NowPlayingBar
- Song-card min-width: 640px → 580px
- AlbumDetailView: artwork 280px → 224px (-20%)
- AlbumDetailView: album title 28px → 26px (-2pts)
- AlbumDetailView: buttons border-radius 20px → 8px (not pills)
- PlaylistDetailView: artwork 232px → 186px (-20%)
- PlaylistDetailView: buttons border-radius 24px → 8px
- UserCard: remove collapse/logout buttons (only settings)
- NowPlayingBar: remove max-width on meta-link for album name
2026-01-10 23:42:10 -06:00
vicrodh 266b5e2029 fix: add proper bottom margin to NowPlayingBar
- Increase height to 104px (+8px)
- Increase bottom padding to 26px
- Remove divider separators
- Update all viewport height calculations
2026-01-10 23:31:59 -06:00
vicrodh aa1b93f730 fix: increase bottom margin for controls-row (18px) 2026-01-10 23:25:58 -06:00
vicrodh bfc8fd6a92 fix: increase QualityBadge size for better readability
- HiRes icon: 18px → 24px
- CD/MP3 icons: 14px → 16px
- Badge padding: 4px 8px → 5px 10px
2026-01-10 23:25:11 -06:00
vicrodh 16c5336898 fix: increase NowPlayingBar height to 96px
- More bottom margin for controls row (padding 10px top, 14px bottom)
- Update all viewport height calculations to match
2026-01-10 23:24:50 -06:00
vicrodh c66fe100b5 fix: NowPlayingBar song-card improvements
- Add album prop and click handlers (onArtistClick, onAlbumClick)
- Fix controls-row padding (equal top/bottom: 8px)
- QualityBadge: use gray colors instead of white with alpha
2026-01-10 23:24:17 -06:00
vicrodh c818a807d1 fix: UI refinements for NowPlayingBar and QualityBadge
- Artwork preview only triggers on hover over artwork, not entire song-card
- Double song-card min-width (320px → 640px, max 700px)
- Reduce all control icons by 2px (18→16, 20→18, 22→20)
- Reduce control button sizes (32→30px, play 36→34px)
- QualityBadge: reduce text 1pt (9→8px, 10→9px), alpha 90%
2026-01-10 23:21:41 -06:00
vicrodh 609d88719e feat: redesign NowPlayingBar (88px) and update QualityBadge opacity
- Redesign NowPlayingBar with new layout: seekbar at top, controls/song card/volume below
- Increase NowPlayingBar height from 80px to 88px
- Update all height calculations to match (Sidebar, LyricsSidebar, main-content)
- Set QualityBadge text opacity to 85%
- Add static icons for quality badges (cd.svg, mp3.svg, logo-hires.png)
2026-01-10 23:18:24 -06:00
vicrodh 197e850397 fix: use static icons, white text, reduced font size 2026-01-10 23:15:13 -06:00
vicrodh e15955c3d7 fix: QualityBadge always shows, full label display
- Always render badge (default to CD if unknown)
- Always show full label (Hi-Res 24-bit / 96 kHz)
- Remove compact mode
2026-01-10 22:45:42 -06:00
vicrodh 764ac9f00e feat: redesign QualityBadge with Qobuz-style info display
- Show icon + bit depth + sample rate (e.g., Hi-Res 24-bit / 96 kHz)
- Color-coded tiers: MAX (gold), Hi-Res (blue), CD (gray), MP3 (dim)
- Support compact mode for NowPlayingBar
- Custom Hi-Res audio icon (sound bars)
2026-01-10 21:50:40 -06:00
vicrodh 722d378303 Center ExpandedPlayer content and add loading spinner to HomeView 2026-01-10 11:34:09 -06:00
vicrodh 8f77e01578 Rename FullScreenNowPlaying to ExpandedPlayer + add lyrics
ExpandedPlayer:
- Renamed from FullScreenNowPlaying for clearer nomenclature
- Added lyrics panel on right side (Cider-style blend)
- Blurred album art background with gradient overlay
- All buttons now have tooltips
- Horizontal layout: artwork+controls left, lyrics right
- Responsive breakpoints for smaller screens

FocusMode:
- Centered main layout (max-width: 1400px)
- Fixed empty space on right side

Nomenclature:
- NowPlayingBar: Bottom bar (always visible)
- ExpandedPlayer: Expanded view (click artwork)
- FocusMode: Immersive lyrics view (from ExpandedPlayer)
2026-01-10 11:26:41 -06:00
vicrodh afa1a71a4f Integrate glassmorphism theme across UI components
- QueuePanel: Glass slide-in panel with blur backdrop
- NowPlayingBar: Glass bottom bar with proper fixed positioning
- PlaylistModal: Glass modal with rounded corners and blur
- AddToPlaylistModal: Glass modal with same styling
- GlassSurface: Updated to Svelte 5 (children snippet, role attr)
  - Removed position:relative to allow fixed positioning override

Glass CSS variables used:
--glass-bg, --glass-blur, --glass-radius, --glass-border, --glass-shadow
2026-01-10 11:13:41 -06:00
vicrodh 541511bba2 Redesign FocusMode to match Cider-style layout
- Large artwork on left (~65vh), lyrics panel on right
- Flexbox layout with fade mask on lyrics
- Improved blurred background (80px blur, diagonal gradient)
- ChevronDown close button in top-left
- Bottom bar with track info, centered controls, progress
- Full responsive support (1200px, 900px, 600px breakpoints)
- Added keyboard navigation for progress bar (arrow keys)
2026-01-10 10:57:44 -06:00
vicrodh 98750be2aa feat(glass): add glassmorphism surface components
- GlassSurface: configurable glass effect with ripple animation
- GlassFilterDefs: SVG filter for distortion effect
- Graceful fallback when backdrop-filter unsupported
- Updated to Svelte 5 runes syntax
2026-01-10 08:35:49 -06:00
vicrodh a2d70ccd88 feat(home): use ML-based scoring for recommendations 2026-01-10 08:16:55 -06:00
vicrodh c75a19f98f feat(reco): train scores automatically after login 2026-01-10 08:16:09 -06:00
vicrodh f4e8d68538 feat(home): add recommendation store and data-driven home
Backend:
- Add reco_store module with SQLite-backed event storage
- Add reco_log_event, reco_get_home commands
- Add ML-lite scoring: reco_train_scores, reco_get_home_ml
- Score decay based on event age (configurable half-life)

Frontend:
- Add recoService.ts for event logging
- Log play/favorite/playlist_add events
- Add albumId/artistId to PlayingTrack for tracking
- Rework HomeView to fetch recommendations from reco_store
- Display recently played, continue listening, top artists, favorites

Integrated from home-reco and home-reco-ml branches
2026-01-10 08:10:34 -06:00
vicrodh 340fb2a72a feat(lyrics): smoother transitions and static lyrics at top
- Reduced transition durations from 300-400ms to 120-150ms
- Changed easing to ease-out for snappier feel
- Added will-change for GPU acceleration
- Non-synced lyrics now display at container top (no spacers)
- Added isSynced prop to all lyrics components
2026-01-10 07:37:04 -06:00
vicrodh b171a17b57 fix(lyrics): fix camelCase mismatch between Rust and TypeScript
Rust sends syncedLrc (camelCase) but TypeScript expected synced_lrc.
Updated TypeScript interface to match Rust serialization.
2026-01-10 07:29:32 -06:00
vicrodh ab705db9cd fix(lyrics): add User-Agent header and debug logging to LRCLIB requests
LRCLIB API may require User-Agent header. Added debug logging to
see raw response and parsing results.
2026-01-10 07:24:26 -06:00
vicrodh 6b2466a976 fix(lyrics): prefer synced lyrics from LRCLIB search
When /api/get returns results without synced lyrics, now also
tries /api/search to find a version with synced LRC timestamps
2026-01-10 07:18:59 -06:00
vicrodh 182479f6c2 feat(settings): add lyrics cache clear button
- Add Lyrics section to Settings with cache clear button
- Add explicit debug logging for lyrics fetch/parse
- Add track change detection logging to watcher
2026-01-10 07:15:21 -06:00
vicrodh baf8a57516 fix(lyrics): instant scroll sync when lyrics load late or user seeks
- Use instant scroll for initial sync when activeIndex > 0 (lyrics loaded after song started)
- Use instant scroll for jumps > 2 lines (user seek or catch-up)
- Use smooth scroll only for normal line-by-line progression
- Reset sync state when new lyrics load (track change)
2026-01-10 07:04:09 -06:00
vicrodh 4989802641 fix: make progressRef reactive in FocusMode 2026-01-10 07:03:15 -06:00
vicrodh 0676989c71 feat(lyrics): add auto-scroll, karaoke effects, and FocusMode integration
- LyricsLines: improved auto-scroll with prevActiveIndex tracking
- LyricsLines: added immersive mode for larger text in FocusMode
- LyricsLines: enhanced opacity fading and text-shadow for active line
- FocusMode: redesigned with blurred artwork background like Cider
- FocusMode: integrated lyrics panel on right side with proper styling
- FocusMode: added bottom bar with track info, controls, and progress
- +page.svelte: wire lyrics props to FocusMode component
- +page.svelte: start lyrics updates when either sidebar or FocusMode open
2026-01-10 07:02:22 -06:00
vicrodh c32f25ab5e fix: restore explicit height on .main-content to fix rendering 2026-01-10 06:55:32 -06:00
vicrodh 78522b99ac fix: improve lyrics display with theme colors and karaoke effect
- Use theme CSS variables instead of hardcoded Cider colors
- Add distance-based opacity fading for non-active lines
- Fix scroll to center active line with proper reactivity
- Add spacers to allow first/last lines to scroll to center
- Add karaoke progress gradient on active line
- Prefetch lyrics on track start instead of button click
- Remove provider badge (will add to About modal later)
- Add loading spinner animation
2026-01-10 06:43:15 -06:00
vicrodh 80ff8afa3a feat: integrate lyrics module with UI
- Add lyricsStore for frontend state management with LRC parsing
- Wire LyricsSidebar to main layout with toggle button in NowPlayingBar
- Fix Rust compile errors (add Clone to LrclibItem, remove unused import)
- Add lyrics active line tracking with binary search
- Auto-start/stop lyrics updates based on playback state
2026-01-10 06:31:12 -06:00
vicrodh a3a766ba34 feat(lyrics-ui): refine layouts and add mini view 2026-01-10 06:19:40 -06:00
vicrodh f0748910c2 feat(lyrics-ui): add isolated lyrics UI components 2026-01-10 06:19:36 -06:00
vicrodh 489d73496a feat(lyrics): add backend cache and provider chain 2026-01-10 06:19:31 -06:00