Skip to content

Standardize loading, error, and empty states across the Guilds and Integrations pages #255

Description

@Lakes41

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

  • /guilds and /integrations render a loading skeleton while data is fetching.
  • Both routes render a clear, styled error message on fetch failure (simulate via a forced error in mock mode).
  • Both routes render a distinct empty state when there are zero guilds/integrations.
  • Visual style matches the rest of the dashboard (mobile-first Tailwind, per CONTRIBUTING.md).
  • pnpm --filter @guildpass/dashboard test and pnpm lint pass.

Likely affected files/directories
apps/dashboard/app/guilds/, apps/dashboard/app/integrations/, shared UI component directory (e.g. apps/dashboard/components/).

Metadata

Metadata

Assignees

Labels

GrantFox OSSGrantFox Open Source Sponsorship program tagMaybe RewardedIssue may qualify for a reward upon successful completion per campaign rulesOfficial Campaign | FWC26Official FWC26 campaign issue — eligible for campaign scoring and rewardsbugConfirmed defect or incorrect behavior that needs to be fixeddashboardAutomatically createdui/uxUser interface or user experience improvements and design work

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions