Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
89bee7b
docs: add agentic workflow project documentation
britle20 May 31, 2026
d90c874
docs: target develop for pull requests
britle20 May 31, 2026
5ade585
docs: define design token layering
britle20 May 31, 2026
cb18996
Merge pull request #1 from boostcampwm-snu-2026-1/docs-agentic-workfl…
britle20 May 31, 2026
3b043d5
feat: scaffold vite react app
britle20 May 31, 2026
fb245cb
docs: record active issue order
britle20 May 31, 2026
701d012
docs: add code conventions
britle20 May 31, 2026
69a3055
Merge pull request #7 from boostcampwm-snu-2026-1/feat/6-project-scaf…
britle20 May 31, 2026
fe3393e
Merge remote-tracking branch 'origin/develop' into docs/8-code-conven…
britle20 May 31, 2026
98efa2d
docs: update active issue order after scaffold merge
britle20 May 31, 2026
cc1cf6e
Merge pull request #9 from boostcampwm-snu-2026-1/docs/8-code-convent…
britle20 May 31, 2026
0a4462d
feat: add audio sample playback
britle20 May 31, 2026
b8b13b5
docs: mark audio playback issue in review
britle20 May 31, 2026
49c4c32
Merge pull request #10 from boostcampwm-snu-2026-1/feat/4-audio-conte…
britle20 Jun 1, 2026
5d8b2d5
docs: plan main daw ui shell
britle20 Jun 1, 2026
e52365f
docs: mark ui shell planning in review
britle20 Jun 1, 2026
c46d1bf
Merge pull request #12 from boostcampwm-snu-2026-1/docs/11-main-daw-u…
britle20 Jun 1, 2026
0fb189f
feat: implement CSS Modules main DAW UI
britle20 Jun 1, 2026
4254d52
docs: mark main UI shell PR in review
britle20 Jun 1, 2026
215c913
fix: refine main DAW UI shell feedback
britle20 Jun 1, 2026
86fcd42
fix: adjust step sequencer grouping styles
britle20 Jun 1, 2026
f25b1bc
fix: fit step sequencer panel to steps
britle20 Jun 1, 2026
2c2297f
fix: extend piano roll grid without velocity editor
britle20 Jun 1, 2026
2139c14
fix: extend piano roll pitch rows
britle20 Jun 1, 2026
7ff5cbb
fix: remove piano roll horizontal scroll
britle20 Jun 1, 2026
76495f2
fix: align piano roll notes to grid rows
britle20 Jun 1, 2026
94f1e89
fix: round piano roll note corners
britle20 Jun 1, 2026
e89d782
fix: start sequencer and piano roll empty
britle20 Jun 2, 2026
109c3c2
Merge pull request #13 from boostcampwm-snu-2026-1/feat/11-main-daw-u…
britle20 Jun 4, 2026
9aef837
feat: add lookahead scheduler
britle20 Jun 4, 2026
acc100d
docs: mark lookahead scheduler in review
britle20 Jun 4, 2026
7da1500
test: organize unit tests under tests directory
britle20 Jun 4, 2026
bc3de0a
Merge pull request #14 from boostcampwm-snu-2026-1/feat/5-lookahead-s…
britle20 Jun 4, 2026
f734e4a
feat: connect drum sequencer to clip model
britle20 Jun 4, 2026
8b7b7ac
docs: mark drum sequencer in review
britle20 Jun 4, 2026
a25ee40
fix: bind scheduler timer defaults
britle20 Jun 4, 2026
d27416d
feat: update drum loop while playing
britle20 Jun 4, 2026
14bad94
feat: replace bundled drum samples
britle20 Jun 6, 2026
7f73384
fix: adjust hi-hat sample names and drum layout
britle20 Jun 6, 2026
1705ff0
feat: add drum lane sample picker and reordering
britle20 Jun 6, 2026
1cdd128
fix: render drum sample menu as popover
britle20 Jun 6, 2026
ca6f0a5
docs: add sample license declaration
britle20 Jun 6, 2026
c685989
Merge pull request #15 from boostcampwm-snu-2026-1/feat/3-drum-step-s…
britle20 Jun 6, 2026
fd04c41
docs: plan transport pause and playhead
britle20 Jun 6, 2026
00069e3
Merge pull request #17 from boostcampwm-snu-2026-1/docs/16-transport-…
britle20 Jun 6, 2026
49897fc
feat: implement basic piano roll
britle20 Jun 6, 2026
c2501f3
docs: mark piano roll in review
britle20 Jun 6, 2026
8d6bce6
fix: polish piano roll sample naming and scrolling
britle20 Jun 6, 2026
23b319f
fix: style piano roll scrollbar
britle20 Jun 6, 2026
6ec134c
fix: clip piano keyboard scrolling
britle20 Jun 6, 2026
18fc404
Merge pull request #18 from boostcampwm-snu-2026-1/feat/2-basic-piano…
britle20 Jun 6, 2026
0c7be0d
docs: plan pitched instruments and sustain
britle20 Jun 6, 2026
2798bee
Merge pull request #20 from boostcampwm-snu-2026-1/docs/19-pitched-in…
britle20 Jun 6, 2026
603b8f2
feat: implement transport pause and playhead
britle20 Jun 6, 2026
cb35944
docs: mark transport playhead PR in review
britle20 Jun 6, 2026
77ddbb5
fix: hide playhead while transport is stopped
britle20 Jun 6, 2026
458c47b
Merge pull request #21 from boostcampwm-snu-2026-1/feat/16-transport-…
britle20 Jun 6, 2026
940200e
feat: add pitched instrument selection
britle20 Jun 6, 2026
52725b5
docs: mark pitched instrument PR in review
britle20 Jun 6, 2026
6ad49a6
fix: make pitched instruments clip lanes
britle20 Jun 6, 2026
ca85f9c
fix: skip Iowa Piano sample leading silence
britle20 Jun 6, 2026
54da765
fix: disable Iowa Piano sustain looping
britle20 Jun 7, 2026
414dda4
Merge pull request #22 from boostcampwm-snu-2026-1/feat/19-pitched-in…
britle20 Jun 7, 2026
0abf078
docs: plan sampler advanced sustain
britle20 Jun 7, 2026
f44e312
docs: plan tempo control feature
britle20 Jun 7, 2026
95b20b2
docs: plan arrangement view shell
britle20 Jun 7, 2026
c765dd6
Merge pull request #24 from boostcampwm-snu-2026-1/docs/23-sampler-ad…
britle20 Jun 7, 2026
fb88f08
feat: add live tempo control
britle20 Jun 7, 2026
78aa5fc
Merge pull request #27 from boostcampwm-snu-2026-1/feat/25-tempo-control
britle20 Jun 7, 2026
40492b3
feat: add arrangement view shell
britle20 Jun 7, 2026
7de90e3
fix: refine arrangement view layout
britle20 Jun 7, 2026
727b174
fix: remove arrangement footer controls
britle20 Jun 7, 2026
39e5e12
fix: use clip labels in arrangement view
britle20 Jun 7, 2026
9568257
fix: simplify arrangement clip labels
britle20 Jun 7, 2026
86b260e
Merge pull request #28 from boostcampwm-snu-2026-1/feat/26-arrangemen…
britle20 Jun 7, 2026
652f48f
feat: add sampler sustain playback
britle20 Jun 7, 2026
1da3ed3
fix: move Iowa Piano loop points to tail
britle20 Jun 7, 2026
e607795
fix: retune Iowa Piano sustain for longer samples
britle20 Jun 7, 2026
ddee9f4
docs: plan sidebar clip instrument management
britle20 Jun 9, 2026
3e88a9e
docs: plan drum step subdivisions
britle20 Jun 9, 2026
b88f770
fix: fade sampled notes before buffer end
britle20 Jun 9, 2026
3c85c36
docs: plan arrangement mixer panel
britle20 Jun 10, 2026
e193d1a
chore: update Iowa Piano samples
britle20 Jun 12, 2026
891c135
Merge pull request #29 from boostcampwm-snu-2026-1/feat/23-sampler-ad…
britle20 Jun 12, 2026
8ecf8b6
Merge branch 'develop' into docs/30-sidebar-clip-instrument-management
britle20 Jun 12, 2026
4d46770
Merge pull request #31 from boostcampwm-snu-2026-1/docs/30-sidebar-cl…
britle20 Jun 12, 2026
863f47d
Merge branch 'develop' into docs/32-drum-step-subdivisions
britle20 Jun 12, 2026
2fe4626
Merge pull request #33 from boostcampwm-snu-2026-1/docs/32-drum-step-…
britle20 Jun 12, 2026
7f3ae8e
Merge branch 'develop' into docs/34-arrangement-mixer-panel
britle20 Jun 12, 2026
89ee332
Merge pull request #35 from boostcampwm-snu-2026-1/docs/34-arrangemen…
britle20 Jun 12, 2026
67a5c4a
feat: add sidebar clip instrument management
britle20 Jun 12, 2026
e9ae3e3
fix: refine sidebar clip interactions
britle20 Jun 12, 2026
13ae894
fix: start clips with drums only
britle20 Jun 12, 2026
d0cda96
Merge pull request #36 from boostcampwm-snu-2026-1/feat/30-sidebar-cl…
britle20 Jun 12, 2026
61b5138
feat: add drum step subdivisions
britle20 Jun 12, 2026
757ae51
feat: add arrangement mixer panel shell
britle20 Jun 12, 2026
e5fa656
fix: keep alternate drum steps active color
britle20 Jun 13, 2026
50c8ff5
Merge pull request #37 from boostcampwm-snu-2026-1/feat/32-drum-step-…
britle20 Jun 13, 2026
26446e1
fix: simplify mixer panel header
britle20 Jun 13, 2026
55c43d2
Merge branch 'develop' into feat/34-arrangement-mixer-panel
britle20 Jun 13, 2026
06f78d0
Merge pull request #38 from boostcampwm-snu-2026-1/feat/34-arrangemen…
britle20 Jun 13, 2026
b560f2e
docs: plan wav audio clip import
britle20 Jun 13, 2026
deb935b
Merge pull request #40 from boostcampwm-snu-2026-1/docs/39-wav-audio-…
britle20 Jun 13, 2026
4531220
docs: plan arrangement clip placement playback
britle20 Jun 13, 2026
b4c40d3
Merge pull request #42 from boostcampwm-snu-2026-1/docs/41-arrangemen…
britle20 Jun 13, 2026
1496cf7
docs: plan mixer audio routing controls
britle20 Jun 13, 2026
45d6bb7
Merge pull request #44 from boostcampwm-snu-2026-1/docs/43-mixer-audi…
britle20 Jun 13, 2026
c22796e
feat: import WAV files as audio clips
britle20 Jun 13, 2026
97a4e4f
Merge pull request #45 from boostcampwm-snu-2026-1/feat/39-wav-file-i…
britle20 Jun 13, 2026
f690395
feat: enable arrangement clip placement playback
britle20 Jun 13, 2026
22484ca
fix: keep song playback stable during sidebar selection
britle20 Jun 13, 2026
8a15e39
feat: add draggable arrangement loop handles
britle20 Jun 13, 2026
2e37fdd
fix: refine arrangement loop handle layout
britle20 Jun 13, 2026
7dee6fb
fix: remove arrangement delete button
britle20 Jun 13, 2026
5fa802f
Merge pull request #46 from boostcampwm-snu-2026-1/feat/41-arrangemen…
britle20 Jun 13, 2026
c48051a
docs: plan persistence length and export features
britle20 Jun 13, 2026
e01b6ab
Merge pull request #51 from boostcampwm-snu-2026-1/docs/plan-persiste…
britle20 Jun 13, 2026
b2f5c0b
feat: route arrangement playback through mixer
britle20 Jun 13, 2026
b382f80
fix: remove redundant mixer role labels
britle20 Jun 13, 2026
c6755dc
Merge pull request #52 from boostcampwm-snu-2026-1/feat/43-mixer-audi…
britle20 Jun 13, 2026
bed5f32
feat: persist active project in indexeddb
britle20 Jun 13, 2026
7dae7a7
Merge pull request #53 from boostcampwm-snu-2026-1/feat/47-indexeddb-…
britle20 Jun 14, 2026
827516f
feat: support variable hybrid clip lengths
britle20 Jun 14, 2026
a817ec7
style: match step sequencer scrollbar styling
britle20 Jun 14, 2026
5890bfd
Merge pull request #54 from boostcampwm-snu-2026-1/feat/48-variable-h…
britle20 Jun 14, 2026
bdcdb92
fix: confirm arranged clip deletion
britle20 Jun 14, 2026
ff8b0fb
Merge pull request #56 from boostcampwm-snu-2026-1/fix/55-confirm-arr…
britle20 Jun 14, 2026
6aeb0c6
feat: add adjustable arrangement length
britle20 Jun 14, 2026
b4aea8f
Merge pull request #57 from boostcampwm-snu-2026-1/feat/49-adjustable…
britle20 Jun 14, 2026
bb39e29
feat: export arrangement as wav
britle20 Jun 14, 2026
4e518f4
Merge pull request #58 from boostcampwm-snu-2026-1/feat/50-arrangemen…
britle20 Jun 14, 2026
2aa077f
docs: plan multi-project management
britle20 Jun 15, 2026
b342f9b
Merge pull request #60 from boostcampwm-snu-2026-1/docs/59-multi-proj…
britle20 Jun 16, 2026
6cbf337
feat: add multi-project management
britle20 Jun 16, 2026
2055009
Merge pull request #61 from boostcampwm-snu-2026-1/feat/59-multi-proj…
britle20 Jun 16, 2026
2d36889
docs: prepare develop for main release
britle20 Jun 16, 2026
af126f7
docs: clarify project goal wording
britle20 Jun 16, 2026
e7bb7db
docs: align completed feature statuses
britle20 Jun 16, 2026
f2a548d
Merge pull request #62 from boostcampwm-snu-2026-1/docs/main-release-…
britle20 Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## Bug

