web-ui
Skill1 starsChanged 3 days agoMITView on GitHub
Build web UI from HeroUI v3 pieces with one design language, in any framework: React, Next.js, Vite, Vue, Astro, or plain HTML. Use when creating or restyling any page, component, layout, form, dashboard, landing page, or app shell, so the result looks designed rather than generic AI output.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- dimastriann/odoo-erp-mcptheir own version, first seen Nov 8, 2026
- emergent-wisdom/understanding-graphtheir own version, first seen Nov 1, 2026
- darknecrocities/SkillBuildertheir own version, first seen Nov 1, 2026
- MKS-01/appscreenmaptheir own version, first seen Oct 17, 2026
- nc9/skillstheir own version, first seen Sep 19, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- darknecrocities/SkillBuilder★ 13same name
- nc9/skills★ 4same name
- dimastriann/odoo-erp-mcp★ 2same name
- MKS-01/appscreenmap★ 2same name
- emergent-wisdom/understanding-graph★ 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 repository14 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- address-review-findingsSkill
- git-messagesSkill
- heroui-reactSkill
- model-rolesSkill
- principle-boundary-disciplineSkill
- principle-encode-lessons-in-structureSkill
- principle-type-system-disciplineSkill
- pr-reviewSkill
- ship-a-changeSkill
- technical-writingSkill
- typescript-best-practicesSkill
- unslopSkill
- verify-before-prSkill
The file
We split this skill into the rules it gives an agent
12 rules. 0 are common, 7 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 26
Start minimal: Use the bare component first.
- Distinctive: line 38
Check the result against the rules in "Don't ship slop" before you call it done.
- Distinctive: line 94
Every element wrapped in a border and a shadow.
- Distinctive: line 104
Check the rendered page before you call it done.
- Distinctive: line 106
Start the dev server.
- Very specific: line 107
Run playwright-cli open http://localhost:<port>.
- Very specific: line 108
Run playwright-cli resize 375 812, then playwright-cli screenshot --filename=<tmp dir>/mobile.png.
- Distinctive: line 109
Read both screenshots. Fix what breaks the rules above, such as overflow at 375 px, raw colors, or a missing state.
- Very specific: line 110
Run npx impeccable detect <src dir> and npx impeccable detect http://localhost:<port>.
- Distinctive: line 113
Don't install Impeccable's skills or commands.
- Very specific: line 117
Search the component list first: references/css-classes.md, or node scripts/list_components.mjs in the heroui-react skill.
- Very specific: line 119
If you still need a new element, build it only from tokens: bg-surface, text-muted, border-separator, rounded-2xl, and the spacing scale.
“Common” is measured: kept by at least 6 in 10 of the 5 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
Web UI
Build every interface from one kit: HeroUI v3 on Tailwind CSS v4. Treat its components as fixed pieces. Compose them into pages. Don't invent new visual styles.
The kit has two layers, and the framework decides which one you use:
| Framework | Use | How |
| React, Next.js, Vite + React, Remix, Astro islands | @heroui/react | Compound components: <Card><Card.Header>. Load the heroui-react skill for props and docs. |
| Vue, Svelte, Solid, Astro, plain HTML | @heroui/styles | The same CSS on native elements, through BEM classes: <button class="button button--primary">. See references/css-classes.md. |
Both layers read the same theme variables, so a Vue page and a React page from this skill look like one product.
Principles
These principles come from HeroUI's design principles (references/design-principles.md).
- Name the intent, not the look. Variants are
primary,secondary,tertiary, anddanger, never "blue" or "outlined". Primary means the one action that moves the user forward. - Accessibility comes built in. In React, the components use React Aria, so ARIA attributes, keyboard support, and focus come for free. Outside React, use native elements (
<button>,<a>,<dialog>,<input>) so the browser provides them. - Compose, don't configure. Build from parts (
Card.Header,Card.Content), and leave out the parts you don't need. Don't add props to imitate a layout. - Start minimal. Use the bare component first. Add size, icons, or loading states only when the screen needs them.
- Expect the same API everywhere. Sizes are
sm,md, andlgacross the kit. Every component takesclassName. - Styles are separate from logic. The look comes from
@heroui/styles. That's why the same classes work in Vue, plain HTML, and React. - Extend, don't fork. To style a framework element, use the kit's classes or variant functions:
<NextLink className={buttonVariants({ variant: "primary" })}>. To add a variant, usetv({ extend: buttonVariants, ... }). Don't copy and edit component CSS. - Customize with variables first. Change
--accent,--radius, or--spacingin:rootbefore you touch a single component.
Workflow
- Pick the layer from the table at the top.
- Set up the project with
references/setup.md. Tailwind v4 is required. HeroUI v3 does not work on Tailwind v3. - Sketch the page as a stack of recipes from
references/recipes.md: app shell, page header, stat row, table section, form section, and empty state. Most screens need four or fewer. - Fill each recipe with kit components. Reach for a custom element only when no component fits, and build it from tokens (see below).
- Check the result against the rules in "Don't ship slop" before you call it done.
The same deployments dashboard is built three ways. Start from the one closest to your stack:
examples/react/dashboard.tsxexamples/vue/Dashboard.vueexamples/html/dashboard.html
Write the code to the same standard
The design rules cover how the page looks. The code follows the code skills:
- Apply
typescript-best-practicesto every.ts,.tsx, and<script lang="ts">block. Model page state as a union with akindfield, check every case in aswitch, and usesatisfiesinstead ofas. - Apply
principle-boundary-discipline. Load and parse data in one place, at the page, and pass typed props to everything below it. Components never fetch.
The examples follow both skills.
Use tokens, not colors
The theme is a set of semantic tokens. Each one is a Tailwind utility. Never use raw palette classes such as bg-indigo-600, text-gray-500, or border-slate-200 in product code. Raw colors break dark mode and break the shared look.
| Need | Utility |
| Page background | bg-background text-foreground |
| Card or raised region | bg-surface shadow-surface |
| Nested or quieter region | bg-surface-secondary, then bg-surface-tertiary |
| Menus, popovers, dialogs | bg-overlay shadow-overlay |
| Secondary text, icons | text-muted |
| Brand emphasis, primary action | bg-accent text-accent-foreground, soft: bg-accent-soft text-accent-soft-foreground |
| Status | success, warning, danger, each with -soft and -foreground |
| Lines | border-border, and border-separator for quiet dividers |
Full values and rules: references/design-language.md.
To rebrand, change --accent (and only the tokens you need) in one CSS block. Don't restyle components one at a time.
Compose with these rules
- One primary button per view. Other actions use
secondary,tertiary,outline, orghost. Destructive actions usedangerordanger-soft. - Build hierarchy with order, spacing, type, and surface level. Add a border or a shadow only when those four fail.
- Use one spacing scale. Gaps come from the 4px scale:
gap-2,gap-4,gap-6,gap-8. Sections usegap-8orgap-10. Don't double the padding of a parent and its child on the same side. - Use one radius family. Components bring their own radius. A custom container uses
rounded-2xlorrounded-3xl, and anything nested inside it uses a smaller radius. - Constrain width. App content sits in
mx-auto max-w-6xl px-4 sm:px-6. Prose stops atmax-w-prose. - Use the type scale as given. Page title
text-2xl font-semibold, section titletext-base font-semibold, bodytext-sm, supporting texttext-sm text-muted. Usetabular-numsfor numbers that change or line up. - Use one icon set. HeroUI uses
@gravity-ui/icons. Don't mix it with Heroicons, Lucide, or emoji in the same product. - Show every state. Each data view has loading (
Skeleton), empty (the empty-state recipe), and error (Alertwithdanger) states, plus the normal one. - Pair color with text. A status chip says "Failed". It is not only red.
Don't ship slop
These patterns mark a page as generic AI output. Remove them.
- Gradient text, purple-to-pink gradients, glows, and glassmorphism blur panels.
- A hero with a centered headline, a gradient blob, and two buttons, used by default whatever the product is.
- Three identical feature cards with an emoji or icon, a two-word title, and one vague sentence each.
- Cards inside cards inside cards. Use a surface level or a separator.
- Every element wrapped in a border and a shadow.
- Badges, chips, or icons beside every heading.
- The accent color used for decoration instead of meaning.
- Hover lift or scale effects on things that aren't clickable.
- Placeholder copy such as "Lorem ipsum", "Feature one", "Your amazing product", or "Unlock the power of". Write the real label, number, or sentence. Apply the
unslopskill to all UI copy. - Title Case Headings. Use sentence case.
- Fake precision such as "99.9% faster" or invented testimonials.
Verify the page
Check the rendered page before you call it done. Neither tool needs an MCP server.
- Start the dev server.
- Run
playwright-cli open http://localhost:<port>. If the browser is missing, runplaywright-cli install-browserfirst. - Run
playwright-cli resize 375 812, thenplaywright-cli screenshot --filename=<tmp dir>/mobile.png. Runplaywright-cli resize 1440 900, thenplaywright-cli screenshot --filename=<tmp dir>/desktop.png. Runplaywright-cli closewhen you finish. - Read both screenshots. Fix what breaks the rules above, such as overflow at 375 px, raw colors, or a missing state.
- Run
npx impeccable detect <src dir>andnpx impeccable detect http://localhost:<port>. Exit code 2 means findings. Fix them. - For a brand font or a HeroUI default that a rule flags on purpose, run
npx impeccable ignores add-value <rule> <value> --reason "<why>". Never turn a rule off.
Don't install Impeccable's skills or commands. The detector is all you need.
When the kit lacks a piece
- Search the component list first:
references/css-classes.md, ornode scripts/list_components.mjsin theheroui-reactskill. - Compose it from existing components and layout utilities.
- If you still need a new element, build it only from tokens:
bg-surface,text-muted,border-separator,rounded-2xl, and the spacing scale. Then it matches the kit. - For overlays outside React, use the native
<dialog>element or thepopoverattribute and style them withbg-overlay shadow-overlay rounded-3xl. In Vue, a headless library such as Reka UI also works. Never hand-roll focus trapping.
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.

