Needle Drop
Release notes:
A ground-up mobile pass with a coherent motion vocabulary inspired by vinyl. Rebuilt the rating flow around a proper bottom sheet, pulled the whole app closer to feeling like a native music app, and tightened a stack of correctness and perf issues from an internal audit.
Mobile overhaul
- Sticky rate bar on
/albumwith grab-handle drag-to-dismiss and a rebuilt bottom-sheet rating form (large stars, live score, drag-to-rate) - Pull to refresh on home, feed, and profile with a spinning Deadwax disc
- Compact mobile album hero (cover left, info right)
- Tracklist now above the fold on mobile
- Horizontal reels gain scroll-snap and dynamic edge-fade masks
- 44px tap targets on tiny icon buttons; 16px inputs to kill iOS auto-zoom
- Signed-out nav gains Popular + About
Motion — "the needle drop"
Fourteen on-brand animations in one coherent system:
- Universal button-press feedback + haptics on all primary toggles
- Vinyl spinner replaces generic loaders
- Shimmer loading state replaces opacity-pulse
- Star tap pop + rating-complete 360° spin with ring pulse
- Spring bottom-sheet entry + slide-down exit + ink-settle text sweep
- Hero cover needle-drop entrance, hover-tilt on desktop
- Histogram bars stagger-rise; profile tab underline slides
- Follow confetti, listen-later vinyl fly-away, tonearm sweep on navigation
- Diary row hover expand, feed card sleeve-slide entrance
- All of it respects
prefers-reduced-motion
Bug fixes
- Fixed "Rendered more hooks" crash on
/profile - Fixed followers/following modal appearing as blurry screen (CSS containing-block gotcha
from
PullToRefresh's always-on transform) - Fixed followers list flashing "Follow" before resolving
- Fixed avatar crop modal silently failing (ObjectURL race with React strict mode)
- Fixed double rate celebration on desktop album page
- Fixed stale rating ref after save
- Killed the native blue X on search inputs
- Un-squished the sort pills on mobile search
Performance
- Narrowed
album:albums(*)→ explicit columns across 8 feed queries; rated-feed rows no longer drag the full MusicBrainz metadata JSON per card PullToRefreshlisteners no longer re-attach every drag frame- Album page skeleton rewritten to match the real layout exactly
- Search debounce 500ms → 280ms