| name | loading-empty-error-states |
| description | Design the three states every data UI forgets. Use for any component that fetches or lists data. |
| when_to_use | a list, a fetch, a dashboard, anything async in the UI |
Loading / Empty / Error States
AI-built UIs handle the happy path and crash on the other three. Design all four:
- Loading — skeletons that match the final layout (not a centered spinner that shifts everything).
- Empty — a real first-run state: what it is, and the one action to fill it. Not a blank box.
- Error — what failed, in human terms, plus a retry. Never a raw stack trace or silent nothing.
- Partial — slow/streaming data, optimistic updates that can roll back.
For each fetch in the diff, confirm all four exist. The empty and error states are where products feel broken.