The following conventions apply to all contributions:
- No commented-out code — dead code must be removed, not hidden
- DRY — extract common functionality, avoid copy-paste
- KISS — simple, understandable solutions over clever ones
- Continuous refactoring — clean as you go (boy scout rule)
- Conventional Commits —
feat:,fix:,docs:,refactor:,style:,chore:,test:,perf: - Commit related changes — one logical change per commit
- Commit often — small, granular commits
- Don't commit half-done work — only commit completed logical components
- Test before you commit —
npm run buildmust pass
feature/*— new featuresfix/*— bug fixeshotfix/*— production fixes
- Squash-and-merge strategy
- PR title follows conventional commit format
- Include Problem / Solution description
- Delete branch after merge
npm install
npm run dev # Start dev server
npm run build # TypeScript check + Vite build
npx tsc --noEmit # Type check onlysrc/
├── components/ # UI components (Topbar, ChannelStrip, etc.)
├── controls/ # Analog control components (Knob, Toggle, LED, etc.)
├── store/ # Zustand state management
├── utils/ # Utility functions
└── styles/ # Global CSS