Soundless Synth

A playful “silent music” sequencer that lets users compose looped tracks using only visual beats: drag-and-drop shapes onto a grid timeline, assign each shape a color, intensity, and motion style, and watch the composition animate in sync as it plays. Include simple controls (play/pause, tempo, loop length, per-track mute/solo) plus a shareable preset system that saves projects to localStorage and exports/imports JSON. The app focuses on clean component boundaries: a sequencer grid editor, a transport/tempo bar, a track list, and an animation preview stage with a few built-in visual instrument presets.

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

by system

Add Tailwind styles

Configure tailwind.config + src/index.css with Tailwind directives and basic app theme tokens.

by system

Add shadcn components

Install shadcn/ui primitives needed (button, slider, toggle, tabs, dialog, dropdown-menu, input, textarea, tooltip, separator).

by system

Define app types

Create src/types/sequencer.ts defining Project, Track, Clip, ShapeInstrument, MotionStyle, and serialization types.

by system

Create default presets

Add src/data/presets.ts exporting a few built-in visual instrument presets and a starter project.

by system

LocalStorage utilities

Create src/lib/storage.ts to load/save projects and named presets from localStorage with versioning.

by system

JSON import/export helpers

Create src/lib/presetIO.ts to export project JSON and validate/import JSON safely.

by system

Transport timing hook

Create src/hooks/useTransport.ts handling play/pause, tempo, loop length, current step, and tick scheduling.

by system

Project state store

Create src/state/useProject.ts as a lightweight React state hook for project, tracks, clips, and selection.

by system

Track mute/solo logic

Implement mute/solo resolution helpers in src/lib/trackMix.ts for determining audible/visible tracks.

by system

App shell layout

Build src/App.tsx layout with header transport bar, left track list, center grid editor, and right preview stage.

by system

Transport bar UI

Create src/components/TransportBar.tsx with play/pause, tempo slider, loop length control, and step readout.

by system

Track list UI

Create src/components/TrackList.tsx rendering tracks with name, color, mute, solo, and add/remove buttons.

by system

Track row component

Create src/components/TrackRow.tsx for a single track row with controls wired to project state.

by system

Add track dialog

Create src/components/AddTrackDialog.tsx to add a new track with name and preset instrument selection.

by system

Grid editor scaffold

Create src/components/SequencerGrid.tsx rendering the timeline grid for tracks x steps with basic styling.

by system

Grid cell component

Create src/components/GridCell.tsx handling hover/selection visuals and click-to-toggle clip placement.

by system

Clip model operations

Add src/lib/clipOps.ts for add/remove/move/duplicate clips and quantize to step boundaries.

by system

Drag palette UI

Create src/components/ShapePalette.tsx showing draggable shape tokens for circle/square/triangle presets.

by system

Grid drag-and-drop

Add HTML5 drag/drop to SequencerGrid to place a shape clip onto a target cell with default properties.

by system

Clip selection state

Implement selection (selected track/step/clip id) in src/state/useProject.ts and wire clicks from grid.

by system

Clip inspector panel

Create src/components/ClipInspector.tsx to edit selected clip color, intensity, shape, and motion style.

by system

Color picker control

Create src/components/ColorField.tsx as a simple hex input + swatches for clip/track color selection.

by system

Motion style presets

Create src/data/motionStyles.ts defining a few named motion styles and their parameters.

by system

Preview stage canvas

Create src/components/PreviewStage.tsx using a single <canvas> to render animated shapes for the current step.

by system

Animation renderer

Implement src/lib/renderEngine.ts to draw shapes with intensity and motion styles based on transport time.

by system

Sync preview to transport

Wire PreviewStage to useTransport so it animates in sync with playhead and respects mute/solo.

by system

Preset manager UI

Create src/components/PresetManager.tsx to save/load/delete named presets in localStorage.

by system

Import/export dialog

Create src/components/ImportExportDialog.tsx to copy/download JSON and paste/import JSON with validation.

by system

In Progress0
In Review0
Done0