Lantern Mood Map

A playful mood journaling SPA where each day you drop a “lantern” on a tiny map (grid or free-drag canvas), pick a mood color, add 1–2 tags, and optionally a short note. The app renders a monthly view as a glowing constellation of lanterns with filters (by mood, tag, date range), simple insights (streaks, most-used tags, mood distribution), and all data stored in localStorage. Components are clearly separable: entry modal, map/canvas board, calendar timeline, filter/insights sidebar, and export/import (JSON) for backups.

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 input textarea select badge calendar separator scroll-area tooltip dropdown-menu sheet tabs

by system

Add Tailwind config

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

by system

Create app layout

Implement App.tsx shell with header, main split-pane, and responsive sidebar using shadcn/ui components.

by system

Define domain types

Create src/lib/types.ts defining LanternEntry, Mood, Tag, Filters, and ImportExportPayload types.

by system

LocalStorage utilities

Create src/lib/storage.ts with load/save helpers, versioning, and safe JSON parsing.

by system

Entries state store

Create src/lib/useEntries.ts hook for CRUD entries with localStorage persistence.

by system

Filters state store

Create src/lib/useFilters.ts hook to manage mood/tag/date-range filters in URL-free local state.

by system

Selector utilities

Create src/lib/selectors.ts for filtering entries, grouping by month/day, and computing derived views.

by system

Insights utilities

Create src/lib/insights.ts to compute streaks, mood distribution, and top tags from entries.

by system

Mood palette constants

Create src/lib/moods.ts exporting mood options, labels, and Tailwind color tokens.

by system

Header component

Create src/components/Header.tsx with app title and actions (new entry, import/export).

by system

New entry button

Create src/components/NewEntryButton.tsx that opens the entry modal via props.

by system

Lantern marker component

Create src/components/LanternMarker.tsx rendering a glowing lantern dot with mood color and tooltip.

by system

Map board canvas

Create src/components/MapBoard.tsx showing a bounded grid/canvas area and rendering lantern markers.

by system

Drag placement logic

Add pointer drag/drop handling in MapBoard.tsx to create/move a lantern position for a selected date.

by system

Board zoom/pan

Add lightweight zoom and pan state to MapBoard.tsx with mousewheel and drag background.

by system

Day selection control

Create src/components/DayPicker.tsx using shadcn/ui Calendar to pick the active journaling day.

by system

Monthly timeline view

Create src/components/MonthlyTimeline.tsx to display the current month’s entries as a list/strip by day.

by system

Entry modal shell

Create src/components/EntryModal.tsx using Dialog that supports create/edit modes via props.

by system

Mood picker field

Create src/components/fields/MoodPicker.tsx for selecting mood color/label.

by system

Tags picker field

Create src/components/fields/TagsPicker.tsx allowing 1–2 tags with suggestions and validation.

by system

Note field

Create src/components/fields/NoteField.tsx with textarea and character limit hint.

by system

Entry modal submit

Wire EntryModal.tsx to validate inputs and call onSave/onDelete callbacks.

by system

Sidebar filters UI

Create src/components/FilterSidebar.tsx with mood, tag, and date-range filter controls.

by system

Active filters chips

Create src/components/ActiveFilters.tsx to show removable filter badges.

by system

Insights panel

Create src/components/InsightsPanel.tsx showing streak, top tags, and mood distribution summary.

by system

Export dialog

Create src/components/ExportDialog.tsx to download entries+settings as a JSON file.

by system

Import dialog

Create src/components/ImportDialog.tsx to upload JSON, validate schema, and merge/replace entries.

by system

Toast notifications

Add src/components/Toaster.tsx and use it for save/import/export feedback messages.

by system

App integration wiring

Connect Header, MapBoard, DayPicker, MonthlyTimeline, FilterSidebar, and EntryModal in App.tsx using hooks/selectors.

by system

In Progress0
In Review0
Done0