## Steps to reproduce

## Expected behavior

## Actual behavior

## Relevant files or docs

## Done when

## Verification

## Notes
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Feature Spec
Related feature document:

## Goal

## Context

## Scope

Included:
-

Excluded:
-

## Constraints

## Done when

## Verification

## Notes
16 changes: 16 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Summary

## Changes

## Testing
- [ ] `npm run typecheck`
- [ ] `npm run lint`
- [ ] `npm run test`
- [ ] `npm run build`

## Screenshots
If UI changed, add screenshots or a short recording.

## Notes / Limitations

## Follow-up
62 changes: 62 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: CI

on:
push:
branches:
- main
pull_request:

jobs:
checks:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Install dependencies
run: |
if [ -f package-lock.json ]; then
npm ci
elif [ -f package.json ]; then
npm install
else
echo "No package.json yet; skipping install."
fi

- name: Type check
run: |
if [ -f package.json ]; then
npm run typecheck --if-present
else
echo "No package.json yet; skipping typecheck."
fi

- name: Lint
run: |
if [ -f package.json ]; then
npm run lint --if-present
else
echo "No package.json yet; skipping lint."
fi

- name: Test
run: |
if [ -f package.json ]; then
npm run test --if-present
else
echo "No package.json yet; skipping test."
fi

