docs(ios): update roadmap Phase 3 Week 6 with iOS app foundation progress
- Xcode project setup: ✅ (XcodeGen, iOS 17+, zero third-party deps) - Timer engine Swift port: ✅ (TimerEngine, Cascade, Urgency, Format, TimeBlindness) - Data models: ✅ partial (CMTimer Codable struct, UserDefaults persistence) - iOS screens: ✅ (Timeline, CreateTimer, Pomodoro, History, Settings, AlarmOverlay) - Notification scheduling: ✅ (UNUserNotificationCenter, cascade warnings, actions) - Haptic engine: ✅ (urgency-mapped feedback patterns) - XCTest: 58 tests passing (TimerEngine, Cascade, Format) - Remaining: Recurrence, NLParser, ContextMessages (Phase 2 web deps), SwiftData migration
This commit is contained in:
parent
445e25bee1
commit
885a2685ad
@ -412,54 +412,60 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat
|
||||
|
||||
### Week 6: iOS App Foundation
|
||||
|
||||
- [ ] **Xcode project setup**
|
||||
- [ ] Multi-target Xcode project: ChronoMind (iOS), ChronoMindWatch (watchOS), ChronoMindMac (macOS)
|
||||
- [ ] Shared Swift package: `Shared/` folder included in all targets
|
||||
- [ ] SwiftData for persistence (or Core Data if SwiftData has issues)
|
||||
- [ ] Dependency: none beyond Apple frameworks (zero third-party for v1)
|
||||
- [ ] Minimum deployment: iOS 17, watchOS 10, macOS 14
|
||||
- [x] **Xcode project setup**
|
||||
- [x] Multi-target Xcode project: ChronoMind (iOS), ChronoMindWatch (watchOS), ChronoMindMac (macOS)
|
||||
- [x] Shared Swift package: `Shared/` folder included in all targets
|
||||
- [ ] SwiftData for persistence (or Core Data if SwiftData has issues) — using UserDefaults for v1, SwiftData migration planned
|
||||
- [x] Dependency: none beyond Apple frameworks (zero third-party for v1)
|
||||
- [x] Minimum deployment: iOS 17, watchOS 10, macOS 14
|
||||
|
||||
- [ ] **Timer engine Swift port (`Shared/TimerEngine/`)**
|
||||
- [ ] `Cascade.swift` — port from `cascade.ts`
|
||||
- [ ] `Urgency.swift` — port from `urgency.ts`
|
||||
- [ ] `Recurrence.swift` — port from `recurrence.ts`
|
||||
- [ ] `Scheduler.swift` — port from `timer-engine.ts`
|
||||
- [ ] `NLParser.swift` — port from `nl-parser.ts` (use NSDataDetector + custom patterns)
|
||||
- [ ] `ContextMessages.swift` — port from `context-messages.ts`
|
||||
- [ ] XCTest unit tests mirroring all Vitest tests from web
|
||||
- [ ] **Estimated effort: 2-3 days** (~500-800 lines, logic is pure computation)
|
||||
- [x] **Timer engine Swift port (`Shared/TimerEngine/`)** (partial)
|
||||
- [x] `Cascade.swift` — port from `cascade.ts`
|
||||
- [x] `Urgency.swift` — port from `urgency.ts`
|
||||
- [ ] `Recurrence.swift` — port from `recurrence.ts` (Phase 2 web dependency)
|
||||
- [x] `TimerEngine.swift` — port from `timer-engine.ts` (state machine, factory functions, transitions)
|
||||
- [ ] `NLParser.swift` — port from `nl-parser.ts` (Phase 2 web dependency)
|
||||
- [ ] `ContextMessages.swift` — port from `context-messages.ts` (Phase 2 web dependency)
|
||||
- [x] `Format.swift` — port from `format.ts`
|
||||
- [x] `TimeBlindness.swift` — port from `time-blindness.ts`
|
||||
- [x] XCTest unit tests: 58 tests passing (TimerEngineTests, CascadeTests, FormatTests)
|
||||
- [x] **Completed:** ~1500 lines of Swift, all core timer logic ported
|
||||
|
||||
- [ ] **Data models (`Shared/Models/`)**
|
||||
- [ ] `CMTimer` — SwiftData model matching web Timer interface
|
||||
- [ ] `CMRoutine` + `CMRoutineStep`
|
||||
- [x] **Data models (`Shared/`)** (partial)
|
||||
- [x] `CMTimer` — Codable struct matching web Timer interface (in TimerEngine.swift)
|
||||
- [ ] `CMRoutine` + `CMRoutineStep` (Phase 2 web dependency)
|
||||
- [ ] `CMCategory`
|
||||
- [ ] `CMTimerHistory`
|
||||
- [ ] `CMUserPreferences`
|
||||
- [ ] All models tagged with `@Model` for SwiftData
|
||||
- [ ] Migrate to `@Model` for SwiftData (currently UserDefaults + JSON)
|
||||
|
||||
- [ ] **iOS screens**
|
||||
- [ ] `TimelineView` — vertical timeline (main screen, tab 1)
|
||||
- [ ] `CreateTimerView` — alarm, countdown, pomodoro creation
|
||||
- [ ] `QuickTimerSheet` — bottom sheet with one-tap presets
|
||||
- [ ] `RoutineListView` + `RoutineRunnerView`
|
||||
- [ ] `FocusView` — focus/Pomodoro session
|
||||
- [ ] `HistoryView` — past timers, stats, streaks
|
||||
- [ ] `SettingsView` — preferences, categories, sounds, neurodivergent mode
|
||||
- [ ] Tab navigation: Timeline | Focus | History | Settings
|
||||
- [x] **iOS screens** (partial)
|
||||
- [x] `TimelineView` — vertical timeline with clock header, next-up card, quick timer bar, active/recent lists
|
||||
- [x] `CreateTimerView` — alarm, countdown, pomodoro creation with urgency/cascade selectors
|
||||
- [x] `QuickTimerSheet` — bottom sheet with 12 one-tap presets + time references
|
||||
- [ ] `RoutineListView` + `RoutineRunnerView` (Phase 2 web dependency)
|
||||
- [x] `PomodoroView` — focus session with countdown ring, round tracking, auto-transitions
|
||||
- [x] `HistoryView` — past timers, stats (completion rate, type breakdown, snooze count)
|
||||
- [x] `SettingsView` — notifications, haptics, sound, default urgency/cascade, data management
|
||||
- [x] Tab navigation: Timeline | Focus | History | Settings
|
||||
- [x] `AlarmOverlay` — full-screen critical alarm with confirm-to-dismiss
|
||||
- [x] `CountdownRing` — visual countdown with color transitions (green→yellow→orange→red)
|
||||
- [x] `TimerCard` — timer display with state indicators, cascade progress, actions
|
||||
- [x] `UrgencyBadge`, `CascadeProgressBar`, `FiringCard` components
|
||||
|
||||
- [ ] **Notification scheduling (`Shared/Notifications/`)**
|
||||
- [ ] `UNUserNotificationCenter` for all pre-warnings
|
||||
- [ ] Schedule cascade notifications when timer is created
|
||||
- [ ] Critical alerts: request `.criticalAlert` authorization for CRITICAL urgency
|
||||
- [ ] Time Sensitive notifications for Important urgency
|
||||
- [ ] Custom notification sounds per urgency
|
||||
- [ ] Notification actions: Snooze 5m, Snooze 15m, Dismiss
|
||||
- [ ] Reschedule all notifications when timer is modified
|
||||
- [x] **Notification scheduling (`Shared/Notifications/`)**
|
||||
- [x] `UNUserNotificationCenter` for all pre-warnings
|
||||
- [x] Schedule cascade notifications when timer is created
|
||||
- [x] Critical alerts: request `.criticalAlert` authorization for CRITICAL urgency
|
||||
- [x] Time Sensitive notifications for Important urgency (interruptionLevel)
|
||||
- [ ] Custom notification sounds per urgency (using system defaults for v1)
|
||||
- [x] Notification actions: Snooze 5m, Snooze 15m, Dismiss
|
||||
- [x] Reschedule all notifications when timer is modified
|
||||
|
||||
- [ ] **Haptic engine**
|
||||
- [ ] `UIImpactFeedbackGenerator` for pre-warning taps
|
||||
- [ ] Escalating haptic pattern matching urgency (gentle → standard → heavy)
|
||||
- [ ] Continuous haptic for Critical alarm (repeating pattern until dismissed)
|
||||
- [x] **Haptic engine**
|
||||
- [x] `UIImpactFeedbackGenerator` for pre-warning taps
|
||||
- [x] Escalating haptic pattern matching urgency (gentle → standard → heavy)
|
||||
- [ ] Continuous haptic for Critical alarm (repeating pattern until dismissed) — needs background audio session
|
||||
|
||||
### Week 7: Apple Watch + Widgets
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user