feat(dashboard): add unified WidgetSkeleton loading states#2639
Conversation
GSSoC Label Checklist 🏷️@Umbrella-io — please apply the appropriate labels before merging: Difficulty (pick one):
Quality (optional):
Validation (required to score):
|
df40a6f to
0b552dd
Compare
|
CI is failing on this PR. Please fix the TypeScript/test errors before we can merge. Run |
cd4d42b to
da021bb
Compare
|
Hi @Priyanshu-byte-coder, |
|
New UI/feature PRs are on hold during the code quality sprint — see discussion #2651. PRs for tests, refactoring, bug fixes, docs, and performance are welcome. |
|
New feature/UI PRs are on hold during the code-quality sprint — see discussion #2651. We'll revisit after the sprint; tests, refactors, and bug-fix PRs are the priority right now. |
# Conflicts: # src/app/globals.css
fa34ca1 to
52ab2b5
Compare
|
Hi @Priyanshu-byte-coder, I’ve cleaned up the PR, resolved the conflicts, and all checks are passing now. I’ll keep it ready for review after the code-quality sprint. Thanks! |
d445d98
into
Priyanshu-byte-coder:main
|
🎉 Merged! Thanks for contributing to DevTrack. If the project has been useful to you, a ⭐ star on the repo is the easiest way to support it — it helps DevTrack get discovered by more developers. Keep an eye on open issues for your next contribution! |
Summary
Adds a unified loading skeleton system for dashboard widgets to eliminate layout shifts and loading flicker while data is being fetched. This improves perceived performance and provides a more polished user experience, especially on slower network connections.
Closes #2609
Type of Change
✨ New feature (non-breaking change that adds functionality)
⚡ Performance improvement
What Changed
Added a reusable
WidgetSkeletoncomponent for dashboard loading states.Added shimmer animation styles in
src/app/globals.css.Replaced existing ad-hoc loading placeholders and
animate-pulseimplementations with consistent skeleton layouts.Updated dashboard widgets to render structural skeletons that closely match final content dimensions.
Reduced layout shifts (CLS) when dashboard data loads.
Improved visual consistency across dashboard widgets.
Updated components include:
ContributionGraph
PRMetrics
GoalTracker
TopRepos
StreakTracker
WeeklySummaryCard
FriendComparison
IssueMetrics
PinnedRepos
ContributionHeatmap
PRBreakdownChart
CommitTimeChart
LanguageBreakdown
PersonalRecords
How to Test
Start the application locally.
Open the dashboard page.
Enable Slow 3G throttling in browser DevTools.
Refresh the dashboard.
Observe loading states for all widgets.
Expected result:
Skeletons appear immediately while data loads.
Skeleton dimensions closely match final widget layouts.
No noticeable layout shifts occur when data loads.
Shimmer animation displays correctly.
Widgets transition smoothly to loaded content.
Screenshots / Recordings
Before | After -- | -- Loading flicker and layout shifts | Consistent skeleton loading states with stable layoutChecklist
Linked the related issue above
Self-reviewed my own diff
No unnecessary
console.log, debug code, or commented-out blocksnpm run lintpasses locallyNo TypeScript errors (
pnpm run typecheck)Added or updated tests where applicable
Updated documentation / comments if behavior changed
Accessibility (UI changes only)
Keyboard navigation works correctly
Color contrast meets WCAG AA standard
Tested on responsive layouts
Additional Context
The existing test suite contains several pre-existing failing tests on the current main branch. Verification confirmed these failures are unrelated to this dashboard skeleton feature and were not introduced by this PR.
A Windows-specific
EPERMsymlink permission issue was encountered during standalone build output generation. No feature-related build errors were observed prior to that environment-specific step.