- name: Build
run: |
if [ -f package.json ]; then
npm run build --if-present
else
echo "No package.json yet; skipping build."
fi
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
node_modules
dist
dist-ssr
coverage
.vite
.env
.env.*
!.env.example
.DS_Store
*.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
154 changes: 154 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# AGENTS.md

## Project Overview

This repository is for a browser-based mini DAW built with Vite, React, TypeScript, CSS Modules, and the Web Audio API.

The product is a clip-based electronic music creation tool. The first major milestone is a 1-bar hybrid clip editor with drum step sequencing, basic piano roll editing, and loop playback. Future work may add arrangement editing and desktop packaging with Electron or Tauri, but the initial target is a browser app.

## Repository Layout

Expected source layout after the scaffold task:

- `src/app/`: app shell, providers, root composition.
- `src/components/`: shared reusable React components.
- `src/features/`: feature-specific UI and orchestration.
- `src/audio/`: Web Audio engine, transport, scheduling, sample playback.
- `src/model/`: serializable project types and model transformations.
- `src/persistence/`: import, export, storage, and migration helpers.
- `src/utils/`: pure utilities such as tick/time conversion.
- `src/styles/`: global CSS, tokens, and shared style primitives.
- `tests/unit/`: unit tests for utilities, model transformations, scheduler calculations, and other isolated logic.
- `tests/integration/`: integration tests for multi-module flows when needed.
- `docs/`: product, architecture, data model, audio, UI, testing, and feature specs.

