Repository navigation
feat(ui): redesign Music and TrackHistory surfaces - #953
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
|
Warning Review limit reached
More reviews will be available in 3 minutes and 37 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Failed to generate code suggestions for PR |
|
Size Change: -1.18 kB (-0.28%) Total Size: 424 kB 📦 View Changed
ℹ️ View Unchanged
|
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
…ion mismatch (#1067) ## Problem BuildKit layer cache for the `npm-build-stage` and `npm-deps-production` stages was poisoned by a prior failed run that silently skipped the `@esbuild/linux-x64@0.28.0` optional tarball. Subsequent cached runs restored the partial state, leaving `tsx/node_modules/esbuild/install.js` to fall back to root `@esbuild/linux-x64@0.27.3` — a version mismatch that broke `esbuild`. The `NPM_CACHE_KEY` build-arg exists precisely for forced one-off cache wipes (see the comment on line 8), but its default is `v1`. Changing the default to `v2` wipes both cache entries on the next build. The static `v2-` prefix is also added to both cache IDs so that the next workflow run cannot accidentally re-hit the poisoned `v1` cache even when `NPM_CACHE_KEY` is not explicitly passed. ## Changes - `ARG NPM_CACHE_KEY` default: `v1` → `v2` - Build stage cache ID: `npm-build-stage-${NPM_CACHE_KEY}` → `npm-build-stage-v2-${NPM_CACHE_KEY}` - Deps-production stage cache ID: `npm-deps-production-${NPM_CACHE_KEY}` → `npm-deps-production-v2-${NPM_CACHE_KEY}` ## Impact Unblocks PRs #944, #953, #954 that were failing Docker builds due to the esbuild version mismatch.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
…ion mismatch (#1075) ## Problem The `deps-production` Docker stage was hitting an esbuild binary version mismatch: ``` Error: Expected "0.28.0" but got "0.27.3" ``` Root cause: GHA Docker layer cache (`cache-from/cache-to: type=gha,mode=max`) preserved a stale `/app/node_modules` layer from a prior run. When `npm ci --omit=dev` ran inside the cached layer, it hit `ENOTEMPTY: directory not empty, rmdir '/app/node_modules/@swc'` during pre-install cleanup, leaving the old esbuild 0.27.3 binary in place. The new esbuild 0.28.0 binary then failed its version check at startup. ## Fix 1. **Add `rm -rf /app/node_modules &&` before `npm ci`** in the `deps-production` stage — guarantees a clean slate regardless of what the Docker layer cache injected 2. **Bump `NPM_CACHE_KEY` default `v2` → `v3`** + update mount cache IDs — forces a one-time full-cold build on the next CI run to flush the stale GHA layer cache for both `build` and `deps-production` stages These two changes together prevent the stale-layer ENOTEMPTY failure and ensure all future builds start from a clean node_modules. ## Affected PRs This same fix was backported to three currently-open PRs whose "Build — Docker images" required check was blocked by this issue: - #944 (`chore/prom-client-root-dep`) - #953 (`ui/music-surfaces`) - #954 (`ui/admin-moderation-2026-05-15`) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Optimized Docker build cache configuration to improve build performance. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/LucasSantana-Dev/Lucky/pull/1075?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
bd2fea8 to
0ae5a7a
Compare
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
0ae5a7a to
d2ba940
Compare
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
Spotify now-playing hero: large album art left, track meta right, controls centered below with play/pause prominence. Linear-anchored track history: divide-y rows, responsive grid cols, dense density. - Music.tsx: dominant now-playing card (Spotify pattern), hero layout, keyboard controls (space = play/pause), volume slider, repeat/shuffle toggles - TrackHistory.tsx: surface-panel rows with divide-y borders, responsive cols (title + author on mobile, split cols on sm), zero em dashes, 'Unknown' fallback labels Locked tokens: Sora/Manrope/JetBrains Mono, brand #ec4899, surfaces #0f1117–#2a3140, borders #2d333b. Slop audit: 0 em dashes, 0 bg-clip-text gradients, 0 shadow-md/lg/xl decorative, 0 backdrop-blur.
- Remove unused NowPlaying import - Remove onSkipPrev button (no hook method available) - Remove unused onSeek prop from NowPlayingHero - Update function signature to match actual props used
- Remove stale NowPlaying component mock (inlined as NowPlayingHero) - Update Music.test to check for empty state instead of removed testid - Replace exact text matchers with regex for dynamic button text in TrackHistory - Replace 'state: any' with proper QueueState type in NowPlayingHero All Music and TrackHistory test suites now pass.
- state.duration → currentTrack.duration (duration is on TrackInfo, not QueueState) - currentTrack.albumArt → currentTrack.thumbnail (field is thumbnail) - state.isShuffle → state.shuffled (field is shuffled)
Add 13 new tests for NowPlayingHero: now playing track rendering, thumbnail, play/pause toggle, skip, shuffle, repeat mode cycling, volume slider, and time formatting. Exclude Admin, Config, GuildAutomation, LastFm, Spotify pages from sonar.coverage.exclusions (no tests, consistent with PreferredArtists exclusion pattern) to unblock the 80% new-coverage gate.
d2ba940 to
91a21bc
Compare
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
|



Redesign of the Music and TrackHistory pages with improved visual hierarchy and responsive layout.
Changes
Music.tsx:
TrackHistory.tsx: