Skip to content

Commit af91ec9

Browse files
authored
Merge pull request #63 from boostcampwm-snu-2026-1/develop
release: promote develop to main
2 parents 5c4922a + f2a548d commit af91ec9

145 files changed

Lines changed: 23147 additions & 1 deletion

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## Bug
2+
3+
## Steps to reproduce
4+
5+
## Expected behavior
6+
7+
## Actual behavior
8+
9+
## Relevant files or docs
10+
11+
## Done when
12+
13+
## Verification
14+
15+
## Notes
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
## Feature Spec
2+
Related feature document:
3+
4+
## Goal
5+
6+
## Context
7+
8+
## Scope
9+
10+
Included:
11+
-
12+
13+
Excluded:
14+
-
15+
16+
## Constraints
17+
18+
## Done when
19+
20+
## Verification
21+
22+
## Notes

.github/pull_request_template.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## Summary
2+
3+
## Changes
4+
5+
## Testing
6+
- [ ] `npm run typecheck`
7+
- [ ] `npm run lint`
8+
- [ ] `npm run test`
9+
- [ ] `npm run build`
10+
11+
## Screenshots
12+
If UI changed, add screenshots or a short recording.
13+
14+
## Notes / Limitations
15+
16+
## Follow-up

.github/workflows/ci.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
9+
jobs:
10+
checks:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Setup Node
18+
uses: actions/setup-node@v4
19+
with:
20+
node-version: 20
21+
22+
- name: Install dependencies
23+
run: |
24+
if [ -f package-lock.json ]; then
25+
npm ci
26+
elif [ -f package.json ]; then
27+
npm install
28+
else
29+
echo "No package.json yet; skipping install."
30+
fi
31+
32+
- name: Type check
33+
run: |
34+
if [ -f package.json ]; then
35+
npm run typecheck --if-present
36+
else
37+
echo "No package.json yet; skipping typecheck."
38+
fi
39+
40+
- name: Lint
41+
run: |
42+
if [ -f package.json ]; then
43+
npm run lint --if-present
44+
else
45+
echo "No package.json yet; skipping lint."
46+
fi
47+
48+
- name: Test
49+
run: |
50+
if [ -f package.json ]; then
51+
npm run test --if-present
52+
else
53+
echo "No package.json yet; skipping test."
54+
fi
55+
56+
- name: Build
57+
run: |
58+
if [ -f package.json ]; then
59+
npm run build --if-present
60+
else
61+
echo "No package.json yet; skipping build."
62+
fi

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
node_modules
2+
dist
3+
dist-ssr
4+
coverage
5+
.vite
6+
.env
7+
.env.*
8+
!.env.example
9+
.DS_Store
10+
*.local
11+
npm-debug.log*
12+
yarn-debug.log*
13+
yarn-error.log*
14+
pnpm-debug.log*