Preserve the existing structure unless a refactor is clearly required by the task.

## Commands

Use npm unless the repository already clearly uses another package manager.

Intended project commands:

```text
Install: npm install
Dev: npm run dev
Type check: npm run typecheck
Lint: npm run lint
Test: npm run test
Build: npm run build
```

If these scripts do not exist yet, future scaffold work must add them. CI uses `--if-present` until the Vite scaffold exists.

## Engineering Conventions

- Prefer small, focused, reviewable changes.
- Keep React UI separate from audio scheduling logic.
- Do not mix persistence, UI rendering, and audio scheduling in the same module.
- Keep project data serializable.
- Store musical time in ticks, not seconds.
- Use TypeScript types for project data, audio engine APIs, and feature boundaries.
- Follow `docs/code-conventions.md` for naming, file organization, TypeScript, React, CSS Modules, design tokens, domain naming, tests, and comments.
- Prefer pure utilities for tick math, model transformations, and scheduler calculations.
- Do not introduce new production dependencies without a clear reason.
- Do not rewrite large files unless required.
- Do not implement unrelated features while working on a feature spec.
- Do not change the project data model without updating `docs/data-model.md`.

## Audio Rules

- React UI must not own exact audio timing.
- Schedule audio against `AudioContext.currentTime`.
- Use a lookahead scheduler for sequenced playback.
- UI cursors and playheads may use `requestAnimationFrame`, but not for exact audio scheduling.
- Store musical time in ticks. The documented default PPQ is 480.
- Do not store `AudioBuffer` objects directly in project JSON.
- Runtime audio objects such as `AudioContext`, `AudioBuffer`, nodes, and decoded samples belong in audio runtime caches, not serializable project state.
- Create a new `AudioBufferSourceNode` for each repeated one-shot sample playback.
- The audio engine should expose a small typed API to the UI.

