shadcn-code-review
Skill0 starsChanged 3 months agoMITView on GitHub
Reviews shadcn/ui components for CVA patterns, composition with asChild, accessibility states, and data-slot usage. Use when reviewing React components using shadcn/ui, Radix primitives, or Tailwind styling.
In this repository24 other files it gives its agents.
- in-progress/AGENTS.mdAGENTS.md
- test-skills/AGENTS.mdAGENTS.md
- docx-processingSkill
- email-composerSkill
- fastapi-expertSkill
- fastapiSkill
- frontend-code-reviewSkill
- frontend-testingSkill
- laravel-boostSkill
- laravel-specialistSkill
- migrate-radix-to-baseSkill
- pdf-processingSkill
- php-specialistSkill
- python-proSkill
- react-expertSkill
- rust-engineerSkill
- seo-optimizerSkill
- shadcnSkill
- tailwind-v4Skill
- tauri-developmentSkill
- tauri-v2Skill
- typescript-proSkill
- xlsx-processingSkill
- zustand-stateSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 39
Not documenting copied shadcn components - library internals, not custom code
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
shadcn/ui Code Review
Quick Reference
| Issue Type | Reference |
| className in CVA, missing VariantProps, compound variants | references/cva-patterns.md |
| asChild without Slot, missing Context, component composition | references/composition.md |
| Missing focus-visible, aria-invalid, disabled states | references/accessibility.md |
| Missing data-slot, incorrect CSS targeting | references/data-slot.md |
Review Checklist
cn()receives className, not CVA variantsVariantProps<typeof variants>exported for consumers- Compound variants used for complex state combinations
asChildpattern uses@radix-ui/react-slot- Context used for component composition (Card, Accordion, etc.)
focus-visible:states, not just:focusaria-invalid,aria-disabledfor form statesdisabled:variants for all interactive elementssr-onlyfor screen reader textdata-slotattributes for targetable composition parts- CSS uses
has()selectors for state-based styling - No direct className overrides of variant styles
Valid Patterns (Do NOT Flag)
These are correct patterns that should NOT be flagged as issues:
max-h-(--var)- correct Tailwind v4 CSS variable syntax (NOT v3 bracket notation)text-[color:var(--x)]- valid arbitrary value syntax- Copying shadcn component code into project - intended usage pattern
- Not documenting copied shadcn components - library internals, not custom code
- Using cn() with many arguments - composition is the pattern
- Conditional classes in cn() arrays - valid Tailwind pattern
- Extending primitive components without additional docs - well-known base
Context-Sensitive Rules
Apply these rules with appropriate context awareness:
- Flag accessibility issues ONLY IF not handled by Radix primitives underneath
- Flag missing aria labels ONLY IF component isn't using accessible radix primitive
- Flag variant proliferation ONLY IF variants could be composed from existing
- Flag component documentation ONLY IF it's custom code, not copied shadcn
Library Convention Note
shadcn/ui components are designed to be copied and modified. Code review should focus on:
- Custom modifications made to copied components
- Integration with application state/data
- Accessibility in custom usage contexts
Do NOT flag:
- Standard shadcn component internals
- Radix primitive usage patterns
- Default variant implementations
When to Load References
- Reviewing variant definitions → cva-patterns.md
- Reviewing component composition with asChild → composition.md
- Reviewing form components or interactive elements → accessibility.md
- Reviewing multi-part components (Card, Select, etc.) → data-slot.md
Review Questions
- Are CVA variants properly separated from className props?
- Does asChild composition work correctly with Slot?
- Are all accessibility states (focus, invalid, disabled) handled?
- Are data-slot attributes used for component part targeting?
- Can consumers extend variants without breaking composition?
Before Submitting Findings
Load and follow review-verification-protocol before reporting any issue.
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.