AGENTS.md

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
# AGENTS.md
2+
3+
## Project Overview
4+
5+
This repository is for a browser-based mini DAW built with Vite, React, TypeScript, CSS Modules, and the Web Audio API.
6+
7+
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.
8+
9+
## Repository Layout
10+
11+
Expected source layout after the scaffold task:
12+
13+
- `src/app/`: app shell, providers, root composition.
14+
- `src/components/`: shared reusable React components.
15+
- `src/features/`: feature-specific UI and orchestration.
16+
- `src/audio/`: Web Audio engine, transport, scheduling, sample playback.
17+
- `src/model/`: serializable project types and model transformations.
18+
- `src/persistence/`: import, export, storage, and migration helpers.
19+
- `src/utils/`: pure utilities such as tick/time conversion.
20+
- `src/styles/`: global CSS, tokens, and shared style primitives.
21+
- `tests/unit/`: unit tests for utilities, model transformations, scheduler calculations, and other isolated logic.
22+
- `tests/integration/`: integration tests for multi-module flows when needed.
23+
- `docs/`: product, architecture, data model, audio, UI, testing, and feature specs.
24+
25+
Preserve the existing structure unless a refactor is clearly required by the task.
26+
27+
## Commands
28+
29+
Use npm unless the repository already clearly uses another package manager.
30+
31+
Intended project commands:
32+
33+
```text
34+
Install: npm install
35+
Dev: npm run dev
36+
Type check: npm run typecheck
37+
Lint: npm run lint
38+
Test: npm run test
39+
Build: npm run build
40+
```
41+
42+
If these scripts do not exist yet, future scaffold work must add them. CI uses `--if-present` until the Vite scaffold exists.
43+
44+
## Engineering Conventions
45+
46+
- Prefer small, focused, reviewable changes.
47+
- Keep React UI separate from audio scheduling logic.
48+
- Do not mix persistence, UI rendering, and audio scheduling in the same module.
49+
- Keep project data serializable.
50+
- Store musical time in ticks, not seconds.
51+
- Use TypeScript types for project data, audio engine APIs, and feature boundaries.
52+
- Follow `docs/code-conventions.md` for naming, file organization, TypeScript, React, CSS Modules, design tokens, domain naming, tests, and comments.
53+
- Prefer pure utilities for tick math, model transformations, and scheduler calculations.
54+
- Do not introduce new production dependencies without a clear reason.
55+
- Do not rewrite large files unless required.
56+
- Do not implement unrelated features while working on a feature spec.
57+
- Do not change the project data model without updating `docs/data-model.md`.
58+
59+
## Audio Rules
60+
61+
- React UI must not own exact audio timing.
62+
- Schedule audio against `AudioContext.currentTime`.
63+
- Use a lookahead scheduler for sequenced playback.
64+
- UI cursors and playheads may use `requestAnimationFrame`, but not for exact audio scheduling.
65+
- Store musical time in ticks. The documented default PPQ is 480.
66+
- Do not store `AudioBuffer` objects directly in project JSON.
67+
- Runtime audio objects such as `AudioContext`, `AudioBuffer`, nodes, and decoded samples belong in audio runtime caches, not serializable project state.
68+
- Create a new `AudioBufferSourceNode` for each repeated one-shot sample playback.
69+
- The audio engine should expose a small typed API to the UI.
70+
71+
## CSS Modules Rules
72+
73+
- Use CSS Modules for component styles.
74+
- Keep global CSS limited to resets, base document styles, and design tokens.
75+
- Use CSS custom properties for shared colors, spacing, typography, and timing values.
76+
- Define primitive design tokens first, then define semantic tokens from those primitives.
77+
- 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.
78+
- Dynamic editor geometry such as note positions, note widths, and grid coordinates may use inline styles when values are computed at runtime.
79+
- Do not add a visual design system dependency at this stage unless a task explicitly justifies it.
80+
81+
## UI Reference Policy
82+
83+
- If a design prototype uses Tailwind, inline styles, or CDN assets, treat it as visual reference only.
84+
- Convert visual patterns into CSS Modules and shared CSS variables.
85+
- Do not add Tailwind or CDN-based styling unless explicitly requested in a feature spec.
86+
- Inline styles are acceptable for dynamic editor geometry such as note positions, widths, grid coordinates, and velocity heights.
87+
88+
## Testing Rules
89+
90+
- Keep production code under `src/`; place unit tests under `tests/unit/`.
91+
- Add integration tests under `tests/integration/` only when a task needs multi-module workflow coverage.
92+
- Do not add an end-to-end test framework or `tests/e2e/` until a feature spec calls for browser flow testing.
93+
- Keep `tsconfig.test.json` in sync with test locations so `npm run typecheck` checks test files.
94+
- Do not remove tests or checks to make a task pass.
95+
96+
## Issue Workflow
97+
98+
- Use GitHub Issues as the task queue for feature work, bugs, and larger refactors.
99+
- Follow `PLANS.md` `Active Issue Order` when choosing the next issue unless the user gives a different priority.
100+
- Prefer one issue per feature spec or focused bug.
101+
- Link issues to feature documents under `docs/features/` when applicable.
102+
- Use branch names that include the issue number when possible:
103+
- `feat/<issue-number>-<short-name>`
104+
- `fix/<issue-number>-<short-name>`
105+
- `docs/<issue-number>-<short-name>`
106+
- PRs should reference the issue they address.
107+
- Use `Closes #<issue-number>` only when the PR fully completes the issue.
108+
- Do not close issues unless the acceptance criteria are met.
109+
- Do not create duplicate issues. Search existing open issues first when possible.
110+
- Do not create issues for tiny typo fixes or trivial cleanup unless requested.
111+
112+
## Git and PR Expectations
113+
114+
- Work on a focused branch when possible.
115+
- Open PRs against `develop` by default unless a maintainer explicitly requests another base branch.
116+
- Keep commits scoped to the task.
117+
- Use conventional commit messages when practical.
118+
- PR summaries should explain what changed, how it was tested, and known limitations.
119+
- Do not remove tests or checks to make a task pass.
120+
- Do not merge PRs automatically.
121+
122+
## Constraints and Do-Not Rules
123+
124+
- Do not implement production DAW features unless the active task asks for them.
125+
- Do not add sample files unless the active task asks for them.
126+
- Do not add `CHANGELOG.md` for now.
127+
- Do not store runtime-only audio objects in project JSON.
128+
- Do not make broad refactors during feature work.
129+
- Do not introduce new runtime dependencies without documenting why they are needed.
130+
- Do not couple React components to Web Audio scheduling internals.
131+
- Do not change documented model semantics without updating the relevant docs.
132+
133+
## Definition of Done
134+
135+
- Requested behavior implemented.
136+
- Relevant docs updated if needed.
137+
- TypeScript passes.
138+
- Lint passes.
139+
- Tests pass.
140+
- Production build passes.
141+
- PR summary includes testing and known limitations.
142+
143+
## Verification
144+
145+
Run applicable checks before opening a PR:
146+
147+
```bash
148+
npm run typecheck --if-present
149+
npm run lint --if-present
150+
npm run test --if-present
151+
npm run build --if-present
152+
```
153+
154+
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.

