7000e0c046feat: Implement S3 music storage and playback functionality
Geert Rademakes
2025-08-06 13:44:17 +02:00
1450eaa29bfeat: Support full Rekordbox master collection format - Include all track properties (Composer, Album, Genre, Size, TotalTime, etc.) - Add PRODUCT section with rekordbox version info - Include TEMPO entries for beat grid information - Use proper indentation and formatting like master collection - Support KeyType and Entries attributes for playlists - Handle large libraries (7000+ songs) with streaming export - Full compatibility with Rekordbox master collection format
Geert Rademakes
2025-08-06 13:34:08 +02:00
b6467253a3fix: Match Rekordbox XML format exactly - Use compact XML format without line breaks or indentation - Include only TrackID, Name, and Artist attributes for tracks - Use Count attribute instead of Entries for playlists - Set correct Count="4" on ROOT node for playlist count - Remove encoding declaration to match Rekordbox format - Export now 100% compatible with Rekordbox import/export
Geert Rademakes
2025-08-06 13:31:46 +02:00
f3e91c5012fix: Add Vite proxy configuration for API requests - Configure proxy to forward /api requests to backend on localhost:3000 - Fixes export function receiving HTML instead of XML - Ensures frontend can properly communicate with backend API - Restart frontend dev server required for proxy to take effect
Geert Rademakes
2025-08-06 12:58:58 +02:00
4452a78b16perf: Implement streaming XML export for large libraries - Add streamToXml function that processes data in batches - Stream songs in chunks of 100 to avoid memory issues - Write XML directly to response stream instead of building in memory - Add progress logging for large exports - Proper XML escaping for special characters - Much better performance for libraries with thousands of songs
Geert Rademakes
2025-08-06 11:31:50 +02:00
7286140bd5feat: Move export functionality to backend for complete database export - Create backend XML service for generating Rekordbox-compatible XML - Add /api/songs/export endpoint that exports entire database - Frontend now calls backend API instead of local function - Exports ALL songs and playlists from database, not just loaded ones - Proper file download with correct headers and filename
Geert Rademakes
2025-08-06 11:26:51 +02:00
1cba4e0eebfeat: Add export library button to front page - Add download icon button next to settings cog - Export current library to XML format compatible with Rekordbox - Auto-generate filename with current date - Disable button when no songs are available - Provides easy way to backup and share library data
Geert Rademakes
2025-08-06 11:24:05 +02:00
060d339e78feat: Navigate to homepage after successful database reset - Add navigation to '/' after database reset completes - Shows welcome modal and provides fresh start experience - Improves UX flow after clearing library data
Geert Rademakes
2025-08-06 11:21:19 +02:00
966240b0d1perf: Streamline playlist switching flow for faster, cleaner transitions - Clear all state immediately (songs, totalSongs, totalDuration) on playlist switch - Combine switching and loading states into single spinner with dynamic text - Remove duplicate switching indicators to prevent UI flicker - Reset switching state when loading starts for immediate transition - Eliminates confusing flow: switching → old data → 0 of X → loading → new data - Now shows: switching → loading → new data (much cleaner)
Geert Rademakes
2025-08-06 11:18:09 +02:00
90bcd10ed9feat: Reset song count indicator when switching playlists - Show '0 of 0 songs • Switching playlist...' during playlist switch - Provides consistent visual feedback across all UI elements - Makes playlist switching feel even more responsive and clear
Geert Rademakes
2025-08-06 11:14:16 +02:00
491235af29feat: Add immediate visual feedback for playlist switching - Clear song list immediately when switching playlists for instant feedback - Add 'Switching playlist...' loading indicator with spinner - Set switching state immediately on playlist selection - Reset switching state when new songs are loaded - Makes playlist switching feel much more responsive and clear
Geert Rademakes
2025-08-06 11:12:58 +02:00
4c3b3e31d4perf: Additional optimizations to reduce React violations and improve performance - Add early return for empty songs array in totalDuration calculation - Add null check for getAllPlaylists to prevent unnecessary processing - Use requestAnimationFrame in Intersection Observer for better performance - Should reduce 600-1400ms message handler violations
Geert Rademakes
2025-08-06 11:10:28 +02:00
770c606561perf: Aggressive optimization for playlist switching to make it snappy - Add React.startTransition to batch state updates in usePaginatedSongs - Optimize playlist selection handler with immediate navigation - Memoize click handlers in PlaylistItem to prevent recreation - Use replace navigation to avoid history stack delays - Should dramatically reduce 600+ms playlist switching delay
Geert Rademakes
2025-08-06 10:59:16 +02:00
c9541cffeeperf: Optimize song selection to fix 711ms click handler delay - Memoize formatted duration in SongItem to prevent recalculation - Remove handleSongSelect from songItems useMemo dependencies - Optimize SongItem component to prevent unnecessary re-renders - Should improve song selection responsiveness
Geert Rademakes
2025-08-06 10:57:25 +02:00
510c6e1026perf: Optimize playlist manager to fix 727ms click handler delay - Memoize button styles to prevent object recreation on every render - Wrap PlaylistItem in React.memo to prevent unnecessary re-renders - Fixes React violation 'click' handler took 727ms - Should dramatically improve playlist switching responsiveness
Geert Rademakes
2025-08-06 10:52:11 +02:00
586b3634b5debug: Add timestamps to console logs for better timing analysis - Add ISO timestamps to playlist selection and change detection logs - Add timestamp to loadPage function calls - Helps identify exact timing of playlist switching delays
Geert Rademakes
2025-08-06 10:51:08 +02:00
57c1047357debug: Add console logs to investigate playlist switching delay - Add logging to track playlist selection and change detection - Remove isInitialLoad condition that might block playlist changes - Optimize initial load to prevent conflicts with playlist switching - Temporary debugging to identify timing issues
Geert Rademakes
2025-08-06 10:49:31 +02:00
9268a4635fperf: Remove unnecessary delays in playlist switching and infinite scroll - Remove setTimeout delay in playlist change handler - Reduce infinite scroll trigger delay from 1000ms to 100ms - Improve responsiveness when switching playlists and scrolling - Fixes 1-second delay between URL change and actual loading
Geert Rademakes
2025-08-06 10:47:37 +02:00
e8bb2a4326fix: Restore playlist switching functionality - Add previousPlaylistRef to properly detect playlist changes - Fix playlist change detection logic that was broken by ref updates - Ensure playlist switching works while maintaining infinite scroll fix
Geert Rademakes
2025-08-06 10:43:18 +02:00
08de2afa0efix: Prevent infinite scroll from loading previous playlist songs - Add refs to store current playlist and search query values - Fix stale closure issue in loadPage function - Ensure infinite scroll uses current playlist, not cached values - Fixes race condition when switching playlists and scrolling
Geert Rademakes
2025-08-06 10:39:51 +02:00
535dc16d2cfix: Prevent welcome modal from showing on initial page load - Change welcome modal to not open by default - Only show welcome modal after confirming database is empty - Move database initialization check after useDisclosure hook - Fixes premature welcome modal display on app startup
Geert Rademakes
2025-08-06 10:35:17 +02:00
743ed6a54efix: Prevent welcome modal from showing during playlist switches - Add isDatabaseInitialized state to track actual database status - Check for songs and playlists to determine if database is initialized - Only show welcome modal when database is truly empty - Fixes issue where modal appeared when switching playlists
Geert Rademakes
2025-08-06 10:33:16 +02:00
02ae12294cfeat: Show total playlist duration instead of loaded songs duration - Add totalDuration calculation in backend playlist endpoint - Update frontend to display total playlist duration - Duration now shows entire playlist length, not just loaded songs - Prevents duration from changing when scrolling through songs
Geert Rademakes
2025-08-06 10:30:02 +02:00
54bffbc25dfeat: Make playlist switching less intrusive - Remove full loading screen for playlist switches - Only show full loading for initial XML parsing - Use subtle spinner in song list area for playlist loading - Improve UX by keeping interface responsive during navigation
Geert Rademakes
2025-08-06 10:24:04 +02:00
65120ff654revert: Change indentation back to 10px per level - Revert from 16px to 10px for better visual balance - Keep visual indicators and padding improvements
Geert Rademakes
2025-08-06 10:22:14 +02:00
50f29b900efeat: Move 'Add Playlist' and 'Add Folder' buttons to the top - Position buttons right after 'All Songs' for better accessibility - Add proper spacing with mb={2} for visual separation - Improve UX by making action buttons more prominent
Geert Rademakes
2025-08-06 10:21:49 +02:00
5fb878a0b0feat: Improve playlist hierarchy visualization - Increase indentation for nested playlists (16px per level) - Add visual indicators (gray bars) for nested items - Add extra padding for better visual separation - Make folder structure more clearly visible
Geert Rademakes
2025-08-06 10:21:12 +02:00
4f16c859dbfix: Prevent infinite scroll refresh by stabilizing intersection observer - Add trigger prevention mechanism to avoid multiple API calls - Use refs to store current values and avoid stale closures - Remove observer dependencies to prevent recreation - Add proper timeout cleanup to prevent memory leaks
Geert Rademakes
2025-08-06 10:13:21 +02:00
2e32a3c3b6fix: Make playlist folders start collapsed by default - Change default state from expanded to collapsed for better UX
Geert Rademakes
2025-08-06 10:05:32 +02:00
7fb8614130feat: Major performance optimizations - Add React.memo, useMemo, and useCallback to prevent unnecessary re-renders - Implement request cancellation with AbortController to prevent memory leaks - Add debounced search to reduce API calls - Optimize song selection and playlist switching performance - Fix browser crashes and memory leaks - Add proper cleanup functions
Geert Rademakes
2025-08-06 10:03:26 +02:00