Summary
The dashboard is fully static after load — users must manually refresh to see new commits, streak changes,
or goal updates. Add Supabase Realtime subscriptions so widgets update live when underlying data changes
(e.g. after a streak freeze is applied, goal progress updates, or a new session starts).
Problem
- Streak Tracker shows stale data if a freeze is applied in another tab
- Goal progress bars don't update without a full page reload
- No visual feedback that data is live vs cached
Proposed Solution
Use Supabase's supabase.channel() Realtime API to subscribe to row-level changes:
| Table |
Event |
Widget to update |
streak_freezes |
INSERT / DELETE |
StreakTracker.tsx |
goals |
INSERT / UPDATE / DELETE |
GoalTracker.tsx |
users |
UPDATE |
DashboardHeader.tsx |
- Subscribe on component mount, unsubscribe on unmount (proper cleanup)
- Use React state to apply delta updates without full re-fetch
- Show a pulsing green dot "Live" indicator in
DashboardHeader when connected
- Graceful degradation: if Realtime connection drops, fall back to a 60s polling interval
Acceptance Criteria
I would like to work on this under GSSoC
Summary
The dashboard is fully static after load — users must manually refresh to see new commits, streak changes,
or goal updates. Add Supabase Realtime subscriptions so widgets update live when underlying data changes
(e.g. after a streak freeze is applied, goal progress updates, or a new session starts).
Problem
Proposed Solution
Use Supabase's
supabase.channel()Realtime API to subscribe to row-level changes:streak_freezesStreakTracker.tsxgoalsGoalTracker.tsxusersDashboardHeader.tsxDashboardHeaderwhen connectedAcceptance Criteria
streak_freezes,goals,userstablesStreakTracker.tsxre-renders automatically on freeze INSERT/DELETEGoalTracker.tsxre-renders automatically on goal INSERT/UPDATE/DELETEI would like to work on this under GSSoC