Browser-based groove box / DAW inspired by Elektron hardware and Teenage Engineering OP-XY. Step sequencing, analog-modeled synthesis, graphical sequencer arrangement — all running in a single AudioWorklet, zero npm runtime dependencies.
| Layer | Tech |
|---|---|
| UI | Svelte 5 (runes), TypeScript |
| Build | Vite 8 |
| DSP | TypeScript AudioWorklet |
| Audio | AudioWorklet, Web Audio API |
| Docs | Astro + Starlight |
| Fonts | Bebas Neue, JetBrains Mono |
pnpm install
pnpm dev
Open http://localhost:5173 in a browser that supports AudioWorklet.
pnpm dev # Vite dev server
pnpm build # production build
pnpm check # svelte-check
pnpm deploy # build + Cloudflare Pages
src/
├── App.svelte # Root component (layout, engine wiring)
├── app.css # Global styles (reset, design tokens)
├── lib/
│ ├── audio/
│ │ ├── engine.ts # Main thread ↔ worklet bridge
│ │ ├── worklet-processor.ts # AudioWorklet sequencer + DSP
│ │ └── dsp/ # Voice engines, effects, filters
│ ├── components/ # Svelte 5 UI components
│ ├── multiDevice/ # WebRTC multi-device jam (ADR 019)
│ ├── types.ts # Core data types (Song, Pattern, Cell, Trig)
│ ├── state.svelte.ts # Reactive state ($state declarations, undo/redo)
│ ├── *Actions.ts # Domain mutations (step, scene, section, sample, pool, project)
│ ├── importExport.ts # JSON export/import, demo song loading
│ ├── scene*.ts # Scene graph: actions, playback, geometry, data
│ ├── sweep*.ts # Sweep automation: recorder, evaluator, playback
│ ├── generative.ts # Turing Machine, Quantizer, Tonnetz engines
│ ├── storage.ts # IndexedDB + localStorage persistence
│ └── ... # Presets, params, helpers, MIDI, WAV, etc.
public/samples/ # Factory sample WebM files + manifest
site/ # Astro docs & landing page
docs/ai/ # Design specs & ADRs