Skip to content

feat: Music for Life — curated Spotify playlists, maps, and hover polish#89

Merged
kaiiiichen merged 3 commits into
mainfrom
feat/spotify-playlists
Jul 5, 2026
Merged

feat: Music for Life — curated Spotify playlists, maps, and hover polish#89
kaiiiichen merged 3 commits into
mainfrom
feat/spotify-playlists

Conversation

@kaiiiichen

Copy link
Copy Markdown
Owner

Summary

  • Music for Life (/playlists) — Curated public Spotify playlists (manual ID list; Spotify API cannot list playlists in Development Mode). Index shows cover, live Spotify description, and track count; cards link to detail pages. Home Listening chip renamed to music for life.
  • Detail pages (/playlists/[id]) — Full two-column track list, Spotify back-link on title/cover, ← music for life chip. Place-journal descriptions use Spotify text verbatim: period on line 1, places (incl. regions like Kyushu Island:) on line 2, with Mapbox-linked city names.
  • Map viewer (/playlists/map) — Fullscreen Mapbox GL JS (Standard monochrome); compact footer, no page scroll. Requires NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN.
  • HoverTip polish — Social icons + card help bubbles: 70ms show delay, fade + slide animation (.hover-tip-bubble in globals.css, 220ms ease); portal tooltips mount only when displayed. Place-name links use row-style hover (background first, accent text via group-hover, 300ms) instead of instant :hover color.
  • Docs — README (EN + 中文) updated for routes, env, fork checklist, HoverTip behavior, and CURATED_SPOTIFY_PLAYLISTS / placeCoords.

Test plan

  • Home → Listening → music for life/playlists
  • Index cards show correct Spotify descriptions (esp. California Sunshine places)
  • Period / places split on two lines; Kyushu Island on places line
  • Click playlist → /playlists/[id] track list; city links → /playlists/map
  • Map page fills viewport, no body scroll; footer compact
  • Hover social icons + Listening last-month help — bubble delays ~70ms, slides in
  • Place links on playlist pages — bg hover before accent text
  • npm run lint && npm run typecheck && npm run test && npm run build (CI)

Made with Cursor

kaiiiichen and others added 2 commits July 4, 2026 20:22
Spotify's Feb-2026 API changes blocked listing playlists automatically
(/me/playlists and /users/{id}/playlists return 403 in Development Mode),
so playlist IDs are curated by hand in app/lib/spotify-playlists.ts —
array order is display order. Covers, descriptions and tracks are fetched
live from GET /playlists/{id} and the new /items endpoint (revalidate 1h).
Entry chip sits on the home Listening card next to last month's tops.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude <noreply@anthropic.com>
…ver polish

Add per-playlist detail routes and a fullscreen Mapbox viewer; fetch Spotify
descriptions verbatim with period/places split on two lines and linked cities.
Polish HoverTip bubbles (delayed fade/slide) and align place-link hovers with
site list patterns. Update README and .env.example for new routes and Mapbox.

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@vercel

vercel Bot commented Jul 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kaichen.dev Ready Ready Preview, Comment Jul 5, 2026 4:08am

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@kaiiiichen, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 33 seconds

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6def00e9-9d96-41cb-a7c1-b223e53ae536

📥 Commits

Reviewing files that changed from the base of the PR and between 0ff4525 and 94ac022.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (25)
  • .env.example
  • README.md
  • app/components/hover-link-hint.tsx
  • app/components/hover-tip.tsx
  • app/components/listening-card.tsx
  • app/components/playlist-description.tsx
  • app/components/playlist-map.tsx
  • app/components/site-footer.tsx
  • app/components/subpage-enter.tsx
  • app/globals.css
  • app/layout.tsx
  • app/lib/spotify-playlists.ts
  • app/playlists/[id]/page.tsx
  • app/playlists/map/layout.tsx
  • app/playlists/map/map-viewport-lock.tsx
  • app/playlists/map/page.tsx
  • app/playlists/opengraph-image.tsx
  • app/playlists/page.tsx
  • app/sitemap.ts
  • lib/mapbox-playlist-map.test.ts
  • lib/mapbox-playlist-map.ts
  • lib/spotify-playlists.test.ts
  • lib/spotify-playlists.ts
  • next.config.ts
  • package.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/spotify-playlists

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kaiiiichen kaiiiichen self-assigned this Jul 5, 2026
@kaiiiichen kaiiiichen enabled auto-merge (squash) July 5, 2026 04:07
@kaiiiichen kaiiiichen merged commit b5161ec into main Jul 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant