Constellation Journal

A mood-and-moments journal where each entry becomes a “star” on a night-sky canvas, with mood choosing the star color and intensity. Users can add entries, tag them, and see automatic constellations formed by connecting stars that share a tag or fall within a selected date range. Includes filters (mood, tag, timeframe), a detail drawer for editing/deleting entries, and localStorage persistence so the sky rebuilds instantly on reload.

To Do30
Scaffold app stack

Run: npm create vite@latest . -- --template react-ts && npm i && npm i -D tailwindcss postcss autoprefixer && npx tailwindcss init -p && npm i -D @tailwindcss/vite && npm i clsx tailwind-merge lucide-react && npx shadcn@latest init.

by system

Add Tailwind config

Configure tailwind.config.ts and src/index.css with Tailwind layers and shadcn theme variables.

by system

Create app layout

Implement src/App.tsx with header/sidebar/main regions using Tailwind.

by system

Define journal types

Create src/lib/types.ts for Entry, Mood, Tag, Filters, and StarRender models.

by system

Add mood palette

Create src/lib/moods.ts mapping mood to color/intensity defaults.

by system

LocalStorage utilities

Create src/lib/storage.ts for load/save entries with versioned key and safe parsing.

by system

Entries state hook

Create src/hooks/useEntries.ts to manage entries CRUD and persist to localStorage.

by system

Filters state hook

Create src/hooks/useFilters.ts to manage mood/tag/timeframe filters in a single object.

by system

Sky projection helpers

Create src/lib/skyMath.ts to convert entry timestamps to x/y positions and star radius/opacity.

by system

Constellation algorithm

Create src/lib/constellations.ts to compute line segments by shared tag and by date-range proximity.

by system

Add shadcn components

Install needed shadcn/ui primitives (button, input, textarea, select, badge, drawer/sheet, dialog, popover, slider, tabs).

by system

Star canvas component

Create src/components/SkyCanvas.tsx that renders stars and constellation lines on an SVG layer.

by system

Star hover tooltip

Add hover/focus tooltip behavior in SkyCanvas.tsx showing mood, date, and title snippet.

by system

Star selection handler

Wire SkyCanvas.tsx to emit selected entry id on star click.

by system

Filter bar UI

Create src/components/FiltersBar.tsx with mood, tag, and timeframe controls using shadcn inputs.

by system

Timeframe picker

Create src/components/TimeframePicker.tsx supporting presets (7d/30d/all) and custom date range.

by system

Tag selector control

Create src/components/TagSelect.tsx to pick a tag from existing tags plus free-text add.

by system

Mood selector control

Create src/components/MoodSelect.tsx listing moods with color preview chips.

by system

New entry form

Create src/components/EntryForm.tsx for creating an entry (title, body, mood, tags, date).

by system

Add entry submit

Implement EntryForm.tsx submit to call useEntries addEntry and reset fields.

by system

Entry list panel

Create src/components/EntriesList.tsx showing filtered entries with mood dot, date, and tags.

by system

Entry list item

Create src/components/EntryListItem.tsx as a memoized row component with compact styling.

by system

Selected entry drawer

Create src/components/EntryDrawer.tsx using shadcn Sheet/Drawer to show entry details and actions.

by system

Edit entry form

Add editable fields inside EntryDrawer.tsx with save/cancel behavior.

by system

Delete entry confirm

Add a confirmation dialog in EntryDrawer.tsx and wire delete to useEntries.

by system

Apply filters to data

Create src/lib/filtering.ts to filter entries by mood, tag, and timeframe consistently.

by system

Compute sky render data

Create src/lib/skyModel.ts to map filtered entries to star render props and constellation segments.

by system

Main page composition

Create src/pages/Home.tsx composing FiltersBar, SkyCanvas, EntriesList, EntryForm, and EntryDrawer.

by system

Wire app state

Connect Home.tsx to useEntries/useFilters and pass derived sky model to SkyCanvas.

by system

Seed empty-state UI

Add empty and first-run hints in Home.tsx when there are no entries or no filter matches.

by system

In Progress0
In Review0
Done0