Soundless Beatbox

A playful rhythm game where users build short beat patterns on a 16-step grid using visual “mouth-sound” icons (kick, snare, hi-hat) and then press play to watch an animated metronome and step highlight (no real audio required). Include tempo control, swing toggle, pattern length (8/16), and a library of saved patterns stored in localStorage with rename/duplicate/delete. Add a simple “challenge mode” that shows a target pattern to recreate within a time limit, making it easy to split into components like sequencer grid, transport controls, pattern manager, and challenge viewer.

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 base Tailwind directives in src/index.css.

by system

Add shadcn UI primitives

Generate Button, Card, Dialog, Input, Select, Switch, Slider, Tabs, Tooltip components via shadcn.

by system

Define app routing shell

Create src/App.tsx layout with header and two tabs/sections: Sequencer and Challenge.

by system

Create icon set

Add src/lib/icons.tsx exporting simple “mouth-sound” SVG/React icons for kick/snare/hihat.

by system

Add types and constants

Create src/lib/types.ts defining Step, Instrument, Pattern, and default constants.

by system

Pattern serialization utils

Create src/lib/patternCodec.ts for normalize/clone/validate and localStorage-safe serialization.

by system

LocalStorage pattern store

Create src/lib/patternStore.ts implementing CRUD (list/create/update/delete/duplicate/rename) in localStorage.

by system

Global pattern hook

Create src/hooks/usePatterns.ts to wrap patternStore with React state syncing.

by system

Sequencer state hook

Create src/hooks/useSequencer.ts managing current pattern, play state, step index, tempo, swing, length.

by system

Transport controls UI

Create src/components/TransportControls.tsx with Play/Pause/Stop, BPM slider/input, swing toggle, length toggle.

by system

Metronome visualizer

Create src/components/Metronome.tsx showing animated pendulum/beat pulse synced to current step.

by system

Step highlight bar

Create src/components/StepIndicator.tsx rendering 8/16 step markers and highlighting active step.

by system

Grid cell component

Create src/components/SequencerCell.tsx for a single step/instrument toggle with icon and active styling.

by system

Sequencer grid component

Create src/components/SequencerGrid.tsx rendering 3 rows (kick/snare/hihat) x 8/16 columns with click toggles.

by system

Grid header row

Create src/components/GridHeader.tsx showing step numbers and bar separators for readability.

by system

Playback scheduler logic

Implement step-advance timing in useSequencer.ts using setInterval/RAF with BPM and swing applied.

by system

Playhead sync behavior

Ensure playhead resets on Stop and clamps when switching pattern length (16→8 trims, 8→16 extends).

by system

Pattern selector UI

Create src/components/PatternSelect.tsx to choose current pattern from saved library.

by system

Pattern editor actions

Create src/components/PatternActions.tsx with Rename/Duplicate/Delete buttons and dialogs.

by system

New pattern button

Create src/components/NewPatternButton.tsx to create a blank pattern and set it active.

by system

Pattern list panel

Create src/components/PatternLibraryPanel.tsx combining selector and actions with a scrollable list.

by system

Persist active pattern

Store and restore the last active pattern id and transport settings (BPM/swing/length) in localStorage.

by system

Challenge pattern generator

Create src/lib/challenge.ts to generate target patterns by difficulty and compare to user pattern.

by system

Challenge state hook

Create src/hooks/useChallenge.ts to manage timer, target pattern, start/reset, and completion status.

by system

Challenge viewer UI

Create src/components/ChallengeViewer.tsx to display target grid read-only with icons and step grouping.

by system

Challenge controls UI

Create src/components/ChallengeControls.tsx with Start, difficulty select, time limit display, and Reset.

by system

Challenge result banner

Create src/components/ChallengeResult.tsx to show success/fail states and remaining time.

by system

Challenge-sequencer integration

Wire Challenge tab to reuse SequencerGrid for user input and live-compare to target for completion.

by system

Polish responsive layout

Adjust App layout and component spacing for mobile/desktop using Tailwind and shadcn Card sections.

by system

In Progress0
In Review0
Done0