Soundless Sampler

A playful browser-based "music" maker that builds looping tracks using only text-based patterns (e.g., kick/snare/hat grids) and Web Audio synthesis—no audio files required. Users can create multiple 8–32 step patterns, adjust tempo/swing/volume per track, and save/load their grooves from localStorage with a simple preset system. The UI is split into clear components: transport controls, track list, step sequencer grid, synth/mixer panel, and a preset library modal, all styled with Tailwind and shadcn/ui.

To Do29
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 && npx shadcn@latest add button card dialog dropdown-menu input label slider switch tabs tooltip separator

by system

Add Tailwind config

Configure Tailwind content paths and base styles in tailwind.config.* and src/index.css.

by system

Define app types

Create src/types.ts with Track, Pattern, StepGrid, Preset, and Transport type definitions.

by system

Seed default state

Create src/defaults.ts exporting an initial project with 2–3 starter tracks and patterns.

by system

Create audio engine

Add src/audio/engine.ts with AudioContext lifecycle, master gain, and time utilities.

by system

Add synth voices

Add src/audio/voices.ts implementing kick/snare/hat/clap simple synth functions using Web Audio nodes.

by system

Implement scheduler

Add src/audio/scheduler.ts for step-based scheduling with lookahead and swing support.

by system

Audio engine hook

Create src/audio/useAudioEngine.ts hook to init/cleanup engine and expose play/stop/trigger.

by system

Global store context

Create src/state/ProjectContext.tsx with reducer-based state for tracks, patterns, and transport.

by system

Transport reducer actions

Add src/state/actions.ts defining action creators for play/stop, tempo, swing, and step updates.

by system

LocalStorage persistence

Create src/state/persist.ts to save/load project state and presets to localStorage with versioning.

by system

Preset library logic

Add src/state/presets.ts for CRUD helpers (create, rename, delete, load) on stored presets.

by system

App layout shell

Implement src/App.tsx layout with header, main split panes, and providers wired up.

by system

Transport controls UI

Create src/components/TransportControls.tsx with play/stop, BPM, swing, and current step display.

by system

Track list UI

Create src/components/TrackList.tsx showing tracks with select, add, duplicate, and delete actions.

by system

Track row component

Create src/components/TrackRow.tsx for per-track name, mute/solo, volume, and pattern length.

by system

Add track dialog

Create src/components/AddTrackDialog.tsx to add a new track with instrument type and step count.

by system

Step grid component

Create src/components/StepGrid.tsx rendering an interactive 8–32 step sequencer for active track.

by system

Step cell component

Create src/components/StepCell.tsx handling toggle/velocity UI states and pointer interactions.

by system

Pattern length control

Create src/components/PatternLengthControl.tsx to change active pattern steps (8/16/24/32).

by system

Synth panel UI

Create src/components/SynthPanel.tsx with instrument-specific parameters (tone/decay/noise) controls.

by system

Mixer panel UI

Create src/components/MixerPanel.tsx with master volume plus per-track volume and pan controls.

by system

Wire UI to reducer

Connect TransportControls/TrackList/StepGrid panels to ProjectContext actions and selectors.

by system

Playhead highlight

Add playhead step highlighting in StepGrid synced to scheduler callback ticks.

by system

Trigger audio per step

On scheduler ticks, trigger active steps for all tracks using voices and per-track volume/mute/solo.

by system

Preset modal UI

Create src/components/PresetLibraryModal.tsx using shadcn Dialog to browse, save, load, and delete presets.

by system

Preset item row

Create src/components/PresetRow.tsx for preset name display with load/rename/delete buttons.

by system

Keyboard shortcuts

Add src/hooks/useHotkeys.ts enabling space play/stop and arrow keys to move selected step/track.

by system

Polish and empty states

Add minimal empty/loading states, disable controls appropriately, and finalize responsive Tailwind styling.

by system

In Progress0
In Review0
Done0