- 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 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
- Fork elmeg-demo codebase for multi-band support
- Add data importer infrastructure with base class
- Create band-specific importers:
- phish.py: Phish.net API v5
- grateful_dead.py: Grateful Stats API
- setlistfm.py: Dead & Company, Billy Strings (Setlist.fm)
- Add spec-kit configuration for Gemini
- Update README with supported bands and architecture