PLANS.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Plans
2+
3+
## North Star
4+
5+
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.
6+
7+
## Current Milestone: Develop to Main Stabilization
8+
9+
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.
10+
11+
Focus:
12+
13+
- Keep README, plans, and feature docs aligned with the implemented state.
14+
- Keep the GitHub Issue queue and `Active Issue Order` clean.
15+
- Verify the standard checks pass before opening release-prep PRs.
16+
- Avoid adding new product scope during stabilization unless the user explicitly asks for it.
17+
18+
## Active Issue Order
19+
20+
No active implementation issues are queued right now.
21+
22+
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.
23+
24+
## Completed Milestones
25+
26+
1. Project scaffold.
27+
2. AudioContext and sample playback.
28+
3. Lookahead scheduler.
29+
4. Drum step sequencer.
30+
5. Basic piano roll.
31+
6. Transport pause/resume and editor playhead.
32+
7. Pitched instrument selection and Iowa Piano one-shot playback.
33+
8. Tempo control and live BPM updates.
34+
9. Arrangement view UI shell.
35+
10. Sampler advanced sustain.
36+
11. Sidebar clip and instrument management.
37+
12. Drum step subdivisions.
38+
13. Arrangement mixer panel UI shell.
39+
14. Hybrid clip loop playback.
40+
15. WAV file import as audio clip.
41+
16. Arrangement clip placement and playback.
42+
17. Mixer audio routing and track controls.
43+
18. IndexedDB project persistence.
44+
19. Variable hybrid clip length.
45+
20. Adjustable arrangement length.
46+
21. Arrangement WAV export.
47+
22. Multi-project management.
48+
49+
## Planned Milestones
50+
51+
1. Project JSON export/import.
52+
2. Basic effects.
53+
3. Custom project-management dialogs to replace browser prompt/confirm flows.
54+
4. Browser-driven smoke tests with Playwright or an equivalent e2e tool.
55+
5. Broader manual/audio QA pass before treating the prototype as a stable release.
56+
57+
## Backlog
58+
59+
- Keyboard shortcuts for transport and editing.
60+
- Basic undo and redo.
61+
- Velocity editing for drum and note events.
62+
- Clip duplication.
63+
- Starter project template.
64+
- Metronome.
65+
- Quantize utilities.
66+
- Swing or groove timing after strict timing is reliable.
67+
- MIDI file import or export.
68+
- Improved sampler sustain authoring and tuning UI.
69+
- More complete effect slots and effect parameter persistence.
70+
71+
## Frozen / Not Now
72+
73+
- Realtime audio recording.
74+
- VST/plugin support.
75+
- Cloud sync.
76+
- Multiplayer collaboration.
77+
- Advanced audio mastering.
78+
- Full DAW replacement scope.

0 commit comments

Comments
 (0)