docs: update roadmap.md with Phase 1 progress checkmarks and commit links
This commit is contained in:
parent
02f9a5fc12
commit
a3ebb9fd6d
170
docs/roadmap.md
170
docs/roadmap.md
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user