KPI Tracker โ€” Web vs Mobile

Feature parity analysis

Generated Feb 24, 2026 ยท Codebase snapshot

14
Shared Features
3
Web Only
3
Mobile Only

Feature Comparison

Feature ๐ŸŒ Web ๐Ÿ“ฑ Mobile
1. Authentication
Email/password sign up & in โœ… Supabase AuthEmail confirmation flow โœ… Supabase AuthEmail confirmation flow
Google OAuth โœ… Google OAuth via Supabase โŒ Not implementedEmail/password only
Logout โœ… Via sidebar/nav โœ… Profile screen with confirmation dialog
Protected routes โœ… ProtectedRoute component โœ… Auth guard in _layout.js
2. KPI Management
Create KPI (recurring) โœ… KPIForm dialog in Settings โœ… KPIForm modal in Settings
Edit KPI โœ… Edit button per KPI row โœ… Pencil icon per KPI row
Delete KPI โœ… Trash icon, instant โœ… Trash icon + confirmation Alert
Data types (boolean/number/range) โœ… All three โœ… All three
Cadence (daily/weekly/monthly/yearly/once) โœ… Full cadence engine โœ… Full cadence engine (ported)
Display IDs (e.g. K3, T5) โœ… displayPrefix + displayId โœ… ID badges shown in Settings
Drag-assign KPIs to categories โœ… DnD with react-dnd (HTML5) โœ… KPIDragAssign component
3. Daily Check-in
Log boolean/number/range values โœ… KPIItem inline controls โœ… KPIItem inline controls
Date picker / navigation โœ… Calendar DatePicker popup โœ… Horizontal date pill scroller (14 days)
Quick add to-do (one-off task) โœ… "+" button โ†’ dialog with cadence=once โœ… FAB โ†’ bottom sheet modal
Category-grouped KPI list โœ… KPICategoryList with adjustable width โœ… KPICategoryList (native)
Column width slider โœ… Desktop only (md+ breakpoint) โŒ Not applicable (single-column mobile)
4. Dashboard / Overview
Today's completion ring โœ… CompletionRing component โœ… CompletionRing (SVG-based)
Streak cards grid โœ… 2-column grid, scroll area โœ… 2-column grid with row layout
Stats summary pills โŒ Not present โœ… Active KPIs, Today %, Best Streak
Pull-to-refresh โŒ N/A (desktop browser) โœ… RefreshControl on Dashboard + Check-in
5. Streaks
Streak calculation โœ… In supabaseStore (inline) โœ… Dedicated streakCalc.js + streakCalculator.js
Current + longest streak display โœ… StreakCard component โœ… StreakCard component
6. Categories
CRUD categories โœ… CrudTable in Settings tab โœ… CategoryManager component
Reorder categories โœ… Drag handles in CrudTable โœ… CategoryManager (sortOrder)
7. Voice Commands
Voice recording โœ… MediaRecorder API (WebM) โœ… expo-av Recording (M4A)
AI command parsing (Gemini) โœ… Supabase Edge Function ai-proxy โœ… Same edge function
Conversational chat mode โœ… VoiceChatPanel with message history, text + voice input โŒ Single-shot voice onlyNo text input, no multi-turn chat
Command by display ID โœ… "Mark K3 done" via resolveDisplayId โœ… Same resolveDisplayId logic
Dedicated voice screen โŒ Slide-up panel (no dedicated page) โœ… Full tab screen with pulse animation + command history
8. Notifications / Reminders
Notification rule CRUD โœ… Settings โ†’ Notifications tab โœ… Settings โ†’ Notifications tab
Frequency (hourly/daily/weekly) โœ… Dropdown select โœ… Pill toggle buttons
Time window (start/end hour) โœ… TimeSelect component โœ… Hour picker modal
Actual push notifications โš ๏ธ Simulated only (noted in UI) โš ๏ธ Rules saved but no push integration yet
9. Settings & Profile
Profile screen โŒ No dedicated profile page โœ… Avatar, stats summary, account info, web link
Overdue task auto-reschedule โœ… OverdueTaskBadge + auto-move logic in store โœ… Same logic ported in store.js
10. Real-time Sync
Supabase Realtime subscription โœ… RealtimeProvider wraps pagespostgres_changes on categories, kpis, records, notifications โœ… initializeRealtime in storeSame channel subscriptions
Cross-device sync โœ… Via Supabase โœ… Via Supabase
11. Other
Data export โŒ Not implemented โŒ Not implemented
Templates โŒ Not implemented โŒ Not implemented

Parity Gaps โ€” What to Build Next

๐Ÿ“ฑ Mobile Needs from Web

  1. Google OAuth sign-in High Web has "Continue with Google" via Supabase OAuth. Mobile only has email/password. Friction reducer for onboarding.
  2. Conversational voice chat Medium Web has a multi-turn chat panel (text + voice, message history). Mobile is single-shot record โ†’ execute. Adding chat would make voice dramatically more useful.
  3. Auth state cleanup utility Low Web has authCleanup.ts that purges stale Supabase tokens from localStorage before sign-in. Mobile should clear AsyncStorage equivalents.

๐ŸŒ Web Needs from Mobile

  1. Dashboard stats summary High Mobile has 3 stat pills (Active KPIs, Today %, Best Streak) at the top of Dashboard. Web has none โ€” just the ring and streak cards. Easy win.
  2. Profile page Medium Mobile shows avatar, email, account status, stats (KPIs/Recurring/Categories/Records), version, link to web app. Web has zero profile UI.
  3. Dedicated voice screen with history Low Mobile has a full voice tab with pulse animation, hint examples, and scrollable command history. Web only has a slide-up panel. Nice to have.

๐Ÿšง Missing from Both Platforms

FeatureNotes
Data export (CSV/JSON) No export capability on either platform. Users can't download their data.
KPI templates No pre-built template library. Every KPI must be created from scratch.
Actual push notifications Both store notification rules in Supabase but neither delivers real notifications. Web notes this is "simulated."
Charts / trend graphs Dashboard shows completion ring and streak cards, but no historical trend charts or graphs.