audio streaming app plyr.fm

docs: update STATUS.md with Feb 16-17 work (#936)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

authored by zzstoatzz.io

Claude Opus 4.6 and committed by
GitHub
e8ab9054 0b85d14d

+14 -2
+14 -2
STATUS.md
··· 47 47 48 48 ### February 2026 49 49 50 + #### Dockerfile fix + album caching + session caching (PRs #930-935, Feb 16-17) 51 + 52 + **production stability fix (PR #935)**: `uv run` in the Dockerfile CMD was triggering dependency resolution on every cold start, downloading from PyPI inside the Fly network. when PyPI connections failed (connection reset), the process exited, Fly restarted it, and the machine eventually hit the 10-restart limit and died permanently — leaving only one machine to serve all traffic. fix: `--no-sync` flag tells `uv run` to use the pre-installed venv without any runtime resolution. 53 + 54 + **album detail caching (PRs #933-934)**: `GET /albums/{handle}/{slug}` averaged 745ms with outliers at 5-7s due to Neon cold compute + uncached PDS calls. added Redis read-through cache on the full `AlbumResponse` (5-min TTL, keyed by handle/slug). per-user `is_liked` state zeroed out before caching to prevent leaking between users. explicit invalidation on all mutation paths: album CRUD, track CRUD, list reorder. follow-up PR #934 fixed three gaps caught in review: reorder not invalidating, same-album metadata edits not invalidating, and delete invalidating before commit (race condition). 55 + 56 + **session cache expiry fix (PR #932)**: Redis session cache from PR #930 was returning expired sessions — the cache read skipped the `expires_at` check. fix: validate expiry on cache hits, delete and fall through to DB on stale entries. 57 + 58 + **session caching (PR #930)**: Redis read-through cache for `get_session()` to reduce Neon cold-start latency on auth checks. 5-min TTL with invalidation on session mutations. 59 + 60 + --- 61 + 50 62 #### homepage quality pass + likers bottom sheet (PRs #913-927, Feb 16) 51 63 52 64 **top tracks redesign**: the homepage "top tracks" section now uses horizontal `TrackCard` components (row layout with 48px artwork, title/artist links, play/like counts) inside a scroll-snap container. cards use the same `--track-*` glass design tokens as `TrackItem` for visual consistency. scroll-snap with `x proximity` gives gentle anchoring without fighting the user. ··· 235 247 236 248 ### current focus 237 249 238 - homepage polish and mobile UX: top tracks horizontal row with glass-style TrackCards, likers bottom sheet for mobile (hover tooltip on desktop), "artists you know" section from Bluesky follow graph. oEmbed support for rich link previews. playlist recommendations via CLAP embeddings stable in production. 250 + production reliability and caching: Redis read-through caches on session auth and album detail endpoints to mitigate Neon cold-start latency. Dockerfile hardened against PyPI network failures in Fly.io. homepage polish and mobile UX stable in production. 239 251 240 252 ### known issues 241 253 - iOS PWA audio may hang on first play after backgrounding ··· 408 420 409 421 --- 410 422 411 - this is a living document. last updated 2026-02-16. 423 + this is a living document. last updated 2026-02-17. 412 424