···47474848### December 2025
49495050+#### offline mode foundation (PRs #610-611, Dec 17)
5151+5252+**experimental offline playback**:
5353+- new storage layer using Cache API for audio bytes + IndexedDB for metadata
5454+- `GET /audio/{file_id}/url` backend endpoint returns direct R2 URLs for client-side caching
5555+- "auto-download liked" toggle in experimental settings section
5656+- when enabled, bulk-downloads all liked tracks and auto-downloads future likes
5757+- Player checks for cached audio before streaming from R2
5858+- works offline once tracks are downloaded
5959+6060+**robustness improvements**:
6161+- IndexedDB connections properly closed after each operation
6262+- concurrent downloads deduplicated via in-flight promise tracking
6363+- stale metadata cleanup when cache entries are missing
6464+6565+---
6666+5067#### visual customization (PRs #595-596, Dec 16)
51685269**custom backgrounds** (PR #595):
···458475459476---
460477461461-this is a living document. last updated 2025-12-16.
478478+this is a living document. last updated 2025-12-17.