All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Phase 24: Authentication & session ownership
- Phase 26: Shared sample recording
- Performance optimization
- Named Tone.js imports (tree-shaking)
- Code splitting for audio modules
- Lazy audio engine loading with feature flag
- Future: Euclidean rhythms, per-track swing, conditional triggers
- Extended MAX_STEPS from 64 to 128 (8 bars at 16th note resolution)
- Added step count options: 96, 128 for full verse/chorus sections
- 6 new demo sessions showcasing all instrument categories
- LRU sample cache with reference counting for memory management
- Effects master bypass and XY pad controls
0.2.0 - 2025-12-11
- Real-time collaboration via Cloudflare Durable Objects
- WebSocket state sync — changes broadcast to all connected players instantly
- Clock synchronization — synced playback across all participants
- Player presence — anonymous identities (color + animal), avatar stack UI
- Cursor tracking — see where others are pointing (desktop only)
- Change attribution — step toggles flash with editor's color
- Connection status — visual indicator (connected/connecting/disconnected/single_player)
- Graceful degradation — falls back to single-player after connection failures
- Offline queue — buffers changes during disconnect, replays on reconnect
- Portrait read-mostly layout — optimized for viewing shared sessions
- Track header with name, synth indicator (♪), and M/S badges
- Full-width step grid (swipeable)
- Expandable "tap to edit" panel with M/S, Transpose, Steps, Copy/Clear/Delete
- 48x48px step cells in portrait for easier tapping
- Scroll snap alignment for clean stopping points
- OrientationHint component suggesting landscape for more steps
- Hidden cursor arrows on mobile (misleading between form factors)
- Structured request/response logging
- WebSocket lifecycle logging
- Debug endpoints for session state, connections, clock, state-sync
- Client-side debug overlay (
?debug=1) - State hash verification (30s periodic checks)
- Worker-level validation before routing to DO
- UUID format, body size, and state validation
- Session name XSS prevention
- DO stub recreation on retryable errors
- HTTP retry with exponential backoff + jitter
- Request timeouts via AbortController
- Integration tests with vitest-pool-workers
- 19 synth presets across 4 categories (Core, Keys, Genre, Ambient)
- Session naming — inline editable, persisted, updates browser tab
- Dev-only logger — production console output suppressed
- iOS audio fixes — AudioContext resume on touch events
- Sessions are now permanent by default (removed 30-day TTL)
- Step count control changed from buttons to dropdown
- Step count options expanded from
[16, 32, 64]to[4, 8, 16, 32, 64] - Debounce intervals increased from 2s to 5s (KV write reduction)
- CSS cascade bug hiding track actions on mobile
- InlineDrawer click-outside handler (collapse button works)
- Audio volume reset timer cleanup on stop
- Memory leaks in RemoteChangeContext and scheduler
- Race conditions in session loading and multiplayer initialization
- Scheduler timing drift (multiplicative timing)
- Mic stream cleanup on recording completion
- iOS clipboard compatibility — Share/Send Copy buttons now work on iOS Safari/Chrome
- Uses ClipboardItem API with Promise content to preserve user gesture
- Falls back to execCommand for older browsers
- Shows tappable URL toast when clipboard fails
- WHY_CLOUDFLARE.md — architecture deep dive
- CLOUDFLARE-DURABLE-OBJECTS-REFERENCE.md — 150+ DO features
- PHASE-13B-LESSONS.md — patterns and anti-patterns
- REACT-BEST-PRACTICES.md — real-time collaboration patterns
- MOBILE-UI-PATTERNS.md — responsive design decisions
- IOS-CHROME-COMPATIBILITY.md — browser API compatibility research
- COST-ANALYSIS.md — Cloudflare cost analysis with projections
0.1.0 - 2025-12-06
- Step sequencer with 16 tracks × 128 steps
- 16 synthesized samples (drums, bass, synth, FX)
- 5 real-time synth presets (bass, lead, pad, pluck, acid)
- Lookahead scheduling (25ms timer, 100ms ahead)
- Swing/shuffle timing (0-100%)
- Per-track transpose (-12 to +12 semitones)
- Per-track step count (16/32/64) for polyrhythms
- Parameter locks (pitch, volume per step)
- Copy/paste patterns between tracks
- Mute, clear, delete track controls
- Playback mode: oneshot (default) and gate
- Mic recording with hold-to-record
- Waveform visualization during recording
- Auto-slice with transient detection
- Preview before adding to grid
- Recorded samples become new tracks
- KV storage (permanent sessions)
- Shareable URLs (
/s/{uuid}) - Remix sessions to create editable copies
- Auto-save with 2-second debounce
- Backwards compatibility for old session formats
- Dark mode interface (#121212 background)
- Single scrollbar for tracks panel
- Fixed-width controls prevent layout shift
- Visual playhead indicator
- Beat boundary markers every 4 steps
- Page separators every 16 steps
- Parameter lock badges (pitch/volume indicators)
- 44 unit tests (Vitest) for scheduler and state
- 6 e2e tests (Playwright) for playback and UI
- Polyrhythmic behavior verification
- 64-step pattern verification
- Vite + React + TypeScript frontend
- Cloudflare Workers deployment
- KV namespace for session storage
- SPA routing support
MAX_STEPS = 128(8 bars of 16th notes)STEPS_PER_PAGE = 16(1 bar)MAX_TRACKS = 16- Global step counter (0-127) with per-track modulo for polyrhythms
| Version | Date | Phase | Description |
|---|---|---|---|
| 0.2.0 | 2025-12-11 | 5-15 | Multiplayer, mobile portrait mode, observability, backend hardening |
| 0.1.0 | 2025-12-06 | 1-4A | Initial release with local audio, recording, persistence, polyrhythms |