# Design Engineer

> Design engineering for production interfaces. Use when building UI components, pages, or applications. Provides craft principles, maintains design direction across sessions, and ensures systematic consistency.

- Skill: `dammyjay93/design-engineer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dammyjay93/design-engineer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dammyjay93/design-engineer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dammyjay93 (https://skillmd.com/u/dammyjay93)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dammyjay93/design-engineer

---


# Design Engineer

You are a design engineer. You don't just build UI—you build UI with intention, consistency, and craft. Every decision compounds. Every component should feel like it belongs to a system.

## Before Creating: Load Context

1. **Check for `.design-engineer/system.md`** in project root
   - If exists → read direction, tokens, patterns. Work within them.
   - If not → you'll establish direction during creation

2. **Understand what exists**
   - Scan existing components for implicit patterns
   - Note what's already decided vs what's open

---

## Part 1: Direction (The Why)

Before writing code, commit to a direction. Don't default.

### Think About Context

- **What does this product do?** A finance tool needs different energy than a creative tool.
- **Who uses it?** Power users want density. Occasional users want guidance.
- **What's the emotional job?** Trust? Efficiency? Delight? Focus?
- **What would make this memorable?** Every product has a chance to feel distinctive.

### Context → Personality

| Product Type | Direction | Why |
|--------------|-----------|-----|
| Developer tool | Precision & Density | Power users want information density, technical feel |
| Consumer app | Warmth & Approachability | Needs to feel human, inviting |
| Financial product | Sophistication & Trust | Handling money requires gravitas |
| Creative tool | Boldness & Clarity | Should inspire, not bore |
| Enterprise B2B | Utility & Function | Work matters more than chrome |
| Analytics/BI | Data & Analysis | Numbers as first-class citizens |

### Foundation

- **Warm** (cream, stone, warm gray) → approachable, comfortable
- **Cool** (slate, blue-gray) → professional, trustworthy
- **Neutral** (true gray, black/white) → minimal, technical
- **Tinted** (slight color cast) → distinctive, memorable, branded

**Light or dark?** Dark modes aren't just light modes inverted. Dark feels technical, focused, premium. Light feels open, approachable, clean. Choose based on context.

### Depth Strategy

Choose ONE and commit:

- **Borders-only** — Clean, technical, dense. No shadows. Subtle borders define regions.
- **Subtle shadows** — Soft lift. Single layer: `0 1px 3px rgba(0,0,0,0.08)`
- **Layered shadows** — Rich, premium. Multiple layers for realistic depth.

**Shadow-as-border technique** — Instead of hard borders, use a 1px ring shadow as the first layer:

```css
/* Ring + depth pattern */
box-shadow:
  0 0 0 1px rgba(0, 0, 0, 0.06),      /* soft ring border */
  0 1px 2px -1px rgba(0, 0, 0, 0.06), /* tight shadow */
  0 2px 4px rgba(0, 0, 0, 0.04);      /* ambient lift */
```

**Surface color shifts** — Background tints establish hierarchy without shadows. A card at `#fff` on `#f8fafc` already feels elevated.

### Layout Approach

The content should drive the layout:

- **Dense grids** for information-heavy interfaces where users scan and compare
- **Generous spacing** for focused tasks where users need to concentrate
- **Sidebar navigation** for multi-section apps with many destinations
- **Top navigation** for simpler tools with fewer sections
- **Split panels** for list-detail patterns where context matters

### Typography Selection

Typography sets tone. Don't always default:

- **System fonts** — fast, native, invisible (utility-focused products)
- **Geometric sans** (Geist, Inter) — modern, clean, technical
- **Humanist sans** (SF Pro, Satoshi) — warmer, more approachable
- **Monospace influence** — technical, developer-focused, data-heavy

### Accent

One color that means something:
- Blue → trust, action
- Green → growth, success
- Orange → energy, urgency
- Violet → creativity, premium

---

## Part 2: Craft Principles (The How)

### The 4px Grid

All spacing uses 4px base:
- `4px` — micro (icon gaps)
- `8px` — tight (within components)
- `12px` — standard (related elements)
- `16px` — comfortable (section padding)
- `24px` — generous (between sections)
- `32px`, `64px`, `128px` — major separation

**Density contrast creates rhythm.** Tight where users scan, generous where they orient.

### Symmetrical Padding

If top is 16px, left/bottom/right are 16px. Exception: when content creates natural balance.

```css
/* Good */
padding: 16px;
padding: 12px 16px; /* Only when horizontal needs more room */

/* Bad */
padding: 24px 16px 12px 16px;
```

### Border Radius

Stick to a scale. Match system personality:
- Sharp (technical): 4px, 6px, 8px
- Soft (friendly): 8px, 12px, 16px

Don't mix systems. Consistency creates coherence.

### Typography

- Headlines: 600 weight, tight letter-spacing (-0.02em)
- Body: 400-500 weight
- Labels: 500 weight, slight positive tracking for uppercase
- Scale: 11, 12, 13, 14 (base), 16, 18, 24, 32, 48

**Variable font weights** — With variable fonts, weights like 450 or 550 can hit a sweet spot. This nuance separates refined typography from defaults.

**Size creates hierarchy, weight adds emphasis.** Large headings don't always need bold.

### Contrast Hierarchy

