Constellation Journal

A playful mood-and-moment journal where each entry becomes a “star” on a zoomable night-sky canvas, positioned by time of day and tagged emotion. Users can add quick notes, pick a mood color, attach a few tags, and watch related entries auto-connect into constellations (by shared tags or mood). Includes filters (date range, mood, tags), a daily prompt generator, and localStorage persistence so the sky rebuilds exactly 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 @tailwindcss/vite && npm i shadcn@latest && npx shadcn@latest init

by system

Add Tailwind config

Configure Tailwind + @tailwindcss/vite and add base Tailwind directives in src/index.css.

by system

Set up shadcn UI

Install a minimal set of shadcn/ui components (Button, Input, Textarea, Select, Popover, Calendar, Dialog, Badge, Slider) via CLI.

by system

Define journal types

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

by system

Add mood palette

Create src/data/moods.ts exporting mood options with ids, labels, and Tailwind color tokens.

by system

Add prompt list

Create src/data/prompts.ts exporting a list of daily prompt strings.

by system

LocalStorage helpers

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

by system

Entry serialization utils

Create src/lib/entries.ts to normalize dates, generate ids, and map entries to/from JSON.

by system

Filter utilities

Create src/lib/filters.ts to apply date range, mood, and tag filters to entries.

by system

Constellation builder

Create src/lib/constellations.ts to compute edges between entries based on shared tags and/or mood.

by system

Sky layout mapper

Create src/lib/skyLayout.ts to map an entry’s time-of-day and mood to x/y coordinates.

by system

App shell layout

Create src/App.tsx with a two-pane layout: left controls panel and right sky canvas area.

by system

Journal state hook

Create src/hooks/useJournalStore.ts managing entries, filters, and persistence with localStorage.

by system

Daily prompt hook

Create src/hooks/useDailyPrompt.ts to select a deterministic prompt per day and allow “reroll”.

by system

Sky canvas component

Create src/components/SkyCanvas.tsx rendering the zoomable/pannable sky viewport container.

by system

Pan/zoom interactions

Add pointer + wheel pan/zoom logic to SkyCanvas.tsx with bounds and reset support.

by system

Star field rendering

Create src/components/StarField.tsx to render stars for filtered entries as positioned elements.

by system

Star component

Create src/components/Star.tsx showing a colored star dot with hover/focus styles.

by system

Star tooltip card

Create src/components/StarTooltip.tsx displaying entry time, mood, tags, and note preview.

by system

Constellation lines

Create src/components/ConstellationLines.tsx to render edges between related stars using SVG overlay.

by system

Selected entry state

Add selection handling (click star to select/deselect) to the journal store hook.

by system

Entry details panel

Create src/components/EntryDetailsPanel.tsx to show the selected entry and quick actions.

by system

New entry dialog

Create src/components/NewEntryDialog.tsx with shadcn Dialog for creating a journal entry.

by system

Mood picker input

Create src/components/MoodPicker.tsx for selecting mood and color from the palette.

by system

Tag input control

Create src/components/TagInput.tsx for adding/removing tags as pills with autocomplete from existing tags.

by system

Time-of-day input

Create src/components/TimePicker.tsx for selecting entry timestamp (default now).

by system

Filters panel UI

Create src/components/FiltersPanel.tsx with controls for date range, mood, and tags.

by system

Filter chips bar

Create src/components/ActiveFiltersBar.tsx showing active filters as removable chips.

by system

Persistence wiring

Wire useJournalStore.ts to save entries/filters on change and rebuild state from localStorage on load.

by system

Empty and error states

Add basic empty-sky and storage-parse error UI states in App.tsx.

by system

In Progress0
In Review0
Done0