Orbit Mood Map

A playful mood journal that visualizes each day as a “planet” you place into one of several emotional orbits (e.g., Calm, Focused, Anxious, Energized), with quick tags and a one-line note. The main screen is an interactive solar-system-style map where you can drag planets between orbits, click a planet to edit details, and filter by tag or date range. Everything runs locally (localStorage), with a simple stats view showing streaks, most-used tags, and a monthly mini-calendar synced to the orbit visualization.

To Do30
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 && npx shadcn@latest init -d && npx shadcn@latest add button dialog dropdown-menu input label textarea select separator badge card tabs calendar popover slider tooltip

by system

Add Tailwind config

Configure tailwind.config.ts and src/index.css with shadcn/ui presets and Tailwind directives.

by system

Create app layout

Build src/App.tsx with header, main content area, and nav between Map and Stats views.

by system

Define data models

Create src/lib/types.ts defining MoodEntry, OrbitType, Tag, and app state types.

by system

Seed orbit constants

Create src/lib/orbits.ts exporting orbit list, labels, and colors.

by system

LocalStorage persistence

Create src/lib/storage.ts with load/save helpers and schema versioning.

by system

Entries state hook

Create src/hooks/useEntries.ts to manage CRUD with localStorage syncing.

by system

Filter state hook

Create src/hooks/useFilters.ts to manage selected tags and date range.

by system

Date utilities

Create src/lib/dates.ts with helpers for today, ranges, and month boundaries.

by system

Tag utilities

Create src/lib/tags.ts for normalizing, sorting, and counting tags.

by system

Map page shell

Create src/pages/MapPage.tsx with toolbar area and orbit map container.

by system

Stats page shell

Create src/pages/StatsPage.tsx with sections for streaks, tags, and calendar.

by system

Orbit ring component

Create src/components/orbits/OrbitRing.tsx to render one labeled orbit band.

by system

Solar map component

Create src/components/orbits/OrbitMap.tsx composing all orbit rings and entry planets.

by system

Planet component

Create src/components/planets/Planet.tsx to render a draggable/clickable planet dot with tooltip.

by system

Planet positioning logic

Create src/lib/positioning.ts to compute stable planet positions within each orbit.

by system

Drag-and-drop logic

Implement pointer-based drag handling in OrbitMap to move planets between orbits.

by system

Orbit drop detection

Add hit-testing in OrbitMap to determine which orbit ring a dragged planet is over.

by system

Entry edit dialog

Create src/components/entries/EntryDialog.tsx (shadcn Dialog) for editing orbit, tags, and note.

by system

Entry dialog wiring

Wire planet click to open EntryDialog and persist edits via useEntries.

by system

New entry button

Create src/components/entries/NewEntryButton.tsx to open EntryDialog prefilled for today.

by system

Tags input control

Create src/components/tags/TagsInput.tsx for adding/removing quick tags with suggestions.

by system

Map filter bar

Create src/components/filters/FilterBar.tsx with tag multi-select and date-range picker.

by system

Apply filters to map

Filter visible planets in MapPage based on useFilters selections.

by system

Clear filters action

Add a clear/reset control to FilterBar that resets tag and date filters.

by system

Streak stats helper

Create src/lib/stats.ts computing current/longest streak and totals from entries.

by system

Top tags widget

Create src/components/stats/TopTags.tsx showing most-used tags with counts.

by system

Streaks widget

Create src/components/stats/StreaksCard.tsx showing current and longest streak.

by system

Monthly calendar widget

Create src/components/stats/MonthlyCalendar.tsx using shadcn Calendar to highlight days by orbit.

by system

Calendar-map sync

Wire MonthlyCalendar selection to MapPage filters so picking dates focuses the orbit visualization.

by system

In Progress0
In Review0
Done0