Soundtrack Shuffle

A playful “life playlist” generator that turns your day into a mock album: users log short moments (e.g., commute, coffee, victory, stress) and the app maps them to a themed tracklist with titles, durations, and a cohesive album cover. It includes a drag-and-drop track reordering view, a mood-to-genre rule editor (simple presets + custom mappings), and an export panel to save/share the album as an image or JSON—all client-side with localStorage.

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 && npm i @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities html-to-image && npx shadcn@latest init

by system

Add Tailwind styles

Configure Tailwind content/theme and add @tailwind directives in src/index.css.

by system

Setup shadcn components

Add a minimal set of shadcn/ui primitives (button, input, textarea, card, dialog, tabs, select, toast) via generated component files.

by system

Define app types

Create src/types.ts with Moment, Track, Album, and MoodGenreRule TypeScript types.

by system

LocalStorage helpers

Create src/lib/storage.ts with load/save utilities and versioned keys.

by system

Seed default presets

Create src/lib/presets.ts exporting default mood-to-genre rules and album theme presets.

by system

Moment-to-track mapper

Create src/lib/generator.ts to transform moments + rules into a tracklist with titles and durations.

by system

Album cover generator

Create src/lib/cover.ts to derive cohesive cover colors/pattern seed from album theme and track moods.

by system

App shell layout

Create src/App.tsx with header, main container, and tabbed navigation (Log, Tracklist, Rules, Export).

by system

Toast provider

Wire shadcn toaster into src/main.tsx and expose a simple notify helper.

by system

Album state store

Create src/state/useAlbum.ts as a single React hook managing moments, rules, album output, and persistence.

by system

Moment form component

Create src/components/MomentForm.tsx to add a moment (label, mood, optional note) with validation.

by system

Moment list component

Create src/components/MomentList.tsx to display, edit, and delete logged moments.

by system

Mood select component

Create src/components/MoodSelect.tsx as a reusable select for moods/presets.

by system

Log page

Create src/pages/LogPage.tsx composing MomentForm + MomentList and calling album regeneration.

by system

Track card component

Create src/components/TrackCard.tsx to render track title, genre, duration, and mood badge.

by system

Sortable tracklist

Create src/components/SortableTracklist.tsx using dnd-kit to reorder tracks and emit new order.

by system

Tracklist page

Create src/pages/TracklistPage.tsx to show the generated album tracklist with drag-and-drop ordering.

by system

Album cover component

Create src/components/AlbumCover.tsx to render a square cover (SVG/CSS) with title/artist styling.

by system

Album header component

Create src/components/AlbumHeader.tsx to show album title, “artist” (user-defined), date, and runtime.

by system

Rules list component

Create src/components/RulesList.tsx to display mood-to-genre rules with inline enable/disable and delete.

by system

Rule editor dialog

Create src/components/RuleEditorDialog.tsx to add/edit a single mapping (mood → genre + naming style).

by system

Preset picker component

Create src/components/PresetPicker.tsx to apply preset rule sets and themes.

by system

Rules page

Create src/pages/RulesPage.tsx composing PresetPicker + RulesList + RuleEditorDialog.

by system

Export panel component

Create src/components/ExportPanel.tsx with buttons to export JSON and render-to-image.

by system

Album export canvas

Create src/components/AlbumExportView.tsx as a dedicated DOM layout to screenshot (cover + tracklist).

by system

Image export utility

Create src/lib/exportImage.ts using html-to-image to download PNG from AlbumExportView.

by system

JSON export utility

Create src/lib/exportJson.ts to download the album as a JSON file and copy to clipboard.

by system

Export page

Create src/pages/ExportPage.tsx composing AlbumExportView + ExportPanel with success toasts.

by system

Route-less tabs wiring

Update src/App.tsx to render the four pages via shadcn Tabs while sharing album state across views.

by system

In Progress0
In Review0
Done0