Constellation Journal

A mood-and-moment journal where each entry becomes a “star” placed on a nightly sky canvas, forming constellations based on tags (e.g., Work, Friends, Health). Users can add entries with mood, short note, tags, and a color; then filter the sky by date range, mood, or tag to watch patterns emerge. Everything runs client-side with localStorage, featuring a timeline list view, a sky/constellation view with hover details, and a simple insights panel (most common tags, mood trends, streaks).

To Do31
Scaffold app

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 @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-popover @radix-ui/react-slider @radix-ui/react-tabs @radix-ui/react-tooltip && npx shadcn@latest init.

by system

Add Tailwind styles

Configure Tailwind in tailwind.config.ts and add directives to src/index.css.

by system

Setup shadcn utils

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

by system

Create app layout

Implement src/App.tsx with header, main container, and two-panel responsive layout.

by system

Add nav tabs

Create src/components/NavTabs.tsx using shadcn Tabs to switch between Timeline, Sky, and Insights.

by system

Define journal types

Create src/types/journal.ts with Entry, Mood, Tag, and Filter type definitions.

by system

LocalStorage persistence

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

by system

Entries state hook

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

by system

Filter state hook

Create src/hooks/useFilters.ts to manage date range, mood, and tag filters.

by system

Seed demo entries

Add optional demo seed logic in src/lib/seed.ts for first-run sample data.

by system

Entry form dialog

Create src/components/EntryFormDialog.tsx with shadcn Dialog wrapper and submit/cancel actions.

by system

Mood picker control

Create src/components/MoodPicker.tsx for selecting mood with labeled options/icons.

by system

Tag input control

Create src/components/TagInput.tsx to add/remove tags as chips and prevent duplicates.

by system

Color picker control

Create src/components/ColorPicker.tsx to choose a star color from a small palette.

by system

Entry form validation

Add lightweight client-side validation in the form component (required note/mood, max lengths).

by system

Timeline page shell

Create src/pages/TimelinePage.tsx to render filters + entry list + add-entry button.

by system

Entry list component

Create src/components/EntryList.tsx to render entries grouped by date with empty state.

by system

Entry list item

Create src/components/EntryListItem.tsx showing mood, note preview, tags, color dot, and timestamp.

by system

Entry actions menu

Create src/components/EntryActionsMenu.tsx with edit/delete actions using shadcn DropdownMenu.

by system

Delete confirmation dialog

Create src/components/DeleteEntryDialog.tsx to confirm removal of an entry.

by system

Filter bar UI

Create src/components/FilterBar.tsx with date range inputs and mood/tag selectors.

by system

Tag filter dropdown

Create src/components/TagFilter.tsx to select one tag (or all) from available tags.

by system

Mood filter dropdown

Create src/components/MoodFilter.tsx to filter by mood (or all).

by system

Date range filter

Create src/components/DateRangeFilter.tsx with start/end date inputs and reset.

by system

Filtering selector logic

Add src/lib/selectors.ts to compute filtered/sorted entries from entries + filters.

by system

Sky page shell

Create src/pages/SkyPage.tsx to render sky canvas container and hover details panel.

by system

Starfield canvas render

Create src/components/SkyCanvas.tsx to draw stars for filtered entries on an HTML canvas.

by system

Star positioning algorithm

Add src/lib/layout.ts to deterministically place stars per entry (seeded by id/date) and avoid overlaps.

by system

Hover hit testing

Add hover interaction in SkyCanvas to detect nearest star and emit the active entry.

by system

Constellation connections

Add src/lib/constellations.ts to group by tag and draw connecting lines between same-tag stars.

by system

Insights page panel

Create src/pages/InsightsPage.tsx to show most common tags, mood trend summary, and streaks.

by system

In Progress0
In Review0
Done0