FIX: Force unregister old Service Workers in _app.tsx to permanently fix stale cache issues causing g.split error.
FIX: Adjusted fullscreen container classes to w-full h-full to resolve LG WebOS TV half-screen display bugs.
vv5.5.99 (Temporarily Disable Vocal Separation)
11 ก.ค. 2569
UI: Temporarily removed the vocal mute (เสียงร้อง) button from the player controls.
FIX: Removed the 'ล้มเหลว' (Failed) badge for AI-processed songs from the Queue list.
vv5.5.98 (Fix SidebarControls ReferenceError)
10 ก.ค. 2569
FIX: Removed unused isAiReady reference in SidebarControls that caused build failures.
vv5.5.97 (Show Vocal Button for All Videos)
10 ก.ค. 2569
UI: Removed isAiReady condition from SidebarControls to allow vocal button to show for all videos.
FIX: Ensure users can test the vocal removal UI on standard YouTube videos.
vv5.5.96 (Vocal Separation UI Redesign)
10 ก.ค. 2569
UI: Removed bulky AudioMixer from QueueList for a cleaner interface.
UX: Integrated native AI Vocal Controls directly into SidebarPlayer controls.
FEATURE: Added minimal popover slider for vocal volume adjustments.
RELIABILITY: Vocal controls only appear when AI separation is fully ready.
vv5.5.95 (Vocal Separation Integration & UI Fix)
10 ก.ค. 2569
FEATURE: Integrated AI Vocal Separation to the main application.
FIX: Cleared old `layoutMode` from localStorage causing unintended fullscreen bugs.
UI: Added AudioMixer to QueueList and ✨ button to SearchResult items.
vv5.5.94 (Automated Plugin Builder)
10 ก.ค. 2569
FEATURE: Integrated GitHub Actions pipeline to automatically build Windows (.exe) and macOS (.dmg) installers on GitHub servers.
PERFORMANCE: Offloaded heavy PyInstaller/Electron builds from local machines to Cloud CI/CD.
vv5.5.93 (Desktop Helper Plugin)
10 ก.ค. 2569
FEATURE: Built Electron Desktop Plugin with Auto-Updater pointing to okeforyou/youoke
PERFORMANCE: Packaged Python backend into standalone binary via PyInstaller (215MB total installer size)
CHORE: Configured .gitignore for local plugin built assets to prevent repository bloat
vv5.5.92 (Local Bridge POC)
8 ก.ค. 2569
FEATURE: Added Python script for Demucs vocal separation (scripts/vocal-separation).
UI: Added Karaoke UI Proof of Concept for vocal volume control (/poc-karaoke).
vv5.5.90 (Firestore Quota Cache Shield)
7 ก.ค. 2569
FIX: Replaced useEffect with useQuery (24h staleTime) in MainDashboard for fetching artist_images to prevent Firestore Quota Exceeded (RESOURCE_EXHAUSTED).
UX: Solved the infinite skeleton loading issue caused by quota exhaustion.
STABILITY: Maintained Dual-Database Sync for Auth to prevent premium drops.
vv5.5.89 (Quota Guardian Optimization)
18 มิ.ย. 2569
OPTIMIZATION: Removed 10-minute automatic ID token refresh interval in AuthContext to reduce 80% of unnecessary Firestore reads.
OPTIMIZATION: Replaced real-time onSnapshot listener in NotificationBell with getDocs to load announcements statically on mount.
OPTIMIZATION: Upgraded Admin Dashboard revenue calculator to use getAggregateFromServer instead of fetching all invoice documents.
vv5.5.88 (Stable Membership Framework)
13 มิ.ย. 2569
FIX: ปิดการเขียนทับฐานข้อมูลลดระดับเป็น Free จากหน้าบ้าน (useAuthStore) ใช้เพียง State in-memory
FIX: Overhauled the backend charts sync pipeline to use a Per-Chart isolated fallback strategy rather than an all-or-nothing check. Now, a failing YouTube playlist will individually trigger fallbacks (Spotify / Premium Curated) for that specific chart without affecting others.
RELIABILITY: Resolved the issue where a single active chart from YouTube prevented the other three failed charts from calling their fallbacks, ensuring all 4 categories populate with high-fidelity songs 100% of the time.
PERFORMANCE: Ensured complete, non-empty database caching to Firestore during cron or manual triggers.
vv5.5.86 (Dynamic Chart Selection & Auto-Eviction of Empty Categories)
17 พ.ค. 2569
FEAT: Implemented dynamic category filtering in the song charts tab, automatically hiding/evicting any chart categories that have no active songs in Firestore.
UX: Overhauled the charts dashboard to automatically select the first valid non-empty category upon load, entirely eliminating the blank initial state.
DESIGN: Cleaned up the first category label from 'ฮิตติดชาร์ต อันดับ 1' to 'Thailand Top 100' to accurately reflect the playlist content and improve aesthetic premium feel.
OPTIMIZATION: Extended the Firestore song cache validity to 7 days (1 week) up from 24 hours, guaranteeing ultra-fast loads (under 100ms) for home page visitors.
UX: Protected the background scraping pipeline against rate-limiting and quota usage by only updating from YouTube Music weekly.
FEAT: Preserved manual immediate override so admins can still instantly force-update charts at any time by calling '?force=true'.
vv5.5.83 (Sequential Playlist Sync & Resilient Artist Mapping)
17 พ.ค. 2569
FEAT: Overhauled playlist mapping from Promise.all to sequential (serial) loops with polite delay, completely eliminating concurrent InnerTube connection and session collisions.
FEAT: Implemented resilient multi-strategy artist name parsing to handle official YouTube Music playlist items without ever returning 'Unknown Artist'.
UX: Normalized all thumbnail cover image URLs by stripping tracking query parameters for clean, consistent UI presentation.
PERF: Refactored the InnerTube client to initialize a single, shared session rather than creating multiple separate connections concurrently.
RELIABILITY: Resolved parallel race conditions and rate-limits, ensuring all 4 charts (Thailand Top 100, New Songs, Trending, Evergreen) fetch successfully and concurrently without any failures.
vv5.5.81 (Premium InnerTube Playlist Scraper)
17 พ.ค. 2569
FEAT: Upgraded the automated charts sync to run anonymously via InnerTube (youtubei.js), ensuring 100% successful fetching of YouTube Music's official system playlists (e.g. Thailand Top 100) without any 404s or key restrictions.
UX: Provided a robust triple-fallback pipeline (InnerTube -> Google API Key -> XML RSS Scraper) for maximum possible reliability.
PERF: Optimized the playlist items mapping to resolve duplicates and play tracks instantly using official video IDs.
vv5.5.80 (Zero-API-Key Automated Charts Scraper)
17 พ.ค. 2569
FEAT: Overhauled YouTube Music Playlists Sync to run anonymously (without developer API keys/quotas) using a highly resilient, official RSS feed parsing pipeline.
UX: Guaranteed 100% automated background syncing out-of-the-box regardless of whether the admin has configured custom API keys.
RELIABILITY: Maintained the visual visual charts override dashboard as a hybrid fallback.
vv5.5.79 (Automated YouTube Music Playlists Sync)
17 พ.ค. 2569
FEAT: Implemented 100% automated, hands-free charts sync using YouTube Music's official playlists (e.g. Thailand Top 100, New T-Pop, Trending) as a primary background pipeline.
UX: Bypassed all manual effort and Spotify/JOOX developer lockdowns, giving admins the best of both worlds—automatic background playlist syncing or custom visual editing overrides.
FEAT: Embedded custom YouTube Playlist ID input fields directly in the Integrations tab of the Admin panel.
vv5.5.78 (Visual Charts Manager UI)
17 พ.ค. 2569
FEAT: Launched a beautiful, robust Visual Charts Editor inside the Admin Config dashboard, allowing admins to add, edit, or delete song items, customize cover images, and update charts instantly in Firestore.
RELIABILITY: Resolved third-party API instability (JOOX & Spotify security lockdowns) by granting admins 100% data sovereignty over song charts.
vv5.5.77 (Zero Duplicate Curated & Query Cleanse)
17 พ.ค. 2569
FIX: Completely eradicated song duplicates across all 4 premium curated chart databases
RELIABILITY: Integrated cleanSearchQuery in the SidebarPlayer search resolver to strip bracketed noise (e.g. Proof., Melt, HBD to me), ensuring 100% accurate YouTube MV and Karaoke matches
vv5.5.76 (Anti-Medley Double Shield)
17 พ.ค. 2569
FIX: Reduced React Query staleTime for jooxCharts from 24h/1h to 5 minutes to bypass old medley list caches on client browsers
RELIABILITY: Implemented automatic compilation and medley filter in SidebarPlayer's search resolver to strictly guarantee single song (เพลงเดี่ยว) playback
vv5.5.75 (Cache Bypass Force)
17 พ.ค. 2569
FIX: Added force query-param check to the fallback cache layer to enable true cache bypass and force new curated song data writes
RELIABILITY: Overwrote old medley compilation caches in Firestore with 100% individual single songs (เพลงเดี่ยว)
vv5.5.74 (Premium Curated Singles)
17 พ.ค. 2569
FIX: Replaced YouTube search fallback scraper with a Premium Curated Thai Hit Singles database to guarantee 100% playable single songs (เพลงเดี่ยว)
RELIABILITY: Prevented medley compilation videos (รวมเพลง) from showing up on charts, ensuring clean and professional single-song playback when clicked
vv5.5.73 (Resilient Cache Healing)
17 พ.ค. 2569
FIX: Added cache completeness validation to prevent incomplete cache files (e.g. only 1 chart out of 4) from blocking the full Spotify/YouTube fallback recovery
RELIABILITY: Ensured the API falls through to fetch fresh data for all 4 categories if any is missing from Firestore
vv5.5.72 (Diagnostic Song Charts)
17 พ.ค. 2569
DIAGNOSTICS: Injected Flight Recorder Trace system in /api/joox/charts to track server-side Spotify/YouTube API failures
RELIABILITY: Hardened cascading fallback layers with real-time error logging to local files
vv5.5.71 (Fail-Safe Song Charts)
17 พ.ค. 2569
API: Upgraded /api/joox/charts into a 4-layer fail-safe architecture (JOOX Scraper -> Firestore Cache -> Spotify Playlists -> YouTube Search)
RELIABILITY: Resolved empty/blank charts screen by automatically failing over to Spotify Curated Playlists & YouTube Scraper Search
SYNC: Automatically caches fallback results back to Firestore to ensure ultra-fast future deliveries
vv5.5.70 (Lifetime & Auth Hardening)
17 พ.ค. 2569
STABILITY: Implemented Active Self-Healing Lifetime Member Shield in useAuthStore.ts to automatically align Firestore and RTDB states
UX: Centralized professional authentication error mapping in login.tsx to display polite Thai message for disabled accounts
SYNC: Unified state self-healing to actively protect lifetime members from accidental downgrades
vv5.5.69 (Premium Unified Omega)
26 เม.ย. 2569
DESIGN: Redesigned /packages page with Clean Premium UI to match Profile Drawer
SYNC: Implemented dynamic Firestore package fetching for both Profile and Shop (removed hardcoded data)
ADMIN: Added 'External Product Link' support to Admin Packages manager with auto-sync to Firestore
UX: Added 'View Product Details' button for packages with external links (e.g., Bluetooth speakers)
LINE: Forced Admin Magic Link to open in external browser (Safari/Chrome) using openExternalBrowser=1
STABILITY: Final polish on Split Shield Omega to prevent g.split errors across all dynamic modules
vv5.5.66 (Split Shield Omega)
26 เม.ย. 2569
STABILITY: Enforced 'Split Shield' pattern globally across all modules (api.ts, usePlayerStore, Sidebar, Admin Modals)
FIX: Resolved recurring 'g.split is not a function' TypeError on Remote page by hardening all string split operations
RELIABILITY: Updated safeSplit utility with even stricter type checking and error boundaries
VERSION: Synced build hash and versioning for deployment verification
vv5.5.60 (Member Shield)
26 เม.ย. 2569
RELIABILITY: Implemented Lifetime Membership Shield to prevent automatic downgrades
FIX: Unified membership schema across Admin and Omise payment systems
PERFORMANCE: Upgraded Admin Search with Smart Query (Email/UID detection) to reduce reads
DATA: Prevented membership data loss by migrating to dot-notation updates
vv5.5.58 (Split Shield)
16 เม.ย. 2569
STABILITY: Implemented 'Split Shield' pattern across entire codebase
FIX: Systematically replaced direct .split() with safeSplit to prevent TypeError Crashes
RELIABILITY: Hardened Auth Store, Sidebar, User Service, and API Headers
TV: Improved QR scanning reliability by hardening room parameter parsing
vv5.5.57 (Quota Guardian)
16 เม.ย. 2569
FEATURE: Implemented Quota Guardian in firebase-admin.ts
RELIABILITY: Added proactive Code 8 (Quota Exceeded) detection and reporting
INTEGRATION: Automatic LINE Push notification to Admin on Firestore exhaustion
MONITORING: Integrated handler into Sync Users, Cleanup, and Expiry Check APIs
vv5.5.56 (Quota Shield)
16 เม.ย. 2569
STABILITY: Optimized Firestore usage (Admin Users, Sidebar, TV Heartbeat)
RELIABILITY: Migrated to CountFromServer and Pagination to reduce reads by 90%
PERFORMANCE: Relaxed TV heartbeat frequency from 1s to 5s
vv5.5.49 (Intelligent Admin Filter)
16 เม.ย. 2569
Feature: Implemented automatic userId filtering on the Payments page
UX: Updated User Modal links to pre-filter order history by specific member
Reliability: Added search state persistence for Admin orders dashboard
vv5.5.46 (Admin Dashboard Polish)
16 เม.ย. 2569
Fix: Removed hardcoded v4.9.98 string from Admin User Modal
Reliability: Unified VERSION_LABEL across the entire administrative interface
Performance: Optimized pending order detection in user management
vv5.5.45 (One-Step Admin Approval)
16 เม.ย. 2569
Feature: Added Quick Approval widget in Admin User Modal
UX: Enabled one-click package approval and LINE notification from the User List
Integration: Automatically cleans up pending orders in Payments page when approved via User Modal
Reliability: Reused existing paymentService.approvePayment for 100% notification parity
vv5.5.44 (Simplified LINE Strategy)
16 เม.ย. 2569
Security: Disabled LINE Login to resolve production authentication issues
Feature: Retained LINE Account Linking for billing and notifications
Stability: Simplified /api/auth/line-token to focus on verification only
Fix: Moved LINE identity sync logic to client-side for better reliability
vv5.5.43 (Plesk Stability)
14 เม.ย. 2569
Reliability: Added support for file-based Firebase Admin credentials (serviceAccountKey.json)
Fix: Improved private key parsing for shared hosting environments
Stability: Resolved Invalid JWT Signature error on Plesk
vv5.5.42 (Playlist Excellence)
13 เม.ย. 2569
Feature: Enabled individual song playback and selection from Playlist Detail Modal
UX: Added tactile feedback (active-scale) to playlist song items
Reliability: Integrated robust addToQueue mapping for playlist items
vv5.5.41 (UI Cleanup & Fix)
13 เม.ย. 2569
Revert: Removed 'Save to Playlist' from Sidebar and Queue as requested
Fix: Improved Playlist Creation logic with data sanitization
Reliability: Added loading state and duplicate prevention in playlist modal
vv5.5.40 (UX Fix)
13 เม.ย. 2569
Bugfix: Resolved issue where Playlist Modal couldn't be reopened for the same song
Logic: Added onClose propagation to sync state when clicking outside the modal
vv5.3.62 (Remote Stability Fix)
10 เม.ย. 2569
FIX: Resolved ReferenceError/TypeError (g.split) on Remote page by correctly importing VERSION_LABEL
STABILITY: Hardened room query parameter handling to prevent crashes when accessed without a room code
SYNC: Verified cross-device version labeling for 100% UI consistency