Files
JamBuddy/product_requirements.md
T
2026-03-05 16:56:24 +00:00

236 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WhatTheFlat 🎸
### Product Requirements Document v0.1
> *Open-source live jam analyzer — helping musicians find the key, follow the harmony, and level up together.*
---
## 1. Vision
**WhatTheFlat** is a free, open-source web app that listens to a live jam session in real time, identifies the key and chord being played, and displays beginner-friendly guidance — scales, next chords, and simple melodic patterns — so every musician in the room can contribute, regardless of experience level.
The core belief: **jams should be inclusive**. A seasoned guitarist shouldn't have to stop to explain music theory. WhatTheFlat does it for them, silently, in real time.
---
## 2. Problem Statement
- Amateur musicians struggle to find the key when joining a jam they didn't start
- Beginners don't know which notes are "safe" to play over a chord progression
- There's no affordable, low-friction tool that bridges music theory and live performance
- Existing tools (like guitar tuners or DAWs) are either too simple or too complex
---
## 3. Target Users
| User | Description |
|---|---|
| **The Beginner** | Just started an instrument, wants to follow along without killing the vibe |
| **The Intermediate** | Knows a few scales but struggles to apply theory in real time |
| **The Jam Host** | Sets up the session and wants everyone to stay in the same key |
| **The Teacher** | Uses jams as a teaching tool, wants visual aids for students |
---
## 4. Core Features
### 4.1 Live Key Detection
- Capture audio from device microphone in real time
- Analyze incoming audio using pitch detection (e.g. YIN algorithm or ML model)
- Identify the **root note** and **mode** (major, minor, dorian, mixolydian, etc.)
- Display current detected key prominently: e.g. **"You're in A Minor"**
- Show confidence level so users understand when detection is uncertain
- Latency target: < 500ms from sound to display
### 4.2 Chord Recognition
- Detect the chord being played in real time
- Show chord name: e.g. **Am → F → C → G**
- Build a live scrolling chord history for the last 30 seconds
- Highlight the current chord in the progression
### 4.3 Chord Progression Suggestions
- Based on detected key, suggest common chord progressions that fit
- Categorize by genre/feel: Blues, Jazz, Folk, Rock, Pop
- Show the progression in Roman numeral notation (IIVV) AND actual chord names
- Allow user to tap/click a suggested progression to "lock it in" as a reference
### 4.4 Beginner Melody Helper
- For the detected key, show a visual **"safe notes"** panel — a highlighted instrument diagram
- Guitar fretboard view
- Piano keyboard view
- Generic note list (for other instruments)
- Show the **pentatonic scale** first (most beginner-friendly), with option to expand to full scale
- Highlight notes that sound especially good over the current chord (chord tones)
- Show a simple **melodic pattern of the bar** — a looping, beginner-friendly phrase they can follow
### 4.5 Visual Jam Dashboard
- Clean, readable display meant to be seen from across a room
- Show at a glance:
- Current key
- Current chord
- Next likely chord (based on progression history)
- Safe notes to play
- Dark mode by default (stage-friendly)
- Large font, high contrast
### 4.6 AI Music Theory Assistant (Claude Integration)
- Powered by Anthropic's Claude API
- Users can ask questions like:
- *"What's a good lick to play over this chord?"*
- *"Why does the F chord sound tense here?"*
- *"Give me a beginner melody in this key"*
- Claude responds in plain, non-jargon language
- Can suggest chord substitutions, extensions (7ths, 9ths), and passing chords
- All responses are **beginner-aware** — no unexplained jargon
---
## 5. MVP Scope (v0.1)
For the first open-source demo, the MVP should deliver:
- [x] Microphone capture in browser (Web Audio API)
- [x] Pitch detection → key identification
- [x] Display current key and detected chord
- [x] Show pentatonic scale for detected key (note list + basic fretboard)
- [x] 35 suggested chord progressions that fit the key
- [x] Claude-powered chat assistant for theory questions
- [x] Dark mode UI, mobile-friendly
**Not in MVP:**
- Multi-instrument separation
- MIDI input support
- Session recording/export
- User accounts or history
- Real-time collaboration (multiple users same session)
---
## 6. Technical Architecture
### Frontend
- **Framework**: React (Vite)
- **Audio**: Web Audio API + `pitchy` or `aubio.js` for pitch detection
- **Visualizations**: `Tone.js` for music utilities, custom SVG for fretboard/keyboard
- **Styling**: Tailwind CSS
- **Hosting**: Vercel / Netlify (static deploy)
### AI Layer
- **Model**: Claude (`claude-sonnet-4-20250514`) via Anthropic API
- **Usage**:
- Theory assistant chat
- Chord progression generation given key + genre
- Melody suggestion generation
- **Prompt strategy**: System prompt primes Claude as a friendly, beginner-aware music teacher
### Audio Pipeline
```
Microphone Input
Web Audio API (AudioContext)
Pitch Detection (YIN / pitchy)
Note → Chord Identification
Key Estimation (sliding window analysis)
UI Update + Claude Context Refresh
```
### Open Source Stack
- Repo: GitHub (MIT License)
- CI: GitHub Actions
- Contributing: standard fork/PR model with CONTRIBUTING.md
---
## 7. Music Theory Engine
The core theory logic should be implemented as a standalone JS module (`@whattheflat/theory`) so it can be reused or contributed to independently.
### Required functions:
```
detectKey(noteHistory[]) → { root, mode, confidence }
getChordsInKey(root, mode) → Chord[]
getSuggestedProgressions(root, mode, genre?) → Progression[]
getPentatonicScale(root, mode) → Note[]
getFullScale(root, mode) → Note[]
getChordTones(chord) → Note[]
getBeginnerPattern(key, currentChord) → MelodicPattern
```
### Modes to support (MVP):
- Major (Ionian)
- Natural Minor (Aeolian)
- Pentatonic Major
- Pentatonic Minor
### Modes to support (v1+):
- Dorian, Mixolydian, Lydian, Phrygian
- Blues scale
- Harmonic minor
---
## 8. UX Principles
1. **Readable at distance** — primary info visible from 2 metres away
2. **Zero setup** — tap "Start Listening", grant mic permission, done
3. **Non-judgmental** — never says "wrong note", always says "try these"
4. **Progressive complexity** — beginners see pentatonic; advanced users can unlock modes, extensions, substitutions
5. **Mobile first** — works on a phone propped up on a music stand
---
## 9. Beginner Learning Path (stretch goal)
A guided progression for users who want to improve over time:
| Level | Unlocks |
|---|---|
| 🟢 Starter | Pentatonic scale, 3 safe chords |
| 🔵 Follower | Full diatonic scale, chord tones highlighted |
| 🟣 Contributor | Chord extensions (7th, 9th), passing chords |
| 🔴 Improvisor | Modal awareness, substitutions, AI-generated licks |
Progress is stored in localStorage — no account needed.
---
## 10. Open Source Contribution Areas
| Area | Skills needed |
|---|---|
| Pitch detection accuracy | DSP, audio engineering |
| Music theory engine | Music theory + JavaScript |
| Instrument diagrams | SVG, React |
| Genre-specific progressions | Music knowledge |
| Claude prompt engineering | AI, music theory |
| Accessibility (screen readers, colorblind modes) | A11y |
| Mobile app wrapper | React Native / Capacitor |
| Translation / i18n | Language + music terminology |
---
## 11. Success Metrics
- Time from opening app to understanding what key they're in: **< 10 seconds**
- % of beginner users who successfully play a note in the right key on first jam: **target 80%**
- GitHub stars at 3 months: **500+**
- Average Claude assistant response usefulness (self-reported): **> 4/5**
---
## 12. Name & Branding Notes
- **Name**: WhatTheFlat
- **Tagline**: *"Real-time key detection for real humans"*
- **Tone**: Warm, slightly cheeky, musician-coded humour
- **Logo concept**: A flat symbol (♭) with a question mark or waveform integrated
- **Color palette**: Dark background (#0f0f0f), accent in electric purple or warm amber
---
*Document maintained by the WhatTheFlat open source community. PRs welcome.*