Priority: high
Description
When API calls fail, the frontend currently shows nothing or a raw error string. Each data-fetching component needs a proper error state with a message and a retry action.
Acceptance Criteria
- Error state shows a human-readable message (not a stack trace)
- A 'Try again' button triggers a retry of the failed request
- Error state is visually distinct from empty state
- Network errors and 5xx errors both trigger the error state
- Error is cleared when a retry succeeds
Priority: high
Description
When API calls fail, the frontend currently shows nothing or a raw error string. Each data-fetching component needs a proper error state with a message and a retry action.
Acceptance Criteria