empty-states
Skill1 starsChanged 43 days agoMITView on GitHub
Finds lists, tables, search results and dashboards that show nothing, or just a bare line of text, when there's no data. Works out why each one would be empty, then builds an empty state with a short explanation and one action. Use after the design-system pipeline, or when an app looks broken before it has any data.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- ainurdev/mystical-assistanttheir own version, first seen Nov 8, 2026
- soilmass/motion-design-agenttheir own version, first seen Nov 8, 2026
- KyaniteLabs/tastechecktheir own version, first seen Nov 2, 2026
- VectorLabAU/skillstheir own version, first seen Oct 11, 2026
- Dragoon0x/product-skillstheir own version, first seen Feb 24, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- KyaniteLabs/tastecheck★ 12same name
- ainurdev/mystical-assistant★ 7same name
- soilmass/motion-design-agent★ 7same name
- Dragoon0x/product-skills★ 4same name
- VectorLabAU/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- apply-transitionsSkill
- beautifySkill
- choose-iconsSkill
- design-applySkill
- design-enforceSkill
- design-extractSkill
- design-grillSkill
- design-ratifySkill
- design-systemSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 55
Use existing components: the same buttons, font sizes and spacing as the rest of the app.
- Very specific: line 63
If there are three or more, make one shared <EmptyState> component that takes an icon, title, description and action.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Empty States
Find places that show nothing when there's no data, and give each one a proper empty state.
Step 1: Find them
# loops over data
grep -rn -E '\{#each|\.map\(|v-for=' src --include="*.svelte" --include="*.tsx" --include="*.vue" | head -40
# bare "no items" text
grep -rn -iE '"(no |empty|nothing |none )' src --include="*.svelte" --include="*.tsx" | head -30
# checks for an empty list
grep -rn -E '\.length\s*===?\s*0|\.length\s*<\s*1|!\w+\.length' src --include="*.svelte" --include="*.tsx" | head -30Sort what you find into three groups:
- Nothing at all. Shows an empty box. The user can't tell it apart from something that failed to load.
- Bare text. Something like
<p>No items</p>. It says it's empty, but not why or what to do next. - Already done. Has an icon, an explanation and an action. Leave these alone.
Fix the ones most people see first. The list a new user sees right after signing up comes before a filtered admin screen.
Step 2: Work out why it's empty
Why it's empty decides what it should say. The wrong message contradicts what the user just did.
| Type | Why it's empty | What to show |
| First use | New account, nothing created yet | What the feature does, and a button to create the first item |
| Cleared | The user finished or deleted everything | Acknowledge it. Don't explain the feature again |
| No results | A search or filter matched nothing | Repeat what they searched for, and offer to clear it |
| Error or no access | The request failed, or they don't have permission | What happened, and how to fix it |
For example, showing a "get started" message to someone who just cleared their list makes it look like the product forgot what they did.
Step 3: Build it
Four parts, in this order:
- Icon. 32 to 48px, in
text-muted-foreground, from the project's icon library. - Headline. Say what's missing, in a neutral way. "No projects yet", not "Empty".
- Explanation. One line on what this feature does. Skip it for cleared states.
- Action. One button that fixes the situation. For no results, that's clearing the search or filter, not creating something new.
Rules:
- Use existing components: the same buttons, font sizes and spacing as the rest of the app.
- Center it vertically, and keep the text narrow with
max-w-sm. - Only one action.
- Describe problems as facts, not as the user's fault. "No results for 'xyz'", not "You didn't find anything".
- While data is loading, show a loading skeleton. Only show the empty state once the data has come back empty. Showing it while a request is still running tells the user something that isn't true.
Step 4: Make a shared component if it repeats
If there are three or more, make one shared <EmptyState> component that takes an icon, title, description and action. With fewer than three, keep them inline.
Report
For each empty state: the file, its type, and what it showed before. List the components you used and confirm none of them are new. Point out any message that needs the product's own voice instead of placeholder wording.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

