ety001Self-developed multi-identity car player application released ## v0.0.8(2026-09-01) The revised version of the document has no code changes (the code is consistent with v0.0.7, including the centering repair of the vehicle layout mark). - ** Verification method document revision **(`docs/car-ui-icon-centering-verification.md` v1.1): Corrected the statement of "leaning to the right" on the cover note (The measured pixel level is centered, which is the visual impression of the asymmetry of FA note glyphs); Corrected the mechanism attribution of 115% font enlargement-what deepens the deviation of the old scheme is "system text scaling zooms in together with the container size"(strut change, base line shift), only magnifying the icon size will not deepen the deviation; supplemented independent review data: The new CSS has a deviation ≤1 physical px under the condition of container size ×1.15, which is robust to text scaling ## v0.0.7(2026-09-01) Fixed the car version of the playback control button icon and the cover occupying notes centered. - ** Fixed that the control button icon of the vehicle-machine version is not in the center of the round button **: The icon originally relied on 'line-height'+'vertical-align: middle' to be vertically centered. The FontAwesome font comes with 'line-height: 1', and its font measurement is inconsistent with the parent font, causing the icon to sink overall (the 48px button is about 3px lower inside, and there are more large buttons). Change to absolute positioning + translate(-50%,-50%) geometry centered, which only depends on the button size and has nothing to do with font measurement; at the same time, clean up the UA default button `padding` and the `line-height` declaration that each breakpoint has failed - ** Fixed the car version cover occupying note not in the center **: Similar problem, and the cover container under the narrow screen ≤ 480px is shrunk to 120px, but the `line-height` is still 150px, and the note is offset by about 24px; It is also changed to absolute positioning and centering (JS replaces the placeholder with `img` as a whole after loading the real cover, and it will not be affected) ## v0.0.6(2026-08-30) Steering wheel/headphone media buttons control playback, song list list recently played priority + large list windowing and searching. - ** Media session access **(#30): The car version and the full version playback page are connected to media sessions, and media hardware buttons such as previous/next on the steering wheel are available. Priority is given to the `lzc_media_session` bridge injected by the lazy cat WebShell (old car phones WebView can also establish native media sessions without the standard MediaSession API), and secondly, the browser's native `navigator.mediaSession`, both of which cannot be silently demoted when used. Support play / pause /previous/next/fast forward and reverse (±10 seconds)/ seekto / stop; change songs and synchronize titles, singers, and covers to the system media interface - ** Priority is given to the most recently played playlist list **(#30): According to the reverse order of the last playing time (`playlist_states.updated_at`), the song list you listened to last time will always rank first; those that have never been played will be listed in the original order - ** Windowing of song list threshold **(#30): Add the 'PLAYLIST_WINDOW_THRESHOLD' environment variable (default 36, the interface issues 'window_threshold' with the list). When the number of songs exceeds the threshold, the full version (grid row aligned slices + ResizeObserver column number adaptive) and the car version (reuse song list virtual scrolling mode) switch windowing rendering, with a constant number of DOMs; maintain full rendering within the threshold - ** Songlist Search **(#30): A new search box has been added to the song list layer of the car version and the full version of the song list page; the front end will be input and filtered within the threshold, and the back end will be sent to anti-shake after 300ms exceeding the threshold. q=`(LIKE wildcard escape for literal match) - ** Fix the cover image of the car version is not fully covered with containers **(#30): cover `img` is an inline element, sitting on the container `line-height` text baseline, moving down as a whole, exposing the background color at the top; change to `display: block` and then completely cover, filling the container with `overflow: hidden` to prevent corner overflow - ** Fix **: Remove invalid `` carried by car version identity/song list request. limit=100`parameter ## v0.0.5(2026-08-26) The Lazy Cat Micro Service storage source is split according to user isolation, scanning task review, and performance optimization for playing long song lists. - ** Media storage source splitting **(#26): Remove the general "media" storage source and split it into "remote mount"(`/lzcapp/media/RemoteFS/<username>`, only the current user's own directory) and "USB mount"(`/lzcapp/media/media`, shared);RemoteFS root and media root can no longer be browsed/scanned - ** Remove the redundant "Scan" button in the file browser **(#27): This entry only stores in storage without adding song lists, and has no progress feedback. It is a duplicate of the main process - ** Added a "Scan Tasks" page **(#28): A tab level with the identity selection/file browser can review the status, progress, new numbers and failure messages of the scan task; task persistence records the scan path (Database Migration 006); scanning is performed in the background of the server, and closing the page does not affect the results - ** Windowing the playlist list on the playback page **(#29): Virtual scrolling (only the visible area lines are rendered, and the number of DOM is constant); fixes incomplete display of songs with more than 200 songs; load song details on demand (`song_ids` + `songs/batch`, zero additional requests for the first screen); narrow-screen player is placed on the top, and the list is a fixed-height window;mini-player is hidden on the playback page ## v0.0.4(2026-08-26) Weak network (vehicle-machine scenarios) Continuation and start-up optimization and cover thumbnail caching. - ** Continuation of broadcast jumps first and then plays again **(#25): Fixed the dual request problem-the original implementation immediately 'play()' will buffer from the file header first, and then abandon and reissue the Range request when jumping. Under weak networks, dual requests seize bandwidth, causing the start of broadcast to be slow; both the car version and the full version are changed to jump first and then play, and the metadata does not arrive in 8 seconds, and the bottom of the game is played again from the beginning. - ** Cover thumbnail cache **: Add `GET /api/songs/:id/cover? size=thumb`, ffmpeg generates about 300px WebP (90%+ smaller than the original image), lazy generation + disk cache; lazy cat deploys mount`/lzcapp/cache/thumbnails`(`CACHE_PATH`) - ** Delayed loading of the cover of the car and machine version **: Load the thumbnail after the broadcast starts; fail to return the original picture, and then return the default icon ## v0.0.3(2026-08-26) The file browser under the Lazy Cat Microservice deployment is isolated according to the current user. - ** File browser user isolation **(#24): During lazy cat deployment, the storage source is limited to the media directory + `/lzcapp/document/<current username>`; the username is taken from the trusted header `X-HC-User-ID` injected by the gateway. Whitelist verification prevents path injection; strict path segment prefix matching prevents bypass; the scanning interface is also verified; no valid username returns 401 - ** Fix `CreateScanJob` data competition **: Serialize the response first before starting the background scan task - Non-lazy cat deployment behavior remains unchanged ## v0.0.2(2026-07-23) Centralized optimization of the car player and repair of narrow screen (small screen devices such as iPhone SE). - ** Multiple optimizations for the car version **(#21): FontAwesome 5 icon, virtual scrolling of the playlist (smooth of ten thousand songs), album cover display, removal of touch check boxes, new landing page - Landing page debugging code cleanup (#22) - ** Narrow screen (iPhone SE) repair **(#23): The five buttons in the playback control line are centered symmetrical, the vertical slide bar of the volume spring layer is repaired, the spring layers are aligned, and the top bar of the narrow screen is stored as a menu spring layer ## v0.0.1(2026-07-17) The first release version of the multi-sound box: a multi-identity local music player for vehicle-machine scenarios. - ** Multiple identities and multiple playlists **: Identity/playlist management, default identity when boarding - ** Dual front-end **: Car version (ES5, compatible with Chrome/WebView ≤ 74 old cars)+ Full version (Vue 3) - ** Memory playback **: Identity memory points + song list memory points (track + playback position), switch song lists and automatically resume playback - ** File Browser **: Scan audio files into storage, select all/add them to the playlist in batches - ** Progress reporting **: 10s cycle + instant saving of events, timeout retry and misoperation prevention - Back-end Go + SQLite (CGO-free), single container deployment