initial version

This commit is contained in:
vadimwit
2026-03-05 16:51:28 +00:00
commit 5e7954ee24
31 changed files with 4832 additions and 0 deletions
+236
View File
@@ -0,0 +1,236 @@
# 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.*