Time Capsule Postcards

A playful micro-journal where users write “postcards to their future self,” choose a theme (gratitude, goals, memories), add a mood sticker and color palette, and schedule an unlock date. The app shows a timeline of locked/unlocked postcards, with gentle daily prompts and a “random unlocked postcard” shuffle view. Everything runs client-side with localStorage, using clear components for editor, scheduler, timeline, prompts, and postcard viewer.

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 class-variance-authority clsx tailwind-merge lucide-react && npx shadcn@latest init -d

by system

Add Tailwind base styles

Create/adjust src/index.css with Tailwind directives and a simple global background/text style.

by system

Define postcard types

Add src/lib/types.ts defining Postcard, Theme, MoodSticker, Palette, and UnlockStatus types.

by system

Add localStorage helpers

Create src/lib/storage.ts for load/save postcards with basic validation and version keying.

by system

Add date utilities

Create src/lib/dates.ts with helpers for today, formatting, and locked/unlocked computation.

by system

Seed sample postcards

Create src/lib/seed.ts to generate a few sample postcards for first-run demo.

by system

Create postcards hook

Add src/hooks/usePostcards.ts to manage CRUD state synced to localStorage.

by system

Create prompts hook

Add src/hooks/useDailyPrompt.ts to pick and persist a daily prompt in localStorage.

by system

Add prompt copy list

Create src/lib/prompts.ts exporting an array of gentle daily prompt strings.

by system

Set up app routing

Update src/main.tsx to add react-router-dom BrowserRouter and render the App.

by system

Create App layout shell

Implement src/App.tsx with a header, main container, and outlet for pages.

by system

Add navigation bar

Create src/components/NavBar.tsx with links to Timeline, New, Prompts, and Shuffle.

by system

Create empty state component

Add src/components/EmptyState.tsx for consistent empty/loading messaging.

by system

Create theme selector

Add src/components/ThemeSelect.tsx to choose gratitude/goals/memories.

by system

Create mood sticker picker

Add src/components/MoodStickerPicker.tsx with a small set of selectable sticker icons.

by system

Create palette picker

Add src/components/PalettePicker.tsx to choose from predefined color palettes.

by system

Create unlock date picker

Add src/components/UnlockDatePicker.tsx for selecting an unlock date (native date input).

by system

Create postcard editor

Add src/components/PostcardEditor.tsx composing title/body inputs plus theme, sticker, palette, and unlock date.

by system

Create save postcard action

Add src/components/PostcardSaveBar.tsx with Save/Cancel buttons and minimal validation messaging.

by system

Build New Postcard page

Create src/pages/NewPostcardPage.tsx to create a postcard and add it via usePostcards.

by system

Build Timeline page

Create src/pages/TimelinePage.tsx to list postcards grouped by Locked/Unlocked with counts.

by system

Create timeline item card

Add src/components/PostcardListItem.tsx showing theme, sticker, unlock date, and locked/unlocked badge.

by system

Add timeline filtering

Create src/components/TimelineFilters.tsx for theme filter and status toggle.

by system

Build Postcard viewer

Create src/components/PostcardViewer.tsx to render postcard content with palette styling and sticker.

by system

Add locked viewer state

Create src/components/LockedOverlay.tsx to hide content until unlock date with a friendly message.

by system

Build Postcard detail page

Create src/pages/PostcardPage.tsx to view a single postcard by id with locked/unlocked behavior.

by system

Build Prompts page

Create src/pages/PromptsPage.tsx showing today’s prompt and a quick link to create a postcard.

by system

Build Shuffle page

Create src/pages/ShufflePage.tsx to pick a random unlocked postcard and show it in the viewer.

by system

Add delete postcard button

Create src/components/DeletePostcardButton.tsx to remove a postcard with a confirmation dialog.

by system

Add import/export JSON

Create src/components/DataPortability.tsx to export postcards to a file and import from JSON into localStorage.

by system

In Progress0
In Review0
Done0