## CSS Modules Rules

- Use CSS Modules for component styles.
- Keep global CSS limited to resets, base document styles, and design tokens.
- Use CSS custom properties for shared colors, spacing, typography, and timing values.
- Define primitive design tokens first, then define semantic tokens from those primitives.
- Component CSS Modules should use semantic tokens. Do not reference primitive color, spacing, typography, or radius tokens directly in component styles unless there is a documented exception.
- Dynamic editor geometry such as note positions, note widths, and grid coordinates may use inline styles when values are computed at runtime.
- Do not add a visual design system dependency at this stage unless a task explicitly justifies it.

## UI Reference Policy

- If a design prototype uses Tailwind, inline styles, or CDN assets, treat it as visual reference only.
- Convert visual patterns into CSS Modules and shared CSS variables.
- Do not add Tailwind or CDN-based styling unless explicitly requested in a feature spec.
- Inline styles are acceptable for dynamic editor geometry such as note positions, widths, grid coordinates, and velocity heights.

## Testing Rules

- Keep production code under `src/`; place unit tests under `tests/unit/`.
- Add integration tests under `tests/integration/` only when a task needs multi-module workflow coverage.
- Do not add an end-to-end test framework or `tests/e2e/` until a feature spec calls for browser flow testing.
- Keep `tsconfig.test.json` in sync with test locations so `npm run typecheck` checks test files.
- Do not remove tests or checks to make a task pass.

## Issue Workflow

- Use GitHub Issues as the task queue for feature work, bugs, and larger refactors.
- Follow `PLANS.md` `Active Issue Order` when choosing the next issue unless the user gives a different priority.
- Prefer one issue per feature spec or focused bug.
- Link issues to feature documents under `docs/features/` when applicable.
- Use branch names that include the issue number when possible:
- `feat/<issue-number>-<short-name>`
- `fix/<issue-number>-<short-name>`
- `docs/<issue-number>-<short-name>`
- PRs should reference the issue they address.
- Use `Closes #<issue-number>` only when the PR fully completes the issue.
- Do not close issues unless the acceptance criteria are met.
- Do not create duplicate issues. Search existing open issues first when possible.
- Do not create issues for tiny typo fixes or trivial cleanup unless requested.

