Difficulty: Intermediate
Type: Bug
Background
CONTRIBUTING.md's PR Quality Expectations explicitly require that "any new route or component must handle loading, error, and empty states," implying this is an established project standard. The /guilds and /integrations routes are newer additions (the /integrations route is not yet mentioned in the top-level README's route list, only in CONTRIBUTING.md), and are good candidates for inconsistent state handling relative to older, more mature routes like /dashboard or /passes.
Problem
The /guilds and /integrations pages currently show inconsistent (or missing) handling for the loading, error, and empty-result states compared to other dashboard routes, creating a jarring experience (e.g. a blank page instead of a skeleton, or an unstyled error message).
Expected outcome
Both routes use the same shared loading skeleton, error boundary/message pattern, and empty-state component already established elsewhere in the dashboard (or a newly extracted shared version of it), so the UX is consistent across all routes.
Suggested implementation
- Audit
/dashboard, /passes, /members, /activity for their current loading/error/empty patterns.
- Extract a shared
<LoadingSkeleton />, <ErrorState />, and <EmptyState /> (or equivalent) into a shared components directory if not already present.
- Apply them consistently to
/guilds and /integrations.
- Add basic tests/snapshots asserting each state renders for each of the two routes.
Acceptance criteria
Likely affected files/directories
apps/dashboard/app/guilds/, apps/dashboard/app/integrations/, shared UI component directory (e.g. apps/dashboard/components/).
Difficulty: Intermediate
Type: Bug
Background
CONTRIBUTING.md's PR Quality Expectations explicitly require that "any new route or component must handle loading, error, and empty states," implying this is an established project standard. The/guildsand/integrationsroutes are newer additions (the/integrationsroute is not yet mentioned in the top-level README's route list, only inCONTRIBUTING.md), and are good candidates for inconsistent state handling relative to older, more mature routes like/dashboardor/passes.Problem
The
/guildsand/integrationspages currently show inconsistent (or missing) handling for the loading, error, and empty-result states compared to other dashboard routes, creating a jarring experience (e.g. a blank page instead of a skeleton, or an unstyled error message).Expected outcome
Both routes use the same shared loading skeleton, error boundary/message pattern, and empty-state component already established elsewhere in the dashboard (or a newly extracted shared version of it), so the UX is consistent across all routes.
Suggested implementation
/dashboard,/passes,/members,/activityfor their current loading/error/empty patterns.<LoadingSkeleton />,<ErrorState />, and<EmptyState />(or equivalent) into a shared components directory if not already present./guildsand/integrations.Acceptance criteria
/guildsand/integrationsrender a loading skeleton while data is fetching.CONTRIBUTING.md).pnpm --filter @guildpass/dashboard testandpnpm lintpass.Likely affected files/directories
apps/dashboard/app/guilds/,apps/dashboard/app/integrations/, shared UI component directory (e.g.apps/dashboard/components/).