Soundless Beat Lab

A playful “silent drum machine” where users build rhythms on a 16-step grid that animates visually instead of playing audio—each instrument lane has a distinct shape, color, and motion pattern. Users can create, save, and remix beat patterns in localStorage, switch between preset visual “skins,” and export a loop as a GIF-like frame strip (PNG sequence) for sharing. The app is split into clear components: step-sequencer grid, transport controls (play/tempo), skin/palette manager, and a pattern library with save/load/duplicate.

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.

by system

Add Tailwind styles

Configure Tailwind content paths and add @tailwind directives plus base app styles in src/index.css.

by system

Create app layout

Implement the top-level layout and sections (transport, grid, skins, library, export) in src/App.tsx.

by system

Define core types

Add sequencer-related TypeScript types (Pattern, Track, Step, Skin) in src/lib/types.ts.

by system

Add utility helpers

Create small pure helpers (clamp, uid, deepCopy, range) in src/lib/utils.ts.

by system

Create default data

Add default tracks, empty pattern, and a few presets in src/lib/defaults.ts.

by system

Sequencer state hook

Implement useSequencerState (pattern, tempo, isPlaying, currentStep) in src/hooks/useSequencerState.ts.

by system

Playback timer hook

Create useStepClock that advances currentStep based on tempo using requestAnimationFrame in src/hooks/useStepClock.ts.

by system

Transport controls UI

Build play/pause, stop, and step indicator controls in src/components/TransportControls.tsx.

by system

Tempo slider control

Add a tempo slider + numeric display component in src/components/TempoControl.tsx.

by system

Step grid component

Create the 16-step sequencer grid with clickable cells in src/components/StepSequencerGrid.tsx.

by system

Track lane header

Add per-track lane header (name + color chip) in src/components/TrackLaneHeader.tsx.

by system

Step cell component

Implement a single step cell button with active/hover states in src/components/StepCell.tsx.

by system

Current step highlight

Add visual playhead highlighting for the current step across the grid in src/components/PlayheadOverlay.tsx.

by system

Skin model and presets

Define Skin presets (palette + motion rules) in src/skins/skins.ts.

by system

Skin context provider

Implement SkinProvider + useSkin to switch active skin in src/skins/SkinContext.tsx.

by system

Skin picker UI

Create a skin selection dropdown/cards UI in src/components/SkinPicker.tsx.

by system

Visual instrument renderer

Render per-track shapes for active steps (no audio) in src/components/VisualLane.tsx.

by system

Motion patterns engine

Implement deterministic motion parameters per skin/track/step in src/skins/motion.ts.

by system

Grid-to-visual bridge

Connect pattern state + playhead to visual animations in src/components/VisualizerStage.tsx.

by system

Pattern serializer

Add encode/decode utilities for patterns (versioned) in src/lib/patternCodec.ts.

by system

LocalStorage storage layer

Implement load/save/list/remove for patterns in src/lib/storage.ts.

by system

Pattern library panel

Create the pattern library UI container in src/components/PatternLibrary.tsx.

by system

Save pattern dialog

Add a shadcn Dialog to name and save the current pattern in src/components/SavePatternDialog.tsx.

by system

Load pattern list

Render stored patterns list with load buttons in src/components/PatternList.tsx.

by system

Duplicate pattern action

Add a duplicate action that copies a stored pattern under a new id/name in src/components/DuplicatePatternButton.tsx.

by system

Delete pattern action

Add delete with confirmation UI for stored patterns in src/components/DeletePatternButton.tsx.

by system

Export frame renderer

Implement offscreen rendering of N frames of the visualizer into canvas bitmaps in src/export/renderFrames.ts.

by system

PNG sequence exporter

Add a client-side exporter that downloads frames as numbered PNG files in src/export/downloadPngSequence.ts.

by system

Export panel UI

Create an export panel with frame count/size controls and an export button in src/components/ExportPanel.tsx.

by system

In Progress0
In Review0
Done0