v1.3.0 latest may 6, 2026
new commands
/rec artists — get personalized artist recommendations based on your listening history
/rec tracks — get personalized track recommendations based on your listening history
/rec albums — get personalized album recommendations based on your listening history
improvements
All recommendation commands use Groq AI (llama-3.1-8b-instant) with JSON mode for reliable, contextual descriptions
Recommendations are cached for 6 hours per user per time period
Each recommendation includes a personalized reason referencing your actual top artists/tracks
Recommendations support all time periods: last 7 days, last month, 3 months, 6 months, last year, and all time
Recommendations can be generated for other users by using the optional user parameter
internal
Implemented generic caching system with Cache model replacing all specific cache tables
Removed deprecated cache models: WrappedCache, RecentCache, TasteUserCache, TasteServerCache, StatsScrobblesCache, StatsArtistsCache, StatsAlbumsCache, StatsGenresCache, WkCache
All commands now use unified getCache() and setCache() utilities from cache.ts
Supabase Storage buckets continue to store images, Cache table stores URLs and metadata as JSON
Added cache invalidation on /link and /unlink to clear stale user data

v1.2.1 may 5, 2026
improvements
Status page degraded threshold changed from "any service degraded" to "majority of services degraded", minor issues no longer mark the entire status page as degraded
Database health check timeout increased from 1.2s to 2.0s to better reflect acceptable response times and reduce false degraded states
internal
Codebase-wide formatting pass across 65 files (no logic changes)

v1.2.0 april 25, 2026
fixes & improvements
/stats, /wk, /taste, and /recent now cache all pages upfront on first run — page navigation is instant with no API calls on button clicks
Canvas images are pre-rendered and stored in Supabase Storage (stats-cache, wk-cache, taste-cache buckets) — same approach as /wrapped
/stats artists, /stats albums, /stats genres now show all linked members with full pagination (was incorrectly capped at top 10)
/stats and /wk commands no longer require a minimum of 2 linked members — works with any number
/taste server footer now shows member count (e.g. Page 1 of 5 • 12 members • All time)
Page footer shows Page 1 instead of Page 1 of 1 when there's only a single page
All command references in bot messages now use proper Discord command mentions instead of plain text (e.g. /link)
Added RecentCache, TasteUserCache, TasteServerCache, StatsScrobblesCache, StatsArtistsCache, StatsAlbumsCache, StatsGenresCache, and WkCache Prisma models

v1.1.0 april 18, 2026
new commands
/info artist — artist info with bio, listeners, tags, similar artists, and personal playcount
/info album — album info with track list, duration, release year, and personal playcount
/info track — track info with duration, tags, wiki, loved status, and personal playcount
/info genre — genre info with reach, taggings, wiki, and top artists
/taste user — user's top 50 genres (refactored from /taste)
/taste server — server's aggregated top 50 genres
/discovery — underground vs mainstream score based on top 100 artists
/personality — music personality type with 5 dimension bars (loyalty, diversity, mainstream, intensity, nostalgia)
/streak — top listening streaks over the last 90 days across artists, tracks, and albums
/wrapped — personalized scrobbler wrapped with 5 navigable canvas cards, cached via Supabase Storage
improvements
Autocomplete for /wk and /info now searches Last.fm globally when typing, shows personal top 20 when empty
Image fetching switched to iTunes API for tracks/albums (better K-pop coverage), Deezer for artists with exact name matching
/stats genre/artist/album leaderboards fixed to include all linked members (was incorrectly slicing to 10)
/chart server tracks now keys by track|||artist to prevent wrong covers for same-named tracks by different artists
All chart commands use consistent image sources: Deezer picture_xl for artists, iTunes for albums/tracks with Last.fm fallback
infrastructure
Added WrappedCache Prisma model for Supabase Storage URL caching
Added SUPABASE_URL and SUPABASE_SERVICE_KEY environment variables

v1.0.0 april 16, 2026
initial release
/link — Last.fm OAuth flow with background polling (no redirect needed)
/unlink — disconnect Last.fm account
/profile — music profile with AI-generated bio via Groq
/np — now playing with dynamic layout, genre tags, release year, play count
/recent — paginated recent tracks with hyperlinked song names
/taste — genre breakdown bar chart (up to 50 genres, paginated)
/compat — music compatibility score across artists, tracks, albums, and genres with canvas bar chart
/chart artists — top artists grid chart (3×3 / 4×4 / 5×5) via Deezer images
/chart albums — top albums grid chart using Last.fm album art
/chart tracks — top tracks grid chart via Deezer
/chart server — server-wide aggregated chart for artists, albums, or tracks
/stats scrobbles — server scrobble leaderboard with canvas image and pagination
/stats artists — unique artist count leaderboard
/stats albums — unique album count leaderboard
/stats genres — unique genre diversity leaderboard
/help — interactive help with select menus per section
infrastructure
PostgreSQL via Prisma with User, Server, ServerMember, Play, and PendingLink models
Components V2 embeds throughout
Canvas-generated images for stats, taste, compat, and chart commands
Custom emoji support via E object
Guild commands in development, global commands in production