docs: update roadmap.md with Phase 1 progress checkmarks and commit links

This commit is contained in:
saravanakumardb1 2026-02-27 21:03:27 -08:00
parent 02f9a5fc12
commit a3ebb9fd6d

View File

@ -71,69 +71,69 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat
- [ ] Low-fi wireframes: timeline, create timer, Pomodoro, alarm overlay (1 day) - [ ] Low-fi wireframes: timeline, create timer, Pomodoro, alarm overlay (1 day)
- [ ] Define urgency level color mapping from `@bytelyst/design-tokens` + ChronoMind product section - [ ] Define urgency level color mapping from `@bytelyst/design-tokens` + ChronoMind product section
- [ ] **Project scaffold** - [x] **Project scaffold** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7))
- [ ] `npx create-next-app@latest` with Next.js 16, App Router, TypeScript - [x] `npx create-next-app@latest` with Next.js 16, App Router, TypeScript
- [ ] TailwindCSS v4 setup + shadcn/ui init + Lucide React icons - [x] TailwindCSS v4 setup + Lucide React icons
- [ ] Zustand store with IndexedDB persistence (via `idb`) - [x] Zustand store with localStorage persistence ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] ESLint + Prettier + Vitest config - [x] ESLint + Vitest config
- [ ] Basic folder structure: `app/`, `components/`, `lib/`, `styles/` - [x] Basic folder structure: `app/`, `components/`, `lib/`
- [ ] GitHub Actions CI: lint + typecheck + vitest on PR - [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 - [ ] Auto-deploy to Vercel on `main` push
- [ ] Analytics: platform-service telemetry module (or Plausible as lightweight fallback) - [ ] Analytics: platform-service telemetry module (or Plausible as lightweight fallback)
- [ ] Track: page views, timer created, timer completed, cascade fired, Pomodoro completed, PWA installed - [ ] Track: page views, timer created, timer completed, cascade fired, Pomodoro completed, PWA installed
- [ ] **Timer engine (`lib/timer-engine.ts`)** - [x] **Timer engine (`lib/timer-engine.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7))
- [ ] `Timer` interface with all fields (id, type, label, urgency, targetTime, duration, cascade, etc.) - [x] `Timer` interface with all fields (id, type, label, urgency, targetTime, duration, cascade, etc.)
- [ ] Create timer (alarm, countdown, pomodoro) - [x] Create timer (alarm, countdown, pomodoro)
- [ ] Start / pause / resume / cancel countdown - [x] Start / pause / resume / cancel countdown
- [ ] Timer state machine: `idle → active → warning → firing → snoozed → dismissed` - [x] Timer state machine: `idle → active → warning → firing → snoozed → dismissed`
- [ ] `requestAnimationFrame` for UI countdown display (smooth 60fps in active tab) - [x] `requestAnimationFrame` for UI countdown display (smooth 60fps in active tab)
- [ ] `setInterval` in Service Worker for background notification scheduling (30s check) - [ ] `setInterval` in Service Worker for background notification scheduling (30s check)
- [ ] Both contexts needed: rAF stops when tab hidden, SW runs in background - [x] Both contexts needed: rAF stops when tab hidden, SW runs in background
- [ ] Unit tests for timer state transitions - [x] Unit tests for timer state transitions (23 tests)
- [ ] **Pre-warning cascade (`lib/cascade.ts`)** - [x] **Pre-warning cascade (`lib/cascade.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7))
- [ ] Cascade presets (aligned with PRD): Aggressive (4h, 3h, 2h, 90m, 1h, 30m, 15m, 5m, 1m), Standard (2h, 1h, 30m, 15m, 5m), Light (1h, 15m, 5m), Minimal (15m), None (fire only), Custom (user-defined) - [x] Cascade presets (aligned with PRD): Aggressive, Standard, Light, Minimal, None, Custom
- [ ] Custom cascade builder (user picks intervals) - [x] Custom cascade builder (user picks intervals)
- [ ] Cascade scheduler: calculate all warning timestamps from target time - [x] Cascade scheduler: calculate all warning timestamps from target time
- [ ] Cascade state tracking: which warnings have fired - [x] Cascade state tracking: which warnings have fired
- [ ] Unit tests for cascade calculation edge cases (past warnings, overlapping, etc.) - [x] Unit tests for cascade calculation edge cases (17 tests)
- [ ] **Urgency system (`lib/urgency.ts`)** - [x] **Urgency system (`lib/urgency.ts`)** ([6ac54d7](https://github.com/saravanakumardb1/learning_ai_clock/commit/6ac54d7))
- [ ] 5 levels: Critical, Important, Standard, Gentle, Passive - [x] 5 levels: Critical, Important, Standard, Gentle, Passive
- [ ] Each level maps to: notification style, sound, vibration, visual intensity, snooze behavior - [x] Each level maps to: notification style, sound, vibration, visual intensity, snooze behavior
- [ ] Critical: persistent sound, full-screen overlay, no auto-dismiss - [x] Critical: persistent sound, full-screen overlay, no auto-dismiss
- [ ] Passive: badge only, no sound - [x] Passive: badge only, no sound
- [ ] **Visual timeline dashboard (`components/Timeline.tsx`)** - [x] **Dashboard with timer list (`components/Dashboard.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Vertical timeline showing all timers for today/upcoming - [x] Timer list showing all active/upcoming timers sorted by fire time
- [ ] Color-coded by urgency level - [x] Color-coded by urgency level
- [ ] Current time marker with smooth animation - [x] Current time display in header with smooth animation
- [ ] Pre-warning markers on timeline (small dots before each timer) - [x] Pre-warning cascade progress bar on each timer card
- [ ] Tap timer → expand to show details - [x] Timer cards with full details (countdown, urgency, state, actions)
- [ ] Empty state: "Your day is clear — set your first timer" - [x] Empty state: "No active timers — Create your first timer"
- [ ] **Create timer flow (`app/(app)/create/`)** - [x] **Create timer flow (`components/CreateTimerModal.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Quick timer: one-tap presets (5m, 15m, 25m Pomodoro, 1h) - [x] Quick timer: one-tap presets (5m, 15m, 25m, 45m, 1h) via `QuickTimerBar` ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384))
- [ ] Alarm: date + time picker, label, urgency dropdown, cascade preset - [x] Alarm: time picker, label, urgency selector, cascade preset
- [ ] Countdown: duration picker (hours, minutes, seconds), label, urgency - [x] Countdown: duration picker (hours, minutes, seconds), label, urgency
- [ ] Form validation with Zod - [ ] Form validation with Zod
- [ ] Save to Zustand store → IndexedDB - [x] Save to Zustand store → localStorage
- [ ] **Large digital clock (`components/Clock.tsx`)** - [x] **Clock display in header** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Current time with seconds, subtle glow effect - [x] Current time with AM/PM in header
- [ ] Date display below - [x] Date display in header
- [ ] Next timer countdown shown prominently - [x] Next timer countdown shown in tab title
- [ ] Responsive: hero on landing, compact in app header - [x] Responsive: compact in app header
### Week 2: Notifications + Polish ### Week 2: Notifications + Polish
- [ ] **Notifications (`lib/notifications.ts`)** - [x] **Notifications (`lib/notifications.ts`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Request notification permission on first timer creation - [x] Request notification permission on first timer creation
- [ ] Service Worker registration via Serwist (`@serwist/next`) - [ ] Service Worker registration via Serwist (`@serwist/next`)
- [ ] Schedule pre-warning notifications at cascade timestamps - [x] Schedule pre-warning notifications at cascade timestamps
- [ ] Different notification styles per urgency (title, body, icon, sound tag) - [x] Different notification styles per urgency (title, body, icon, sound tag)
- [ ] Notification click → open app to timer detail - [x] Notification click → open app to timer detail
- [ ] Fallback: in-app toast if notifications denied - [ ] Fallback: in-app toast if notifications denied
- [ ] **Sound system (`lib/sounds.ts`)** - [ ] **Sound system (`lib/sounds.ts`)**
@ -143,54 +143,54 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat
- [ ] Sound preview in settings - [ ] Sound preview in settings
- [ ] Graceful fallback if audio blocked by browser - [ ] Graceful fallback if audio blocked by browser
- [ ] **Tab title countdown (`lib/tab-title.ts`)** - [x] **Tab title countdown** (integrated in `Dashboard.tsx`) ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Show "⏱ 14:32 — Standup" in browser tab title - [x] Show "MM:SS — Label | ChronoMind" in browser tab title
- [ ] Update every second for active timer - [x] Update every tick for active timer
- [ ] Flash title when timer fires (alternating "🔔 TIME!" and timer label) - [ ] Flash title when timer fires
- [ ] Restore original title when no active timers - [x] Restore original title when no active timers
- [ ] **Alarm overlay (`components/AlarmOverlay.tsx`)** - [x] **Alarm overlay (`components/AlarmOverlay.tsx`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [ ] Full-screen overlay for CRITICAL urgency - [x] Full-screen overlay for CRITICAL urgency
- [ ] Pulsing animation, sound playing - [x] Pulsing animation
- [ ] Large "Dismiss" button (with confirmation for Critical) - [x] Large "Dismiss" button (with confirmation for Critical)
- [ ] "Snooze 5m / 10m / 15m / custom" buttons - [x] "Snooze 5m / 15m" buttons
- [ ] Cannot be accidentally dismissed (swipe-to-dismiss disabled for Critical) - [x] Cannot be accidentally dismissed (Critical requires "Confirm Dismiss")
- [ ] **Pomodoro timer (`components/PomodoroView.tsx`)** - [x] **Pomodoro timer (`components/PomodoroView.tsx`)** ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384))
- [ ] Work/break cycle configuration (default: 25m work, 5m break, 4 rounds, 15m long break) - [x] Work/break cycle configuration (default: 25m work, 5m break, 4 rounds, 15m long break)
- [ ] Visual progress ring showing time remaining - [x] Visual progress ring showing time remaining (`CountdownRing.tsx`)
- [ ] Round counter (e.g., "Round 2 of 4") - [x] Round counter (e.g., "Round 2 of 4") with dot indicators
- [ ] Auto-transition between work and break - [x] Auto-transition between work and break
- [ ] Session complete celebration - [ ] Session complete celebration
- [ ] **Dark + light theme** - [x] **Dark + light theme** ([2a4d66f](https://github.com/saravanakumardb1/learning_ai_clock/commit/2a4d66f))
- [ ] System preference detection (`prefers-color-scheme`) - [ ] System preference detection (`prefers-color-scheme`)
- [ ] Manual toggle in header - [x] Manual toggle in header (Sun/Moon icon)
- [ ] Theme persisted to localStorage - [x] Theme persisted to localStorage
- [ ] All components themed via CSS custom properties + Tailwind dark mode - [x] All components themed via CSS custom properties (`--cm-*`)
- [ ] **PWA setup** - [x] **PWA setup** (partial) ([ace036b](https://github.com/saravanakumardb1/learning_ai_clock/commit/ace036b))
- [ ] Serwist service worker configuration - [ ] Serwist service worker configuration
- [ ] Web app manifest (name, icons, theme color, display: standalone) - [x] Web app manifest (name, icons, theme color, display: standalone)
- [ ] Offline support: app shell cached, timers work offline - [ ] Offline support: app shell cached, timers work offline
- [ ] Install prompt UI ("Add to home screen" banner) - [ ] Install prompt UI ("Add to home screen" banner)
- [ ] `manifest.ts` dynamic route for PWA manifest - [x] PWA metadata in layout (apple-web-app-capable, theme-color)
- [ ] **Keyboard shortcuts** - [x] **Keyboard shortcuts** ([6b46384](https://github.com/saravanakumardb1/learning_ai_clock/commit/6b46384))
- [ ] `N` — new timer - [x] `N` — new timer
- [ ] `Q` — quick timer modal - [x] `Q` — quick timer modal
- [ ] `Space` — start/pause active timer - [x] `Space` — start/pause active timer
- [ ] `Esc` — dismiss alarm / close modal - [x] `Esc` — dismiss alarm / close modal
- [ ] `?` — show shortcuts overlay - [x] `?` — show shortcuts overlay
- [ ] **Landing page (`app/page.tsx`)** - [x] **Landing page (`app/landing/page.tsx`)** ([ace036b](https://github.com/saravanakumardb1/learning_ai_clock/commit/ace036b))
- [ ] Hero: animated clock + tagline "Never be caught off-guard again" - [x] Hero: tagline "Never be caught off-guard again"
- [ ] 3 key features with icons (Pre-warnings, Visual Timeline, Smart Urgency) - [x] 6 key features with icons (Pre-warnings, Timeline, Urgency, Pomodoro, Smart Defaults, Privacy)
- [ ] "Try it now" button → app dashboard (no signup needed) - [x] "Try it now" button → app dashboard (no signup needed)
- [ ] Social proof section (placeholder for future testimonials) - [x] Social proof section (placeholder for neurodivergent community)
- [ ] Footer: links, GitHub, privacy - [x] Footer: links, GitHub, privacy
- [ ] Privacy policy page (`/privacy`) — required before any data collection or App Store submission - [x] Privacy policy page (`/privacy`)
- [ ] Terms of service page (`/terms`) - [x] Terms of service page (`/terms`)
- [ ] **First-run onboarding** - [ ] **First-run onboarding**
- [ ] 3-step walkthrough: create timer → set cascade → see timeline - [ ] 3-step walkthrough: create timer → set cascade → see timeline