XP System:
- XP now awarded for attendance (+25), ratings (+10), reviews (+50)
- First-time bonuses for first rating (+25) and first review (+50)
- Streak bonuses (+10 per day, capped at 7x)
- Badge awards automatically grant XP
User Titles & Flair System (Tracker-style):
- Level-based free titles: Rookie → Immortal
- Purchasable titles with XP: Jam Connoisseur, Setlist Savant, etc.
- Username colors purchasable with XP (6 colors + Rainbow)
- Emoji flairs purchasable with XP
- Early adopter perks: exclusive titles, colors, 10% XP bonus
New Fields on User:
- custom_title, title_color, flair
- is_early_adopter, is_supporter
- joined_at
Shop API Endpoints:
- GET /gamification/shop/titles
- POST /gamification/shop/titles/purchase
- GET/POST for colors and flairs
- GET /gamification/user/{id}/display
- GET /gamification/early-adopter-perks
Frontend:
- XP Leaderboard added to home page
- LevelProgressCard shows on profile
Backend:
- Add XP, level, streak fields to User model
- Add tier, category, xp_reward fields to Badge model
- Create gamification service with XP, levels, streaks, badge checking
- Add gamification router with level progress, leaderboard endpoints
- Define 16 badge types across attendance, ratings, social, milestones
Frontend:
- LevelProgressCard component with XP bar and streak display
- XPLeaderboard component showing top users
- Integrate level progress into profile page
Slug System:
- All entities now support slug-based URLs
- Performances use songslug-YYYY-MM-DD format
Backend:
- Add ChaseSong model for tracking songs users want to see
- New /chase router with CRUD for chase songs
- Profile stats endpoint with heady versions, debuts, etc.
Frontend:
- ChaseSongsList component with search, add, remove
- AttendanceSummary with auto-generated stats
- Updated profile page with new Overview tab content
- Add missing @radix-ui/react-select dependency
- Sort tour shows chronologically by date
- Add context to review forms (song name, date)
- Redesign performance page with distinct visual identity
- Update ReviewForm to use RatingInput slider
- Comprehensive Terms of Service with 11 sections
- GDPR-compliant Privacy Policy with 12 sections
- Proper styling, metadata, and formatting
- Contact information and last updated dates
- Show page: Song titles now link to /performances/[id]
- Performance page: Added breadcrumbs (Songs > Song Title > Date)
- Performance page: Song title links to /songs/[id]
- Performance page: Venue links to /venues/[id]
- Performance page: Added rating component in header
- New RatingInput component with slider + numeric input
- Visual stars show partial fill for decimals
- Gradient slider (red → yellow → green) for intuitive scoring
- RatingBadge component for compact display
- Updated EntityRating to use new components
- Rating/Review models now use float instead of int
- Star rating component shows partial fills
- Numeric value displayed while rating
- Supports precision: 0.1 increments
- Fix ratings API to support venue_id and tour_id
- Add migration for new rating columns
- Venues list: search, state filter, sort by name/shows
- Venues detail: show list with dates, venue stats, error handling
- Remove broken EntityRating/SocialWrapper from venue pages
- Add Space Grotesk and JetBrains Mono fonts
- Implement light/dark mode toggle with next-themes
- Update color palette to match Ersen (HSL-based tokens)
- Add ThemeProvider and ThemeToggle components
- Reduce border radius to 0.3rem for cleaner look
- /performances page with top-rated performance leaderboard
- Added to Browse dropdown in navbar
- Updated home page CTA to feature Heady Versions
- Medal icons for top 3 performances
- YouTube embed of #1 rated performance
- Top 5 performances ranked with medal icons
- Rating + rating count display
- YouTube link icons for each performance
- Gradient gold styling for heady section
Backend:
- User lookup by email/username with activity stats
- Ban/unban endpoints with role protection
- Bulk approve/reject nicknames
- Bulk resolve/dismiss reports
- Queue stats endpoint
Frontend:
- Stats cards (pending items, ban count)
- User Lookup tab with search
- User profile with activity stats
- Ban dialog with duration selector
- Bulk selection checkboxes on queues