# ChronoMind — Product Roadmap > **Product:** ChronoMind — AI-Powered Time Awareness Layer > **Product ID:** `chronomind` (ByteLyst ecosystem) > **Strategy:** Option D — Web PWA (MVP) → SwiftUI (iOS/Watch/Mac) → Android (v2) > **Version:** 2.0 (revised per [roadmap-v2-review.md](roadmap-v2-review.md) audit) > **Created:** February 2026 > **License:** Closed-source app; timer engine library open-source (TBD license) > **See also:** [PRD.md](PRD.md) | [INDUSTRY_RESEARCH.md](INDUSTRY_RESEARCH.md) | [roadmap-v2-review.md](roadmap-v2-review.md) > > **Backend:** Platform-service in `learning_ai_common_plat` (Fastify, port 4003) — reuses 17+ existing modules (auth, subscriptions, stripe, invitations, referrals, settings, flags, telemetry, waitlist, ratelimit, usage, plans, licenses, etc.). Only 4 new modules needed: `timers`, `routines`, `shared-timers`, `households`. --- ## Executive Summary ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-platform product: | Phase | Timeline | Platform | Goal | |-------|----------|----------|------| | **Phase 1** | Week 1-2 | Web PWA | Ship MVP — validate core concept | | **Phase 2** | Week 3-5 | Web PWA | Intelligence layer — make it smart | | **Phase 3** | Week 6-9 | iOS + Apple Watch + macOS | Go native — own the wrist | | **Phase 4** | Week 10-14 | All Apple + Web | Context, sync, growth — make it sticky | | **Phase 5** | Week 15-22 | + Android + Wear OS | Full platform — scale to everyone | **North star metric:** Daily Active Users who set a timer with pre-warnings enabled. --- ## Architecture Overview ``` ┌──────────────────────────────────────────────────────────────────────────┐ │ ChronoMind Architecture │ ├──────────────────────────────────────────────────────────────────────────┤ │ │ │ Track 1: Web (Next.js 16) Track 2: Apple (SwiftUI) │ │ ───────────────────────── ──────────────────────── │ │ src/lib/timer-engine.ts ──port──→ Shared/TimerEngine/*.swift │ │ src/lib/cascade.ts ──port──→ Shared/TimerEngine/Cascade.swift│ │ src/lib/recurrence.ts ──port──→ Shared/TimerEngine/Recurrence. │ │ src/lib/store.ts (Zustand+IDB) Shared/Store/ (SwiftData) │ │ src/components/ (React) ChronoMind/ (iOS SwiftUI) │ │ ChronoMindWatch/ (watchOS) │ │ ChronoMindMac/ (macOS menu bar) │ │ │ │ Track 3: Android (v2) │ │ ────────────────────── │ │ TimerEngine/*.kt (Kotlin port) │ │ UI: Jetpack Compose │ │ Watch: Wear OS + Glance widgets │ │ │ │ Shared: Platform-service (Fastify, port 4003) — Cosmos DB sync │ │ Analytics: Platform-service telemetry / Plausible (privacy-first) │ └──────────────────────────────────────────────────────────────────────────┘ ``` --- ## Phase 1: Web MVP — "Make It Work" (Week 1-2) > **Goal:** Ship a functional PWA that validates the core concept — pre-warning cascades make timers actually useful. > **Success criteria:** 10 people use it daily for a week and say "I can't go back to a normal timer." ### Week 1: Foundation + Timer Engine - [ ] **Pre-work (before coding)** - [ ] Register domain: `chronomind.app` or `chronomind.io` (needed for deployment + Universal Links) - [ ] Set up DNS for Vercel deployment - [ ] Low-fi wireframes: timeline, create timer, Pomodoro, alarm overlay (1 day) - [ ] Define urgency level color mapping from `@bytelyst/design-tokens` + ChronoMind product section - [x] **Project scaffold** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7)) - [x] `npx create-next-app@latest` with Next.js 16, App Router, TypeScript - [x] TailwindCSS v4 setup + Lucide React icons - [x] Zustand store with localStorage persistence ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] ESLint + Vitest config - [x] Basic folder structure: `app/`, `components/`, `lib/` - [x] GitHub Actions CI: lint + typecheck + vitest on PR ([02f9a5f](https://github.com/saravanakumardb1/learning_ai_clock/commit/02f9a5f)) - [ ] Auto-deploy to Vercel on `main` push - [x] Analytics stub: `lib/analytics.ts` — console in dev, no-op in prod, wired into store.ts - [x] Track: timer created, timer completed, cascade fired, Pomodoro completed, PWA installed - [x] **Timer engine (`lib/timer-engine.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7)) - [x] `Timer` interface with all fields (id, type, label, urgency, targetTime, duration, cascade, etc.) - [x] Create timer (alarm, countdown, pomodoro) - [x] Start / pause / resume / cancel countdown - [x] Timer state machine: `idle → active → warning → firing → snoozed → dismissed` - [x] `requestAnimationFrame` for UI countdown display (smooth 60fps in active tab) - [ ] `setInterval` in Service Worker for background notification scheduling (30s check) - [x] Both contexts needed: rAF stops when tab hidden, SW runs in background - [x] Unit tests for timer state transitions (23 tests) - [x] **Pre-warning cascade (`lib/cascade.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7)) - [x] Cascade presets (aligned with PRD): Aggressive, Standard, Light, Minimal, None, Custom - [x] Custom cascade builder (user picks intervals) - [x] Cascade scheduler: calculate all warning timestamps from target time - [x] Cascade state tracking: which warnings have fired - [x] Unit tests for cascade calculation edge cases (17 tests) - [x] **Urgency system (`lib/urgency.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7)) - [x] 5 levels: Critical, Important, Standard, Gentle, Passive - [x] Each level maps to: notification style, sound, vibration, visual intensity, snooze behavior - [x] Critical: persistent sound, full-screen overlay, no auto-dismiss - [x] Passive: badge only, no sound - [x] **Dashboard with timer list (`components/Dashboard.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Timer list showing all active/upcoming timers sorted by fire time - [x] Color-coded by urgency level - [x] Current time display in header with smooth animation - [x] Pre-warning cascade progress bar on each timer card - [x] Timer cards with full details (countdown, urgency, state, actions) - [x] Empty state: "No active timers — Create your first timer" - [x] **Create timer flow (`components/CreateTimerModal.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Quick timer: one-tap presets (5m, 15m, 25m, 45m, 1h) via `QuickTimerBar` ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [x] Alarm: time picker, label, urgency selector, cascade preset - [x] Countdown: duration picker (hours, minutes, seconds), label, urgency - [ ] Form validation with Zod - [x] Save to Zustand store → localStorage - [x] **Clock display in header** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Current time with AM/PM in header - [x] Date display in header - [x] Next timer countdown shown in tab title - [x] Responsive: compact in app header ### Week 2: Notifications + Polish - [x] **Notifications (`lib/notifications.ts`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Request notification permission on first timer creation - [x] Service Worker registration via Serwist (`@serwist/next`) ([28dfa9f](https://github.com/saravanakumardb1/learning_ai_clock/commit/28dfa9f)) - [x] Schedule pre-warning notifications at cascade timestamps - [x] Different notification styles per urgency (title, body, icon, sound tag) - [x] Notification click → open app to timer detail - [x] Fallback: in-app toast if notifications denied ([a1120a5](https://github.com/saravanakumardb1/learning_ai_clock/commit/a1120a5)) - [x] **Sound system (`lib/sounds.ts`)** ([b39652a](https://github.com/saravanakumardb1/learning_ai_clock/commit/b39652a)) - [x] Web Audio API setup with AudioContext - [x] 5 urgency-mapped alarm tones (programmatic oscillator — no audio files) - [x] Volume mapping per urgency level - [x] Sound preview in settings page ([cad95be](https://github.com/saravanakumardb1/learning_ai_clock/commit/cad95be)) - [x] Graceful fallback if audio blocked by browser - [x] **Tab title countdown** (integrated in `Dashboard.tsx`) ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Show "MM:SS — Label | ChronoMind" in browser tab title - [x] Update every tick for active timer - [x] Flash title when timer fires (alternating bell/alarm) ([d2b5563](https://github.com/saravanakumardb1/learning_ai_clock/commit/d2b5563)) - [x] Restore original title when no active timers - [x] **Alarm overlay (`components/AlarmOverlay.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [x] Full-screen overlay for CRITICAL urgency - [x] Pulsing animation - [x] Large "Dismiss" button (with confirmation for Critical) - [x] "Snooze 5m / 15m" buttons - [x] Cannot be accidentally dismissed (Critical requires "Confirm Dismiss") - [x] **Pomodoro timer (`components/PomodoroView.tsx`)** ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [x] Work/break cycle configuration (default: 25m work, 5m break, 4 rounds, 15m long break) - [x] Visual progress ring showing time remaining (`CountdownRing.tsx`) - [x] Round counter (e.g., "Round 2 of 4") with dot indicators - [x] Auto-transition between work and break - [x] Session complete celebration (trophy + stats) ([35f53e8](https://github.com/saravanakumardb1/learning_ai_clock/commit/35f53e8)) - [x] **Dark + light theme** ([2a4d66f](https://github.com/saravanakumardb1/learning_ai_clock/commit/2a4d66f)) - [x] System preference detection (`prefers-color-scheme`) ([d2b5563](https://github.com/saravanakumardb1/learning_ai_clock/commit/d2b5563)) - [x] Manual toggle in header (Sun/Moon icon) - [x] Theme persisted to localStorage - [x] All components themed via CSS custom properties (`--cm-*`) - [x] **PWA setup** ([ace036b](https://github.com/saravanakumardb1/learning_ai_clock/commit/ace036b), [28dfa9f](https://github.com/saravanakumardb1/learning_ai_clock/commit/28dfa9f)) - [x] Serwist service worker configuration ([28dfa9f](https://github.com/saravanakumardb1/learning_ai_clock/commit/28dfa9f)) - [x] Web app manifest (name, icons, theme color, display: standalone) - [x] Offline support: app shell cached via Serwist precache + runtime cache - [x] Install prompt UI (`components/InstallPrompt.tsx`) — beforeinstallprompt listener, dismissable banner - [x] PWA metadata in layout (apple-web-app-capable, theme-color) - [x] **Keyboard shortcuts** ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [x] `N` — new timer - [x] `Q` — quick timer modal - [x] `Space` — start/pause active timer - [x] `Esc` — dismiss alarm / close modal - [x] `?` — show shortcuts overlay - [x] **Landing page (`app/landing/page.tsx`)** ([ace036b](https://github.com/saravanakumardb1/learning_ai_clock/commit/ace036b)) - [x] Hero: tagline "Never be caught off-guard again" - [x] 6 key features with icons (Pre-warnings, Timeline, Urgency, Pomodoro, Smart Defaults, Privacy) - [x] "Try it now" button → app dashboard (no signup needed) - [x] Social proof section (placeholder for neurodivergent community) - [x] Footer: links, GitHub, privacy - [x] Privacy policy page (`/privacy`) - [x] Terms of service page (`/terms`) - [x] **First-run onboarding** (partial) ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5)) - [ ] 3-step walkthrough: create timer → set cascade → see timeline - [x] "Create your first timer" prompt on empty dashboard - [ ] Tooltip hints on cascade and urgency pickers - [x] **Feedback mechanism** ([d2b5563](https://github.com/saravanakumardb1/learning_ai_clock/commit/d2b5563)) - [x] Feedback button in app (floating FAB, opens GitHub Issues) - [x] Bug report button with auto-attached browser info - [x] **Web accessibility (WCAG 2.1 AA)** (partial) - [x] Keyboard navigation works for all flows (N, Q, Space, Esc, ?) ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [ ] Screen reader tested (NVDA/VoiceOver) on timeline and timer creation - [x] Focus indicators on all interactive elements (`:focus-visible` ring) - [x] Sufficient color contrast for all urgency levels (dark + light themes) - [x] `aria-label` on all icon-only buttons in Dashboard header - [x] Skip-to-content link for keyboard/screen reader users - [x] **Timer accuracy tests** (partial) ([755d030](https://github.com/saravanakumardb1/learning_ai_clock/commit/755d030)) - [x] Timer fire test: create timer, tick past target, verify fires (store tests) - [ ] Service Worker notification timing tests - [ ] Stress test: 50 concurrent timers with cascades → all fire correctly - [ ] **Offline resilience strategy** - [ ] Document SW lifecycle: timers survive SW termination via IndexedDB timestamps + SW `periodicsync` - [ ] Background sync queue for analytics events - [ ] IndexedDB size limit handling (warn user, purge old history) - [ ] "Tab must be open for notifications" disclaimer for iOS Safari ### Phase 1 Exit Criteria - [ ] PWA installs and works offline on Chrome, Safari, Firefox - [x] Timer fires with cascade pre-warnings at correct times (53 passing tests) - [x] Notifications work on desktop Chrome, Android Chrome - [x] iOS Safari: tab title countdown works (notification best-effort) - [x] Pomodoro completes full 4-round session correctly (tested) - [ ] Lighthouse PWA score > 90 - [ ] Page load < 2 seconds - [x] All Vitest unit tests pass (302 tests) - [ ] Deployed to Vercel with custom domain - [x] CI/CD pipeline running (GitHub Actions) ([02f9a5f](https://github.com/saravanakumardb1/learning_ai_clock/commit/02f9a5f)) - [x] Analytics tracking timer creation and cascade engagement (`lib/analytics.ts` wired into store) - [x] WCAG 2.1 AA: keyboard nav implemented ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [x] Privacy policy published at `/privacy` ([ace036b](https://github.com/saravanakumardb1/learning_ai_clock/commit/ace036b)) - [ ] 5 beta testers using it daily (measured via analytics) --- ## Phase 2: Intelligence — "Make It Smart" (Week 3-5) > **Goal:** Add the features that make ChronoMind irreplaceable — routines, NL input, focus mode, gamification. > **Success criteria:** Users create routines and say "This replaced 3 apps for me." ### Week 3: Routines + Linked Timers - [x] **Routine engine (`lib/routines.ts`)** ([8fe5e8e](https://github.com/saravanakumardb1/learning_ai_clock/commit/8fe5e8e)) - [x] Routine data model: ordered array of steps (label, duration, transition type) - [x] Transition types: immediate, 1m break, 5m break, custom - [x] Routine state machine: `ready → active → paused → completed/cancelled` - [x] Auto-advance between steps with transition notification - [x] Pause/resume entire routine (pauses current step timer) - [x] Skip step button - [x] 4 built-in templates (Morning, Workout, Cooking, Wind-Down) - [x] Template instantiation for reuse - [x] Unit tests for multi-step routines with transitions (45 tests) - [x] **Routine editor (`components/RoutineEditor.tsx`)** - [x] Add/remove/reorder steps (arrow buttons) - [x] Per-step: label, duration, transition type, notes - [x] Built-in templates: Morning (5), Workout (4), Cooking (4), Wind-Down (4) - [x] Save routine as reusable template (checkbox toggle) - [x] Total duration display (auto-calculated, includes transitions) - [ ] Preview timeline of routine - [x] **Routine runner (`components/RoutineRunner.tsx`)** - [x] Full-screen routine execution view with countdown ring - [x] Current step highlighted with countdown ring + label - [x] Next step preview with duration - [x] Progress bar showing overall routine progress - [x] Step dot indicators (completed/skipped/active/pending) - [x] "Done early" button to advance + Skip + Pause/Resume - [x] Completion celebration with step summary - [x] Routine store (`lib/routine-store.ts`) with Zustand + localStorage persistence - [x] Auto-advance steps via tickRoutines() on rAF loop - [x] Routines page (`app/routines/`) with template browser, runner, history - [x] **Linked timers (`lib/linked-timers.ts`)** - [x] "When timer A ends, start timer B" chain relationships - [x] Chain building, append, remove with automatic relinking - [x] Linked timer presets: Pasta, Laundry, Meeting Prep - [x] Cancel chain helpers (hasDownstreamTimers, getDownstreamTimerIds) - [x] Chain queries: getNextInChain, findChainForTimer, getChainPosition - [ ] Chain visualization in timeline - [x] Unit tests (27 tests) - [x] **Natural language input (`lib/nl-parser.ts` + CreateTimerModal integration)** ([8fe5e8e](https://github.com/saravanakumardb1/learning_ai_clock/commit/8fe5e8e), [065bb1b](https://github.com/saravanakumardb1/learning_ai_clock/commit/065bb1b)) - [x] Regex-based parser (no chrono-node dependency needed) - [x] Examples: "Standup in 30 minutes", "Wake up at 6:30am", "Remind me at 3pm to call Mom", "pomodoro 4 rounds" - [x] Extract: time, duration, label, urgency hints ("important meeting" → Important) - [x] Integrated into CreateTimerModal with live parse preview - [x] Parse preview: show parsed timer type, label, duration, urgency before confirming - [x] Enter-to-create shortcut for quick creation - [x] Unit tests for 37 natural language patterns ### Week 4: Focus Mode + Stats - [x] **Focus mode (`app/focus/page.tsx` + `components/FocusView.tsx`)** ([065bb1b](https://github.com/saravanakumardb1/learning_ai_clock/commit/065bb1b)) - [x] Activate focus: choose duration (6 presets) or "until next timer" - [x] Block all notifications except CRITICAL urgency (shield badge) - [x] Full-screen focus view with minimal distraction (countdown ring) - [ ] Ambient background sound options (rain, white noise, coffee shop) — Web Audio API - [x] Integration with Pomodoro (25m focus shortcut) - [x] Focus session summary on completion (time focused, distractions blocked) - [x] **Contextual pre-warning messages (`lib/context-messages.ts`)** ([8fe5e8e](https://github.com/saravanakumardb1/learning_ai_clock/commit/8fe5e8e)) - [x] Based on timer label, generate helpful prep messages - [x] Rules engine: "meeting" → "Review your agenda", "flight" → "Check in online", "dentist" → "Bring your insurance card" - [x] Keyword → message mapping (20+ categories, expandable) - [ ] Custom messages per timer (user override) - [x] Warning message formatting with time remaining context - [x] Unit tests (23 tests) - [x] **Statistics + streaks (`lib/stats.ts` + `app/history/page.tsx` + `components/StatsView.tsx` + `components/StreakCard.tsx`)** - [x] Timers created / completed / snoozed / dismissed — daily, weekly, monthly - [x] On-time rate: % of timers acted on within 2 minutes of firing - [x] Focus time: total hours in focus/Pomodoro mode - [x] Current streak: consecutive days with at least 1 completed timer - [x] Streak freeze: miss a day but keep streak (1 free freeze per week) - [x] Weekly summary card (shareable — great for social/viral) - [x] Charts: Recharts (bar chart for daily activity, line chart for focus time, pie chart for categories) - [x] Category breakdown stats - [x] History page with search, category filter, urgency filter - [x] Timer export/import (JSON) + calendar .ics import on history page - [x] Unit tests (23 tests) - [x] **Categories / tags (`lib/categories.ts`)** - [x] Built-in categories: Work, Personal, Health, Cooking, Exercise, Study - [x] Custom tags (add/remove, normalized, deduped) - [x] Filter dashboard by category (chip filter bar) - [x] Category-specific default urgency and cascade presets (auto-applied on selection) - [x] Color-coded category indicators on dashboard - [x] Category picker integrated into CreateTimerModal - [x] Unit tests (29 tests) - [x] **Recurring timers (`lib/recurrence.ts`)** - [x] Recurrence rules: daily, weekday, weekend, weekly, biweekly, monthly, custom (select days) - [x] Next occurrence calculation (with configurable lookahead) - [x] "Skip next" and "Pause recurring" options - [ ] Recurring timer badge on timeline - [x] Bulk edit: get next N occurrences - [x] Unit tests for recurrence edge cases (month boundaries, DST, leap year) (37 tests) - [x] Rule builders + human-readable descriptions ### Week 5: Calendar + Neurodivergent Mode + Polish - [x] **Calendar .ics import (`lib/calendar-import.ts`)** - [x] Parse `.ics` file (iCalendar format) with RFC 5545 compliance (line unfolding, text escaping) - [x] Import events as alarms with auto-generated cascade (urgency-based preset) - [ ] Subscribe to calendar URL (re-fetch periodically) - [x] Import preview: show events before confirming (preview panel with conflict indicators) - [x] Conflict detection: warn if imported event overlaps existing timer (15-min window) - [x] Map calendar event priority (1-9) to urgency level - [x] Support: UTC datetime, local datetime, date-only events - [x] Timer export/import as JSON (`lib/export.ts`) - [x] Unit tests (26 tests) - [x] **Neurodivergent-friendly design (DEFAULT UX, not a toggle)** (partial) - [x] Visual countdown ring (`components/CountdownRing.tsx`) ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384)) - [x] Large, animated circular countdown (inspired by Time Timer) - [x] Color transitions: green → yellow → orange → red as time decreases - [ ] Optional: fill vs drain animation style - [x] Gentle transition alerts (soft chime + visual pulse) ([b39652a](https://github.com/saravanakumardb1/learning_ai_clock/commit/b39652a)) - [x] Reduced cognitive load: quick presets, progressive disclosure in create modal - [x] Time blindness aids: "About as long as [familiar reference]" ([d2b5563](https://github.com/saravanakumardb1/learning_ai_clock/commit/d2b5563)) - [ ] Body doubling placeholder: "Focus with others" room (v3 feature, show coming soon) - [x] Toggle in settings: "Compact mode" for power users who want dense UI - [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 - [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) - [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 - [x] Suggestion shown as dismissable card on dashboard - [ ] Accept → auto-adjusts recurring timer - [x] Unit tests (22 tests) - [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" - [x] Visual: large days display with milestone progress bar (color-coded: accent → warning → danger) - [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 - [x] CSV export for spreadsheet users - [x] Warning banner: "Your timers are stored locally. Export regularly." - [ ] **iOS waitlist** - [ ] Waitlist signup on web landing page ("Get notified when iOS launches") - [ ] Use platform-service `waitlist` module (already exists) when backend is connected - [ ] Fallback: simple email collection form - [x] **Timer history (`app/history/page.tsx`)** - [x] Searchable log of all past timers - [x] Filter by category, urgency - [x] "Repeat" button to recreate a past timer (alarm at same time, countdown same duration) - [x] Export as CSV (Label, Type, State, Urgency, Category, Created, Completed, Duration) - [x] **Playwright E2E tests (`e2e/core-flows.spec.ts`, 10 test suites)** - [x] Create alarm → verify it appears on timeline - [x] Create countdown → verify it counts down - [x] Create pomodoro → verify round info - [x] NL input → verify parsing + timer creation - [x] Routines → navigate + verify templates - [x] History & Stats → tabs, export CSV, local storage warning - [x] Focus mode → navigate + verify presets - [x] Event countdown → create with future date + verify days display - [x] Settings → compact mode toggle - [x] Keyboard shortcuts → ? overlay - [ ] PWA install flow (requires browser context with installability) ### Phase 2 Exit Criteria - [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 - [x] E2E tests written (10 suites in `e2e/core-flows.spec.ts`), CI integration pending - [ ] 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 --- ## Phase 3: Apple Native — "Own the Wrist" (Week 6-9) > **Goal:** Ship native iOS + Apple Watch apps. macOS deferred to Phase 4 (4 weeks for iOS + Watch + Live Activities is already aggressive). > **Success criteria:** Apple Watch complications are the #1 reason users love ChronoMind. > **Framework decision:** Fully native SwiftUI (NOT KMP) — see [platform analysis in PRD](PRD.md). > **Note:** This phase is 4 weeks, not 3 as PRD states. PRD phases section should be updated to match. ### Week 6: iOS App Foundation - [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 - [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 - [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` - [ ] Migrate to `@Model` for SwiftData (currently UserDefaults + JSON) - [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 - [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 - [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 - [x] **Apple Watch app (`ChronoMindWatch/`)** - [x] `WatchTimelineView` — compact timeline for wrist - [x] `WatchTimerDetailView` — current timer with countdown ring - [x] `WatchQuickTimerView` — one-tap presets on Watch - [ ] Digital Crown: scroll through upcoming timers - [x] Haptic pre-warnings on wrist (gentle tap for early warnings, prominent for final) - [ ] Dismiss/snooze directly from Watch - [x] **Watch complications** - [x] `WidgetKit` complications for Watch faces - [x] Circular: countdown to next timer - [x] Rectangular: next timer label + time remaining - [x] Inline: "Standup in 14m" - [x] Corner: countdown ring - [x] Update complications via `WidgetCenter.shared.reloadAllTimelines()` - [x] **Live Activities + Dynamic Island** - [x] `ActivityKit` Live Activity for active countdown/Pomodoro - [x] Dynamic Island compact: timer name + countdown - [x] Dynamic Island expanded: countdown ring + snooze/dismiss buttons - [x] Lock Screen Live Activity: full countdown with cascade progress - [x] Auto-start Live Activity when timer enters final 30 minutes - [x] End Live Activity when timer is dismissed - [x] **iOS widgets (`WidgetKit`)** - [x] Small widget: next timer countdown - [x] Medium widget: next 3 timers list - [ ] Large widget: mini timeline - [x] Lock Screen widget: next timer inline - [x] Widget tap → deep link to timer in app - [x] Timeline provider: update every 5 minutes + on timer change - [x] **Siri Shortcuts** - [x] "Set a timer for 25 minutes" → creates countdown - [ ] "Start my morning routine" → starts saved routine - [x] "What's my next timer?" → speaks next timer info - [x] App Intents framework for iOS 17+ - [x] Shortcuts app integration ### Week 8: AI Reschedule + Gamification > **Note:** macOS menu bar app deferred to Phase 4 (Week 10-11). Phase 3 focuses on iOS + Watch quality. - [x] **AI reschedule** - [x] "I slept in 30 minutes" → shift all morning timers by 30m - [x] "Skip my next timer" → remove + adjust linked/dependent timers - [x] "Push everything back 1 hour" → bulk shift - [x] Smart suggestions: detect when user dismisses alarm late → "Shift your morning by X minutes?" - [x] Undo reschedule (keep old state for 1 hour) - [x] **Gamification polish** - [x] Streak badges: 3-day, 7-day, 14-day, 30-day, 60-day, 100-day, 200-day, 365-day - [x] Focus score: weekly score based on on-time rate + focus hours + consistency + low snooze - [x] Weekly summary card (shareable image via ImageRenderer — key for viral growth) - [x] Gentle celebration animations (confetti for streak milestones, not obnoxious) ### Week 9: iPad + Polish + TestFlight - [x] **iPad layout** - [x] iPad sidebar navigation (NavigationSplitView) - [x] Wider timeline with side panel for timer detail - [x] Stage Manager / multiple window support (iPadOS 16+ via NavigationSplitView) - [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** - [x] VoiceOver: all screens navigable, timer states announced - [x] Dynamic Type: scaled font modifier - [x] Reduce Motion: `motionSafe()` modifier respects system setting - [x] High Contrast mode: `contrastAdaptive()` modifier - [x] **XCTest + XCUITest** - [x] Unit tests for timer engine (30 tests, mirroring web Vitest) - [x] Unit tests for cascade (18), format (12), urgency (14), accessibility (14) - [x] Unit tests for shared timer data (12), reschedule engine (14), gamification (15) - [ ] UI tests: create timer → verify timeline → fire → dismiss - [ ] Widget snapshot tests - [ ] **TestFlight** - [ ] Internal build: team testing - [ ] External beta: 100 testers via TestFlight link - [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 - [x] iOS app installs and all features work on iPhone 14+ (iOS 17) - [x] iPad layout works with sidebar navigation (iPadOS 16+) - [x] Apple Watch complications update correctly on Watch Series 8+ (watchOS 10) - [x] Live Activities show on Dynamic Island and Lock Screen - [x] Widgets update on home screen and lock screen - [x] Siri Shortcuts work for top 3 use cases - [x] AI reschedule correctly shifts timers - [x] 129 XCTests across 8 test files pass - [ ] TestFlight beta: 100 external testers, crash-free rate > 99% - [ ] App Store submission prepared and submitted (screenshots, description, keywords, preview video) - [x] macOS deferred to Phase 4 --- ## Phase 4: Context & Growth — "Make It Sticky" (Week 10-14) > **Goal:** macOS menu bar, calendar sync, location awareness, cloud sync, and viral growth mechanics. > **Success criteria:** Users say "ChronoMind knows my schedule better than I do." ### Week 10-11: macOS + Calendar + Location - [x] **macOS menu bar app (`ChronoMindMac/`)** — deferred from Phase 3 - [x] Menu bar icon: shows countdown of next timer - [x] Click → popover with mini timeline - [x] Quick timer creation from popover - [x] Notification center integration (UNUserNotificationCenter) - [x] Keyboard shortcut: `Cmd+Shift+T` → quick timer - [x] Share 90%+ code with iOS via Shared/ folder - [x] **Full calendar sync** - [ ] Google Calendar OAuth 2.0 integration (deferred — needs server-side OAuth) - [x] Apple Calendar (EventKit) read access - [ ] Outlook Calendar (Microsoft Graph API) integration (deferred — needs server-side OAuth) - [x] One-way sync: imported events become timers with auto-cascade (read-only) - [x] Conflict resolution: calendar events take priority via deterministic IDs - [x] Sync frequency: every 15 minutes + on-demand refresh - [x] Visual distinction: synced events tagged with `isCalendarSync` + calendar color - [ ] Web: OAuth flow in Next.js API routes (deferred) - [x] iOS: EventKit for Apple Calendar - [x] **Location-based triggers** - [x] iOS: CoreLocation geofencing (enter/exit region) - [x] "Remind me when I leave home" → geofence exit trigger - [x] "Remind me when I arrive at office" → geofence enter trigger - [x] Saved locations: Home, Work, Gym (user-configured, preset icons) - [x] Privacy-first: all location processing on-device, no server tracking - [ ] Web: use Geolocation API (deferred) - [x] **Travel time intelligence** - [x] Apple Maps API (MapKit) for travel time estimates - [x] Travel advisory messages: "Leave now — 28 min drive" - [x] Auto-adjust pre-warning cascade based on real-time travel time - [x] Transport mode: driving, transit, walking (user preference per timer) - [ ] Web: fallback to static estimate (deferred) ### Week 12: Sleep + Wellness - [x] **Sleep integration** - [x] Bedtime routine: customizable wind-down sequence (4-step default) - [x] Smart alarm: set a wake window (e.g., 6:30-7:00) with HealthKit optimization - [x] Sleep tracking via HealthKit (Apple) — read sleep data, don't track directly - [x] "You slept 6h 20m. Shift your morning by 15 minutes?" (AI reschedule tie-in) - [x] Wind-down notifications: "Bedtime in 30 minutes" via UNCalendarNotificationTrigger - [ ] Blue light reminder (deferred — no API to trigger Night Shift programmatically) - [x] **Mood/energy check-in** - [x] Quick check-in after completing a timer/routine: 😴 😐 😊 🔥 (4 energy levels) - [x] Correlate mood with time of day, timer type, sleep data - [x] Weekly insight: "You're most productive between 9-11 AM" (peak hours + best day) - [x] Optional: prompt at consistent times (morning, post-lunch, evening) with rate limiting - [x] All data local — never sent to any server - [ ] **Cloud sync (Apple-only via iCloud, privacy-first)** - [ ] iCloud/CloudKit sync for Apple devices only (iPhone ↔ Mac ↔ Watch) - [ ] Sync scope: timers, routines, categories, preferences, stats - [ ] Conflict resolution: last-write-wins with vector clocks - [ ] Opt-in: works perfectly offline, sync is a bonus - [ ] **Cross-platform sync (web ↔ Android) deferred to Phase 5** via platform-service REST API - [ ] TLS in transit + encrypted at rest in Cosmos DB (E2E encryption deferred — timer data is not sensitive enough to justify complexity) - [ ] Delete account: wipes all cloud data immediately - [x] **Data export / account deletion (App Store + GDPR requirement)** - [x] "Export all my data" → JSON download of all timers, routines, stats, mood check-ins - [x] "Delete my account" → wipe UserDefaults, App Group, iCloud KV, notifications, temp files - [x] Required before App Store submission (Apple requirement since 2022) - [x] **Advanced NL parsing (upgrade path from chrono-node)** - [x] Define `timer-parse` extraction task in extraction-service (port 4005) — 6 classes, 3 few-shot examples - [x] Classes: `time`, `duration`, `urgency_hint`, `label`, `recurrence`, `travel_context` - [ ] Use `@bytelyst/extraction` client for LLM-powered parsing (iOS/web integration deferred) - [ ] Falls back to chrono-node if extraction-service unavailable (iOS/web integration deferred) - [x] Enables: "Set a critical alarm for my dentist next Tuesday at 2pm with 1 hour warning and 30 min travel time" ### Week 13-14: Viral Growth Mechanics - [x] **Shareable weekly summary** (built in Phase 3 Week 8 gamification) - [x] Auto-generated card via `WeeklySummaryCard` + `ImageRenderer` - [x] Beautiful design (dark bg, accent colors, ChronoMind branding) - [x] Share via native `ShareLink` to any platform - [x] Deep link back to ChronoMind in share text - [x] **#1 viral mechanic — shareable from History → Badges tab** - [x] **Shareable timer** - [x] Create a timer and share link: "chronomind.app/t/abc123" - [x] Recipient opens link → timer auto-added via `importFromURL` - [x] Use case: "Here's the pasta recipe timing" / "Here's our meeting prep timer" - [x] Web link works without app (PWA fallback URL) - [x] iOS: Universal Link → `canHandleURL` + `extractShareCode` - [x] **Referral program** - [x] "Invite a friend → both get 1 month Pro free" - [x] Unique referral code per user (CM-XXXX format) - [x] Track referral chain (incoming/outgoing history) - [x] Show referral count + Pro reward months - [ ] **ProductHunt launch prep** - [ ] Maker profile + product page - [ ] Launch video (30s demo: create timer → cascade fires → Watch notification) - [ ] 5 key screenshots (timeline, Watch, Dynamic Island, routine, focus) - [ ] First comment prepared (story of why this exists) - [ ] Schedule for Tuesday 12:01 AM PT (optimal PH launch time) - [ ] **App Store Optimization (ASO)** - [ ] Keywords: "smart timer", "pre-warning alarm", "visual timeline", "focus timer", "routine timer", "ADHD timer", "pomodoro" - [ ] 10 screenshots: iPhone (6.7" + 6.1"), iPad, Apple Watch, Mac - [ ] App preview video (15-30s) - [ ] Subtitle: "Smart Pre-Warning Timer & Routines" - [ ] Category: Productivity (primary), Lifestyle (secondary) - [ ] **Content marketing** - [ ] Blog post: "Why I Built ChronoMind — The Timer App That Understands Urgency" - [ ] Twitter/X thread: "I analyzed every timer app. Here's what they all get wrong. 🧵" - [ ] Reddit posts: r/productivity, r/ADHD, r/apple, r/webdev - [ ] Hacker News: "Show HN: ChronoMind — AI-powered pre-warning timer (PWA + iOS)" - [ ] YouTube: 3-minute walkthrough video - [ ] **SEO landing page** - [ ] Target pages: "best timer app 2026", "ADHD timer app", "pre-warning alarm app" - [ ] Comparison pages: "ChronoMind vs Tiimo", "ChronoMind vs Structured" - [ ] Blog with timer/productivity tips (SEO content) ### Phase 4 Exit Criteria - [x] macOS menu bar app works on macOS 14+ (`ChronoMindMac/`) - [x] Calendar sync works with Apple Calendar via EventKit (Google/Outlook deferred) - [x] Location triggers fire reliably (CoreLocation geofencing) - [x] Travel time estimates adjust pre-warning cascade (MapKit) - [x] Sleep data integration working via HealthKit - [x] Data export and account deletion functional (GDPR compliant) - [x] Weekly summary card shareable to any platform via `ShareLink` - [x] Shareable timer links work (universal links + import) - [x] Referral program with unique codes and Pro rewards - [ ] ProductHunt page live, launch scheduled (non-code) - [ ] App Store listing approved and live (non-code) - [ ] 500+ users (web + iOS combined) (growth metric) - [ ] 4.5+ star rating on App Store (growth metric) --- ## Phase 5: Android + Scale — "Reach Everyone" (Week 15-22) > **Goal:** Ship Android + Wear OS, shared timers, and reach product-market fit. > **Success criteria:** 5,000 MAU, 4.5+ stars on both App Store and Play Store. ### Week 15-17: Android App - [x] **Android project setup** - [x] Jetpack Compose + Material 3 + Kotlin - [x] Room database (`TimerDatabase`, `TimerDao`, `TimerEntity`, `TimerMapper`) - [x] Hilt for dependency injection - [x] Minimum SDK: API 26 (Android 8.0) - [x] Gradle version catalog for dependency management (`libs.versions.toml`) - [x] **Timer engine Kotlin port (`TimerEngine/`)** - [x] Port from Swift: `Models.kt` + `TimerEngine.kt` (create, pause, resume, fire, snooze, dismiss, complete, cascade, format) - [x] `UrgencyLevel`, `CascadePreset`, `PomodoroConfig`, `PomodoroState` all ported - [x] 30 JUnit5 tests mirroring XCTest and Vitest tests - [x] Completed in single session - [x] **Android screens (Jetpack Compose)** - [x] `TimelineScreen` — vertical timeline with timer cards + FAB create dialog - [x] `CreateTimerScreen` — inline dialog with label, slider, presets - [ ] `RoutineScreen` — deferred to next sprint - [x] `FocusScreen` — Pomodoro session with round tracking - [x] `HistoryScreen` — stats chips + completed/dismissed list - [x] `SettingsScreen` — urgency, cascade, sound, haptic, data export/delete, about - [x] Bottom navigation matching iOS tab structure (4 tabs) - [x] **Android notifications** - [x] `AlarmManager` for exact alarm scheduling (pre-warnings) - [x] 6 notification channels (critical, important, standard, gentle, passive, warning) - [x] Full-screen intent for CRITICAL urgency - [x] Notification actions: Snooze 5m, Dismiss (via `TimerAlarmReceiver`) - [x] Foreground service: `TimerForegroundService` with persistent notification - [x] `SCHEDULE_EXACT_ALARM` + `USE_EXACT_ALARM` permission handling (Android 12+) - [x] **Android widgets** - [x] Glance widgets (Jetpack Glance) with XML provider configs - [x] Small: next timer countdown (2x2) - [x] Medium: next 3 timers (4x2) - [x] Large: mini timeline (4x3) - [x] Widget tap → `actionStartActivity` - [x] **Android-specific features** - [x] Quick Settings tile: `QuickTimerTileService` — one-tap to create timer - [x] Persistent notification: `TimerForegroundService` with stop action - [ ] DND integration: timer-aware Do Not Disturb (deferred) - [x] Google Calendar integration (`CalendarSyncManager` via `CalendarContract`) ### Week 18-19: Wear OS + Polish - [x] **Wear OS app** - [x] Compose for Wear OS with Material theme - [x] `WearTimelineScreen` — `ScalingLazyColumn` scrollable timeline - [x] `WearTimerChip` — urgency-colored timer chips - [ ] Tile: next timer complication (deferred) - [ ] Haptic pre-warnings (deferred — needs phone↔watch data layer) - [ ] Dismiss/snooze from wrist (deferred — needs phone↔watch data layer) - [x] **Cross-platform cloud sync (via platform-service)** - [x] Sync API: `modules/timers/` — 7 REST endpoints (CRUD + delta sync + batch upsert), 42 tests, `productId: "chronomind"` - [x] Sync API: `modules/routines/` — 7 REST endpoints (CRUD + delta sync + batch upsert), 32 tests, `productId: "chronomind"` - [x] JWT authentication via @bytelyst/auth (reuse existing `authenticate` preHandler) - [x] TLS in transit + encrypted at rest in Cosmos DB (container: `timers`, partition: `/userId`) - [x] Sync protocol: `syncVersion` monotonic integer — optimistic concurrency, 409 on stale writes - [x] Delta sync: `GET /timers/sync?since=` returns only changed timers - [x] Batch upsert: `POST /timers/batch` for offline queue flush → `{ synced, conflicts, errors }` - [x] Works across: Web ↔ iOS ↔ macOS ↔ Android (replaces Phase 4 iCloud-only sync) - [ ] Account creation: Apple Sign-In / Google Sign-In (email/password requires platform-service Email Delivery + Password Reset — deferred) - [ ] Client-side sync integration: iOS/Android/Web sync managers (consume the new endpoints) ### Week 20-21: Shared Timers + Social - [x] **Shared timers (Family/Household) — backend API** - [x] `modules/households/` — 9 REST endpoints (CRUD, invite, join, leave, remove member), 26 tests - [x] `modules/shared-timers/` — 6 REST endpoints (CRUD under `/households/:id/timers`, per-user ack), 30 tests - [x] Create a "household" group (invite via link) — invite code generation + accept - [x] Shared timers visible to all household members — membership check on all endpoints - [ ] Real-time sync: one person starts timer, everyone sees it (needs Event Bus — polling fallback) - [ ] Use cases: "Dinner in 30 minutes", "Leave for school in 15 min" (client UI) - [ ] Per-timer: shared vs private toggle (client UI) - [x] Household admin: manage members, remove shared timers — admin role enforcement - [x] Up to 6 members per household (Family tier) — `MAX_HOUSEHOLD_MEMBERS` enforced - [ ] **Body doubling / shared focus (deferred to v3)** - [ ] _Experimental feature requiring real-time infrastructure (Event Bus). Defer until platform gap component 2.4 is built._ - [ ] v3 scope: "Focus room" — virtual co-working, see others' timers (anonymized), shared ambiance - [ ] **API + webhooks** - [ ] REST API: CRUD timers, routines, categories - [ ] API key authentication - [ ] Webhook: `timer.fired`, `timer.dismissed`, `routine.completed` - [ ] Use cases: Zapier integration, smart home triggers - [ ] Rate limiting: 100 requests/minute per API key - [ ] **Smart Home integration** - [ ] Webhook-based triggers to HomeKit/Alexa/Google Home - [ ] "When wind-down routine starts → dim lights to 30%" - [ ] "When morning alarm fires → turn on coffee machine" - [ ] Shortcuts integration (iOS) for HomeKit scenes - [ ] IFTTT applet for cross-platform home automation ### Week 22: Launch + Scale - [ ] **Google Play launch** - [ ] Play Store listing (screenshots, description, video) - [ ] Play Store Optimization (similar keywords as App Store) - [ ] Internal testing → Open testing → Production - [ ] Crash reporting: Firebase Crashlytics - [ ] **Monetization activation** - [ ] Free tier: all core features, local storage, Pomodoro, routines - [ ] Pro tier ($3.99/mo or $29.99/yr): cloud sync, calendar integration, custom sounds, AI reschedule, advanced stats, location triggers - [ ] Family tier ($5.99/mo): shared timers (up to 6 members), household coordination - [ ] Stripe integration (web), StoreKit 2 (iOS), Google Play Billing (Android) - [ ] Paywall: soft — show feature, explain it's Pro, easy upgrade - [ ] 7-day free trial for Pro - [ ] **Voice control (v2 feature)** - [ ] In-app voice: "Push everything back 30 minutes" - [ ] Siri Shortcuts (already done in Phase 3) - [ ] Google Assistant Actions - [ ] Alexa Skill (stretch goal) - [ ] **Performance + scale** - [ ] Web: Core Web Vitals all green - [ ] iOS: 60fps animations, < 50MB app size - [ ] Android: 60fps, < 40MB APK - [ ] Watch: complications update within 15 minutes - [ ] Sync API: < 200ms p99 latency - [ ] 10,000 MAU target infrastructure ### Phase 5 Exit Criteria - [ ] Android app live on Google Play, 4.5+ stars - [ ] Wear OS app functional on Pixel Watch / Galaxy Watch - [ ] Cross-platform sync working (web ↔ iOS ↔ Android) - [ ] Shared timers working for households (up to 6 members) - [ ] API + webhooks functional for automation - [ ] Monetization: Pro + Family tiers active, > 5% conversion rate - [ ] 5,000+ MAU across all platforms - [ ] < 0.1% crash rate on all platforms - [ ] Customer support: < 24h response time --- ## Success & Viral Playbook ### Metrics That Matter | Metric | MVP Target (Phase 1-2) | v1 Target (Phase 3-4) | v2 Target (Phase 5) | |--------|------------------------|----------------------|---------------------| | **PWA installs** | 100 | 500 | 2,000 | | **DAU** | 50 | 200 | 1,000 | | **MAU** | 150 | 1,000 | 5,000 | | **DAU/MAU ratio** | > 33% | > 50% | > 50% | | **Timers created/week** | 500+ | 5,000+ | 25,000+ | | **Pre-warning usage** | > 60% of timers | > 70% | > 75% | | **Routine creation** | > 20% of users | > 30% | > 35% | | **7-day retention** | > 30% | > 40% | > 50% | | **30-day retention** | > 15% | > 25% | > 30% | | **App Store rating** | — | 4.5+ | 4.5+ | | **Pro conversion** | — | > 3% | > 5% | | **Streak > 7 days** | — | > 15% of users | > 25% | | **Shared summary** | — | > 10% weekly | > 20% | | **Snooze rate** | < 40% | < 30% | < 25% | ### Viral Growth Loops ``` Loop 1: Weekly Summary Share User completes week → Beautiful summary card generated → Shares to social → Friend sees → Clicks link → Downloads ChronoMind → Repeat Loop 2: Shared Timer User creates timer → Shares link with friend/family → Friend opens link → Timer auto-added → Friend discovers app → Downloads → Repeat Loop 3: Household Invite User activates Family plan → Invites household → Members join → Members invite THEIR friends → Organic growth Loop 4: Content / SEO User writes about experience → Blog/Reddit/Twitter → Organic search → New user finds ChronoMind → Downloads → Repeat ``` ### What Makes ChronoMind Go Viral 1. **The "aha" moment** — First time a pre-warning fires and user thinks "I would have been late without this." Target: within first 24 hours of use. 2. **Shareable summaries** — Weekly stats card must be *beautiful* enough that users *want* to share it. Design it like a Spotify Wrapped card. Include streak count, focus hours, on-time rate. 3. **Apple Watch as walking billboard** — When someone glances at their Watch and sees a ChronoMind complication, their friend asks "What's that?" Word of mouth. 4. **Routine templates** — "I use ChronoMind's Morning Routine template and it changed my life" → shareable templates that spread. 5. **Neurodivergent community** — The ADHD community is vocal and supportive online. If ChronoMind genuinely helps with time blindness, they'll evangelize it. Target: r/ADHD, ADHD TikTok, ADHD Twitter. 6. **ProductHunt launch** — Target top 5 on launch day. Prepare months in advance with a supporter base. 7. **"Replace 3 apps" narrative** — Position ChronoMind as replacing Clock + Pomodoro + Routine app. Users love consolidation stories. ### Pricing Strategy for Growth ``` Phase 1-2 (Web MVP): 100% free — no friction, maximum adoption Phase 3 (iOS launch): 100% free — build App Store momentum and reviews Phase 4 (Growth): Introduce Pro — soft paywall on advanced features Phase 5 (Scale): Pro + Family — monetize power users and households Free forever: Timers, alarms, countdowns, Pomodoro, routines, visual timeline, pre-warnings, neurodivergent mode, stats, streaks, categories, keyboard shortcuts Pro ($3.99/mo): Calendar sync, location triggers, cloud sync, custom sounds, AI reschedule, advanced analytics, travel time, export, priority support Family ($5.99/mo): Everything in Pro + shared timers (6 members), household coordination, family routines ``` --- ## Risk Register | # | Risk | Severity | Phase | Mitigation | |---|------|----------|-------|------------| | 1 | PWA notifications unreliable on iOS | High | 1 | Tab title countdown + native iOS app in Phase 3 | | 2 | Feature creep delays MVP | High | 1-2 | Strict scope: alarm + countdown + Pomodoro only for Phase 1 | | 3 | Apple Watch complications don't update reliably | Medium | 3 | Budget for watchOS debugging; use TimelineProvider with aggressive updates | | 4 | Calendar OAuth complexity | Medium | 4 | Start with .ics import (Phase 2); full OAuth only in Phase 4 | | 5 | Competition adds pre-warnings | Medium | All | Ship fast; cascade + urgency + linked timers is hard to replicate | | 6 | Low App Store visibility | Medium | 3-4 | ASO from day 1; ProductHunt launch; content marketing | | 7 | Sync conflicts across platforms | Medium | 4-5 | Start with iCloud (Apple-only); cross-platform sync in Phase 5 | | 8 | Android notification restrictions (Doze, exact alarms) | Medium | 5 | Use `AlarmManager.setExactAndAllowWhileIdle()`; request permissions | | 9 | User overwhelm — too many features | Medium | 2+ | Progressive disclosure; smart defaults; neurodivergent-friendly default | | 10 | Monetization too early kills growth | Low | 4 | Free for 3 phases; only monetize when PMF is proven | | 11 | Platform-service Email Delivery not ready for Phase 4 accounts | Medium | 4 | Fallback: Apple Sign-In / Google Sign-In only (skip email/password) | | 12 | Platform-service Event Bus not ready for Phase 5 shared timers | Medium | 5 | Fallback: polling (30s interval) instead of real-time push | | 13 | Service Worker termination loses timer state | Medium | 1 | Persist all state to IndexedDB; SW checks timestamps on wake, not in-memory | | 14 | Design token conflict with ByteLyst ecosystem | Low | 1 | ChronoMind gets own product section in token file; shared base, own semantics | --- ## Key Milestones & Dates | Milestone | Target Date | Phase | Celebration | |-----------|-------------|-------|-------------| | **MVP shipped** (web PWA live) | Week 2 | 1 | First 10 users 🎉 | | **Intelligence complete** (routines, NL, focus) | Week 5 | 2 | ProductHunt scheduled | | **iOS + Watch on TestFlight** | Week 9 | 3 | 100 beta testers | | **App Store launch** | Week 10 | 3→4 | ProductHunt same week | | **1,000 MAU** | Week 14 | 4 | Blog post celebrating | | **Android launch** | Week 18 | 5 | Play Store live | | **5,000 MAU** | Week 22 | 5 | Series of viral pushes | | **Monetization live** | Week 20 | 5 | Pro + Family tiers | --- ## Appendix: Tech Stack Summary | Platform | Framework | Key Libraries | Storage | Notifications | |----------|-----------|--------------|---------|---------------| | **Web** | Next.js 16, React 19 | TailwindCSS v4, shadcn/ui, Zustand, Serwist, chrono-node, date-fns, Recharts | IndexedDB (idb) | Web Push + Service Worker | | **iOS** | SwiftUI (iOS 17+) | SwiftData, WidgetKit, ActivityKit, EventKit, CoreLocation | SwiftData | UNUserNotificationCenter | | **watchOS** | SwiftUI (watchOS 10+) | WidgetKit (complications) | App Groups shared | WKExtension notifications | | **macOS** | SwiftUI (macOS 14+) | AppKit (menu bar) | SwiftData (shared via iCloud) | UNUserNotificationCenter | | **Android** | Jetpack Compose | Material 3, Room, Hilt, Glance (widgets), AlarmManager | Room (SQLite) | NotificationManager + AlarmManager | | **Wear OS** | Compose for Wear OS | Tiles, Complications, Rotary Input | Room (shared) | Wearable notifications | | **Sync API** | Platform-service (Fastify 5, port 4003) in `learning_ai_common_plat` | @bytelyst/auth (JWT), @bytelyst/cosmos, @bytelyst/config | Azure Cosmos DB (`productId: "chronomind"`) | Platform-service notifications module | --- ## Appendix B: Cost Estimation | Item | Phase | Monthly Cost | Notes | |------|-------|-------------|-------| | **Vercel (web hosting)** | 1+ | $0 (free tier) | Hobby plan covers MVP easily | | **Domain** | 1+ | ~$12/yr | `.app` or `.io` domain | | **Azure Cosmos DB** | 4+ | ~$25-50/mo | Serverless tier, `productId: "chronomind"` partition | | **Apple Developer Program** | 3+ | $99/yr | Required for App Store + TestFlight | | **Google Play Console** | 5+ | $25 one-time | Required for Play Store | | **Plausible Analytics** | 1+ | $0 (self-hosted) or $9/mo | Or use platform-service telemetry (free) | | **Stripe** | 5+ | 2.9% + 30¢ per transaction | Pro/Family subscription processing | | **Total (Phase 1-3)** | | ~$10/mo | Minimal — mostly free tiers | | **Total (Phase 4-5)** | | ~$75-100/mo | Cosmos DB + domain + Apple program | > **Note:** Platform-service infrastructure (Cosmos DB, AKV, health checks) is shared with LysnrAI. ChronoMind's incremental cost is only additional Cosmos RUs for timer data. --- ## Appendix C: Common Platform Reusability ChronoMind reuses **13 shared packages** and **17+ platform-service modules** from `learning_ai_common_plat`: | Package | ChronoMind Use | Phase | |---------|---------------|-------| | @bytelyst/auth | JWT auth for Pro/Family accounts | 4-5 | | @bytelyst/react-auth | Web dashboard auth context | 4-5 | | @bytelyst/api-client | Web → sync API calls | 4-5 | | @bytelyst/config | Config + `productId: "chronomind"` + AKV | 4-5 | | @bytelyst/cosmos | Cosmos DB for cloud sync, shared timers | 4-5 | | @bytelyst/errors | Typed HTTP errors | 4-5 | | @bytelyst/logger | Server-side structured logging | 4-5 | | @bytelyst/design-tokens | Cross-platform design system | 1+ | | @bytelyst/monitoring | Health-check utilities | 5 | | @bytelyst/blob | Custom alarm sound uploads | 5 | | @bytelyst/extraction | Advanced NL parsing via extraction-service | 4+ | | @bytelyst/testing | Shared test mocks | 4-5 | | @bytelyst/fastify-core | Service app factory | 5 | **New platform-service modules (4/4 complete, 847 total tests):** - ✅ `timers` — 7 endpoints, 42 tests (container: `timers`, partition: `/userId`) - ✅ `routines` — 7 endpoints, 32 tests (container: `routines`, partition: `/userId`) - ✅ `households` — 9 endpoints, 26 tests (container: `households`, partition: `/id`) - ✅ `shared-timers` — 6 endpoints, 30 tests (container: `shared_timers`, partition: `/householdId`) --- ## Appendix D: Key Decisions | # | Decision | Options | Recommendation | Rationale | |---|----------|---------|----------------|-----------| | 1 | Backend stack | Platform-service vs Cloudflare Workers | **Platform-service** | Reuses 17+ existing modules | | 2 | Apple-only sync | CloudKit vs skip until Phase 5 | **CloudKit for Phase 3-4** | Free, fast for Apple-only | | 3 | E2E encryption | Full E2E vs TLS + at-rest | **TLS + at-rest** | Timer data not sensitive enough | | 4 | Real-time shared timers | WebSocket vs SSE vs polling | **SSE + polling fallback** | WebSocket overkill for timers | | 5 | Design tokens | Extend bytelyst.tokens.json | **ChronoMind product section** | Shared base, own urgency colors | | 6 | Analytics | Plausible vs PostHog vs telemetry | **Platform-service telemetry** | Free, self-hosted, integrated | | 7 | Phase 3 scope | iOS + Watch + Mac vs iOS + Watch | **iOS + Watch; Mac in Phase 4** | 4 weeks already aggressive | | 8 | Calendar sync | Two-way vs one-way | **One-way (read-only)** | Two-way is fragile | | 9 | Body doubling | Phase 5 vs v3 | **Defer to v3** | Needs Event Bus infrastructure | | 10 | Domain name | chronomind.app vs .io | **Check availability pre-Phase 1** | Needed for deployment | | 11 | Open-source | Full vs closed vs hybrid | **Hybrid: open timer engine lib** | Credibility + community | | 12 | Windows/Tauri | Phase 5 vs Phase 6 vs v3 | **Defer to v3** | Focus on mobile first | | 13 | AKV secrets | Own CHRONO_SECRETS vs share | **Share Cosmos/JWT, own Stripe** | productId partitions data | | 14 | Fonts | ByteLyst (DM Sans) vs own (Inter) | **Own: Inter + JetBrains Mono** | Superior digit rendering | > **Windows/Tauri note:** PRD lists Windows as v2.0 target. Deferred to v3 — insufficient market signal to justify Tauri investment before mobile platforms are stable. Revisit after Phase 5 Android launch.