Difficulty: Intermediate
Type: UI/UX
Background
Currently, data (even mock data) likely renders instantly or with a blank/flash state, since there's no shared loading pattern across routes.
Problem
When data fetching is eventually async (real API), the UI has no consistent loading state, and even now, page transitions can flash empty content, hurting perceived performance and polish.
Expected outcome
Each main route (/dashboard, /passes, /guilds, /members, /activity) shows a skeleton loader matching its layout while data is loading, using Next.js 14's loading.tsx convention.
Suggested implementation
- Create a shared
Skeleton primitive component styled with Tailwind.
- Add
loading.tsx files per route segment under apps/dashboard/app/.
- Compose route-specific skeletons (table skeleton, stat-card skeleton, list skeleton) from the shared primitive.
Acceptance criteria
Likely affected files/directories
apps/dashboard/app/**/loading.tsx
apps/dashboard/components/ (new shared Skeleton component)
Difficulty: Intermediate
Type: UI/UX
Background
Currently, data (even mock data) likely renders instantly or with a blank/flash state, since there's no shared loading pattern across routes.
Problem
When data fetching is eventually async (real API), the UI has no consistent loading state, and even now, page transitions can flash empty content, hurting perceived performance and polish.
Expected outcome
Each main route (
/dashboard,/passes,/guilds,/members,/activity) shows a skeleton loader matching its layout while data is loading, using Next.js 14'sloading.tsxconvention.Suggested implementation
Skeletonprimitive component styled with Tailwind.loading.tsxfiles per route segment underapps/dashboard/app/.Acceptance criteria
Likely affected files/directories
apps/dashboard/app/**/loading.tsxapps/dashboard/components/(new shared Skeleton component)