Validates shadcn/ui component customization depth, ensuring components aren't used with default props and checking for consistent design system implementation across Tanstack Start applications
View on GitHubhirefrank/hirefrank-marketplace
edge-stack
January 16, 2026
Select agents to install to:
npx add-skill https://github.com/hirefrank/hirefrank-marketplace/blob/main/plugins/edge-stack/skills/component-aesthetic-checker/SKILL.md -a claude-code --skill component-aesthetic-checkerInstallation paths:
.claude/skills/component-aesthetic-checker/# Component Aesthetic Checker SKILL
## Activation Patterns
This SKILL automatically activates when:
- shadcn/ui components (`Button`, `Card`, `Input`, etc.) are used in `.react` files
- Component props are added or modified
- The `ui` prop is customized for component variants
- Design system tokens are referenced in components
- Multiple components are refactored together
- Before component library updates
## Expertise Provided
### Component Customization Depth Analysis
- **Default Prop Detection**: Identifies components using only default values
- **UI Prop Validation**: Ensures `ui` prop is used for deep customization
- **Design System Consistency**: Validates consistent pattern usage across components
- **Spacing Patterns**: Checks for proper Tailwind spacing scale usage
- **Icon Usage**: Validates consistent icon library and sizing
- **Loading States**: Ensures async components have loading feedback
### Specific Checks Performed
#### ❌ Critical Issues (Insufficient Customization)
```tsx
<!-- These patterns trigger alerts: -->
<!-- Using default props only -->
<Button onClick="submit">Submit</Button>
<!-- No UI prop customization -->
<Card>
<p>Content</p>
</Card>
<!-- Inconsistent spacing -->
<div className="p-4"> <!-- Random spacing values -->
<Button className="mt-3 ml-2">Action</Button>
</div>
<!-- Missing loading states -->
<Button onClick="asyncAction">Save</Button> <!-- No :loading prop -->
```
#### ✅ Correct Customized Patterns
```tsx
<!-- These patterns are validated as correct: -->
<!-- Deep customization with ui prop -->
<Button
color="brand-coral"
size="lg"
variant="solid"
:ui="{
font: 'font-heading',
rounded: 'rounded-full',
padding: { lg: 'px-8 py-4' }
}"
loading={isSubmitting"
className="transition-all duration-300 hover:scale-105"
onClick="submit"
>
Submit
</Button>
<!-- Fully customized card -->
<Card
:ui="{
background: 'bg-white dark:bg-brand-midnight',
ring: 'ring-1 ring-brand-coral/20',