Echo Deck

A playful audio-free "sound" sequencer where users build short rhythm loops by arranging onomatopoeia cards (e.g., "tap", "whoosh", "ding") on a 16-step grid and playing them back as animated pulses instead of real audio. Users can create, name, and save multiple decks and patterns in localStorage, with a simple performance mode that auto-advances and highlights steps while showing per-card visual effects. The app includes a tiny pattern generator (randomize with constraints like "sparse", "busy", or "syncopated") and an export/import JSON feature for sharing patterns.

To Do30
Scaffold app

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 globals

Configure Tailwind content paths and add @tailwind directives + CSS variables in src/index.css.

by system

Add shadcn utils

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

by system

Set app layout

Implement src/App.tsx with top header, main two-column layout, and footer placeholder.

by system

Create types model

Define Deck/Pattern/Step/Card types in src/types.ts.

by system

LocalStorage helpers

Add src/lib/storage.ts for load/save, versioning, and safe JSON parsing.

by system

Decks store hook

Implement src/hooks/useDecks.ts to manage decks/patterns CRUD and persist to localStorage.

by system

Seed default data

Add src/lib/defaultData.ts with starter deck, cards, and one pattern.

by system

Header component

Create src/components/Header.tsx with app title and small action buttons area.

by system

Deck selector

Create src/components/DeckSelector.tsx to choose active deck and add/rename/delete decks.

by system

Pattern list

Create src/components/PatternList.tsx to select, create, rename, and delete patterns.

by system

Onomatopoeia palette

Create src/components/CardPalette.tsx showing available cards to place on the grid.

by system

Card chip component

Create src/components/CardChip.tsx for consistent card styling and color variants.

by system

Grid state helpers

Add src/lib/grid.ts for 16-step grid creation, cloning, and cell set/clear operations.

by system

Step grid component

Create src/components/StepGrid.tsx rendering a 16-column grid with rows per card.

by system

Grid cell interaction

Add click/drag toggle behavior in src/components/StepGrid.tsx to place/remove cards per step.

by system

Transport controls

Create src/components/TransportControls.tsx with Play/Pause, Stop, and tempo slider.

by system

Sequencer timing hook

Implement src/hooks/useSequencer.ts for step clock (requestAnimationFrame/setInterval) and currentStep.

by system

Step highlight overlay

Update src/components/StepGrid.tsx to highlight the active step column during playback.

by system

Pulse animation component

Create src/components/Pulse.tsx for animated step pulses using Tailwind keyframes.

by system

Per-card visual effects

Add src/lib/effects.ts mapping card names to simple visual effect props (scale/shake/glow).

by system

Performance mode toggle

Create src/components/PerformanceModeToggle.tsx to enable/disable performance mode UI.

by system

Performance view panel

Create src/components/PerformancePanel.tsx to show large pulses and per-card effects per step.

by system

Auto-advance patterns

Add optional auto-advance logic in src/hooks/useSequencer.ts to cycle patterns when enabled.

by system

Pattern generator UI

Create src/components/GeneratorControls.tsx with preset buttons: Sparse, Busy, Syncopated.

by system

Pattern generator logic

Implement src/lib/generator.ts to generate a new grid with constraints for the selected preset.

by system

Apply generated pattern

Wire GeneratorControls to update the active pattern grid via useDecks in src/App.tsx.

by system

Export JSON modal

Create src/components/ExportModal.tsx to export current deck(s) as JSON text for copy/download.

by system

Import JSON modal

Create src/components/ImportModal.tsx to paste JSON, validate, and merge/replace into localStorage.

by system

Validation + migrate

Add src/lib/validate.ts to validate imported schema and migrate older versions to current types.

by system

In Progress0
In Review0
Done0