New endpoints:
- GET /analytics/gaps/{vertical} - Songs overdue for a play
- GET /analytics/velocity/{vertical} - Hot vs cooling songs
- GET /analytics/trends/{vertical} - Monthly/quarterly chart data
- GET /analytics/stats/{vertical} - Aggregate band statistics
- GET /analytics/bustouts/{vertical} - Songs returning after long gaps
- GET /analytics/debut-songs/{vertical} - Recently debuted songs
Sprint 2: Added 54 musicians with 78 band memberships
- Phish, Widespread Panic, Umphreys McGee core members
- Notable sit-in artists (Karl Denson, Branford Marsalis, Derek/Susan Trucks)
- Toy Factory Project supergroup (Oteil, Marcus King, Charlie Starr)
Sprint 4: Festival entity for multi-band events
- Festival and ShowFestival models
- /festivals API with list, detail, by-band endpoints
Sprint 5: User Playlists for curated collections
- UserPlaylist and PlaylistPerformance models
- Full CRUD /playlists API
Sprint 6: Venue Timeline endpoint
- /venues/{slug}/timeline for chronological cross-band history
Blockers (need production data):
- Venue linking script (no venues in local DB)
- Canon song linking (no songs in local DB)
- Add EmptyState component with 6 variants
- Add discover.py router with smart filtering
- GET /discover/shows (year, venue, city, tour filters)
- GET /discover/years
- GET /discover/recent
- Add GET /attendance/me/stats (by vertical breakdown)
- GET /on-this-day - shows matching today's month/day in history
- GET /on-this-day/highlights - top 5 for homepage widget
- Supports ?vertical= filter and ?month=&day= override
- Add landing page with hero, scenes, featured bands (FR-004)
- Add cross-band versions fetch to song page (FR-008)
- Create sprint plan artifact
Aligns with Specify spec fediversion-multi-band.md
- Add sit_in_summary to GET /musicians/{slug}
- Add stats: total_bands, current_bands, total_sit_ins
- Include song_title, show_date, vertical in guest appearances
- Add seed_musicians.py for initial musician data
- Add routers/canon.py with endpoints:
- GET /canon - list all canonical songs with versions
- GET /canon/{slug} - get canon with all band versions
- GET /canon/song/{id}/related - get related versions
- Add link_canon_songs.py auto-linker script
- Finds songs with same title across bands
- Creates SongCanon entries automatically
- Run with --apply to execute
- Add GET /feed/me endpoint
- Filters reviews and attendance by user's band preferences
- Excludes 'hidden' display_mode bands
- Falls back to all bands if no preferences set
Backend:
- Add routers/verticals.py with CRUD endpoints
- GET /verticals - list all bands
- POST /verticals/preferences/bulk - onboarding bulk set
- CRUD for individual preferences
Frontend:
- Add BandOnboarding component with checkbox grid
- Add /onboarding page route
- Calls bulk preferences API on submit
- Simplify Vertical model (remove color, emoji fields)
- Update vertical-context.tsx to just slug/name
- Update band-selector.tsx (no colors)
- Update all [vertical] page routes (no emojis in headings)
Themes will be added later as a separate feature.
Schema additions for fediversion multi-band architecture:
- SongCanon: Canonical master songs for cross-band linking
(e.g., 'Dark Star' links GD, D&C, Billy Strings versions)
- UserVerticalPreference: User band display preferences
- display_mode: primary/secondary/attribution_only/hidden
- priority: Sort order for UI
- notify_on_show: Per-band notification settings
- Vertical additions:
- primary_artist_id: Link to main Artist entity
- color: Hex branding color
- emoji: Display emoji
- Song additions:
- canon_id: Link to SongCanon for cross-band tracking