- 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
185 lines
7.1 KiB
Markdown
185 lines
7.1 KiB
Markdown
# Feature Specification: Fediversion - Multi-Band Jam Platform
|
|
|
|
**Feature Branch**: `001-fediversion-multi-band`
|
|
**Created**: 2025-12-28
|
|
**Status**: Draft
|
|
**Input**: Expand elmeg.xyz (Goose) to support Grateful Dead, Dead & Company, Phish, and Billy Strings
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
Fediversion is a unified "HeadyVersion" platform for multiple jam bands. It extends the proven elmeg.xyz architecture to support multiple "verticals" (bands) while sharing common infrastructure for users, social features, and the core setlist/performance tracking system.
|
|
|
|
---
|
|
|
|
## User Scenarios & Testing
|
|
|
|
### User Story 1 - Cross-Band Discovery (Priority: P1)
|
|
|
|
A jam band fan visits the platform and can browse shows and performances across multiple bands they follow (Phish, Dead & Company, Billy Strings) from a single account.
|
|
|
|
**Why this priority**: This is the core value proposition - one account, all bands.
|
|
|
|
**Independent Test**: User can register once, mark attendance at shows from different bands, and see unified activity feed.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** a logged-in user, **When** they navigate to the band selector, **Then** they see all supported bands (Goose, Phish, Grateful Dead, Dead & Company, Billy Strings)
|
|
2. **Given** a user on Phish section, **When** they click a show, **Then** they see the full setlist with performance pages
|
|
3. **Given** a user with attendance records on multiple bands, **When** they view their profile, **Then** attendance is organized by band
|
|
|
|
---
|
|
|
|
### User Story 2 - Phish Fan Migration (Priority: P1)
|
|
|
|
A Phish fan can access complete setlist data, rate performances, and track their show attendance with the same depth as Phish.net but with enhanced social features.
|
|
|
|
**Why this priority**: Phish has the most complete API and largest community.
|
|
|
|
**Independent Test**: User can browse Phish shows from 1983-present, view setlists, rate performances, and see gap statistics.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** complete Phish data import, **When** user searches "Tweezer", **Then** they see all 600+ performances with dates
|
|
2. **Given** a Phish show page, **When** user views setlist, **Then** they see Set 1, Set 2, Encore with segue indicators (>)
|
|
|
|
---
|
|
|
|
### User Story 3 - Dead Family Navigation (Priority: P2)
|
|
|
|
A Deadhead can navigate between Grateful Dead, Dead & Company, and related projects, with song history spanning the entire lineage.
|
|
|
|
**Why this priority**: Dead family bands share repertoire, enabling unique cross-band song tracking.
|
|
|
|
**Independent Test**: User can view "Dark Star" song page showing performances across GD, D&C, and side projects.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** a song played by both GD and D&C, **When** user views song stats, **Then** they see aggregate and per-band breakdowns
|
|
2. **Given** D&C show page, **When** viewing performance, **Then** user can see "also played by Grateful Dead X times"
|
|
|
|
---
|
|
|
|
### User Story 4 - Billy Strings Fan Experience (Priority: P2)
|
|
|
|
A Billy Strings fan can access complete setlist data and engage with community features for the fast-growing bluegrass jam scene.
|
|
|
|
**Why this priority**: Billy Strings is the fastest-growing jam act, appealing to both bluegrass and jamband audiences.
|
|
|
|
**Independent Test**: User can browse all Billy Strings shows, view setlists, and rate performances.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** Billy Strings data import, **When** user browses shows, **Then** they see shows from 2016-present
|
|
2. **Given** a BMFS show, **When** viewing setlist, **Then** user sees song titles, covers attributed to original artists
|
|
|
|
---
|
|
|
|
### Edge Cases
|
|
|
|
- What happens when a song is shared between multiple bands with different arrangements?
|
|
- How do we handle guest sit-ins across bands (e.g., Bobby Weir sitting in with Billy Strings)?
|
|
- How do we handle date conflicts (two bands playing same date)?
|
|
- What if a data source API becomes unavailable?
|
|
|
|
---
|
|
|
|
## Requirements
|
|
|
|
### Functional Requirements
|
|
|
|
- **FR-001**: System MUST support multiple "Verticals" (bands) with independent show/song data
|
|
- **FR-002**: System MUST allow users to track attendance across all bands from single account
|
|
- **FR-003**: System MUST import setlist data from band-specific APIs (Phish.net, Grateful Stats, etc.)
|
|
- **FR-004**: System MUST provide per-band navigation with clear visual distinction
|
|
- **FR-005**: System MUST display song gap statistics independently per band
|
|
- **FR-006**: System MUST allow performance ratings scoped to specific performances
|
|
- **FR-007**: System MUST support chase songs per band (user wants to see song X by band Y)
|
|
- **FR-008**: System SHOULD track cross-band song appearances where applicable
|
|
- **FR-009**: System SHOULD support band-specific theming/branding
|
|
|
|
### Key Entities
|
|
|
|
- **Vertical**: A band/artist (Goose, Phish, Grateful Dead, Dead & Company, Billy Strings)
|
|
- **Show**: A concert tied to a Vertical, Venue, and optional Tour
|
|
- **Song**: A composition tied to a Vertical (but may have cross-references)
|
|
- **Performance**: A specific play of a Song at a Show
|
|
- **User**: Single account spanning all Verticals
|
|
- **Attendance**: User's attendance at a Show
|
|
- **Rating/Review**: Tied to Performance, Show, or Song
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
### Measurable Outcomes
|
|
|
|
- **SC-001**: All target band data imported (500+ Phish shows, 2,000+ GD shows, 100+ D&C shows, 500+ BMFS shows)
|
|
- **SC-002**: Users can navigate between bands in <2 clicks
|
|
- **SC-003**: Search returns results across all bands in <500ms
|
|
- **SC-004**: Data import runs incrementally without duplicating existing records
|
|
- **SC-005**: Gap statistics calculate correctly per-band
|
|
|
|
---
|
|
|
|
## Data Source Specifications
|
|
|
|
### Phish.net API v5
|
|
|
|
- **Base URL**: `https://api.phish.net/v5`
|
|
- **Auth**: API key required (register at phish.net)
|
|
- **Endpoints**: `/shows`, `/setlists`, `/songs`, `/venues`
|
|
- **Rate Limit**: Unspecified, cache heavily
|
|
- **Attribution**: "Data courtesy of Phish.net"
|
|
|
|
### Grateful Stats API
|
|
|
|
- **Base URL**: `https://gratefulstats.com/api`
|
|
- **Auth**: TBD (may require key)
|
|
- **Coverage**: Grateful Dead complete, may include D&C
|
|
- **Attribution**: Required
|
|
|
|
### Setlist.fm API (Fallback)
|
|
|
|
- **Base URL**: `https://api.setlist.fm/rest/1.0`
|
|
- **Auth**: API key required
|
|
- **Coverage**: Universal, good for Billy Strings and D&C
|
|
- **Limitations**: Less structured than band-specific APIs
|
|
|
|
### Billy Strings Sources
|
|
|
|
- **bmfsdb.com**: Fan database, structure TBD
|
|
- **BillyBase (billybase.net)**: Alternative source
|
|
- **Fallback**: Setlist.fm
|
|
|
|
---
|
|
|
|
## Technical Approach
|
|
|
|
### Architecture Pattern
|
|
|
|
The existing elmeg-demo uses a `Vertical` model that already supports multi-band architecture:
|
|
|
|
```python
|
|
class Vertical(SQLModel, table=True):
|
|
id: Optional[int]
|
|
name: str # "Phish"
|
|
slug: str # "phish"
|
|
description: str
|
|
|
|
class Show(SQLModel, table=True):
|
|
vertical_id: int # Links to Vertical
|
|
# ...
|
|
|
|
class Song(SQLModel, table=True):
|
|
vertical_id: int # Links to Vertical
|
|
# ...
|
|
```
|
|
|
|
### Recommended Changes
|
|
|
|
1. **Data Import Layer**: Create pluggable importer classes per data source
|
|
2. **Frontend Routing**: Add `/{vertical}/` prefix to all routes
|
|
3. **API Scoping**: Add vertical filter to all list endpoints
|
|
4. **Theme System**: Per-vertical color/branding configuration
|