Constellation Journal

A mood-and-moment journal that turns each entry into a “star” on an interactive night-sky map, where tags and mood intensity influence color, size, and clustering. Users can add/edit entries, filter by tag/date/mood, and click stars to read details, with optional guided prompts and a weekly “sky recap” view. Everything runs client-side with localStorage, using a clear split between entry editor, sky canvas/map, filters/search, and recap components.

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 && npx shadcn@latest init.

by system

Add Tailwind globals

Configure src/index.css with Tailwind directives and a simple app background theme.

by system

Set up routing

Add react-router routes for Sky, Entry, and Recap pages in src/main.tsx.

by system

Create app shell

Implement src/App.tsx with a layout container and an <Outlet/> region.

by system

Build top nav

Create src/components/TopNav.tsx with links to Sky, New Entry, and Recap.

by system

Define entry types

Add src/types/entry.ts defining JournalEntry, Mood, and Tag types.

by system

LocalStorage service

Create src/lib/storage.ts to load/save entries and app settings in localStorage.

by system

Entry ID helper

Add src/lib/id.ts to generate stable unique IDs for new entries.

by system

Date utilities

Create src/lib/dates.ts for week boundaries, formatting, and date filtering helpers.

by system

Mood color mapping

Add src/lib/mood.ts to map mood + intensity into HSL/hex colors and labels.

by system

Entry store hook

Create src/hooks/useEntries.ts to CRUD entries and persist changes via storage.

by system

Filters store hook

Create src/hooks/useFilters.ts to manage tag/date/mood filters in component state.

by system

Sky view page

Create src/pages/SkyPage.tsx to compose FiltersPanel + SkyMap + EntryDetailsDrawer.

by system

Entry editor page

Create src/pages/EntryEditorPage.tsx to create/edit an entry based on route params.

by system

Recap page

Create src/pages/RecapPage.tsx to render WeeklyRecap and a week selector.

by system

Filters panel UI

Implement src/components/FiltersPanel.tsx with tag chips, mood range, and date range inputs.

by system

Tag selector component

Create src/components/TagSelector.tsx for adding/removing tags with suggestions.

by system

Mood slider component

Create src/components/MoodSlider.tsx using shadcn Slider to set mood intensity.

by system

Date range picker

Create src/components/DateRangeFields.tsx with two date inputs and clear action.

by system

Search box component

Create src/components/SearchBox.tsx to filter entries by title/body substring.

by system

Sky map canvas

Implement src/components/SkyMapCanvas.tsx drawing stars on a <canvas> with pan/zoom.

by system

Star layout algorithm

Create src/lib/layout.ts to compute x/y positions and simple clustering by tag similarity.

by system

Star rendering rules

Add src/lib/starStyle.ts to convert entry mood/tags into star size, glow, and color.

by system

Canvas hit testing

Implement src/lib/hitTest.ts to find the nearest star for click/hover interactions.

by system

Sky map wrapper

Create src/components/SkyMap.tsx to connect entries+filters to SkyMapCanvas props and selection.

by system

Entry details drawer

Create src/components/EntryDetailsDrawer.tsx showing selected entry content with edit/delete actions.

by system

Entry form component

Implement src/components/EntryForm.tsx for title, body, mood, tags, and date fields.

by system

Guided prompts panel

Create src/components/GuidedPrompts.tsx with optional prompt suggestions that append into the body.

by system

Weekly recap component

Implement src/components/WeeklyRecap.tsx summarizing week mood averages, top tags, and entry count.

by system

Recap mini sky

Create src/components/RecapSkyMini.tsx rendering a small, non-interactive sky snapshot for the selected week.

by system

In Progress0
In Review0
Done0