Soundless DJ

A playful “silent music” mixer where users build a track using only animated patterns: pick up to 8 loop cards (pulse, waves, dots, glitch, bounce), assign each a tempo and intensity, and watch the canvas visualize the combined rhythm. The app includes a timeline grid, start/stop/loop controls, preset packs, and the ability to save/share mixes via localStorage export/import JSON—all entirely client-side in a single React + Vite SPA with Tailwind and shadcn/ui.

To Do30
Scaffold project

Run: npm create vite@latest . -- --template react-ts && npm i && npm i -D tailwindcss postcss autoprefixer && npx tailwindcss init -p && npm i class-variance-authority clsx tailwind-merge lucide-react && npx shadcn@latest init -d

by system

Add Tailwind globals

Configure src/index.css with Tailwind directives and a minimal CSS reset.

by system

Add shadcn utils

Create src/lib/utils.ts with cn() helper (clsx + tailwind-merge).

by system

Define mix types

Create src/types/mix.ts for LoopType, LoopCard, MixState, and PresetPack types.

by system

Seed loop catalog

Create src/data/loops.ts exporting available loop types (pulse, waves, dots, glitch, bounce) with default params.

by system

Seed preset packs

Create src/data/presets.ts exporting a few preset packs as MixState JSON.

by system

Create localStorage API

Create src/lib/storage.ts for saveMix/loadMix/listMixes/deleteMix/exportMix/importMix helpers.

by system

Add mix reducer

Create src/state/mixReducer.ts implementing pure actions (add/remove/update/reorder/start/stop/load).

by system

Add mix context

Create src/state/MixContext.tsx providing state/dispatch with a reducer and initial state.

by system

Add app layout shell

Create src/components/AppShell.tsx with header/main layout using Tailwind.

by system

Add top navigation

Create src/components/TopBar.tsx with app title and primary action buttons area.

by system

Add transport controls

Create src/components/TransportControls.tsx with Start/Stop and Loop toggle (shadcn Button/Switch).

by system

Add tempo master control

Create src/components/MasterTempo.tsx with a BPM slider/input that dispatches state updates.

by system

Add intensity master control

Create src/components/MasterIntensity.tsx with a global intensity slider that scales visuals.

by system

Build loop picker grid

Create src/components/LoopPicker.tsx showing selectable loop cards from the catalog (max 8).

by system

Loop card UI

Create src/components/LoopCardItem.tsx rendering a chosen loop with tempo/intensity controls and remove button.

by system

Loop list container

Create src/components/LoopRack.tsx listing selected loops and enforcing the 8-loop limit.

by system

Add reorder controls

Create src/components/LoopReorderButtons.tsx for move up/down actions per loop.

by system

Create timeline grid

Create src/components/TimelineGrid.tsx rendering a simple beat grid aligned to master BPM.

by system

Add playhead indicator

Create src/components/Playhead.tsx that animates position across the timeline while playing.

by system

Create visualization canvas

Create src/components/VisualizerCanvas.tsx with a <canvas> and requestAnimationFrame loop.

by system

Canvas sizing hook

Create src/hooks/useCanvasSize.ts to handle DPR scaling and resize updates.

by system

Beat clock hook

Create src/hooks/useBeatClock.ts to compute beat/phase from BPM, playback state, and time.

by system

Pattern renderer pulse

Create src/visuals/patternPulse.ts exporting a draw function driven by phase/intensity.

by system

Pattern renderer waves

Create src/visuals/patternWaves.ts exporting a draw function driven by phase/intensity.

by system

Pattern renderer dots

Create src/visuals/patternDots.ts exporting a draw function driven by phase/intensity.

by system

Pattern renderer glitch

Create src/visuals/patternGlitch.ts exporting a draw function driven by phase/intensity.

by system

Pattern renderer bounce

Create src/visuals/patternBounce.ts exporting a draw function driven by phase/intensity.

by system

Compose pattern mixer

Create src/visuals/mixRenderer.ts to blend multiple active pattern draw calls into one frame.

by system

Add preset pack modal

Create src/components/PresetPacksDialog.tsx to browse packs and load one into state.

by system

In Progress0
In Review0
Done0