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)
- [ ] Define urgency level color mapping from `@bytelyst/design-tokens` + ChronoMind product section
- [ ] **Project scaffold**
- [ ] `npx create-next-app@latest` with Next.js 16, App Router, TypeScript
- [ ] TailwindCSS v4 setup + shadcn/ui init + Lucide React icons
- [ ] Zustand store with IndexedDB persistence (via `idb`)
- [ ] ESLint + Prettier + Vitest config
- [ ] Basic folder structure: `app/`, `components/`, `lib/`, `styles/`
- [ ] GitHub Actions CI: lint + typecheck + vitest on PR
- [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
- [ ] Analytics: platform-service telemetry module (or Plausible as lightweight fallback)
- [ ] Track: page views, timer created, timer completed, cascade fired, Pomodoro completed, PWA installed
- [ ] **Timer engine (`lib/timer-engine.ts`)**
- [ ] `Timer` interface with all fields (id, type, label, urgency, targetTime, duration, cascade, etc.)
- [ ] Create timer (alarm, countdown, pomodoro)
- [ ] Start / pause / resume / cancel countdown
- [ ] Timer state machine: `idle → active → warning → firing → snoozed → dismissed`
- [ ] `requestAnimationFrame` for UI countdown display (smooth 60fps in active tab)
- [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)
- [ ] Both contexts needed: rAF stops when tab hidden, SW runs in background
- [ ] Unit tests for timer state transitions
- [x] Both contexts needed: rAF stops when tab hidden, SW runs in background
- [x] Unit tests for timer state transitions (23 tests)
- [ ] **Pre-warning cascade (`lib/cascade.ts`)**
- [ ] 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)
- [ ] Custom cascade builder (user picks intervals)
- [ ] Cascade scheduler: calculate all warning timestamps from target time
- [ ] Cascade state tracking: which warnings have fired
- [ ] Unit tests for cascade calculation edge cases (past warnings, overlapping, etc.)
- [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)
- [ ] **Urgency system (`lib/urgency.ts`)**
- [ ] 5 levels: Critical, Important, Standard, Gentle, Passive
- [ ] Each level maps to: notification style, sound, vibration, visual intensity, snooze behavior
- [ ] Critical: persistent sound, full-screen overlay, no auto-dismiss
- [ ] Passive: badge only, no sound
- [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
- [ ] **Visual timeline dashboard (`components/Timeline.tsx`)**
- [ ] Vertical timeline showing all timers for today/upcoming
- [ ] Color-coded by urgency level
- [ ] Current time marker with smooth animation
- [ ] Pre-warning markers on timeline (small dots before each timer)
- [ ] Tap timer → expand to show details
- [ ] Empty state: "Your day is clear — set your first timer"
- [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"
- [ ] **Create timer flow (`app/(app)/create/`)**
- [ ] Quick timer: one-tap presets (5m, 15m, 25m Pomodoro, 1h)
- [ ] Alarm: date + time picker, label, urgency dropdown, cascade preset
- [ ] Countdown: duration picker (hours, minutes, seconds), label, urgency
- [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
- [ ] Save to Zustand store → IndexedDB
- [x] Save to Zustand store → localStorage
- [ ] **Large digital clock (`components/Clock.tsx`)**
- [ ] Current time with seconds, subtle glow effect
- [ ] Date display below
- [ ] Next timer countdown shown prominently
- [ ] Responsive: hero on landing, compact in app header
- [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
- [ ] **Notifications (`lib/notifications.ts`)**
- [ ] Request notification permission on first timer creation
- [x] **Notifications (`lib/notifications.ts`)** ([da4f3b5](https://github.com/saravanakumardb1/learning_ai_clock/commit/da4f3b5))
- [x] Request notification permission on first timer creation
- [ ] Service Worker registration via Serwist (`@serwist/next`)
- [ ] Schedule pre-warning notifications at cascade timestamps
- [ ] Different notification styles per urgency (title, body, icon, sound tag)
- [ ] Notification click → open app to timer detail
- [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
- [ ] Fallback: in-app toast if notifications denied
- [ ] **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
- [ ] Graceful fallback if audio blocked by browser
- [ ] **Tab title countdown (`lib/tab-title.ts`)**
- [ ] Show "⏱ 14:32 — Standup" in browser tab title
- [ ] Update every second for active timer
- [ ] Flash title when timer fires (alternating "🔔 TIME!" and timer label)
- [ ] Restore original title when no active timers
- [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
- [ ] Flash title when timer fires
- [x] Restore original title when no active timers
- [ ] **Alarm overlay (`components/AlarmOverlay.tsx`)**
- [ ] Full-screen overlay for CRITICAL urgency
- [ ] Pulsing animation, sound playing
- [ ] Large "Dismiss" button (with confirmation for Critical)
- [ ] "Snooze 5m / 10m / 15m / custom" buttons
- [ ] Cannot be accidentally dismissed (swipe-to-dismiss disabled for Critical)
- [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")
- [ ] **Pomodoro timer (`components/PomodoroView.tsx`)**
- [ ] Work/break cycle configuration (default: 25m work, 5m break, 4 rounds, 15m long break)
- [ ] Visual progress ring showing time remaining
- [ ] Round counter (e.g., "Round 2 of 4")
- [ ] Auto-transition between work and break
- [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
- [ ] 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`)
- [ ] Manual toggle in header
- [ ] Theme persisted to localStorage
- [ ] All components themed via CSS custom properties + Tailwind dark mode
- [x] Manual toggle in header (Sun/Moon icon)
- [x] Theme persisted to localStorage
- [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
- [ ] 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
- [ ] 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**
- [ ] `N` — new timer
- [ ] `Q` — quick timer modal
- [ ] `Space` — start/pause active timer
- [ ] `Esc` — dismiss alarm / close modal
- [ ] `?` — show shortcuts overlay
- [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
- [ ] **Landing page (`app/page.tsx`)**
- [ ] Hero: animated clock + tagline "Never be caught off-guard again"
- [ ] 3 key features with icons (Pre-warnings, Visual Timeline, Smart Urgency)
- [ ] "Try it now" button → app dashboard (no signup needed)
- [ ] Social proof section (placeholder for future testimonials)
- [ ] Footer: links, GitHub, privacy
- [ ] Privacy policy page (`/privacy`) — required before any data collection or App Store submission
- [ ] Terms of service page (`/terms`)
- [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`)
- [ ] **First-run onboarding**
- [ ] 3-step walkthrough: create timer → set cascade → see timeline