Constellation Journal

A playful mood-and-moment journal where each entry becomes a “star” on a nightly sky map; tags (e.g., work, friends, health) become colored constellations you can filter and connect. Users can add quick entries with mood, short text, and tags, then view them as an interactive zoomable canvas or a chronological list, with simple stats like streaks and tag frequency. Everything runs client-side with localStorage, and the UI is split into clear components: EntryForm, SkyCanvas, FiltersPanel, EntryList, and Insights.

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 setup

Configure tailwind.config and src/index.css with Tailwind directives and content paths.

by system

Add shadcn utils

Create src/lib/utils.ts with cn() helper for Tailwind class merging.

by system

Define app types

Create src/types/journal.ts defining Entry, Mood, TagId, and derived stats types.

by system

LocalStorage helpers

Create src/lib/storage.ts with load/save functions and versioned key constants.

by system

Entries store hook

Create src/hooks/useEntries.ts for CRUD operations and persistence via localStorage.

by system

Filters store hook

Create src/hooks/useFilters.ts to manage selected tags, mood filter, and search text.

by system

Insights helpers

Create src/lib/insights.ts to compute streaks, tag frequency, and mood counts from entries.

by system

Seed sample data

Create src/lib/seed.ts to generate optional demo entries and tags for first run.

by system

App shell layout

Implement src/App.tsx with header, main split layout, and component placeholders.

by system

Routerless view toggle

Create src/components/ViewToggle.tsx to switch between Sky and List views in App state.

by system

Theme toggle

Create src/components/ThemeToggle.tsx to switch light/dark using a class on documentElement.

by system

EntryForm UI

Create src/components/EntryForm.tsx with mood selector, text input, tag picker, and submit button.

by system

EntryForm validation

Add minimal client-side validation and disabled submit behavior inside EntryForm.

by system

EntryForm submit wiring

Wire EntryForm submit to useEntries addEntry() and reset form on success.

by system

Tag color palette

Create src/lib/tags.ts defining default tags with stable colors and labels.

by system

FiltersPanel UI

Create src/components/FiltersPanel.tsx with tag chips, mood filter, and search field.

by system

FiltersPanel wiring

Connect FiltersPanel controls to useFilters state and expose a clear-filters action.

by system

Filtered entries selector

Create src/lib/selectors.ts exporting a function to filter/sort entries by current filters.

by system

EntryList UI

Create src/components/EntryList.tsx rendering filtered entries chronologically with mood, tags, and time.

by system

EntryList item actions

Add per-entry delete action UI and confirmation inside EntryList.

by system

SkyCanvas base

Create src/components/SkyCanvas.tsx with a responsive canvas element and resize handling.

by system

Star field rendering

Implement drawing of entries as stars on SkyCanvas with deterministic positions from entry ids.

by system

Tag constellations

Draw colored connecting lines between stars sharing a selected tag on SkyCanvas.

by system

Canvas pan and zoom

Add mouse/touch pan and wheel/pinch zoom logic to SkyCanvas with clamped scale.

by system

Canvas hover tooltip

Implement hover hit-testing and a small tooltip showing entry preview near cursor.

by system

Canvas click select

Add click-to-select a star and expose selectedEntryId to parent via callback prop.

by system

Entry detail dialog

Create src/components/EntryDialog.tsx (shadcn Dialog) to show full entry details and tags.

by system

Insights panel UI

Create src/components/Insights.tsx showing streak, total entries, top tags, and mood distribution.

by system

Empty states polish

Add empty/loading-first-run states for SkyCanvas, EntryList, and Insights when there are no entries.

by system

In Progress0
In Review0
Done0