## Git and PR Expectations

- Work on a focused branch when possible.
- Open PRs against `develop` by default unless a maintainer explicitly requests another base branch.
- Keep commits scoped to the task.
- Use conventional commit messages when practical.
- PR summaries should explain what changed, how it was tested, and known limitations.
- Do not remove tests or checks to make a task pass.
- Do not merge PRs automatically.

## Constraints and Do-Not Rules

- Do not implement production DAW features unless the active task asks for them.
- Do not add sample files unless the active task asks for them.
- Do not add `CHANGELOG.md` for now.
- Do not store runtime-only audio objects in project JSON.
- Do not make broad refactors during feature work.
- Do not introduce new runtime dependencies without documenting why they are needed.
- Do not couple React components to Web Audio scheduling internals.
- Do not change documented model semantics without updating the relevant docs.

## Definition of Done

- Requested behavior implemented.
- Relevant docs updated if needed.
- TypeScript passes.
- Lint passes.
- Tests pass.
- Production build passes.
- PR summary includes testing and known limitations.

## Verification

Run applicable checks before opening a PR:

```bash
npm run typecheck --if-present
npm run lint --if-present
npm run test --if-present
npm run build --if-present
```

If the project scaffold does not exist yet, record that the npm scripts are not available and that `docs/features/01-project-scaffold.md` must add them.
78 changes: 78 additions & 0 deletions PLANS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Plans

## North Star

Create a browser-first, clip-oriented mini DAW that is useful for making electronic music. The app should favor correct timing, serializable project data, and focused workflows over broad full-DAW scope.

## Current Milestone: Develop to Main Stabilization

The current branch is being prepared for a `develop` to `main` PR. The goal is to make the repository easy to understand, verify, and review at its current prototype stage.

Focus:

- Keep README, plans, and feature docs aligned with the implemented state.
- Keep the GitHub Issue queue and `Active Issue Order` clean.
- Verify the standard checks pass before opening release-prep PRs.
- Avoid adding new product scope during stabilization unless the user explicitly asks for it.

## Active Issue Order

No active implementation issues are queued right now.

When new work is needed, create or update a feature spec under `docs/features/`, create a linked GitHub Issue, and add that issue here in priority order.

## Completed Milestones

1. Project scaffold.
2. AudioContext and sample playback.
3. Lookahead scheduler.
4. Drum step sequencer.
5. Basic piano roll.
6. Transport pause/resume and editor playhead.
7. Pitched instrument selection and Iowa Piano one-shot playback.
8. Tempo control and live BPM updates.
9. Arrangement view UI shell.
10. Sampler advanced sustain.
11. Sidebar clip and instrument management.
12. Drum step subdivisions.
13. Arrangement mixer panel UI shell.
14. Hybrid clip loop playback.
15. WAV file import as audio clip.
16. Arrangement clip placement and playback.
17. Mixer audio routing and track controls.
18. IndexedDB project persistence.
19. Variable hybrid clip length.
20. Adjustable arrangement length.
21. Arrangement WAV export.
22. Multi-project management.

## Planned Milestones

1. Project JSON export/import.
2. Basic effects.
3. Custom project-management dialogs to replace browser prompt/confirm flows.
4. Browser-driven smoke tests with Playwright or an equivalent e2e tool.
5. Broader manual/audio QA pass before treating the prototype as a stable release.

## Backlog

- Keyboard shortcuts for transport and editing.
- Basic undo and redo.
- Velocity editing for drum and note events.
- Clip duplication.
- Starter project template.
- Metronome.
- Quantize utilities.
- Swing or groove timing after strict timing is reliable.
- MIDI file import or export.
- Improved sampler sustain authoring and tuning UI.
- More complete effect slots and effect parameter persistence.

## Frozen / Not Now

- Realtime audio recording.
- VST/plugin support.
- Cloud sync.
- Multiplayer collaboration.
- Advanced audio mastering.
- Full DAW replacement scope.
Loading
Loading