Constellation Journal

A mood-and-moment journal where each entry becomes a “star” on a nightly sky canvas, positioned by time of day and colored by mood. Users can add/edit entries with tags, then filter the sky by tag, mood, or date range and click stars to read the full note in a shadcn/ui drawer. Everything is client-side with localStorage, plus an optional “streak telescope” view showing streaks and simple stats (most common mood, busiest days) to keep the scope small and modular.

To Do30
Scaffold app base

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 styles

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

by system

Create shadcn utils

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

by system

Define entry types

Create src/types/journal.ts defining Mood, Tag, JournalEntry, and filter types.

by system

Seed mood palette

Create src/lib/moods.ts mapping moods to labels and star colors.

by system

LocalStorage helpers

Create src/lib/storage.ts to load/save entries and app settings with versioning.

by system

Entry CRUD hook

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

by system

Filter state hook

Create src/hooks/useFilters.ts to manage mood/tag/date filters and derived predicates.

by system

App shell layout

Create src/components/AppShell.tsx with header, main container, and responsive layout.

by system

Top nav actions

Create src/components/TopBar.tsx with buttons for new entry, filters, and telescope view.

by system

Add shadcn primitives

Install and add shadcn/ui components used across the app (button, input, textarea, badge, select, popover, calendar, drawer, dialog).

by system

Entry form component

Create src/components/EntryForm.tsx with fields for mood, title, note, datetime, and tags.

by system

Tag input control

Create src/components/TagInput.tsx to add/remove tags with a compact chip UI.

by system

New entry dialog

Create src/components/NewEntryDialog.tsx wrapping EntryForm in a shadcn Dialog.

by system

Edit entry dialog

Create src/components/EditEntryDialog.tsx to edit an existing entry and save changes.

by system

Confirm delete dialog

Create src/components/DeleteEntryDialog.tsx to confirm and perform entry deletion.

by system

Sky canvas renderer

Create src/components/SkyCanvas.tsx that draws stars on a canvas based on entry time and mood color.

by system

Star positioning math

Create src/lib/skyMath.ts to map datetime to x/y coordinates and handle responsive scaling.

by system

Star hit testing

Add src/lib/hitTest.ts to find the nearest star on click/tap using canvas coordinates.

by system

Entry drawer view

Create src/components/EntryDrawer.tsx showing full entry details in a shadcn Drawer.

by system

Sky page container

Create src/pages/SkyPage.tsx wiring entries, filters, SkyCanvas, and EntryDrawer selection state.

by system

Filter panel UI

Create src/components/FilterPanel.tsx with mood multi-select, tag picker, and date range controls.

by system

Tag filter control

Create src/components/TagFilter.tsx to choose included tags from existing entry tags.

by system

Date range picker

Create src/components/DateRangePicker.tsx using shadcn Calendar/Popover to set from/to dates.

by system

Active filter chips

Create src/components/ActiveFilters.tsx showing removable chips for current filters.

by system

Derived tags utility

Create src/lib/tags.ts to extract, normalize, and sort unique tags from entries.

by system

Telescope stats utils

Create src/lib/stats.ts to compute streaks, busiest days, and most common mood.

by system

Telescope view page

Create src/pages/TelescopePage.tsx displaying streak and stats cards from computed metrics.

by system

Stats cards components

Create src/components/StatsCards.tsx with small shadcn Card-based widgets for metrics.

by system

Wire app routing

Update src/App.tsx to switch between SkyPage and TelescopePage with simple client-side state navigation.

by system

In Progress0
In Review0
Done0