The AI Slop Problem
You ask Claude Code to build a dashboard. It gives you Tailwind defaults: blue buttons, white backgrounds, shadows everywhere, rounded-lg on everything. It works. It also looks exactly like every other AI-generated interface.
This is AI slop. Not broken, just generic. No personality. No intention. No reason behind any visual decision.
The fix isn’t prompting harder. It’s encoding your design system into a skill that runs automatically.
Why Prompts Fail for Design
I tried the obvious approach first: detailed prompts describing exactly how I wanted components to look. It worked for one component. Then Claude forgot everything on the next request.
The problem is context. Claude doesn’t carry your design preferences between conversations. Every new session starts fresh. You end up re-explaining your color system, your spacing scale, your typography choices—every single time.
Skills solve this by injecting your design system automatically.
Building the Design System Skill
Create this file at .claude/skills/design-ui/prompt.md:
| |
This isn’t a suggestion—it’s a constraint system. Claude now has rules it must follow.
The Difference in Output
Before the skill, asking for a status card got me this:
| |
Generic. Light mode. Shadows. Large padding. Could be any SaaS marketing site.
After the skill:
| |
Intentional. Dark mode. Border-based separation. Proper type scale. Looks like it belongs in a professional data tool.
Extending the Skill for Components
The base skill handles colors and spacing. For specific components, add patterns:
| |
Every component type you add reduces the chance of Claude improvising.
Set Up a Design System Skill
Configure Claude Code to enforce your design system on all UI generation
Create the Skills Directory
In your project root or home directory:
| |
For project-specific design systems, use the project directory. For a personal system you want everywhere, use ~/.claude/skills/.
Define Your Color System
Create .claude/skills/design-ui/prompt.md and start with colors. Define your backgrounds, borders, and accent colors with exact values. Dark mode is easier to get right—fewer contrast issues.
Include what’s forbidden: no pure black, no neon, no decorative gradients.
Add Typography Rules
Document Component Patterns
Test With a Complex Request
Why Dark Mode First
Light mode is harder to get right. Contrast ratios, text readability, visual hierarchy—all more complex with bright backgrounds. Dark mode with near-black foundations and subtle borders is more forgiving.
More importantly, dark mode is what developers actually use. If you’re building tools for engineers, meet them where they are.
The skill enforces a cool, near-black foundation with slight blue-violet bias. Not pure black—that’s harsh. The slight color warmth reduces eye strain during long sessions.
Handling Semantic Colors
Status indicators need special treatment:
| |
AI-generated code loves to use pure red for errors and pure green for success. On dark backgrounds, these are painful. The skill forces muted variants.
The Motion Question
Most AI-generated UI includes no motion or uses defaults like transition-all duration-300. Both are wrong.
Add motion constraints to your skill:
| |
This prevents Claude from adding decorative animations that undermine the professional feel.
When the Skill Isn’t Enough
Skills work for most UI generation, but they can’t handle everything:
Complex layouts still need guidance. The skill defines components, not how to arrange them. You’ll still prompt for layout decisions.
Edge cases require inline instructions. If you need a one-off exception to the system, tell Claude explicitly in your prompt.
External libraries may conflict. If you’re using a component library, its defaults might override your skill’s guidance. Consider whether you need the library at all.
FAQ
Can I have multiple design skills for different projects?
.claude/skills/ override global skills from ~/.claude/skills/. Keep your personal defaults global and override per-project as needed.How do I handle components the skill doesn't cover?
What about Tailwind vs CSS variables?
bg-[#0f1422]. For vanilla CSS, it uses your variable names.Should I include responsive breakpoints?
How detailed should the skill be?
The Real Win
The point isn’t just consistency. It’s that your AI-generated UI stops looking AI-generated.
When every component follows the same color system, the same spacing grid, the same typography scale—the result looks like a human designer made intentional choices. Because you did. You just encoded those choices into a skill.
AI slop happens when you let the AI make aesthetic decisions. A design skill takes those decisions back.
Conclusion
Key Takeaways
- AI coding tools default to generic, forgettable UI without design constraints
- Claude Code skills inject your design system into every UI generation request
- Dark mode with border-based depth is easier to get right than light mode with shadows
- Define colors, typography, spacing, and forbidden patterns at minimum
- Add component-specific patterns as you discover inconsistencies
- Skills work with any CSS approach: Tailwind, vanilla CSS, or CSS-in-JS
- The goal is UI that looks intentionally designed, not randomly generated
Stop accepting AI defaults. Your design system exists for a reason. Encode it into a skill, and Claude Code becomes an extension of your design intent instead of a random generator.