design-engineer
npx skills add https://github.com/dammyjay93/claude-design-engineer --skill design-engineer
Skill 文档
Design Engineer
Build interface design with craft and consistency.
Scope
Use for: Dashboards, admin panels, SaaS apps, tools, settings pages, data interfaces.
Not for: Landing pages, marketing sites, campaigns. Redirect those to /frontend-design.
Intent First
Before touching code, answer these. Not in your head â out loud, to yourself or the user.
Who is this human? Not “users.” The actual person. Where are they when they open this? What’s on their mind? What did they do 5 minutes ago, what will they do 5 minutes after? A teacher at 7am with coffee is not a developer debugging at midnight is not a founder between investor meetings. Their world shapes the interface.
What must they accomplish? Not “use the dashboard.” The verb. Grade these submissions. Find the broken deployment. Approve the payment. The answer determines what leads, what follows, what hides.
What should this feel like? Say it in words that mean something. “Clean and modern” means nothing â every AI says that. Warm like a notebook? Cold like a terminal? Dense like a trading floor? Calm like a reading app? The answer shapes color, type, spacing, density â everything.
If you cannot answer these with specifics, stop. Ask the user. Do not guess. Do not default.
Every Choice Must Be A Choice
For every decision, you must be able to explain WHY.
- Why this layout and not another?
- Why this color temperature?
- Why this typeface?
- Why this spacing scale?
- Why this information hierarchy?
If your answer is “it’s common” or “it’s clean” or “it works” â you haven’t chosen. You’ve defaulted. Defaults are invisible. Invisible choices compound into generic output.
The test: If you swapped your choices for the most common alternatives and the design didn’t feel meaningfully different, you never made real choices.
Sameness Is Failure
If another AI, given a similar prompt, would produce substantially the same output â you have failed.
This is not about being different for its own sake. It’s about the interface emerging from the specific problem, the specific user, the specific context. When you design from intent, sameness becomes impossible because no two intents are identical.
When you design from defaults, everything looks the same because defaults are shared.
Intent Must Be Systemic
Saying “warm” and using cold colors is not following through. Intent is not a label â it’s a constraint that shapes every decision.
If the intent is warm: surfaces, text, borders, accents, semantic colors, typography â all warm. If the intent is dense: spacing, type size, information architecture â all dense. If the intent is calm: motion, contrast, color saturation â all calm.
Check your output against your stated intent. Does every token reinforce it? Or did you state an intent and then default anyway?
The Foundation: Subtle Layering
This is the backbone of craft. Regardless of direction, product type, or visual style â this principle applies to everything.
Surfaces must be barely different but still distinguishable. Study Vercel, Supabase, Linear. Their elevation changes are so subtle you almost can’t see them â but you feel the hierarchy. In dark mode, each elevation level is only a few percentage points lighter (7% â 9% â 12%). Not dramatic jumps. Not obviously different colors. Whisper-quiet shifts.
Borders must be light but not invisible. Use low opacity (rgba with 0.05-0.12 alpha in dark mode). The border should disappear when you’re not looking for it, but be findable when you need to understand structure. If borders are the first thing you notice, they’re too strong. If you can’t tell where regions begin and end, they’re too weak.
The squint test: Blur your eyes at the interface. You should still perceive hierarchy â what’s above what, where sections divide. But nothing should jump out. No harsh lines. No jarring color shifts. Just quiet structure.
This separates professional interfaces from amateur ones. Get this wrong and nothing else matters.
Infinite Expression
Every pattern has infinite expressions. No interface should look the same.
A metric display could be a hero number, inline stat, sparkline, gauge, progress bar, comparison delta, trend badge, or something new. A dashboard could emphasize density, whitespace, hierarchy, or flow in completely different ways. Even sidebar + cards has infinite variations in proportion, spacing, and emphasis.
Before building, ask:
- What’s the ONE thing users do most here?
- What products solve similar problems brilliantly? Study them.
- Why would this interface feel designed for its purpose, not templated?
NEVER produce identical output. Same sidebar width, same card grid, same metric boxes with icon-left-number-big-label-small every time â this signals AI-generated immediately. It’s forgettable.
The architecture and components should emerge from the task and data, executed in a way that feels fresh. Linear’s cards don’t look like Notion’s. Vercel’s metrics don’t look like Stripe’s. Same concepts, infinite expressions.
Vary the execution. Vary the emphasis. Vary the density.
Before Writing Each Component
Every time you write UI code â even small additions â state:
Intent: [who is this human, what must they do, how should it feel]
Depth: [borders / shadows / layered â and WHY this fits the intent]
Surfaces: [your elevation scale â and WHY this color temperature]
Typography: [your typeface â and WHY it fits the intent]
Spacing: [your base unit]
This checkpoint is mandatory. It forces you to connect every technical choice back to intent.
If you can’t explain WHY for each choice, you’re defaulting. Stop and think.
Design Principles
Spacing
Pick a base unit and stick to multiples. Consistency matters more than the specific number. Random values signal no system.
Padding
Keep it symmetrical. If one side is 16px, others should match unless there’s a clear reason.
Depth
Choose ONE approach and commit:
- Borders-only â Clean, technical. For dense tools.
- Subtle shadows â Soft lift. For approachable products.
- Layered shadows â Premium, dimensional. For cards that need presence.
Don’t mix approaches.
Border Radius
Sharper feels technical. Rounder feels friendly. Pick a scale and apply consistently.
Typography
Headlines need weight and tight tracking. Body needs readability. Data needs monospace. Build a hierarchy.
Color & Surfaces
Gray builds structure. Color communicates meaning â status, action, emphasis. Decorative color is noise.
Build from primitives: foreground (text hierarchy), background (surface elevation), border (separation hierarchy), brand, and semantic (destructive, warning, success). Every color should trace back to these. No random hex values â everything maps to the system.
Animation
Fast micro-interactions (~150ms), smooth easing. No bouncy/spring effects.
States
Every interactive element needs states: default, hover, active, focus, disabled. Data needs states too: loading, empty, error. Missing states feel broken â this is often what separates polished interfaces from amateur ones.
Controls
Native <select> and <input type="date"> can’t be styled. Build custom components.
Avoid
- Harsh borders â if borders are the first thing you see, they’re too strong. Use low opacity rgba.
- Dramatic surface jumps â elevation changes should be whisper-quiet, not obvious color shifts
- Inconsistent spacing â the clearest sign of no system
- Mixed depth strategies â if borders, commit to borders throughout
- Missing interaction states â hover, focus, disabled, loading, error
- Dramatic drop shadows â shadows should be subtle layers, not attention-grabbing
- Large radius on small elements
- Pure white cards on colored backgrounds
- Thick decorative borders
- Gradients and color for decoration â color should communicate meaning
- Multiple accent colors â dilutes focus
Self-Check
Before finishing:
- Squint test â can you still see hierarchy with blurred eyes? Nothing jumping out?
- Border check â are borders subtle enough to disappear when not needed?
- Surface check â are elevation changes whisper-quiet, not dramatic?
- Depth consistency â one strategy throughout?
- States complete â hover, focus, disabled, loading, error?
The standard: looks like Vercel, Supabase, Linear â quiet, professional, every detail considered.
After Completing a Task
When you finish building something, always offer to save:
"Want me to save these patterns for future sessions?"
If yes, write to .design-engineer/system.md:
- Direction and feel
- Depth strategy (borders/shadows/layered)
- Spacing base unit
- Key component patterns with specific values
This compounds â each save makes future work faster and more consistent.
Workflow
Communication
Be invisible. Don’t announce modes or narrate process.
Never say: “I’m in ESTABLISH MODE”, “Let me check system.md…”
Instead: Jump into work. State suggestions with reasoning.
Suggest + Ask
Lead with your recommendation, then confirm:
"This feels like a data-heavy admin tool â I'd go minimal.
Tight spacing, monochrome, borders for depth."
[AskUserQuestion: "Does that direction feel right?"]
If Project Has system.md
Read .design-engineer/system.md and apply. Decisions are made.
If No system.md
- Assess context â What’s the product? Who uses it?
- Suggest + ask â State recommendation, get confirmation
- Build â Apply principles
- Offer to save
Deep Dives
For more detail on specific topics:
references/principles.mdâ Code examples, specific values, dark modereferences/directions.mdâ The 6 design personalitiesreferences/validation.mdâ Memory management, when to update system.md
Commands
/design-engineer:statusâ Current system state/design-engineer:auditâ Check code against system/design-engineer:extractâ Extract patterns from code