V4V Music Deployment Change Log
Recent Milestones (December 2025)
deployed-2025-12-09_1638 (Latest)
- FEATURE: Search Preferences - User-configurable default search content type
- Added Search section to settings page with radio button selection
- Users can choose default search type: Songs, Albums, or Playlists
- Default value set to 'songs' as specified
- Preferences persist across sessions and integrate with search page initialization
- Theme contract compliant UI with proper styling
- FIX: Alternate Enclosures TV Icon Display - Fixed missing TV icon for video alternates
- Added alternateEnclosures to song transformations in album-service.ts and playlist-service.ts
- Modified playSong() to automatically fetch full song data if alternateEnclosures is missing
- Modified startPreview() to automatically fetch full song data if alternateEnclosures is missing
- Ensures TV icon appears when playing songs from SongModal or queue that have video alternates
- Fixes issue where alternate enclosure data was missing from transformed song objects
- Version: 0.14.13
deployed-2025-12-09_1202
- FIX: PlaylistImagePickerModal Image Optimization - Restored Next.js Image optimization and caching
- Replaced plain img tag with ImageWithFallback component to restore Next.js Image optimization
- Enables WebP conversion, automatic resizing, and 1-year cache TTL for image optimization
- Critical for handling large images (50MB+) efficiently
- Fixes error: Next Image Optimization requires width to be provided
- Maintains lazy loading and error handling with fallback icons
- FIX: Modal UI/UX Consistency Improvements - Standardized modal layouts and improved user experience
- Standardized button text and icons across SongModal, PlaylistModal, and AlbumModal
- Improved visual hierarchy by moving action buttons above descriptions
- Added show/hide toggle for Additional Info and Dates sections in SongDetails
- Fixed modal widths to be uniform and responsive in DisplayModal
- Removed internal scrolling from CreatePlaylistModal songs section
- Improved button positioning and styling for consistency across modals
- FEATURE: Enhanced Video Generation Script - Added advanced video generation capabilities
- Added URL support for remote video sources
- Implemented codec selection for video encoding
- Added chapter markers and subtitles support
- Improved error handling and validation
- Version: 0.14.12
deployed-2025-12-07_2059
- SECURITY: Read-Only File System Implementation - Enhanced security by making application filesystem read-only
- Main application directory mounted as read-only (:ro) to prevent code modification
- Application files owned by root:root with read-only permissions (644/755)
- Scripts with shebangs automatically detected and set to executable (755)
- Prevents unauthorized code modification even if container is compromised
- SECURITY: Shared Volumes for Writable Data - Isolated writable directories for application data
- Created shared volumes for logs, public/static, and data directories
- Writable directories persist across deployments and are accessible by non-root containers
- Follows same pattern as existing shared playlist and image cache directories
- Ensures application can write necessary files while keeping code read-only
- FIX: Deployment Script Robustness - Improved file handling during deployment
- All file operations (artifact extraction, .env sync, build.txt, docker-compose files) use Docker for robust handling
- Works correctly even when files are root-owned after permission hardening
- Prisma operations (migrate, generate) run in temporary containers with read-write access
- Permission hardening moved to after all write operations complete
- Ensures Prisma can write to required directories during setup before filesystem is locked down
deployed-2025-12-07_1351
- SECURITY: Non-Root Container Implementation - Enhanced security by running containers as non-root users
- App containers now run as node user (UID 1000) instead of root
- Database containers now run as postgres user (UID 999) instead of root
- Updated Dockerfile to use existing node user from node:20-alpine base image
- Added user directives to docker-compose configurations for both blue and green environments
- Prevents privilege escalation attacks and reduces attack surface
- FIX: Podping Status File Permissions - Resolved EACCES permission errors for podping status files
- Implemented shared volume mount for /app/data directory using shared data volume
- Directory owned by host user (UID 1000) on host, accessible as node:node in container
- Persists podping status files across deployments
- Follows same pattern as shared playlist and image cache directories
- FIX: Container Detection Logic - Improved deployment script reliability
- Fixed get_container_name() function to use exact container name patterns
- Prevents removing wrong containers during blue-green deployments
- More reliable container identification for blue vs green environments
- FIX: npm ci Permission Fix - Ensures dependencies installed with correct ownership
- Run npm ci as non-root user (UID 1000) to match app container permissions
- Prevents Prisma client regeneration permission errors
- Ensures node_modules files are writable by app container user
deployed-2025-12-04_2237
- FEATURE: Playlist Image Auto-Selection - Automatically select first available song image for playlists
- New playlists automatically use first song's image if no custom image provided
- Fallback chain: 1st song image → 2nd song → 3rd song → ... → default icon
- Auto-population in CreatePlaylistModal with manual override support
- Added PlaylistImagePickerModal with responsive grid (2-4 columns) for selecting from playlist song images
- SquareArrowDown icon button opens image picker modal
- Theme contract compliant with proper CSS variables
- DATABASE: Updated existing playlists without images
- Test database: 11 playlists updated with song images
- Production database: 12 playlists updated with song images
- Created update-playlist-images.ts script with DATABASE_URL safety checks
- Supports dry-run mode for previewing changes
- Version: 0.14.8
deployed-2025-12-02_2007
- FEATURE: Next.js Image Optimization - 96% memory reduction for image handling
- Enabled Next.js image optimization at 320px with WebP format
- Expected memory reduction from 1440 MB to 56 MB (96% improvement)
- Configured with 1-year cache TTL for optimized images
- Removed obsolete UnoptimizedImage component
- FEATURE: Image Cache Persistence Across Deployments - Shared cache directory for zero warmup
- Mount shared cache directory for Next.js optimized images
- Cache persists across blue-green deployments (no warmup period)
- Both environments share same cache for efficient disk space usage
- Follows proven pattern from public/playlist directory
- Expected cache size: < 500 MB
- FIX: Anonymous Queue Auto-advance and localStorage Persistence
- Fixed shouldAutoAdvance() to check both authenticated and anonymous queues
- Fixed handleAutoAdvance() to work with anonymous users via localStorage
- Anonymous users' songs now auto-advance to next song when current song ends
- Anonymous queue persists across page reloads
- Version: 0.14.7
Recent Milestones (November 2025)
deployed-2025-11-26_1249
- FEATURE: Improved Artist-Aware Shuffle Algorithm - Replaced Fisher-Yates with greedy construction algorithm
- Better artist separation: never picks same artist as last if other artists available
- Improved distribution tracking with freshness bonus and better spacing
- Applied to CreatePlaylistModal, player-store shuffleQueue, and API shuffle endpoint
- Preserves current position in queue when shuffling
- FEATURE: Private Playlist Access Control - Enhanced privacy controls for playlist sharing
- Shows 'Content Not Found' error for private playlists accessed via share link when user is not owner/admin
- Owners and admins can always view their playlists regardless of privacy setting
- Updated error message to: 'This playlist has either been removed or is not publicaly available'
- FEATURE: Playlist Share Button Visibility - Added smart share button visibility control
- Hide share button for non-public playlists (except for owners)
- Added MakePublicConfirmationModal component with song count validation (10-200 songs required)
- Validates playlist requirements before allowing public status
- FEATURE: Create Playlist from AddToPlaylistModal - Added quick playlist creation
- Added 'Create new playlist' button below hide checkbox in AddToPlaylistModal
- Supports initialSong prop to pre-populate songs when creating playlist
- Streamlined workflow for adding songs to new playlists
- FEATURE: Publisher OpenGraph Metadata - Added social media preview support for publisher share links
- Implemented generatePublisherMetadata function following same pattern as albums/playlists/songs
- Publisher metadata includes publisher image or fallback to default-publisher.jpg
- URL format: https://v4vmusic.com/?publisher={id}
- Version: 0.14.6
deployed-2025-11-24_1141
- FEATURE: PublisherModal Conversion - Converted PublisherProfilePage to PublisherModal using DisplayModal system
- Created PublisherModal component following same pattern as AlbumModal/PlaylistModal
- Updated publishers page to use modal instead of conditional rendering
- Provides consistent modal experience across all content types
- FEATURE: Publisher Share Links - Added share button and URL parameter support for PublisherModal
- Share button copies publisher URL to clipboard (/?publisher={id})
- Auto-opens PublisherModal when ?publisher={id} is in URL
- Added share link tracking for publisher visits
- Publisher links now work the same way as album, playlist, and song links
- FEATURE: DisplayModal Sticky Header - Added sticky header with scroll-to-top button
- Header remains visible while scrolling modal content
- Scroll-to-top button appears when header becomes sticky
- Added backdrop blur effect when header is sticky for better visibility
- Follows same pattern as search page sticky search bar
- FEATURE: PublisherModal Styling Unification - Unified PublisherModal styling with AlbumModal
- Moved 'Visit website' link below description to match AlbumModal layout
- Added RSS feed section with RSS icon button and text link
- RSS icon button copies feed URL to clipboard
- All styling matches AlbumModal for unified look and feel
- FIX: TypeScript Build Errors - Resolved TypeScript build errors
- Fixed conditional className expressions in DisplayModal
- Fixed contentRef type compatibility issues
- Removed unused imports
- Version: 0.14.5
deployed-2025-11-20_1050
- FEATURE: Default Search to Songs - Changed default search content type from albums to songs
- Updated all search components to default to songs instead of albums
- Reorganized search options UI with mode toggle and content type buttons inside expanded section
- Changed filter toggle text from 'Show/Hide Filters' to 'Show/Hide Search Options'
- Hidden People button from UI (functionality preserved)
- FIX: Repeat Mode Functionality - Fixed repeat mode cycle and repeat one behavior
- Fixed repeat mode cycle to properly go through all three modes: none → one → all → none
- Fixed repeat mode 'one' to work at all queue positions, not just the last song
- Removed hover handlers from repeat button to fix coloring issues
- FIX: Player Component Layout - Removed top gap from player component
- Removed top padding from NowPlayingView wrapper and album art container
- Share, Heart, and Close buttons now flush with top of screen
- Version: 0.14.4
deployed-2025-11-19_1134
- FIX: People Search with Tag Filters - Fixed people search returning 0 results
- Added searchPeopleByTags() method to derive people from tagged songs when tag filters are present
- Fixed ORDER BY clause SQL error by filtering out invalid fields (latestSongPubDate, pubDate) for people queries
- People search now correctly handles both tag-filtered searches and direct searches
- MAJOR CHANGE: Remove Hated Song Filtering from Search
- Removed all hated song filtering logic from search API and services
- Hated songs now appear in search results for all users
- Removed userId parameter from search filter types
- All search functionality preserved except hated song exclusion
- FEATURE: Search Share Button - Added share button next to search results count
- Users can copy current search URL with all filters and parameters to clipboard
- Share button appears inline with results count display
- FEATURE: PWA Back Button Handler - Prevent PWA from closing on back button
- Detects PWA standalone mode and manages history state
- Prevents app from closing when back button pressed at initial state
- Coordinates with modal stack manager to avoid conflicts
- Version: 0.14.3
deployed-2025-11-18_1810
- FIX: Publisher Feed GUID Matching - Critical fix for untrustworthy GUIDs from publisher feeds
- Publisher feeds now ALWAYS fetch RSS to extract canonical <podcast:guid> for matching
- NEVER use feedGuid from <podcast:remoteItem> RSS attributes (always wrong for Wavlake feeds)
- NEVER use URLs for identification (only for fetching RSS feeds)
- Fixed publisher feeds showing incorrect counts (13 feeds showing only 4 displayed)
- Updated findAlbumByFeedReference() to always fetch RSS for publisher remote items
- Skip publisher remote items if RSS fetch fails (can't proceed without canonical GUID)
- Podroll items can still trust feedGuid (comes from feed's own podroll, not publisher feeds)
- Database restored from clean backup (Nov 18) to remove bad data from old method
- FIX: Build Error - Fixed undefined config.tableType in handleFeedImport method
- Version: 0.14.2
deployed-2025-11-18_1633
- REFACTOR: DRY Publisher Relationship Processing
- Extracted processPublisherRelationship method to centralize publisher processing logic
- Integrated publisher processing into both importFeedWithSongs and reimportExistingFeed
- Fixed missing publisher relationship processing during feed reimports/refreshes
- Added comprehensive test coverage for processPublisherRelationship method
- Version: 0.14.1
deployed-2025-11-18_1552
- MAJOR FEATURE: Publisher System Implementation (Phases 1-4 Complete)
- Publisher models schema with Publisher, PublisherRemoteItem, and PublisherPerson tables
- Podcast Namespace 2.0 publisher tag RSS parsing with spec-compliant and fallback support
- Publisher API endpoints with pagination, search, filtering, and sorting
- Publisher frontend components following People page architecture
- Child feed import for publisher feeds with automatic music feed discovery
- Relaxed publisher validation allowing one-way references (Wavlake-style feeds)
- Music feed filtering to prevent podcast/musicL contamination
- Publisher content endpoints for feeds, remote items, and recommendations
- Admin endpoints for publisher import and relationship management
- FIX: Publishers Page Sorting - Replace "Created" with "# Albums" sort option
- Changed sortBy from 'createdAt' to 'remoteItemCount' (# Albums)
- Fixed API route to handle remoteItemCount sorting with in-memory sorting (not a database field)
- Fixed post-filtering logic to fetch all records when validation filter is applied
- Updated API client types to match new sortBy options
- FIX: Podroll Medium Validation - Prevent podcast medium items in podrolls
- Added medium validation to reject podcast medium podroll items before database creation
- Fixed deterministic deduplication in album-service for podroll items with secondary sort key
- Fixed null/undefined filtering in podroll pagination
- FIX: Admin/Moderator Ratings and Favorites - Allow admins and moderators to rate songs and create favorites
- Removed admin/moderator exclusion from ratings API endpoint
- Removed admin/moderator exclusion from favorites API endpoint
- Play tracking exclusion remains for clean analytics
- FIX: TypeScript Error - Fixed accessing description property on ProcessedRemoteItem union type
- FIX: Search Soft Delete Compliance - Complete status filter subqueries and aggregate sorting fixes
- Added status='ACTIVE' filters to tag, rating, and lyrics filtering subqueries
- Fixed ORDER BY aggregate bugs for songCount, albumCount, playlistCount sorting
- Added status filters to people search song counting
- FIX: Role-Based Tracking Exclusion - Exclude admin and moderator users from activity tracking
- Admin/moderator play tracking, ratings, and favorites excluded from analytics
- Keeps user engagement metrics clean from test/internal activity
- UX: Publisher Page Enhancements - Song count badges, clickable publisher names, improved responsive design
- Version: 0.14.0
deployed-2025-11-09_2147
- MAJOR FEATURE: Song Soft Delete Implementation (Data Integrity Protection)
- Fixed critical bug where feed refreshes permanently destroyed user data (playlists, favorites, queue, ratings, play history, tags)
- Songs now marked INACTIVE instead of deleted when removed from RSS feeds
- Automatic reactivation when songs return to feeds (self-healing, zero data loss)
- Song IDs remain stable across all operations preventing cascade deletes
- INACTIVE songs hidden from user-facing queries while preserving data
- Automated 90-day cleanup task for old INACTIVE songs
- Performance optimized with database indexes (all queries <50ms)
- Monitoring via /api/admin/soft-delete/metrics and /api/health-extended
- FIX: Keyboard Shortcut Conflicts - Removed browser-conflicting shortcuts (Ctrl+F, Ctrl+R, Ctrl+E)
- FIX: Favorites Page Removal UX - Optimistic UI updates for instant feedback
- CLEANUP: Orphaned Tags - Removed 13,492 orphaned ItemTag records
- Version: 0.13.4
deployed-2025-11-09_1454
- FIX: RSS Feed Song Ordering for Music Albums
- Fixed incorrect track ordering for albums with reverse-chronological pubDates
- Changed sorting algorithm to use newest-first (reverse chronological) for all mediums when songs have valid pubDates
- Added forceRefresh parameter to bypass lastBuildDate cache optimization
- Manual refresh from UI now always reprocesses songs with correct ordering logic
- Fixes albums like Disco Swag where RSS feed order was being reversed during import
- Simplified code by removing medium-specific branching
- PERFORMANCE: Bulk Queue Operations Optimization
- Replaced sequential database INSERTs with single Prisma createMany transaction
- Performance improvement: 50 songs 3-4s → 1s, 709 songs ~28s → ~14s (2x speedup)
- Removed artificial 1-second delays from AlbumModal and PlaylistModal
- Fixed FavoritesList to use bulk endpoint instead of 50+ sequential API calls
- Backend uses O(1) bulk insert instead of O(n) sequential operations
- Version: 0.13.3
deployed-2025-11-09_0833
- MAJOR FEATURE: Comprehensive Share Link Tracking with Dual-Dimension Analytics
- Referrer tracking to capture HTTP Referer header for external traffic source analysis
- Share link type tracking (album/playlist/song) to measure format usage and conversion funnels
- ShareLinkVisit aggregate model for immediate visit tracking (no 30s play requirement)
- ReferrerAnalyticsChart component with 8 detailed analytics sections:
- Summary cards: total plays, share link visits, played songs, external sites, direct browsing
- Share link usage by type with visit-to-play conversion rates
- Platform categories (social/messaging/search/other) with expandable drill-down
- Top 10 platforms with engagement rates
- 3-segment historical trend visualization (share links/external/direct)
- Top 20 individual referrer URLs with play counts
- Platform summary statistics
- Fire-and-forget tracking pattern maintains client performance
- Privacy-first design: all data in database, no third-party trackers
- Clean share URLs without tracking parameters
- Database migrations: add referrer and shareLinkType fields to SongPlay, add ShareLinkVisit model
- FIX: Bitcoin Connect Auto-Reconnect Modal
- Fixed intrusive 'Connecting to wallet...' modal appearing on every page load
- Replaced manual reconnect with event-based connection detection
- Modal now only appears when user explicitly clicks connect button
- Added subscribeToConnection() and getConnectionInfo() methods to LightningService
- Version: 0.13.2
deployed-2025-11-08_1326
- FEATURE: Nostr Extension (NIP-07) Authentication Support
- Added browser extension login option for desktop users with Alby, nos2x, or compatible extensions
- One-click authentication flow using window.nostr.getPublicKey() API
- Extension button automatically detects relay configuration via getRelays() or falls back to default relays
- Provides clearer UX with two distinct Nostr login options:
- "Nostr Sign in with signer (Amber)" - QR code flow for mobile apps
- "Sign in with Nostr Extension" - One-click flow for browser extensions
- Significantly faster authentication for desktop users (instant vs QR code scanning)
- Full theme contract compliance with proper TypeScript typing (WindowWithNostr interface)
- Version: 0.13.1
deployed-2025-11-08_1231
- FIX: Semantic content recency sorting for default search
- Issue: Default search sorted by updatedAt (database modification time), causing backfill side effects where rated albums appeared first
- Solution: Pre-computed latestSongPubDate field for albums based on newest song publication date
- Albums now sorted by actual content recency (newest published song), not database update time
- Songs sorted by pubDate (actual publication date)
- Database triggers automatically update latestSongPubDate when songs added/updated/deleted
- Performance: <100ms with index (idx_albums_latest_song_pubdate)
- Backfilled 6,871 albums in 13.94s on production
- Immune to maintenance operations (backfill, migrations, admin edits)
- Version: 0.13.0
deployed-2025-11-08_1150
- MAJOR FEATURE: Pre-Computed Rating System with Database Triggers (Phases 1-7 Complete)
- Pre-computed rating columns (averageRating, bayesianRating, totalRatings) on Songs, Albums, and Playlists
- PostgreSQL triggers automatically update ratings when user ratings change
- Bayesian weighted average formula: (v/(v+5))*R + (5/(v+5))*3.5 for fair rating comparisons
- Database indexes on bayesianRating for fast sorting (Index Scan in 0.03-0.06ms)
- Performance: Search <100ms, Top 100 carousel <50ms, triggers <100ms (10-80x faster than JavaScript)
- Eliminated ~70 lines of JavaScript Bayesian calculation code
- Historical ratings backfilled: 577 songs, 404 albums, 28 playlists
- FEATURE: Rating Sort for Search
- Search by rating now works for songs, albums, and playlists
- URL parameter: ?sortBy=rating with optional &sortOrder=asc/desc
- Rated content always appears before unrated content using NULLS LAST pattern
- Fast database-driven sorting with pre-computed columns
- FEATURE: Top 100 Rated Songs Carousel
- Shows highest-rated songs using pre-computed Bayesian ratings
- Query time reduced from 500ms-2s (JavaScript) to 3-52ms (database)
- Rating badges display correctly on all carousel cards
- Minimum rating and minimum rating count filters work correctly
- FIX: Rating Badges Display in Carousels
- Added rating fields to MetaSong and Song TypeScript interfaces
- Metacontent API now returns rating data (averageRating, bayesianRating, totalRatings)
- Rating badges now display on all song cards in carousels and search results
- FIX: Playlist Rating Triggers for Song Changes
- Added triggers on playlist_songs table (INSERT/DELETE)
- Playlists now update ratings automatically when songs are added or removed
- Fixes issue where playlists created after song ratings had NULL ratings
- Ensures correct sort order for playlists by rating (ASC/DESC)
- FEATURE: Bookmarkable Sort Order
- Added sortOrder URL parameter support for persistent sort preferences
- URLs like ?sortBy=rating&sortOrder=asc now bookmark correctly
- Sort order persists across page refreshes and can be shared
- FIX: ASC/DESC Rating Sort with NULLS LAST
- Changed from COALESCE(bayesianRating, 0) to bayesianRating NULLS LAST
- ASC sort now correctly shows lowest-rated content first (unrated content last)
- DESC sort shows highest-rated content first (unrated content last)
- Applies to songs, albums, and playlists search
- Version: 0.12.0
deployed-2025-11-07_1540
- FIX: Add mp3Url to metacontent songs for carousel play functionality
- Fixed hover play button not working in carousels due to missing mp3Url field
- Added mp3Url mapping to /api/metacontent/songs endpoint
- Carousel play buttons now work correctly for all songs
- Version: 0.11.17
deployed-2025-11-07_1519
- FEATURE: HoverPlayButton component for carousel play interactions
- Reusable play button overlay with loading/error states for all carousels
- Consistent UX across Live Now, Song carousels, and content cards
- Small (8x8) and large (12x12) size variants with accessibility support
- Fixed carousel hover collision using named groups for scroll buttons
- Added hover play button to song carousel variant (new feature)
- FEATURE: Song Play Tracking Phase 4 - Client-side API integration
- currentUserId optimization in PlayerStore for efficient user tracking
- User info synced from AuthContext (currentUserId and currentUserName)
- Fire-and-forget API call to /api/songs/track-play
- Silent error handling - never blocks playback
- Skips plays under 5 seconds for noise reduction
- Bump version to 0.11.17
deployed-2025-11-06_1944
- FEATURE: Force refresh flag for Podping and admin feed refreshes
- Add forceRefresh option to reimportExistingFeed() to bypass all caching mechanisms
- Force refresh skips conditional GET (etag/lastModified) optimization for complete feed reprocessing
- Force refresh skips lastBuildDate comparison to ensure all content is re-analyzed
- Podping notifications now use forceRefresh: true for guaranteed live item status updates (PENDING→LIVE→ENDED)
- Admin UI: Force Refresh checkbox in /admin/feeds for manual cache bypass
- API endpoint accepts forceRefresh via query string or request body
- Backward compatible with existing callers (default: false)
- Bump version to 0.11.15
deployed-2025-11-06_1850
- MAJOR FEATURE: Song play tracking system with advanced analytics (Phases 1-5)
- Database optimization with performance indexes for songId, userId, createdAt, sessionId (all queries <100ms)
- POST /api/songs/track-play endpoint with fire-and-forget pattern for non-blocking tracking
- Noise reduction: skips plays under 5 seconds duration
- Anonymous user support for play tracking without authentication
- Client-side tracking state in PlayerStore with 30-second threshold and session management
- Admin dashboard with 6 advanced analytics features:
- Top Played Content - ranked lists for songs, albums, and artists
- Temporal Patterns - 24x7 heatmap with traditional blue-to-red color spectrum
- Engagement Quality - completion distribution and skip rate analysis
- User Behavior Insights - session metrics and binge listening detection
- Comparative Analytics - plays vs ratings/favorites correlation with conversion rates
- Content Health Indicators - skip rate analysis and content age breakdown
- All analytics support date range filtering and use indexed queries for performance
- Play activity stats: total plays, listening hours, engagement rate, average duration
- Auth vs anonymous play breakdown for audience insights
- Bump version to 0.11.15
deployed-2025-11-06_1309
- MAJOR FEATURE: Segment Duration Tracker & Auto Boost on Value Block Changes
- Generic SegmentDurationTracker utility for tracking playback duration of segments (28 comprehensive tests)
- Auto boost now triggers when value block segments complete (≥30s minimum duration)
- Music shows with value time splits: Each artist receives auto boost when their segment completes
- Live streams with live value: Auto boost fires when DJ/host changes songs (WebSocket)
- Fair compensation for all artists in collaborative shows and live streams
- Non-blocking fire-and-forget payments prevent playback interruption
- Preserves correct artist names and song titles from completed segments
- 30-second minimum threshold prevents gaming the system
- Works alongside existing song-level auto boost
- FEATURE: Alternate enclosure playback time preservation
- Switching between audio/video versions now preserves current playback position
- Only resets to 0:00 if saved time exceeds new media duration
- Seamless UX when switching formats
- DOCUMENTATION: Complete auto boost user guide
- Documented segment-based auto boost behavior for music shows and live streams
- Explained 30s minimum duration threshold and best practices
- Added privacy and control information for users
- Bump version to 0.11.14
deployed-2025-11-06_0054
- MAJOR FEATURE: Alternate Enclosure support for audio/video switching
- Songs with both audio and video versions now display TV icon in Player
- Users can seamlessly switch between audio and video versions of the same song
- Database schema updated with alternateEnclosures JSONB field
- RSS parser extracts alternate enclosure data from podcast:alternateEnclosure tags
- Player state management handles enclosure switching with proper chapter/transcript handling
- Chapters and transcripts hidden when playing video alternates (show for primary audio only)
- Video playback works correctly when switching to video enclosures
- QMS API includes alternateEnclosures data in all song queries
- Bump version to 0.11.13
deployed-2025-11-05_1949
- FEATURE: Single-song music album favorites auto-conversion
- Albums with exactly 1 song (medium='music' only) automatically convert to song favorites
- Does NOT apply to musicL, podcast, or multi-song albums
- Transparent to users - no UI/UX changes
- Production migration successfully converted 18 existing single-song music album favorites to song favorites
- Improved data hygiene and semantic clarity for favorites system
- Bump version to 0.11.12
deployed-2025-11-05_1805
- FEATURE: Android PWA deep linking for shared links
- Added manifest 'id' field for unique PWA identity
- Created Digital Asset Links at .well-known/assetlinks.json
- Android users can now click shared album/song/playlist links and have them open directly in installed PWA instead of browser
- FIX: PWA cache versioning to resolve stale icon caching
- Service worker cache name now automatically versions with package.json (e.g., v4v-app-shell-v0.11.10)
- Simplified build script to include versioned sw.js in deployment artifacts
- Users get updated icons and cached assets automatically without manual cache clearing or reinstall
- Fixed critical bug where old build system restored un-versioned sw.js, preventing cache busting from working
- UX: Player UI improvements
- Moved Auto Boost button next to Boost (Zap) button for better layout
- Removed three-dot menu dropdown (View Song Details, Creator Recommendations)
- Bump version to 0.11.10
deployed-2025-11-05_1503
- FEATURE: DRY value block merging utility for consistent payment behavior
- Add getMergedValueBlock() utility function to centralize APP_VALUE_BLOCK merging
- Auto boost now includes platform fees (APP_VALUE_BLOCK recipients)
- Single source of truth for value block merging across codebase
- UX: Boost modal improvements for better user experience
- Error messages moved to top of modal with dismissible X button
- Removed experimental warning banner and terms acceptance checkbox requirement
- Replace mandatory terms checkbox with optional 'Potential Risks' link
- Increase message textarea from 3 rows to 6 rows for comfortable typing
- UX: Auto boost icon hover behavior fix
- Icon color now consistently indicates status (green = enabled, gray = disabled)
- No color change on hover, only tooltip displays
- FEATURE: Podcast-specific UX improvements
- Podcasts show 'Play Latest' button instead of 'Play All'
- Play latest episode directly without queue replacement modal
- Hide 'Add All to Queue' button for podcasts (episodic content)
- FEATURE: Live item play button visibility logic
- Play button only visible for LIVE status streams
- ENDED and PENDING live items hide play button (streams inactive)
- Bump version to 0.11.9
deployed-2025-11-04_1834
- UX: Mobile responsiveness improvements for navigation components
- QuickSearchBar now shrinks appropriately on mobile screens
- Shortened "Connect Wallet" to "Wallet" for compact mobile display
- Text truncation (max 10 characters) for WalletStatusIndicator button text
- Tightened horizontal spacing on mobile (gap-1 vs gap-2 on desktop)
- Improved flex layout properties for better mobile/desktop adaptation
- Prevents horizontal overflow on small screens while maintaining desktop UX
- Bump version to 0.11.8
deployed-2025-11-04_1718
- FEATURE: Image lightbox for album, song, and playlist artwork
- Click any artwork to view in full-screen lightbox with zoom/pan capabilities
- Mouse wheel zoom, pinch-to-zoom, drag to pan, keyboard shortcuts (+/-/0/Esc)
- Disabled state when no artwork available with tooltips
- Consistent UX across AlbumModal, SongModal, and PlaylistModal
- FEATURE: QuickSearchBar component in navigation
- Search input with Lucide Search icon in SeamlessTransitions component
- Available for both authenticated and anonymous users
- Navigates to /search?q={searchTerm}&excludeTags=spam
- Keyboard (Enter) and click support
- UX: Removed "Preview Mode" pill from anonymous state
- Cleaner UI for non-authenticated users
- Removed AnonymousIndicator component
- UX: Create Playlist modal visual hierarchy improvement
- "Load From Queue" button now appears above "Make playlist public" checkbox
- Bump version to 0.11.8
deployed-2025-11-04_1237
- FEATURE: Live stream network recovery with automatic retry logic
- Automatic recovery for live streams after network reconnection
- Exponential backoff retry mechanism (3 attempts)
- Prevents duplicate recovery attempts with state management
- FEATURE: Orphaned song queue management with smart positioning
- Add to queue button for orphaned songs (songs without album/playlist context)
- Smart insertion at current song index + 1
- Preserves playback state (playing/paused)
- FIX: Podcast episode ordering maintained during refresh
- AlbumModal refresh now correctly uses reimportExistingFeed() for podcasts
- Preserves newest-first ordering for podcast episodes
- Follows same pattern as music album refreshes
- FIX: DisplayModal double-scroll issue eliminated
- Removed redundant overflow styling causing nested scroll bars
- UX: Mobile navigation modal spacing optimization
- Reduced vertical spacing and padding for more compact mobile experience
- Smaller icons and text for better mobile fit
- REFACTOR: Text formatting centralized in TruncatedDescription component
- Whitespace preservation moved into component for better encapsulation
- Bump version to 0.11.8
deployed-2025-11-03_1305
- MAJOR FEATURE: Shuffle as one-time action (standard behavior refactor - Phases 1-3)
- Removed originalPosition field and unshuffle/restore non-standard functionality
- Shuffle now moves currently playing song to position 0 and randomizes remaining songs
- Backend POST /api/qms/shuffle endpoint with Fisher-Yates algorithm
- Frontend shuffleQueue action for authenticated and anonymous users
- Changed UI from toggle mode to one-time action button
- Comprehensive E2E test coverage
- FEATURE: Medium-aware song ordering for podcast episodes
- Podcasts display newest episodes first (reverse chronological order)
- Music/musicL maintain oldest first order (track order)
- Season/episode ordering unchanged for all mediums
- Automatic rollout via scheduled RSS refresh
- FIX: Magic Playlist medium=music filtering at database level
- Fixed issue where Magic Playlist only found 1 song instead of 200 requested
- Changed from client-side to database-level filtering for optimal performance
- Added medium parameter to /api/songs endpoint with database filtering
- UI/UX: Logo branding updates
- Replace text branding with v4v-music-logo-500.png in sidebar and home page
- Responsive sizing: 128px mobile, 176px desktop
- Priority loading for above-the-fold optimization
- FEATURE: Version display in mobile navigation
- Added VersionDisplay to mobile nav for mobile/desktop feature parity
- Simplified component with direct links to about and changes pages
- Bump version to 0.11.7-pre
deployed-2025-11-01_1352
- FIX: Auto-advance playback - fixed bug where player would not advance to next song when current song ends
- Resolved browser pause/ended event sequence issue that was preventing automatic playback continuation
- Auto-advance now correctly plays next song regardless of pause event timing
- Preserve repeat modes (none/one/all) correctly during auto-advance
- FIX: Live item slider touch seek on mobile - prevent seeking during live playback
- Added guards to all scrubber event handlers to block touch/mouse events during live streams
- Fixed mobile browser issue where disabled attribute alone was insufficient
- Bump version to 0.11.5
deployed-2025-11-01_1229
- FIX: Queue Choice Modal - Fixed critical bugs preventing users' queue decisions from being honored at login
- Continue option now properly saves anonymous queue to database (was being overwritten by refreshQueue)
- Combine option now properly merges both queues without duplicates (was discarding merged queue)
- Restore option now properly clears localStorage to prevent queue persistence after restore
- FIX: Server crash prevention for streaming feed imports - safe controller helpers prevent crashes during import errors
- FIX: Infinite HMR recompilation loop - webpack now excludes data/, logs/, and public/playlist/ from file watching
- FIX: Import route refactored to use async/await with proper error handling for podcast/musicL streaming
- Bump version to 0.11.4
deployed-2025-10-31_2116
- MAJOR FEATURE: Home page carousel management system with admin control over visibility and ordering
- FEATURE: Admin UI at /admin/home-page for managing carousel display order with drag-and-drop
- FEATURE: Dynamic carousel rendering system - home page respects admin-configured carousel order
- BACKEND: HomePageCarousel database model with position-based ordering
- BACKEND: Admin API endpoints for carousel management (GET, POST, DELETE, PUT /reorder)
- BACKEND: Public API endpoint for fetching enabled carousels
- UX: Home page branding updated to "V4V Music by Sir Libre" with styled typography
- UX: SeamlessTransitions component optimized with reduced spacing and removed "Welcome back" message
- REFACTOR: SeamlessTransitions made fully compliant with @THEME_CONTRACT.md (CSS variables)
- FEATURE: Backward compatible - shows all carousels if no configuration exists
- Bump version to 0.11.3
deployed-2025-10-31_1619
- REFACTOR: Updated application code to use environment variables for domain configuration
- REFACTOR: Boost link generator now uses NEXT_PUBLIC_API_BASE_URL from environment instead of hardcoded domain
- REFACTOR: Documentation updated to reflect production domain (v4vmusic.com)
- FIX: Apache deployment script now correctly updates WebSocket proxy configuration during blue-green switches
- Bump version to 0.11.2
deployed-2025-10-31_1544
- INFRASTRUCTURE: Domain migration from test.v4vmusic.com to v4vmusic.com
- REFACTOR: Deployment scripts updated with DOMAIN variable for easy domain management
- REFACTOR: Cleanup script updated with DOMAIN variable for v4vmusic.com
- FIX: Apache configuration now correctly updates both HTTP and WebSocket proxy during blue-green deployments
- Production domain: https://v4vmusic.com
deployed-2025-10-30_1836
- MAJOR FEATURE: Complete Live Value WebSocket implementation for real-time metadata updates (6 phases)
- FEATURE: Socket.IO client integration with Split Kit protocol for live stream value updates
- FEATURE: Parser system supporting both nested and flat value block formats (Split Kit and default)
- FEATURE: Player store WebSocket lifecycle management (connect/disconnect/reconnect)
- FEATURE: Real-time metadata updates in Player and MiniPlayer during live streams
- FEATURE: Dynamic payment routing with currentValueBlock prioritization for live WebSocket updates
- FEATURE: Value block resolution utilities with priority system (live items > time splits > regular songs)
- UX: Improved LIVE indicators with microphone icon for mobile devices
- UX: Responsive LIVE badges (mic icon mobile, text desktop) with bright red styling
- FIX: Clear chapters and transcripts when playing live items to prevent UI confusion
- FIX: Live stream pause/resume functionality now works correctly
- REFACTOR: Extract value block resolution logic to reusable utilities
- All changes theme-compliant and production-ready
deployed-2025-10-29_2144
- MAJOR FEATURE: Complete Live Item implementation for podcast:liveItem support (6 phases)
- FEATURE: Database schema with LiveItem model, LiveStatus enum (PENDING/LIVE/ENDED), and LiveItemPerson junction
- FEATURE: RSS parsing for podcast:liveItem tags with support for liveValue, chat, contentLinks
- FEATURE: API endpoints - GET /api/albums/[id]/live-items, GET /api/live-items/[id], GET /api/live-items
- FEATURE: UI components - LiveItemCard carousel, AlbumModal live section, home page "Live Now" carousel
- FEATURE: Player integration with live stream playback and mutual exclusivity with regular songs
- FEATURE: Podping integration for real-time live item status detection within 2-minute threshold
- FEATURE: Status badges with countdown timers for upcoming streams
- FEATURE: Direct playback from carousel cards with play button overlay
- FEATURE: Live indicator and disabled seek controls during live playback
- FEATURE: Border highlighting and inline play buttons in AlbumModal
- FIX: SimpleMediaManager race conditions - event handlers ignore old URLs during cleanup
- FIX: Mutual exclusivity bug - clear live item state in all 16 locations that set currentSong
- UX: Theme-compliant status badges with pulsing animation for LIVE broadcasts
- UX: Clickable title links to external content and chat integrations
- TESTING: Comprehensive test coverage with 40+ tests (all passing)
- Bump version to 0.11.0
deployed-2025-10-29_1018
- FIX: Video z-index race condition with modals - video element now uses static z-index (1,000,001) instead of dynamic calculation
- FIX: Video no longer jumps above modals during scroll/resize events
- FIX: BoostModal and other DisplayModals now properly appear above video content
- Bump version to 0.10.1
deployed-2025-10-29_0913
- MAJOR FEATURE: Complete video playback support implementation (Phases 0-6)
- FEATURE: Media type detection system to distinguish between audio and video content
- FEATURE: SimpleMediaManager with HTML5 video backend replacing SimpleAudioManager
- FEATURE: HLS streaming support for adaptive video playback
- FEATURE: Fullscreen video support with native controls
- FEATURE: Conditional rendering for video/audio content types
- FEATURE: Video cache integration for offline playback
- FIX: Resolve video black screen issue on media type switch
- TESTING: Comprehensive video playback and error handling test coverage
- DOCS: Complete video support implementation documentation
- Bump version to 0.10.0
deployed-2025-10-28_1626
- FEATURE: Previous button now loops to last song when on first song (matches next button behavior)
- FEATURE: Single song queue now seeks to beginning instead of clearing song
- FIX: Resolved state desynchronization bug where slider became stuck after navigation
- FIX: Slider remains functional and synchronized with audio during queue navigation
- UX: Added toast notification for looping to last song
- DOCS: Add comprehensive function safety guide to AUDIO_SYSTEM_CONTRACT.md with safe vs dangerous functions
- DOCS: Clarify function location and access patterns in AUDIO_SYSTEM_CONTRACT.md
- TESTING: Improved audio contract tests to validate both mini player and full player functionality
- TESTING: Added comprehensive test coverage for player initialization, play/pause, tracking, progress, continuity, and errors
- Bump version to 0.9.22
deployed-2025-10-27_1723
- MAJOR FEATURE: Album deletion functionality in /admin/feeds with cascade cleanup and published playlist RSS auto-refresh
- FEATURE: Admin can now delete albums from feed management page
- FEATURE: Automatic regeneration of published playlist RSS files when album is deleted (removes broken song references)
- FEATURE: Content type tabs in /admin/feeds to switch between Albums and Playlists
- FEATURE: Medium filter (Music/Podcast) for Albums in feed management
- PERFORMANCE: 60x faster podcast re-imports with itemGuid-based skip optimization (6 minutes → 6 seconds)
- FEATURE: Home page carousels now filter by medium='music' to exclude podcast content
- UX: Reusable delete confirmation and result modals with proper centering and usage impact display
- BACKEND: Shared RSS generator utility for DRY code (used by both publish and delete endpoints)
- BACKEND: Enhanced DELETE /api/albums/[id] with pre-delete usage tracking and cascade cleanup
- FIX: Empty state UX in FeedList - filters remain visible when no results found
- Bump version to 0.9.21
deployed-2025-10-26_1212
- FEATURE: Search medium differentiation with Music/Shows mode toggle for filtering by content type
- FEATURE: Medium field support added to search API (albums, songs, playlists)
- UX: Collapsible Show/Hide Filters toggle with Funnel icon for progressive disclosure
- UX: Filters default to hidden state for cleaner initial search page view
- UX: Mode toggle and content type buttons moved to same line for compact layout
- UX: Reduced vertical spacing in Active Tag Filters section for tighter design
- ACCESSIBILITY: Implement :focus-visible for keyboard-only focus rings across entire application
- ACCESSIBILITY: Remove distracting green borders on mouse clicks while maintaining full keyboard navigation support
- ACCESSIBILITY: Update focus states in global CSS, navigation, modals, and sliders to use :focus-visible
- FIX: Volume slider and progress bar focus border behavior now consistent (keyboard-only)
- DOCS: Update THEME_CONTRACT.md to require :focus-visible usage as absolute constraint
- Bump version to 0.9.20
deployed-2025-10-25_1834
- FEATURE: ImageLightbox component for full-screen artwork viewing with zoom and pan controls
- FEATURE: Support mouse wheel zoom, keyboard shortcuts (+/-/0/ESC), and touch gestures in lightbox
- FEATURE: Album art in Player now opens lightbox instead of SongModal
- FEATURE: Make chapter titles clickable when they have URLs (opens in new tab)
- FEATURE: Sticky spam filter with user override capability on search page
- UX: Hide chapter navigation when not needed (single chapter at 0:00 or no chapters)
- UX: Preview song display refactor - clean title with separate preview label above tags
- FIX: Include albumId in song search results to resolve "Unknown Album" issue in SongModal
- FIX: Add spacing between album art and controls in landscape mode (24px gap)
- FIX: Double-click bug in spam filter override
- FIX: Prevent passive event listener warning in ImageLightbox wheel zoom
- CHORE: Remove spammy log statements from RSS rate limiting, Podping, and search API
- CHORE: Clean up debug console.log statements throughout codebase
- Bump version to 0.9.19
deployed-2025-10-25_1440
- FIX: Correct image fallback cascade for songs without chapter images
- FIX: ImageWithFallback now immediately uses fallbackSrc when primary src is null/empty
- FIX: Songs display song images correctly instead of showing fallback icon
- FIX: Proper cascade: primary → fallback → icon (for both null values and load errors)
- FIX: Remove unnecessary currentTime dependency from useCallback in Player component
- Bump version to 0.9.19
deployed-2025-10-25_1421
- MAJOR FEATURE: Complete music show podcasts implementation with value time split support
- FEATURE: Medium field support - distinguish between music albums, playlists (musicL), and podcast episodes
- FEATURE: Medium field added to Album, Song, and Playlist tables with three content types
- FEATURE: Frontend displays different icons/labels based on medium type (Disc/Music for music, Mic2 for podcasts)
- FEATURE: Featured Music Shows system with admin management page at /admin/music-shows
- FEATURE: Featured Music Shows database table and API endpoints for curated content
- FEATURE: Value time split support with remote item resolution for music show podcasts (Phases 2.1-2.7)
- FEATURE: Player integration showing current value time split recipient during playback
- FEATURE: Database-based remote item resolution using feedGuid/itemGuid (no network calls)
- FEATURE: RemotePercentage split calculation with share-based distribution
- FEATURE: Split formula: Base gets (100 - remotePercentage)%, Remote gets remotePercentage%
- FEATURE: Chapter navigation and mobile responsiveness improvements
- UI/UX: Conditional Music Show terminology in modals and funding displays
- UI/UX: Update boost modal text to "Send Boostagram" with "Show/Hide Splits" toggle
- FIX: Preserve value time splits and medium field during feed re-import
- FIX: Format boost recipient percentages to show integers for whole numbers
- FIX: Chapter image loading - reset error state on chapter changes
- FIX: Include medium field in album-service mapping for correct frontend display
- DOCS: Add comprehensive music show podcasts technical specification
- Bump version to 0.9.18
deployed-2025-10-24_1215
- FEATURE: Enhanced statistics page with person consolidation for cleaner artist listings
- FEATURE: Statistics page now includes album types breakdown and dedicated artist section
- FEATURE: Add help modals to statistics page for better user understanding
- SECURITY: Upgrade vitest to 4.0.3 to resolve all security vulnerabilities
- Bump version to 0.9.17
deployed-2025-10-24_1049
- MAJOR FEATURE: Comprehensive public statistics page generation system with 7 categories
- FEATURE: Static HTML and JSON file generation at /static/stats.html and /static/stats.json
- FEATURE: Daily automated statistics generation via scheduler task (runs at 12:15 AM)
- FEATURE: Catalog statistics - albums, songs, playlists, duration, content health, languages
- FEATURE: Community statistics - users, favorites, ratings, plays, listening hours, engagement
- FEATURE: Artist & Content statistics - prolific artists, collaborative artists, roles, genres
- FEATURE: Discovery & Curation statistics - user playlists, featured playlists, popularity
- FEATURE: Tagging & Genres statistics - categories, most tagged content, activity trends
- FEATURE: Value4Value Ecosystem statistics - Lightning-enabled content, funding distribution
- FEATURE: Growth & Activity statistics - 30-day trends, catalog growth, active hours
- FEATURE: Interesting Facts section with automatic highlights and milestones
- PERFORMANCE: Optimized database queries with parallel execution for minimal impact
- PRIVACY: All statistics completely anonymized with no PII
- THEME: HTML generation adheres to THEME_CONTRACT.md with CSS variables
- Bump version to 0.9.16
deployed-2025-10-23_1937
- PERFORMANCE: RSS feed refresh optimization with HTTP Conditional GET and lastBuildDate comparison
- FEATURE: Implement HTTP Conditional GET with etag and last-modified header support
- FEATURE: Add 304 Not Modified response handling to skip unnecessary feed re-processing
- FEATURE: Implement lastBuildDate comparison to skip song processing when feed unchanged
- FEATURE: Store and utilize etag/lastModified headers from RSS feeds in database
- PERFORMANCE: Reduce bandwidth usage by 70-90% for feeds supporting conditional GET
- PERFORMANCE: Reduce CPU load by skipping song processing for unchanged feeds
- FIX: TypeScript build error with 'as any' assertion in RSS service
- FIX: Properly type existingSongs query to include all FeedDiscoveryResult fields
- Bump version to 0.9.15
deployed-2025-10-23_1501
- MAJOR FEATURE: Complete Podping real-time feed updates implementation (8 phases)
- FEATURE: WebSocket connection to wss://api.livewire.io/ws/podping for instant feed refresh notifications
- FEATURE: Auto-reconnect with exponential backoff (1s → 60s) and 30-second keepalive pings
- FEATURE: Album and Playlist feed matching with <1ms database lookups using UNIQUE index
- FEATURE: 5-minute debounce per feed to prevent spam refresh operations
- FEATURE: Admin dashboard at /admin/podping with real-time stats via Server-Sent Events
- FEATURE: Connection health tracking with uptime, reconnection count, and ping monitoring
- FEATURE: Dashboard components: ConnectionHealthCard, StatsCards, RecentMatchesTable, ErrorLog
- FEATURE: Performance metrics tracking (latency, throughput, queue size)
- FEATURE: JSON file-based status persistence for reliability across server restarts
- FEATURE: Bayesian Average sorting for Top 100 Rated Songs (prevents 1-2 rating songs from dominating)
- PERFORMANCE: Reduces RSS refresh latency from 0-24 hours (daily polling) to 0-60 seconds
- PERFORMANCE: ~25,000 messages/day handling with <20MB memory overhead
- FIX: Build errors with missing TypeScript interfaces (ConnectionHealth, RecentPing, TodayStats, PodpingMatch, PerformanceMetrics, PodpingStats)
- FIX: Null safety issues and unused imports in Podping components
- CHORE: Add data/podping-status.json to .gitignore to prevent deployment blocks
- DOCS: Complete Podping research, technical specification, and implementation documentation
- ENVIRONMENT: PODPING_ENABLED environment variable for feature toggle
- CRITICAL: Medium field unreliable in Podping messages - system matches ALL feeds against database
- Bump version to 0.9.14
deployed-2025-10-23_0819
- FEATURE: Enhanced memory diagnostics system with 8 new diagnostic categories
- FEATURE: React Fiber tree detection with 3-strategy approach (node count, depth, context providers)
- FEATURE: Next.js chunk tracking with size and load time metrics
- FEATURE: Network request URL tracking for pending and slow requests (>5s)
- FEATURE: Source maps detection and dev overhead measurement
- FEATURE: Storage quota monitoring via navigator.storage API (IndexedDB/LocalStorage)
- FEATURE: Decoded image memory tracking (width × height × 4 bytes)
- FEATURE: Performance API entry count and overhead estimation
- FEATURE: Stylesheet CSS rule count and memory tracking
- UX: Memory diagnostics overlay with Take Snapshot, Export, and Clear buttons
- UX: Admin diagnostics page with visual indicators (🔴/⚠️) for concerning metrics
- UX: Expandable sections for chunk and request details in admin UI
- FIX: Queue replacement confirmation dialog now shows correct total song count instead of displayed subset
- FIX: TypeScript type assertion errors preventing production deployment
- FIX: VersionDisplay useEffect infinite loop on /api/public/pages endpoint
- All diagnostics only active in non-production environments (NODE_ENV !== 'production')
- Bump version to 0.9.13
deployed-2025-10-19_1430
- CRITICAL FIX: Tag exclude filters now work correctly when combined with text queries
- FIX: Parameter renumbering bug in InternationalSearchService for albums, songs, and playlists
- FIX: SQL JOIN subquery parameters now correctly renumbered when query text is present
- IMPACT: Users can now successfully search "Jimmy V" and exclude "rock" tag (was broken before)
- Bump version to 0.9.12
deployed-2025-10-19_1115
- MAJOR FEATURE: Admin bulk tag feature for song search results
- FEATURE: New POST /api/admin/songs/bulk-tag endpoint for efficient bulk tagging operations
- FEATURE: Admin-only "Add Tags" button on search page when viewing songs
- FEATURE: Automatic pagination support to tag ALL matching songs (not limited to first 100)
- FEATURE: Enhanced SongTagCloudModal with bulk operation mode showing "Apply to All Results (X songs)"
- FIX: Pagination bug - now correctly tags all matching songs (e.g., 153/153 instead of 100/153)
- UX: Processing indicator and toast notifications for bulk operations
- UX: Button positioned between "Filter by Tags" and "Filter by Domain"
- PERFORMANCE: Single API call handles up to 5000 songs with automatic pagination
- Bump version to 0.9.11
deployed-2025-10-18_1425
- CRITICAL FIX: Seek-on-release scrubbing implementation to eliminate browser lockups during progress bar dragging
- FIX: Audio restart bug - prevent duplicate play() calls that caused playback to restart after 1 second
- FIX: Progress bar snap-back during drag by skipping time updates while dragging
- FIX: Theme contract compliance - replace hardcoded progress bar colors with theme variables
- FEATURE: PayPal donation button integration in navigation
- UX: Improved scrubbing behavior - visual-only updates during drag, single seek on release
- UX: Enhanced audio state management with permissive loading/playing checks
- Bump version to 0.9.10
deployed-2025-10-18_1041
- FEATURE: Cache Large Files setting to exclude uncompressed audio (WAV, FLAC, AIFF) from caching
- FEATURE: Timed lyrics display in MiniPlayer with current segment highlighting
- FIX: Race condition in queue position assignment with transaction-based atomicity
- FIX: Hated songs validation to prevent adding disliked tracks to queue
- FIX: Admin activity routes build errors with dynamic export configuration
- UX: Lyrics display in MiniPlayer with fixed height container to prevent layout shifts
- PERFORMANCE: Prevent storage quota exhaustion from large uncompressed audio files
- Bump version to 0.9.9
deployed-2025-10-17_2132
- MAJOR FEATURE: Generic Lightning Address support - removed provider restrictions (Alby, Fountain)
- FEATURE: Universal lnAddress support for ANY domain using well-known keysend path
- FEATURE: 24-hour caching for Lightning address resolutions with automatic customData merging
- FEATURE: Mobile search UX improvements with sticky search bar and auto-scroll to results
- FIX: Mobile search results visibility with scroll behavior to avoid search bar overlap
- FIX: Search page URL synchronization and modal navigation issues
- FIX: Restore sortBy and sortOrder functionality in search page
- FIX: Search focus stealing and refactor PersonList to match Podroll pattern
- FIX: React hooks dependency warnings and TypeScript build errors
- UX: Optimize mobile layout with sticky search and scroll-to-top functionality
- UX: Eliminate ping-ponging scroll behavior in search results
- DOCS: Update API_CONTRACT.md with Lightning Address generic implementation
- Bump version to 0.9.9
deployed-2025-10-17_1441
- MAJOR FEATURE: Complete modal memory leak fixes implementation (5-phase project)
- CRITICAL FIX: Eliminate memory leaks in AlbumModal, PlaylistModal, and SongModal components
- FIX: Implement state cleanup on modal close to prevent memory accumulation
- FIX: Replace Next.js Image with ImageWithFallback component to prevent image-related memory issues
- FIX: Add AbortController for async requests to prevent setState on unmounted components
- FIX: Optimize modalStackManager with aggressive cleanup and callback nullification
- TESTING: Add comprehensive integration tests with Vitest (10 tests covering 20 open/close cycles)
- TESTING: Add advanced memory profiling with Playwright + Chrome DevTools Protocol
- PERFORMANCE: Achieve 99.97% memory leak reduction (600-2000MB → 0.67MB growth)
- PERFORMANCE: Real browser validation with CDP + GC exposure for accurate measurements
- DOCS: Complete modal memory leak fixes documentation with detailed results
- BUILD: Fix ESLint warnings in test files for clean production builds
- Bump version to 0.9.9
deployed-2025-10-17_1151
- MAJOR FEATURE: Universal ImageWithFallback system with Lucide icons for professional fallback display
- FEATURE: Replace all default image fallbacks (/default-album.jpg, /default-playlist.jpg) with type-specific Lucide icons
- FEATURE: Implement ImageWithFallback component with Music, Disc3, and ListMusic icons based on content type
- FEATURE: Add comprehensive image fallback coverage across 15+ components (Player, MiniPlayer, SongItem, QueueDisplay, carousels, modals)
- REFACTOR: Implement modal-based boost flow in SongDetails component for consistent Lightning wallet connectivity
- REFACTOR: Standardize icon sizing and spacing in AlbumModal and PlaylistModal
- CLEANUP: Remove unused FeedContent component and legacy files (1478 lines deleted)
- CLEANUP: Remove SongDetailsModal-OFF.tsx legacy file
- FIX: Resolve build errors and warnings for production deployment
- TESTING: Add comprehensive test coverage for ImageWithFallback system (884 new test lines)
- TESTING: Update boost integration tests for modal-based flow
- UX: Simplified error handling with consistent Lucide icon fallbacks across entire application
- PERFORMANCE: Remove complex image error handling logic in favor of unified component
- Bump version to 0.9.8
deployed-2025-10-17_0840
- MAJOR FEATURE: Complete album song ordering system implementation (9-phase project)
- FEATURE: Add position field to Song model with (albumId, position) composite index for optimized queries
- FEATURE: Implement RSS parser season/episode parsing from podcast namespace tags
- FEATURE: Implement song position computation with consistency-based ordering (season/episode → pubDate → feed order)
- FEATURE: Add position-based song ordering queries across all album endpoints with pubDate fallback
- FEATURE: Implement bulk operations for Hated Songs list with Select All and keyboard shortcuts
- FEATURE: Add UserAvatarLink component with avatar navigation (settings when logged in, auth when logged out)
- FIX: Fix incorrect track order for 6000+ albums and 22000+ songs
- FIX: TypeScript build errors in HatedSongsList component
- UX: Improve logged-out state by moving Login button above Get Full Access section
- TESTING: Add comprehensive integration tests for song ordering (23 tests covering all scenarios)
- DEPLOYMENT: Natural 30-day rollout via daily RSS refresh with zero downtime
- DOCS: Update API_CONTRACT.md with song position ordering system documentation
- Bump version to 0.9.7
deployed-2025-10-13_0906
- FEATURE: Nostr profile sync with explicit user confirmation modal
- FEATURE: Enhanced Nostr profile sync loading state with relay details and 20-second timeout indicator
- UX: Album art click now opens SongModal directly for better in-context song exploration (no navigation)
- FIX: Resolve build errors - Prisma JSON field null assignment in Nostr unlink route
- FIX: Nostr unlink flow improvements with cache invalidation and proper database field clearing
- FIX: Remove unused ESLint warnings (NostrProfileFetcher import, unused index parameter)
- Bump version to 0.9.6
deployed-2025-10-11_1406
- FIX: Fix playlist RSS publishing deployment configuration
- DEPLOYMENT: Update deployment script to use correct shared directory path (/playlist instead of /playlists)
- DEPLOYMENT: Add BASE_URL environment variable to both blue and green environments for correct RSS feed URL generation
- DEPLOYMENT: Completed in 2m57s with brief downtime strategy
- Bump version to 0.9.5
deployed-2025-10-11_1302
- MAJOR FEATURE: Complete playlist RSS publishing system implementation (14-phase project)
- FEATURE: Publish user playlists as RSS feeds for podcast app consumption (musicL spec compliant)
- FEATURE: Implement PublishConfirmationModal and UnpublishConfirmationModal components with user guidance
- FEATURE: Add Docker volume mount for persistent user-generated RSS files across deployments
- FEATURE: Implement RSS file cleanup on playlist deletion for automatic resource management
- FEATURE: Add publishPlaylist and unpublishPlaylist methods to API client
- FEATURE: Add lastPublishedAt field to Playlist model for publish tracking
- FEATURE: Prevent published playlists from being converted to private (data integrity)
- FIX: Resolve boost button not appearing when playing from playlists/albums
- FIX: MusicL spec compliance and bug fixes for RSS publishing
- REFACTOR: Remove deprecated playlist export endpoint (superseded by RSS publishing)
- DEPLOYMENT: Protect user-generated playlist RSS files during deployments
- DOCS: Complete comprehensive playlist RSS publishing system documentation
- TESTING: Add integration testing for playlist RSS publishing system
- All UI components adhere to @THEME_CONTRACT.md
- Build completed with zero warnings and no errors
- Bump version to 0.9.4
deployed-2025-10-10_1454
- MAJOR FEATURE: Complete unified playlist creation modal implementation (5-phase project)
- FEATURE: Implement BaseSortableSongItem as reusable component for queue and playlist editing
- FEATURE: Add single-page unified playlist creation with inline drag-and-drop song management
- FEATURE: Add 'Load From Queue' functionality with confirmation modal for playlist creation
- FEATURE: Enable empty playlist creation for private playlists
- FEATURE: Implement public playlist validation with 10-200 songs requirement
- FEATURE: Add confirmation modal for public-to-private playlist conversion during editing
- FEATURE: Implement self-contained playlist editing with local state for immediate UI updates
- PERFORMANCE: Add caching to user preferences API (96% reduction in calls: 25+ → 1 per session)
- PERFORMANCE: 10-minute TTL cache with automatic invalidation on preference updates
- FIX: Fix drag-and-drop in CreatePlaylistModal by aligning with QueueDisplay implementation
- FIX: Fix PlaylistModal to update immediately after edit without parent intervention
- CLEANUP: Remove unused EditPlaylistModal component (never integrated into UI)
- CLEANUP: Remove unused PlaylistPreviewModal component (superseded by unified modal)
- DOCS: Update API_CONTRACT.md with comprehensive unified playlist creation documentation
- TESTING: Add comprehensive E2E test suite for playlist creation workflows
- TESTING: Add 22 new unified tests for CreatePlaylistModal (all passing)
- All UI components adhere to @THEME_CONTRACT.md
- Build completed with zero warnings and no errors
- Bump version to 0.9.3
deployed-2025-10-10_1049
- MAJOR FEATURE: Add to Playlist functionality with comprehensive Player and SongItem integration
- FEATURE: Enhanced /api/metacontent/collections endpoint with ownerId and checkSongId parameters for optimized playlist selection
- FEATURE: Add ListPlus icon to Player component (full variant) for quick access to Add to Playlist functionality
- FEATURE: Add 'Add to Playlist' button to SongDetails component for convenient song management
- FEATURE: Add ListPlus icon to SongItem component for adding songs directly from song lists
- FEATURE: Created AddToPlaylistModal component with playlist selection, filtering, and authentication handling
- FEATURE: Implement efficient song containment checking across user playlists without over-fetching data
- FEATURE: Add playlist ownership filtering for personalized playlist management
- FIX: Resolve all ESLint warnings for unused parameters in scheduler task files
- FIX: Fix React Hooks rules violation by moving early return after all hooks
- DOCS: Update API_CONTRACT.md with comprehensive Add to Playlist endpoint documentation
- DOCS: Add FAQ and Docker upgrade path documentation
- TESTING: Add comprehensive test coverage using TDD and RTL for Add to Playlist functionality
- All UI components adhere to @THEME_CONTRACT.md
- Build completed with zero warnings and no errors
- Bump version to 0.9.2
deployed-2025-10-08_1245
- CRITICAL FIX: Fix TypeScript build error in clear-db-keep-users.ts (NODE_ENV assignment)
- DEPLOYMENT: Complete Phase 9.2 - Production deployment of modular scheduling system
- FEATURE: Add scheduler startup/shutdown with graceful handling and auto-initialization on app startup
- FEATURE: Implement TaskExecution database persistence for scheduled tasks with resource metrics
- FIX: Fix scheduler task execution to update ScheduledTask timestamps (lastRun/nextRun)
- FIX: Fix nextRun calculation using cron-parser library for accurate scheduling
- ADMIN: Improve scheduler start endpoint to properly load tasks from database
- ADMIN: Fix task execution history modal data retrieval
- FEATURE: Enhance clear-db-keep-users.ts script to support test database and clear 6 additional tables (user_ratings, user_hated_songs, api_keys, tag_search_presets, nostr_challenges, system_settings)
- DOCS: Complete Phase 9.1 - Comprehensive scheduler system documentation
- DOCS: Add SCHEDULER_ARCHITECTURE.md with system overview, components, and troubleshooting
- DOCS: Add TASK_DEVELOPMENT_GUIDE.md with step-by-step developer guide and templates
- DOCS: Update API_CONTRACT.md with complete scheduler management endpoints
- DOCS: Add SCHEDULER_ROLLBACK.md with comprehensive rollback procedures
- Add cron-parser dependency for accurate cron expression parsing
- Update sample.production.env with scheduler configuration
- Add comprehensive unit tests for scheduler startup module
- Bump version to 0.9.1
deployed-2025-10-07_1614
- MAJOR FEATURE: Complete modular scheduling system implementation (9 phases)
- FEATURE: Task interface and registry system with BaseTask class and InMemoryTaskRegistry
- FEATURE: Scheduler engine with node-cron integration, concurrent task limits, and graceful shutdown
- FEATURE: Task execution engine with timeout management, exponential backoff retries, and cancellation support
- FEATURE: Database schema with ScheduledTask and TaskExecution models for persistent task management
- FEATURE: Task module system with Zod validation, categories (RSS_FEED, SYSTEM_MAINTENANCE, INFRASTRUCTURE, CUSTOM), and priority levels
- FEATURE: System maintenance tasks (database cleanup, session cache cleanup, API key cache refresh, system health monitoring)
- FEATURE: RSS feed tasks (refresh all feeds, discover new feeds from Podcast Index)
- FEATURE: Comprehensive scheduler management API with 10+ admin endpoints for task CRUD operations
- FEATURE: Admin scheduler dashboard UI with task list, status filtering, category filtering, and health metrics
- FEATURE: Task control panel with enable/disable toggles, manual execution, and confirmation modals
- FEATURE: Task execution history viewer with filtering by status and date range, pagination
- FEATURE: Schedule editor modal with hourly/daily/weekly/monthly support and cron expression parsing
- FEATURE: Log viewer and management system with file list, pagination, filtering, search, and download functionality
- FEATURE: Advanced error handling system with 9 error categories, 4 severity levels, and 6 recovery strategies
- FEATURE: Resource tracking with per-task memory and CPU metrics, usage trends, and efficiency scoring
- TESTING: Comprehensive test coverage with 134 unit tests and 60+ integration tests (all passing)
- FIX: Correct task registry database synchronization to use task definition IDs instead of auto-generated IDs
- FIX: Fix scheduler service to use TaskExecutionEngine for proper resource metrics capture
- PERFORMANCE: Task execution with concurrent limits (default 3), timeout management, and retry logic
- ADMIN: Complete admin interface for scheduler control (start/stop/restart) with real-time status monitoring
- Bump version to 0.9.0
deployed-2025-10-06_0948
- UI/UX: Implement progressive disclosure for settings sections to reduce visual clutter
- UI/UX: Add masonry layout for settings page with responsive card-based design
- UI/UX: Fix Nostr settings layout with npub truncation and proper flex alignment
- UI/UX: Abbreviate "Connection" to "Conn" and apply warning colors to Unlink button
- DEPLOYMENT: Add automatic cleanup to deployment script for dirty target environments
- DEPLOYMENT: Eliminate manual cleanup step by auto-invoking cleanup-inactive-environment.sh
- DEPLOYMENT: Add early target environment validation to fail fast before build
- FEATURE: Complete user avatar functionality with UserAvatar component
- FEATURE: Add playlist display to PersonProfilePage with optimized API endpoints
- FIX: Resolve build warnings, TypeScript issues, and image optimization
- FIX: Fix avatar display issues across login, auto-admin, and profile updates
- FIX: Add session cache invalidation after profile updates
- PERFORMANCE: Optimize API payloads with 80-92% reduction for person pages
- Bump version to 0.8.5
deployed-2025-10-05_1912
- DEPLOYMENT: Add early target environment validation to deployment script
- FIX: Resolve build errors and TypeScript issues across multiple components
- FEATURE: Add playlist display to PersonProfilePage with optimized API
- PERFORMANCE: Optimize /api/people/[id] endpoint with 92% payload reduction
- PERFORMANCE: Create minimal album data endpoint for efficient card display
- FIX: Ensure song count badges appear correctly on all content cards
- API: Add /api/metacontent/albums/[id] endpoint for minimal album data
- API: Optimize /api/people/[id]/playlists endpoint for 80-90% payload reduction
- Bump version to 0.8.4
deployed-2025-10-04_1829
- CRITICAL FIX: Complete blue-green deployment system overhaul for dependency management
- DEPLOYMENT: Fix MODULE_NOT_FOUND errors by adding npm ci step with temporary Docker container
- DEPLOYMENT: Add critical pre-deployment environment validation to ensure clean slate
- DEPLOYMENT: Prevent container reuse issues that caused Next.js module resolution failures
- DEPLOYMENT: Implement proper dependency installation matching build environment
- DEPLOYMENT: Add environment cleanup validation with helpful error messages
- DEPLOYMENT: Ensure fresh container creation with clean node_modules for each deployment
- DEPLOYMENT: Fix deployment reliability issues when dependencies are updated (Next.js version changes)
- DEPLOYMENT: Add comprehensive validation to prevent deployment failures from environment contamination
- DEPLOYMENT: Critical infrastructure improvements for reliable blue-green deployments
- Bump version to 0.8.3
deployed-2025-10-04_1814
- NOSTR AUTH: Fix Nostr login to update UI automatically without refresh (eliminate race conditions)
- NOSTR AUTH: Fix Nostr linking UI update issue with custom event system for immediate UI refresh
- NOSTR AUTH: Fix NIP-46 authentication flow with DRY implementation (unified modal for login/link)
- NOSTR AUTH: Add setUserFromNostrAuth() function to AuthContext mirroring email login behavior
- NOSTR AUTH: Remove race condition where frontend checked auth before backend finished user creation
- NOSTR AUTH: Add proper waiting feedback and cleanup coordination for authentication flows
- NOSTR AUTH: Implement custom event system to update user state after successful Nostr linking
- NOSTR AUTH: Add retry logic to checkNostrAuth() for robustness and better error handling
- NOSTR AUTH: Fix authentication mode detection by passing mode from component context
- NOSTR AUTH: Remove determineAuthenticationMode() method that was causing 401 errors
- NOSTR AUTH: Ensure consistent behavior between /auth and /settings pages
- NOSTR AUTH: Fix modal not closing and user not logging in without reload
- NOSTR AUTH: Add profile fetcher service with comprehensive test coverage (234 tests)
- NOSTR AUTH: Complete NIP-46 client-side refactor with 4-phase implementation
- NOSTR AUTH: Add user deletion functionality and proper cleanup coordination
- NOSTR AUTH: Resolve infinite loop issues in NostrAuthModal and authentication flows
- NOSTR AUTH: Fix relay selection to use NOSTR_DEFAULT_RELAYS order instead of health scoring
- NOSTR AUTH: Implement comprehensive Nostr relay monitoring system (5 phases)
- NOSTR AUTH: Add background service integration for Nostr relay monitoring
- NOSTR AUTH: Implement API integration and frontend integration for relay monitoring
- NOSTR AUTH: Add proper Nostr authentication monitoring and connection management
- NOSTR AUTH: Use single relay in Nostr connection URI for mobile client compatibility
- DEPLOYMENT: Fix deployment system with npm ci and temporary Docker container approach
- DEPLOYMENT: Add dependency installation matching build environment
- FIX: Resolve build errors and ESLint warnings across Nostr components
- Bump version to 0.8.2
deployed-2025-10-03_0858
- MAJOR FEATURE: Complete NIP-46 Nostr Authentication Implementation (6 phases)
- FEATURE: Implement Nostr identity linking for existing users via /settings page
- FEATURE: Add "Sign in with Nostr" functionality for new user registration via /auth page
- FEATURE: Complete admin interface for Nostr user management, analytics, and relay configuration
- FEATURE: Add comprehensive Nostr authentication API endpoints with TDD testing
- FEATURE: Implement NostrAuthModal with QR code generation and mobile deep linking
- FEATURE: Add Nostr user statistics, connection monitoring, and audit logging
- FIX: Resolve infinite loop issues in Nostr authentication flow
- FIX: Fix date handling errors in admin components (toLocaleTimeString issues)
- FIX: Address build errors and TypeScript compliance across all Nostr components
- TESTING: Add comprehensive TDD test coverage for all Nostr authentication features
- SECURITY: Implement proper session management and authentication flow separation
- Bump version to 0.8.0
deployed-2025-10-02_1805
- DOCS: Add comprehensive NIP-46 Nostr authentication implementation plan with 6-phase rollout strategy
- FIX: Remove unused imports from Player component (Link, CacheStatusIndicator) to resolve ESLint errors
- FIX: Simplify audio scrubbing to seek on mouseUp/touchEnd only for better user experience
- FIX: Remove focus outline from time slider for cleaner UI appearance
- REFACTOR: Remove QMS variant from Player component to reduce complexity
- FIX: Dismiss now playing modal before artist name navigation to prevent UI conflicts
- Bump version to 0.7.8
deployed-2025-10-02_1358
- UI/UX: Constrain mini player content to max 700px width while maintaining full-width background for better mobile experience
- FIX: Add type guards to prevent TypeScript build errors and improve type safety
- FEATURE: Add queue replacement confirmation modal to favorites page for better user control
- FIX: Remove unused albumId parameter in Player component to clean up props
- FEATURE: Add clickable song title, artist name, and album title in Player component for enhanced navigation
- Bump version to 0.7.8
deployed-2025-10-02_0942
- UI/UX: Replace PodrollCard with UnifiedContentCard for consistent modern design across podroll and search pages
- FIX: Resolve 404 errors in podroll rating API calls by using correct album IDs (recommendedAlbumId/albumId) instead of podroll item IDs
- FIX: Fix hydration mismatch warnings by adding static ID to podroll search input
- UI/UX: Update podroll page header from "Podroll Recommendations" to "Podroll" with descriptive text
- FEATURE: Add "Learn More" link to podcast namespace documentation with external link icon
- PERFORMANCE: Eliminate unnecessary API calls and improve podroll page loading performance
- TESTING: Update all PodrollList tests to work with UnifiedContentCard (42/42 tests passing)
- CLEANUP: Remove legacy PodrollCard component and associated test files
- Bump version to 0.7.7
deployed-2025-10-01_1919
- PERFORMANCE: Implement playlist song limiting for large playlists (1000+ songs) with API optimization
- FEATURE: Add song limiting parameters (songLimit, songOffset) to /api/playlists/[id] endpoint
- FEATURE: Add song limiting metadata fields (totalSongs, showingSongs, hasMore) to Playlist interface
- UX: Update PlaylistModal to display "Displaying the first X songs, there are Y more" message for large playlists
- FEATURE: Add 'Don't ask me again' functionality for confirmation modals with user preferences
- FEATURE: Add ConfirmationModalPreferences with alwaysReplaceQueue and alwaysAllowDedupe settings
- UX: Add Confirmation Modals section to settings page with toggle controls
- FIX: Extend QueueReplacementModal contentType to support 'album' and 'playlist' types
- FIX: Fix React Hook dependency warning in settings page with useCallback
- FIX: Fix unescaped apostrophe in QueueReplacementModal component
- FIX: Remove unused defaultUserPreferences constant from user-preferences API route
- DOCS: Update API_CONTRACT.md with new song limiting parameters and metadata
- BUILD: Resolve all TypeScript errors and ESLint warnings for production deployment
- TESTING: Add comprehensive TDD test coverage for song limiting and confirmation modal features
- Bump version to 0.7.6
Recent Milestones (September 2025)
deployed-2025-09-30_2223
- PERFORMANCE: Implement optimized tag filtering with SearchQueryOptimizer (10-50x faster for large tag lists)
- CRITICAL FIX: Fix search broken for all content types due to invalid SQL with empty IN () clauses
- CRITICAL FIX: Fix SearchQueryOptimizer to use OR logic for include tags (was using AND)
- CRITICAL FIX: Fix album tag aggregation to group by albumId instead of itemId
- Replace multiple EXISTS subqueries with single optimized LEFT JOIN for albums, songs, and playlists
- Conditionally generate COUNT clauses only when tags are present (prevents SQL syntax errors)
- Add buildAlbumNonTagWhereConditions, buildSongNonTagWhereConditions, buildPlaylistNonTagWhereConditions
- Add renumberSQLParameters helper for proper SQL parameter offset handling
- Update 5 tag filtering tests and 24 optimizer tests - all passing
- Verified functionality: albums (203), songs (1292), playlists (4) all returning results correctly
- Bump version to 0.7.6
deployed-2025-09-30_2035
- SECURITY: Fix critical SQL injection vulnerability in domain filter (authentication bypass, data destruction prevention)
- SECURITY: Fix SQL injection vulnerability in tag filtering for tag names with apostrophes (children's music, jungle/drum'n'bass)
- Fix tag filtering logic: Include tags now use OR logic (show items with ANY selected tag vs ALL)
- Fix exclude tag filtering: Exclude tags now use OR logic and always win over include tags
- Add comprehensive security audit report documenting all SQL injection vulnerabilities
- Add 14 security tests for domain filter injection prevention
- Add E2E test for tag exclusion showing items with no tags
- Fix: Albums/songs with no tags now correctly appear when excluding tags
- Bump version to 0.7.5
deployed-2025-09-30_1508
- Fix artist links in SongModal and AlbumModal to use Next.js Link components for music playback preservation
- Add share and heart icons to Player component header alongside close button for improved UX
- Implement hideCloseButton prop for Player component to hide close button on QMS page
- Fix event bubbling issues when clicking share/heart buttons in now playing view
- Remove duplicate heart button from Player secondary controls for cleaner UI
- Bump version to 0.7.4
deployed-2025-09-28_1101
- Enable progress bar in QMS page Player component for better user experience
- Fix ESLint warning in TextSearchUI useCallback dependency
- Reorder clearHighlights function before highlightAllMatches to resolve dependency order
- Bump version to 0.7.3
deployed-2025-09-27_1458
- Implement people consolidation with website deduplication system
- Add consolidated=true API parameter for people endpoint with backend consolidation logic
- Create ConsolidatedPerson type with comprehensive data aggregation
- Implement URL normalization to deduplicate similar websites (trailing slash handling)
- Update PersonList and PersonProfilePage to display consolidated people data
- Fix duplicate website links issue and improve data presentation
- Remove image scaling hover effects from all home page carousels for visual consistency
- Improve star rating icon positioning and dropdown placement
- Fix build errors and TypeScript issues across multiple components
- Resolve React hooks dependency warnings and unused imports
- Add comprehensive TDD test suite for consolidation functionality
- Bump version to 0.7.2
deployed-2025-09-26_2157
- Implement plain text transcript support with search functionality
- Add TextParser for plain text files without timing information
- Implement TextSearchUI component with HTML-aware search and highlighting
- Add text formatting utility to convert plain text to readable HTML
- Update TranscriptPanel to conditionally render text vs timed formats
- Exclude text format from TranscriptOverlay (no overlay on images)
- Add comprehensive test coverage for all new functionality
- Fix React infinite loops and function initialization issues
- Implement proper search highlighting without timeouts
- Support case-insensitive search with accurate match counting
- Add keyboard navigation (Enter/Escape) and button controls
- Resolve build errors and TypeScript issues
- Fix unused imports and TypeScript any types
- Remove circular dependencies in useCallback hooks
- Bump version to 0.7.1
- All transcript functionality working correctly with zero ESLint errors and full TypeScript compliance
deployed-2025-09-26_2007
- Complete transcript parser modularization with 8-phase refactoring
- Implement modular transcript parser API with registry system
- Extract WebVTT, SRT, and JSON parsers to separate modules
- Add enhanced error handling and DOMPurify security protection
- Implement graceful SRT error handling with CORS proxy fallback
- Add comprehensive transcript sanitization for security
- Resolve transcript loading issues with improved error handling
- Bump version to 0.7.1
- All transcript functionality working correctly with zero ESLint errors and full TypeScript compliance
deployed-2025-09-26_1504
- Complete Phase 4 of search consolidation with major performance optimizations
- Add 7 specialized database indexes for international search performance
- Implement SearchQueryOptimizer service replacing inefficient EXISTS clauses
- Add SearchCacheService with TTL and LRU eviction for query caching
- Achieve consistent sub-100ms query performance across all search types
- Implement Has Lyrics filter for search with transcriptUrl filtering
- Add comprehensive search consolidation documentation and testing
- Complete Phase 6 search consolidation final testing and validation
- Bump version to 0.7.0
- All search functionality optimized with zero ESLint errors and full TypeScript compliance
deployed-2025-09-25_2221
- Fix transcript panel autoscrolling to prevent page-level scrolling interference
- Implement proper manual centering calculations using getBoundingClientRect for perfect vertical centering
- Add sticky highlight feature for transcript segments during instrumental sections
- Keep last highlighted lyric visible with dimmed styling during guitar solos and instrumental breaks
- Fix TypeScript build error in TranscriptPanel with proper type imports
- Resolve 'TranscriptSegment refers to a value, but is being used as a type' error
- Bump version to 0.6.1
- All transcript functionality working correctly with zero ESLint errors and full TypeScript compliance
deployed-2025-09-25_1814
- Complete Phase 6 transcript system implementation with enterprise-grade error handling
- Implement comprehensive transcript display system with WebVTT, SRT, and JSON support
- Add three-state transcript cycling (hidden, overlay, panel) with Lucide icons
- Implement auto-scrolling transcript segments synchronized with audio playback
- Add animated loading indicators replacing static eye icons with Loader2 spinners
- Implement complete accessibility features with ARIA roles, keyboard navigation, and screen reader support
- Add retry logic with exponential backoff for network errors and 30-second timeout handling
- Create user-friendly error messages for all transcript loading scenarios
- Add comprehensive test coverage with 42 tests covering error handling, accessibility, and loading states
- Fix transcript URL parsing bug in RSS parser for proper transcript discovery
- Bump version to 0.6.0
deployed-2025-09-25_1437
- Fix tag filtering regression in song count sorting
- Make tag filtering consistent between Prisma and raw SQL implementations
- Ensure tag filtering works the same way for all sorting methods
- Resolve issue where tag filtering behaved differently for song count vs other sorts
- Fix raw SQL implementation to search through song tags instead of album tags
- Bump version to 0.5.20
- All functionality working correctly with no errors or warnings
deployed-2025-09-25_1413
- Implement global song count sorting for albums with raw SQL queries
- Fix pagination-first, sorting-second issue that only sorted current page results
- Add searchAlbumsWithSongCountSorting method with proper database aggregation
- Implement buildRawSqlWhereConditions for complex filtering in raw SQL
- Fix BigInt serialization issues and database table naming (ItemTag vs itemTags)
- Add comprehensive unit tests for song count sorting functionality
- Support both ascending and descending song count sorting across entire dataset
- Resolve TypeScript and ESLint build errors for production deployment
- Remove unused variables and fix type annotations for queryComponents parameter
- Replace 'any' types with proper type definitions for better type safety
- Bump version to 0.5.19
deployed-2025-09-25_1301
- Implement comprehensive search functionality improvements for admin feeds page
- Add debounced search with focus preservation to prevent UI flicker during typing
- Add clear button (X) to search input for easy search reset
- Add default search when search box is emptied for immediate feedback
- Fix search typing experience with separate loading states (initialLoading vs searchLoading)
- Add sortOrder support to albums API with asc/desc options and proper cache key handling
- Fix admin feeds page header click sorting behavior to reverse sort order correctly
- Add INACTIVE status to FeedStatus enum for administrative feed management
- Add status field to playlist table for administrative control with ACTIVE/INACTIVE states
- Fix build errors and update components to use albums API instead of removed functions
- Remove circular dependencies and unused variables in FeedList component
- Update FeedHealthMonitoring and FeedMonitoring to use /api/albums endpoint
- Fix TypeScript type compatibility issues and formatRelativeTime errors
- Bump version to 0.5.18
deployed-2025-09-24_2107
- Fix health check endpoint to use correct table name "albums" instead of "Album"
- Add kill-servers call before build to prevent file conflicts during artifact creation
- Resolve PostgreSQL relation not found errors in health monitoring
- Fix tar artifact creation errors from running development servers
- Ensure clean build environment for reliable deployments
- Bump version to 0.5.17
deployed-2025-09-24_2033
- Implement enhanced sorting system with proper database field mapping
- Add content-type specific sort options (songs, albums, playlists, people)
- Implement actual count-based sorting using Prisma _count (songCount, albumCount, playlistCount)
- Add true rating aggregation and sorting for all content types
- Fix UnifiedSearchFilter type mismatch causing build failure
- Remove duplicate interface and update imports for type consistency
- Bump version to 0.5.17
deployed-2025-09-24_1629
- Fix trash icon to remove songs by index instead of song ID for proper queue management
- Fix preview functionality issues with audio overlap and queue restoration
- Fix duplicate song bug in queue system with proper index handling
- Add logout button to profile header for improved user experience
- Add About section to settings with clickable CMS links and More Info functionality
- Enhance VersionDisplay component with interactive CMS integration
- Update deployment change log with favorites page responsiveness fixes
- Bump version to 0.5.16
deployed-2025-09-24_1033
- Fix favorites page responsiveness with mobile-first responsive design
- Update FavoritesList component with responsive spacing, padding, and sizing
- Replace hardcoded max-widths with flexible responsive classes
- Add mobile-first responsive breakpoints (sm:, lg:) throughout favorites page
- Update favorites page layout with responsive container and spacing
- Make filter and sort buttons mobile-friendly with smaller text and padding
- Ensure proper text truncation without fixed width constraints
- Maintain theme compliance with CSS variables throughout
- Improve touch-friendly interface for mobile devices
- Bump version to 0.5.15
deployed-2025-09-24_1013
- Implement deployment tag-based PWA cache versioning to prevent self-uninstallation
- Add build-with-deployment-cache.sh script for automatic cache busting on every deployment
- Integrate cache versioning with blue-green deployment script for seamless deployment process
- Cache names now use deployment tag (e.g., v4v-app-shell-deployed-2025-09-24_1013)
- Zero manual version management required - cache automatically invalidates on each deployment
- Comprehensive error handling and rollback mechanisms in build script
- Fixes PWA self-uninstallation issue caused by cache corruption and storage quota exhaustion
- Maintains all existing deployment functionality while adding cache protection
- Deployment completed successfully with brief downtime strategy (migrations detected)
- Blue-green deployment switched from green to blue environment successfully
- Bump version to 0.5.14
deployed-2025-09-24_0805
- Implement comprehensive E2E testing for background playback functionality
- Create comprehensive E2E test suite for background playback functionality
- Test queue advancement with screen off simulation
- Test audio context management via Playwright
- Test background sync functionality via Playwright
- Test cross-platform compatibility via Playwright
- Test memory usage impact via Playwright
- Test CPU usage impact via Playwright
- Test network usage impact via Playwright
- Add performance monitoring in tests
- Test integration with existing audio system
- Test integration with existing queue system
- Test integration with existing PWA features
- Test integration with existing settings
- Update background-playback-queue-advancement.md to mark Phase 5 as complete
- All tests pass and build completes successfully
- Follows @TESTING_STRATEGY.md for TDD approach with RTL
- Handles test environment limitations gracefully
- Bump version to 0.5.14
deployed-2025-09-23_1457
- Disable tooltips on mobile devices using useOrientation hook detection
- Add mobile detection to Tooltip component with conditional rendering
- Preserve full tooltip functionality on desktop devices
- Add comprehensive test coverage for mobile detection scenarios
- Follow TDD approach with tests written before implementation
- Maintain backward compatibility and existing functionality
- Bump version to 0.5.14
deployed-2025-09-23_1338
- Replace distracting "Loading Audio" screen with spinning play/pause button animation
- Remove full-screen loading overlay from Player component during audio loading
- Add Loader2 spinning animation to play/pause buttons across all player components
- Update Player, MiniPlayer, and QueueControls with loading state handling
- Show song information while loading instead of hiding player interface
- Disable button interactions and update tooltips during loading state
- Add comprehensive TDD test coverage with 19 passing tests
- Follow @TESTING_STRATEGY.md and @THEME_CONTRACT.md guidelines
- Improve user experience by reducing visual disruption during song loading
- Bump version to 0.5.13
deployed-2025-09-23_1238
- Fix broken image display in search page playlist results
- Implement image error handling for UnifiedContentCard with fallback to default images
- Replace Next.js Image with UnoptimizedImage component for better error handling
- Add onError handler that switches to appropriate default image on load failure
- Add comprehensive tests for album and playlist image fallback scenarios
- Follow existing codebase patterns for image error handling
- All 24 tests passing, no ESLint errors introduced
- Fixes dark gray rectangles where playlist cover art should be displayed
- Bump version to 0.5.13
deployed-2025-09-23_1205
- Fix build errors and TypeScript warnings for production deployment
- Remove unnecessary showSongCounts dependency from useMemo in InfiniteScrollAlbums.tsx
- Fix TypeScript 'any' type errors in UnifiedContentCard.test.tsx with proper type definitions
- Add ESLint disable comment for img element in Next.js Image mock for test file
- Remove unused useBadgeVisibility import from InfiniteScrollAlbums.tsx
- Implement spam tag persistence in bulk clear operations
- Add spam persistence logic to handleClearAllTags in InfiniteScrollAlbums
- Add spam persistence logic to handleClear in TagCloudModal
- Spam tag now persists through 'Clear All Tags' and modal clear operations
- Individual spam tag removal still works as expected
- Add comprehensive test suite for spam persistence functionality
- Implement UnifiedContentCard to fix mobile overlap and eliminate code duplication
- Create UnifiedContentCard component with grid and carousel variants
- Fix mobile overlap issue by using w-full for grid layout instead of fixed widths
- Replace AlbumSearchResult and playlist wrapper with unified component
- Add comprehensive TDD tests (22 tests) following @TESTING_STRATEGY.md
- Eliminate massive code duplication between albums and playlists
- Maintain consistent styling and behavior across content types
- Clean up unused components and imports
- Update test mocks for new dependencies
- Fixes mobile responsiveness where playlists overlapped due to w-24 sm:w-48 wrapper
- Bump version to 0.5.12
deployed-2025-09-22_1711
- Fix Top 100 Rated Songs carousel to actually fetch 100 songs instead of 20
- Change limit from 20 to 100 in fetchTopRatedSongs API call
- Fix mismatch between carousel title and actual data fetched
- Users now get the full 100 songs as promised by the carousel title
- Top100QueueModal now correctly displays 100 songs count
- Implemented using TDD approach with comprehensive test coverage
- Bump version to 0.5.12
deployed-2025-09-22_1412
- Fix SQL query ambiguity in international search service for song search
- Resolve "column reference 'id' is ambiguous" error in searchSongsInternational method
- Change ambiguous 'id' reference to 's.id' to specify songs table alias
- Fix song search failure on remote server that was working locally
- Ensure song search works consistently across both local and remote environments
- Deploy fix using zero-downtime blue-green deployment strategy
- Bump version to 0.5.11
deployed-2025-09-22_1347
- Fix deployment script redundancy by removing duplicate international search setup
- Update SystemSettings.internationalSearchEnabled to default to true in migration
- Ensure consistent behavior between schema and migration defaults
- Resolve potential deployment conflicts from duplicate raw SQL execution
- Apply international search support migrations successfully
- Fix Prisma client cache issues that caused "relation Album does not exist" errors
- Improve deployment reliability and reduce potential failure points
- Bump version to 0.5.11
deployed-2025-09-22_1004
- Fix customKey and customValue handling in boostagram payment customRecords
- Resolve issue where payments to kolomona@fountain.fm were not routing correctly
- Include both bLIP-10 data (7629169) and custom routing data (customKey/customValue) in payments
- Add comprehensive test coverage for customKey/customValue scenarios
- Add specific test for kolomona@fountain.fm feed scenario
- Handle edge cases: missing values, empty strings, multiple recipients
- Fix build errors and TypeScript issues (unused variables, null checks, missing imports)
- Implement background payment processing for boostagrams
- Allow modals to close during payment processing (close button, backdrop click, escape key)
- Update boost buttons to show "Processing Payment, Please Wait" when isProcessing is true
- Disable boost buttons during payment processing to prevent multiple payments
- Extend wallet connection expiry from 24 hours to 30 days
- Implement wallet persistence and fix restoration logic
- Add localStorage persistence for wallet connections across page refreshes
- Implement wallet status modal with disconnect functionality
- Add wallet status indicator in layout header with connect/disconnect states
- Fix authentication modal for MiniPlayer heart icon when not logged in
- Bump version to 0.5.10
deployed-2025-09-21_1633
- Fix infinite loop in HatedSongsList component when user not authenticated
- Add authentication checks to prevent API calls when user is not logged in
- Fix useEffect dependencies to prevent infinite re-renders in HatedSongsList
- Add user-friendly message for unauthenticated users on settings page
- Resolve ESLint warning in HatedSongsList useEffect dependencies
- Improve error handling for authentication errors in hated songs management
- Fix queue manager navigation and heart icon authentication issues
- Bump version to 0.5.9
deployed-2025-09-21_1517
- Fix modal stack management and history handling with unified close behavior
- Implement proper browser history state management for nested modals
- Add comprehensive E2E tests for modal layering and back button functionality
- Fix build errors and clean up unused code (PlaylistModal imports, TypeScript any types)
- Resolve navigation issues in BottomNav modal
- Implement WakeLock API for PWA background audio playback
- Bump version to 0.5.8
deployed-2025-09-21_0905
- Implement default spam tag exclusion in search functionality
- Add admin tag removal feature in AlbumModal for improved content management
- Integrate zIndexManager into Modal component with centralized z-index management
- Add bottom padding to Active Tag Filters section for better UI spacing
- Add search results count display with formatted numbers for better user feedback
- Fix build errors from z-index manager integration
- Bump version to 0.5.7
deployed-2025-09-20_1652
- [Missing entry - needs to be documented]
deployed-2025-09-20_1525
- Fix queue ordering issue where songs were loaded in reverse order from carousels
- Preserve carousel order when adding songs to queue for both authenticated and anonymous users
- Fix getSongsBulk API to maintain input order by mapping database results back to songIds array
- Fix addBulkToQueue API to use original songIds array instead of filtered allowedSongIds
- Ensure Top 100 Rated Songs and Most Favorited Songs maintain correct order in queue
- Resolve issue where songs appeared in queue in reverse order compared to carousel display
- Bump version to 0.5.5
deployed-2025-09-20_1433
- Fix RSS feed import 403 errors by adding proper User-Agent and Accept headers
- Resolve 403 Forbidden errors when importing stats.podcastindex.org feeds
- Fix preview endpoint returning 400 Bad Request due to missing headers
- Fix import endpoint returning 500 Internal Server Error due to musicL analysis fetch failure
- Improve ImportProcess modal z-index layering to render above other modals
- Add zIndexManager integration to ImportProcess component for proper modal stacking
- Clear debug logs and remove debug console statements for production cleanup
- Bump version to 0.5.4
deployed-2025-09-20_1339
- Add /api/health-extended endpoint for enhanced health monitoring
- Update deployment script with improved health check capabilities
- Document latest deployment details in change log
deployed-2025-09-20_1314
- Add anonymous queue support for addBulkToQueue functionality
- Update addBulkToQueue to handle both anonymous and authenticated users
- Anonymous users: add songs to localStorage-based anonymous queue
- Authenticated users: use existing efficient API bulk endpoint
- Add 'bulk' type to AnonymousQueue interface for bulk operations
- Create comprehensive tests for both anonymous and authenticated flows
- Remove debug console.log from Player component for production cleanup
- Fix 'Authentication required' error for anonymous users using play icons
- Bump version to 0.5.3
deployed-2025-09-20_1246
- Fix MP3 URL missing error in queue handlers for Top 100 and Favorited Songs
- Update handleTop100Replace/Add to use getSongsBulk() instead of metaSongToSong()
- Update handleFavoritedSongsReplace/Add to use getSongsBulk() instead of metaSongToSong()
- Add comprehensive test coverage for MP3 URL fix
- Ensure songs have complete data including MP3 URLs before queue operations
- Bump version to 0.5.2
deployed-2025-09-20_1232
- Add authentication requirement for Magic Playlist button
- Remove AI reference from Magic Playlist auth modal and bump version to 0.5.1
- Implement Top 100 Rated Songs carousel with play icons
- Add 'top-rated' sort type to MetaSongQueryOptions
- Add play icons to Top 100 Rated Songs and Most Favorited Songs carousels
deployed-2025-09-20_1044
- Implement rating filter for Magic Playlist creator with comprehensive UI integration
- Add rating filter functionality to tag-filtered and user-favorites providers
- Make version display publicly available and add package.json version to sidebar
- Resolve TypeScript build errors for rating filter implementation
- Add comprehensive test coverage for rating filter functionality
deployed-2025-09-20_0852
- Fix migration table name references for database compatibility
- Resolve P3018 migration error during deployment
- Fix UserRating, Song, and PlaylistSong table name references in migration SQL
- Clean up MAGIC_PLAYLIST_DEBUG console logs for production
- Improve star rating filter layout to match AlbumModal appearance
- Fix N+1 tag loading queries in search results for performance
- Fix N+1 queries and add database indexes for rating filtering
- Update deployment change log with latest star rating filter implementation
deployed-2025-09-19_1938
- Complete 5-phase star rating filter implementation
- Add comprehensive star rating filter component with UI integration
- Implement star rating filter state management integration
- Add backend API integration for star rating filtering
- Implement comprehensive testing for star rating filter functionality
- Add star rating filter implementation documentation and planning
deployed-2025-09-18_2117
- Fix deployment script missing Prisma client regeneration step
- Resolve "Unknown field 'userPreferences'" errors after deployments with schema changes
- Add critical Prisma client regeneration after database migrations
- Implement user badge visibility preferences with real-time updates
- Fix all TypeScript and ESLint build errors
- Resolve hated song filtering in unified search functionality
deployed-2025-09-18_1836
- Fix hated song filtering in unified search
deployed-2025-09-18_1756
- Fix deployment script: separate migrations from server startup
deployed-2025-09-18_1711
- Fix deployment script race condition causing corrupted build artifacts
- Add robust build completion waiting mechanism with pgrep and lsof checks
- Resolve Prisma client undefined errors in production due to incomplete builds
- Prevent "file changed as we read it" errors during tar artifact creation
- Add 5-minute timeout protection for build process completion
deployed-2025-09-18_0856
- Complete legacy search system removal and cleanup
- Add URL parameter reading on mount for search page integration
- Rename modal dismissal event for improved search page functionality
- Remove legacy search system components and clean up codebase
deployed-2025-09-17_1949
- Fix server-side rendering API base URL for pages feature
deployed-2025-09-17_1939 (CMS Pages System)
- Implement public CMS pages display system
- Add expandable Pages menu for CMS navigation
- Implement custom CMS typography with improved contrast
- Resolve build errors in about page
deployed-2025-09-17_0927 (Hate Song Feature)
- Fix hate song feature audio synchronization and icon styling
- Add hate song feature implementation plan
deployed-2025-09-16_1015 (Playlist UX Improvements)
- Improve playlist creation UX with queue validation UI
- Migrate playlist modals to use DisplayModal component
- Add spinner and toast feedback to Add All to Queue buttons
- Implement dynamic volume slider and reorganize action buttons
- Replace song navigation with modal in QMS QueueDisplay
- Improve theme color contrast and brightness separation
deployed-2025-09-15_0749 (Admin Activity Drill-Down)
- Implement drill-down overview functionality with TDD
- Fix admin activity page content type filtering
- Add 'All Time' and 'All Content' options
deployed-2025-09-14_2209 (Admin Activity Page Complete)
- Complete 8-phase admin activity page implementation
- Add comprehensive backend API and data aggregation services
- Implement data visualization and performance optimization
- Remove contentCategory feature and clean up legacy components
- Add build memory optimizations for production deployment
- Fix PCI API architectural violations (replace external API calls with database queries)
- Integrate RecommendedBySection into AlbumModal
deployed-2025-09-13_1907 (Star Rating System Complete)
- Complete 7-phase star rating system implementation
- Add modal integration for star rating system
- Implement card badge integration and player integration
- Add core rating components and shared infrastructure
- Implement smart AlbumModal with auto-fetching and modal dismissal
deployed-2025-09-13_1335 (Tag Search Presets Complete)
- Complete 6-phase tag search presets implementation
- Add view icon functionality for user presets in admin interface
- Implement context-aware preset creation and fix dropdown scrollability
- Add mobile responsiveness and fix PrismaClient browser error
- Complete data flow & integration and TagCloudModal preset integration
deployed-2025-09-12_2324 (Social Media & SEO)
- Implement OpenGraph metadata for social media link previews
- Add metacontent optimizations for /playlists page
- Fix Next.js 15 compatibility issues
- Resolve build errors and type compatibility issues
deployed-2025-09-11_2306 (Collection Tags & UI Polish)
- Implement collection tags feature for albums and playlists
- Add collection tags truncation with More/Less links
- Implement mobile landscape carousel responsiveness
- Make album carousel match song carousel visual styling
- Add search functionality to SongTagCloudModal and TagCloudModal
- Remove hardcoded 100-song limit from magic playlist
- Fix Player component layout centering issue
Earlier Milestones (August 2025)
deployed-25-09-07-1630 (UI/UX Enhancements)
- Various UI improvements and bug fixes
deployed-25-09-01-1731 (Core Features)
- Major feature implementations and system improvements
deployed-25-08-30-1400 (System Stability)
- Performance optimizations and stability improvements
deployed-25-08-25-0900 (Infrastructure)
- Database and API improvements
deployed-25-08-19-1700 (Security & Performance)
- Security enhancements and performance optimizations
deployed-25-08-16-2245 (Core Functionality)
- Essential music player and queue management features
deployed-25-08-15-2000 (User Interface)
- UI/UX improvements and component enhancements
deployed-25-08-14-1800 (API & Backend)
- Backend API improvements and database optimizations
deployed-25-08-12-1400 (Authentication & Security)
- User authentication and security enhancements
deployed-25-08-08-19-00 (Player Core)
- Core music player functionality implementation
deployed-25-08-07-1900 (Database & API)
- Database schema updates and API improvements
deployed-25-08-06 (Initial Features)
- Basic music streaming and playlist functionality
deployed-25-08-05-0830 (Foundation)
- Core application structure and basic features
deployed-25-08-02 (Initial Release)
- Initial application deployment with basic functionality
This change log focuses on milestone deployments with significant feature additions or major improvements. Minor bug fixes and small enhancements between these milestones are not listed for brevity.