← Back to list

shadcn-code-review
by existential-birds
Claude Code plugin for code review skills and verification workflows. Python, Go, React, FastAPI, BubbleTea, and AI frameworks (Pydantic AI, LangGraph, Vercel AI SDK).
⭐ 11🍴 2📅 Jan 24, 2026
SKILL.md
name: shadcn-code-review description: 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.
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 variants -
VariantProps<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:focus -
aria-invalid,aria-disabledfor form states -
disabled:variants for all interactive elements -
sr-onlyfor screen reader text -
data-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.
Score
Total Score
75/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
✓説明文
100文字以上の説明がある
+10
○人気
GitHub Stars 100以上
0/15
✓最近の活動
1ヶ月以内に更新
+10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
Reviews
💬
Reviews coming soon