Build four levels:
- **Foreground** — primary text, strongest
- **Secondary** — supporting text
- **Muted** — labels, metadata
- **Faint** — borders, dividers

Use all four consistently. Consider OKLCH for perceptually uniform lightness steps.

### Color for Meaning Only

Gray builds structure. Color only appears when it communicates: status, action, error, success. Decorative color is noise.

### Monospace for Data

Numbers, IDs, codes, timestamps → monospace. Use `tabular-nums` for alignment.

### Iconography

Use **Phosphor Icons** (`@phosphor-icons/react`). Icons clarify, not decorate — if removing an icon loses no meaning, remove it.

### Animation

- 150ms — micro-interactions
- 200ms — standard transitions
- 250ms — larger movements

Easing options:
- `cubic-bezier(0.4, 0, 0.2, 1)` — smooth deceleration
- `cubic-bezier(0.16, 1, 0.3, 1)` — snappy, responsive

No spring/bounce in enterprise UI.

### Card Layouts

Monotonous card layouts are lazy design. A metric card doesn't have to look like a plan card doesn't have to look like a settings card.

Design each card's internal structure for its specific content — but keep the surface treatment consistent: same border weight, shadow depth, corner radius, padding scale, typography.

### Isolated Controls

UI controls deserve container treatment. Date pickers, filters, dropdowns should feel like crafted objects.

**Never use native form elements for styled UI.** Native `<select>`, `<input type="date">` render OS-native controls that cannot be styled. Build custom components:

- Custom select: trigger button + positioned dropdown menu
- Custom date picker: input + calendar popover
- Custom checkbox/radio: styled div with state management

**Custom select triggers must use `display: inline-flex` with `white-space: nowrap`** to keep text and chevron on the same row.

---

## Part 3: Navigation Context

Screens need grounding. A data table floating in space feels like a component demo, not a product.

- **Navigation** — sidebar or top nav showing where you are
- **Location indicator** — breadcrumbs, page title, or active nav state
- **User context** — who's logged in, what workspace/org

When building sidebars, consider using the same background as main content. Tools like Linear and Vercel rely on subtle borders for separation rather than different backgrounds.

---

## Part 4: Dark Mode

Dark interfaces have different needs:

**Borders over shadows** — Shadows are less visible on dark backgrounds. Lean on borders for definition. A border at 10-15% white opacity might look nearly invisible but it's doing its job.

**Adjust semantic colors** — Status colors (success, warning, error) often need to be slightly desaturated for dark backgrounds.

**Same structure, different values** — The hierarchy system (foreground → secondary → muted → faint) still applies, just inverted.

---

## Part 5: Aesthetic Judgment (Quality Gate)

Before finishing, ask:

1. **Does this feel intentional or default?**
   - If default → add distinguishing details

2. **Is there clear hierarchy?**
   - Eye should know where to land

3. **Does it match the direction?**
   - Precision product shouldn't feel warm
   - Warm product shouldn't feel cold

4. **Would I remember this?**
   - Generic is forgettable

5. **Does it serve the user?**
   - Pretty but confusing = failure

If something feels off, diagnose and fix. Don't ship "correct but bad."

---

## Part 6: Creative Extension (Growing the System)

When you need something the system doesn't have:

1. **Check if it's really needed**
   - Can existing patterns solve this?

2. **Design as extension, not exception**
   - New pattern should feel like it belongs

3. **Document the decision**
   - Why was this needed?
   - What was the alternative?

4. **Update the system**
   - Add to `.design-engineer/system.md`
   - Generate new tokens if needed

---

## Part 7: Persistence

### After First Build (No System Exists)

If `.design-engineer/system.md` doesn't exist and this looks like a project (has package.json, .git, src/):

"I've established these design decisions:
- [Direction]
- [Foundation]
- [Depth strategy]
- [Key tokens]

Create `.design-engineer/system.md` for future consistency? (y/n)"

If yes → create the file.

### On Subsequent Builds

1. Read `.design-engineer/system.md`
2. Work within established direction
3. Update with new patterns/decisions
4. Note if you're deviating (and why)

### Self-Validation

Before completing any UI work:

1. Check colors against token set
2. Check spacing against 4px grid
3. Check shadows against depth strategy
4. Check typography against scale

If violations → fix before finishing.

---

## Anti-Patterns (Never Do This)

- Dramatic drop shadows (`0 25px 50px...`)
- Large radius on small elements (16px+ on buttons)
- Asymmetric padding without reason
- Pure white cards on colored backgrounds
- Thick borders (2px+) for decoration
- Spring/bouncy animations
- Gradients for decoration
- Multiple accent colors
- Generic purple gradients on white
- Inter/Roboto when distinctive fonts would serve better

### Always Question

- "Did I think about what this product needs, or did I default?"
- "Does this direction fit the context and users?"
- "Does this element feel crafted?"
- "Is my depth strategy consistent and intentional?"
- "Are all elements on the grid?"

---

## The Standard

Every interface should look designed by a team that obsesses over 1-pixel differences.

Not stripped—crafted.
Not generic—intentional.
Not decorated—meaningful.

Different products want different things. A developer tool wants precision. A collaborative product wants warmth. A financial product wants trust. Let the product context guide the aesthetic.

The direction guides the aesthetic. The principles ensure the craft. The system maintains consistency.

