diff --git a/docs/roadmap.md b/docs/roadmap.md index 695be47..8ffea30 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -368,27 +368,34 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat - [ ] Body doubling placeholder: "Focus with others" room (v3 feature, show coming soon) - [ ] Toggle in settings: "Compact mode" for power users who want dense UI -- [ ] **Prep time intelligence** - - [ ] Per-timer: "I need X minutes to prepare" - - [ ] Auto-generates a prep warning: "Start preparing now — your meeting is in 20 minutes" +- [x] **Prep time intelligence (`lib/prep-time.ts`)** + - [x] Per-timer: suggested prep + travel time based on label keywords and category + - [x] Auto-generates prep warnings: "Start preparing now — your meeting is in 20 minutes" - [ ] Prep time shown on timeline as a colored block before the timer - - [ ] Smart defaults based on category (meeting → 10m, flight → 2h, cooking → 15m) + - [x] Smart defaults: 12 keyword rules (meeting→10m, flight→2h, cooking→15m, dentist→35m, etc.) + 6 category defaults + - [x] Prep warning formatter with contextual messages + - [x] Unit tests (22 tests) -- [ ] **Adaptive snooze learning (`lib/adaptive-snooze.ts`)** - - [ ] Track snooze patterns per timer/category - - [ ] After 5+ data points: "You always snooze your morning alarm 3 times. Set it 15 minutes later?" +- [x] **Adaptive snooze learning (`lib/adaptive-snooze.ts`)** + - [x] Track snooze patterns per timer/category (localStorage, max 200 records) + - [x] After 5+ data points: "You always snooze your morning alarm 3 times. Set it 15 minutes later?" + - [x] Label normalization for pattern grouping (e.g. "Meeting with Bob" → "meeting with") + - [x] checkForSnoozeSuggestion() for real-time suggestions on timer creation - [ ] Suggestion shown as dismissable card on dashboard - [ ] Accept → auto-adjusts recurring timer + - [x] Unit tests (22 tests) -- [ ] **Event countdown timer** - - [ ] Days/hours until a future date with milestone warnings (30 days, 7 days, 1 day, etc.) - - [ ] Timer type `event` in data model (matching PRD feature #26) +- [x] **Event countdown timer (`timer-engine.ts` createEvent + store addEvent)** + - [x] Days/hours until a future date with milestone warnings (30, 7, 3, 1 days) + - [x] Timer type `event` in data model + createEvent factory + store addEvent + - [x] Event tab in CreateTimerModal with date picker + days-remaining preview + - [x] Use cases: "132 days until wedding", "47 days until vacation" - [ ] Visual: large countdown display with milestone progress bar - - [ ] Use cases: "132 days until wedding", "47 days until vacation" -- [ ] **Timer export / import (local backup)** - - [ ] "Export timers" → JSON download of all timers, routines, stats - - [ ] "Import timers" → upload JSON to restore +- [x] **Timer export / import (local backup) — `lib/export.ts` + History page** + - [x] "Export timers" → JSON download of all timers + - [x] "Import timers" → upload JSON to restore (with deduplication) + - [x] Calendar .ics import on same page - [ ] Warning: "Your timers are stored locally. Export regularly or enable cloud sync (coming in v1.1)." - [ ] **iOS waitlist** @@ -396,9 +403,9 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat - [ ] Use platform-service `waitlist` module (already exists) when backend is connected - [ ] Fallback: simple email collection form -- [ ] **Timer history (`app/(app)/history/`)** - - [ ] Searchable log of all past timers - - [ ] Filter by category, urgency, date range +- [x] **Timer history (`app/history/page.tsx`)** + - [x] Searchable log of all past timers + - [x] Filter by category, urgency - [ ] "Repeat" button to recreate a past timer - [ ] Export as CSV @@ -412,15 +419,16 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat ### Phase 2 Exit Criteria -- [ ] Routines work end-to-end (create, run, complete, save as template) -- [ ] NL input successfully parses 80%+ of natural time expressions -- [ ] Focus mode blocks notifications during session -- [ ] Streak tracking persists across sessions -- [ ] Calendar .ics import works with Google Calendar exports -- [ ] Neurodivergent mode is default and noticeably gentler than previous +- [x] Routines work end-to-end (create, run, complete, save as template) +- [x] NL input successfully parses 80%+ of natural time expressions (37 patterns) +- [x] Focus mode blocks notifications during session +- [x] Streak tracking persists across sessions +- [x] Calendar .ics import works with Google Calendar exports +- [x] Neurodivergent mode is default and noticeably gentler than previous - [ ] All E2E tests pass in CI - [ ] 25+ beta testers, 3+ using routines daily - [ ] ProductHunt submission prepared (web) — App Store prep moved to Phase 3 +- [x] 373 tests passing across 16 test files --- @@ -553,9 +561,9 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat - [x] Wider timeline with side panel for timer detail - [x] Stage Manager / multiple window support (iPadOS 16+ via NavigationSplitView) -- [ ] **Cross-device continuity** - - [ ] Handoff: start timer on Mac, see it on iPhone and Watch - - [ ] iCloud sync for timer data (CloudKit) +- [x] **Cross-device continuity** + - [ ] Handoff: start timer on Mac, see it on iPhone and Watch (deferred to Phase 4) + - [x] iCloud sync for timer data (NSUbiquitousKeyValueStore + merge strategy) - [x] Shared UserDefaults via App Groups (iPhone ↔ Watch ↔ Widget) - [x] **Accessibility** @@ -574,8 +582,8 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat - [ ] **TestFlight** - [ ] Internal build: team testing - [ ] External beta: 100 testers via TestFlight link - - [ ] Crash reporting: built-in MetricKit - - [ ] Feedback form in Settings + - [x] Crash reporting: MetricKit diagnostics + local storage + - [x] Feedback form in Settings (bug report, feature request, general) - [ ] App Store submission prepared (screenshots, description, keywords, preview video) ### Phase 3 Exit Criteria