Constellation Journal

A mood-and-moment journal where each entry becomes a “star” placed on a nightly sky canvas; related entries can be connected into constellations by dragging lines between stars. The app includes quick-entry prompts, searchable/taggable entries, and a timeline filter that redraws the sky by week/month, with all data stored in localStorage. Users can export/import their sky as JSON and generate a shareable snapshot image of the current constellation view.

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 @tailwindcss/vite && npm i lucide-react && npx shadcn@latest init && npx shadcn@latest add button card dialog dropdown-menu input textarea badge tabs slider popover calendar toast

by system

Add Tailwind wiring

Configure tailwind.config + src/index.css with @tailwind directives and set @tailwindcss/vite in vite config.

by system

Define data models

Create src/types/journal.ts with Entry, Star, Connection, Constellation, and AppState types.

by system

LocalStorage state layer

Implement src/lib/storage.ts to load/save AppState with schema versioning and safe fallbacks.

by system

State context provider

Create src/state/AppStateProvider.tsx exposing state plus CRUD actions for entries/stars/connections.

by system

Seed demo data

Add src/lib/seed.ts returning a small initial AppState used when storage is empty.

by system

App shell layout

Build src/components/AppShell.tsx with header + left sidebar + main canvas region.

by system

Top header bar

Create src/components/HeaderBar.tsx with app title and actions (export/import/snapshot).

by system

Sidebar navigation

Create src/components/Sidebar.tsx with tabs for Entry, Search, Timeline, and Constellations.

by system

Sky canvas wrapper

Implement src/components/SkyCanvas/SkyCanvas.tsx container handling sizing and pointer events.

by system

Star renderer component

Create src/components/SkyCanvas/StarNode.tsx to draw a star at x/y with mood color and hover state.

by system

Connection renderer

Create src/components/SkyCanvas/ConnectionsLayer.tsx rendering SVG lines between stars.

by system

Drag-to-connect logic

Add src/components/SkyCanvas/useConnectDrag.ts handling pointer drag from star to star to create a connection.

by system

Star tooltip popover

Create src/components/SkyCanvas/StarPopover.tsx showing entry summary and quick actions on click.

by system

Entry form dialog

Implement src/components/Entry/EntryDialog.tsx to create/edit an entry with mood, text, tags, date.

by system

Quick prompts panel

Create src/components/Entry/QuickPrompts.tsx with predefined prompt buttons that prefill EntryDialog.

by system

Add entry to sky

Implement src/lib/starPlacement.ts to deterministically place new stars (avoid overlaps) based on date/id.

by system

Entries list panel

Create src/components/Entry/EntriesList.tsx listing entries with edit/delete and jump-to-star.

by system

Tag input component

Create src/components/Entry/TagInput.tsx for adding/removing tags with keyboard support.

by system

Search and filter panel

Implement src/components/Search/SearchPanel.tsx with text query and tag filter chips.

by system

Filtered sky selector

Add src/state/selectors.ts to derive visible stars/connections from search + timeline filters.

by system

Timeline filter UI

Create src/components/Timeline/TimelineFilter.tsx with week/month toggle and date range controls.

by system

Date utilities

Implement src/lib/dateRange.ts to compute week/month ranges and inclusion checks for entries.

by system

Constellation grouping

Create src/lib/constellations.ts to compute connected components and name constellations from connections.

by system

Constellations panel

Implement src/components/Constellations/ConstellationsPanel.tsx listing constellations and highlighting on select.

by system

Export JSON action

Create src/lib/exportImport.ts with exportStateToJson() and download helper.

by system

Import JSON dialog

Implement src/components/ImportDialog.tsx to paste/upload JSON and merge/replace state safely.

by system

Snapshot image export

Create src/lib/snapshot.ts to render the current sky view to a downloadable PNG via canvas.

by system

Toast notifications

Add src/components/ToasterHost.tsx and wire success/error toasts for save/import/export/snapshot.

by system

Keyboard shortcuts

Implement src/lib/shortcuts.ts and wire global handlers for new entry, search focus, and export.

by system

In Progress0
In Review0
Done0