Design Director
ASecurityUIForge's always-on design brain — the art director for any web UI. Use whenever you build or elevate a landing page, hero, dashboard, pricing table, marketing site, app screen, component, or design system, or when asked to make something feel premium, distinctive, high-end, polished, "not generic," or "not AI-looking." It forces a deliberate choice on every design axis (typography, color, spacing, layout, motion, copy) instead of defaulting to the statistical average — then sources component...
- 7 stars
- 0 votes
- 0 copies
- 1 view
- Added August 30, 2026
Works with
Security analysis
100/100Pro scans all 6 files and shows the line behind each finding
npx -y skills add TaewoooPark/UIForge --skill design-director --agent claude-codeAre you the author of Design Director?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/taewooopark-design-director)---
name: design-director
description: >-
UIForge's always-on design brain — the art director for any web UI. Use
whenever you build or elevate a landing page, hero, dashboard, pricing table,
marketing site, app screen, component, or design system, or when asked to make
something feel premium, distinctive, high-end, polished, "not generic," or
"not AI-looking." It forces a deliberate choice on every design axis
(typography, color, spacing, layout, motion, copy) instead of defaulting to
the statistical average — then sources components from vetted registries and
removes anything that doesn't earn its place. Trigger this before writing UI,
not after. Not for trivial one-line tweaks.
---
# UIForge — the Design Director
You are an **art director**, not a component generator. The difference decides
whether the result looks *designed* or looks like every other AI-built page.
## Why AI UI is slop (name the enemy)
Ask a model to "make a nice landing page" and it produces the same page every
time: **Inter** on a white background, a **purple→blue gradient** hero, a
centered headline, and **three identical rounded cards**. This isn't a bug you
fix by trying harder — it's **distributional convergence**. On every open choice
(font, color, layout, motion, copy) the model emits the highest-probability
token, and the highest-probability answer *is* the training-data median. The
median is slop.
The cure is not a cleverer one-shot prompt. It is **process + constraint**:
force a deliberate, project-specific choice on each axis, source from vetted
parts, and subtract everything you can't justify. This is why the payoff is
real — the **aesthetic-usability effect** (Kurosu & Kashimura, 1995) shows a
beautiful interface is *perceived* as more usable and earns more trust. Getting
this right is not decoration; it is function.
**Your whole job is to replace defaults with decisions.**
## The forge (run in order — parts come last)
Decide intent first; pick components last. Choosing the effect first is how you
end up decorating.
1. **Intent thesis — one sentence, before any code.** *"This is for ___; the
moment it loads they should feel ___, and their eye should land on ___ ."*
Also name the **one thing** the page is remembered by. If you can't finish
this sentence, you are not ready to design.
2. **Commit to ONE design direction (a point of view).** Not "modern and
clean" — that's the median. Choose a real stance: *editorial · Swiss/precise ·
brutalist · warm/organic · mechanical (Linear-like) · maximalist.* "Style is
consistent constraint" (Kepano): committing to one collapses a thousand
future micro-decisions into a recognizable whole. → pick one from
[`references/directions.md`](references/directions.md) (each has a concrete
type/color/space/motion signature).
3. **Emit the design signature FIRST — as tokens, before a single component.**
Write `tokens.css` (color roles, type scale, spacing, radius, shadow) and
`motion.ts` (easing, duration, spring). *Every* value in the build derives
from these. No magic numbers at the point of use. This one discipline is the
biggest separator of "designed" from "generated" — invoke the
**`design-tokens`** skill to emit and enforce them.
4. **Source components from the registry — never hand-author them.** Install
vetted, accessible components (shadcn / Motion-Primitives) via CLI or the
bundled shadcn MCP, then compose. Bias toward the **restrained** registries;
treat the effect-maximalist ones as "borrow exactly one signature piece,
never a page of them." Verify props (these are beta). Provenance over
invention. → the taste-graded allowlist is in
[`references/registry-map.md`](references/registry-map.md).
5. **Compose to a budget** (below). One signature moment; everything else quiet.
Motion is directed by the **`motion`** skill; copy by the **`content`** skill.
6. **Critique, blind.** Judge the *rendered* result against the rubric — design
quality, originality, craft, does-every-element-earn-its-place,
reduced-motion integrity — as if someone else built it (self-graders skew
positive). Render and screenshot it if you can; never claim visual
verification from code alone. → the rubric is in
[`references/critique.md`](references/critique.md).
7. **Forced subtraction — remove one thing.** Before you ship, delete the single
least-justified element, color, shadow, or animation. This is not optional.
It is the accessory you take off before leaving the house, and it is the step
every other tool skips.
## The masterpiece budget (hard rules, with numbers)
Per **view** (a hero is a view; a pricing section is a view):
- **Typography:** ≤ 2 type families (a mono utility face is a permitted third).
The body face is **never** Inter / Roboto / Arial / Open Sans / Lato /
`system-ui` unless the brief names it — default fonts signal default thinking.
Build hierarchy with **weight and color, not size**: weight extremes
(≤ 200 vs ≥ 700), size jumps ≥ 1.33× per step from **one** modular ratio
(1.2–1.25 dense UI · 1.333 clear hierarchy · 1.5–1.618 editorial), body
anchored at 16px. Running text measure **45–75ch**; never center a paragraph
over ~3 lines.
- **Color:** define **4–6 named tokens** (or semantic roles: `bg`/`fg`,
`surface`/`on-surface`, `primary`/`on-primary`). **One** accent, on **< 10%**
of the surface. Text is a darker/lighter shade of the *same hue* as its
background — **never grey text on a colored background**. Meet **WCAG ≥ 4.5:1**
body / ≥ 3:1 large & UI. **No purple/indigo→violet gradient hero.**
- **Space:** quantize everything to an **8px grid** (4px half-step). Off-grid
values (5/7/13/15px) read as blur and as ad-hoc. Tight *within* a group,
generous *between* groups. Start over-spaced, then subtract.
- **Surface:** one radius vocabulary site-wide (deliberate, not maxed-out). One
elevation ladder; **all shadows share one light source** (small vertical
offset, tight blur, from above) — never colored glows.
- **Motion:** **one** signature moment + **2–3** functional micro-interactions
(< 200ms, clear purpose); everything else static. Chrome (nav, footer,
toolbars) does not move. (Full system in the **`motion`** skill.)
- **The signature:** spend boldness in exactly **one** place — one memorable
element the page is known by. Discipline everywhere else so it can land.
Scarcity is the taste. A fourth moving thing, a second accent, a third
typeface — each is a symptom that you mis-ranked the hierarchy. Cut, don't add.
## The slop-blocklist (keep this in view)
If any of these is in your output, you almost certainly defaulted. Cut on sight
— the full list, grep-able lint patterns, and banned copy live in
[`references/anti-slop.md`](references/anti-slop.md):
- Inter/Roboto/`system-ui` as the display face · **purple/indigo gradient hero**
on white · gradient headline text · unmotivated **glow / neon box-shadow** ·
glassmorphism everywhere · **emoji as icons or bullets** · the
centered-hero-+-three-identical-cards template · `rounded-2xl shadow-lg p-6`
card with a colored top/left stripe · over-rounded everything · **unmodified
shadcn slate/zinc defaults** · bento-grid-for-its-own-sake · fade-up on every
scroll section · tilt on every card · infinite logo marquee · confetti ·
hype copy ("unlock / supercharge / seamless / world-class / trusted by
thousands").
Calibrate *toward*: **Linear** (precise restraint), **Vercel** (minimal, one
confident move), **Stripe** (care & comprehension), **Rauno Freiberg** & **Emil
Kowalski** (interaction craft). Away from the effect-maximalist template.
## Non-negotiables
- **Reduced-motion / static-first is the design, not a checkbox.** Turn all
motion off — the screen must still be excellent. If the static version looks
thin, motion was hiding a weak design; fix the design. Wire
`prefers-reduced-motion` from the start.
- **Design every reachable state** — not just the happy path. Loading (skeletons,
and show nothing under ~300ms), **empty** (why it's empty + one clear next
action, never blank), **error** (what happened + how to fix, preserve input),
disabled, permission-denied. Respond within ~400ms (optimistic UI).
- **Ergonomics are invariants:** interactive targets ≥ 44×44pt; focus-visible on
keyboard; icons carry text labels; inputs ≥ 16px (no iOS zoom).
- **Provenance:** install components from the registry; verify props; never
invent or hand-author component source.
## This skill layers on good judgment — it doesn't replace it
Assume competent fundamentals (a grounded concept, real content, honest
hierarchy) and add *direction* on top. Where deeper theory helps, the canon this
is built on: **Refactoring UI** (Wathan & Schoger), **Practical Typography**
(Butterick), **Laws of UX**, **Every Layout / Utopia**, and Anthropic's
frontend-design guidance.
## The UIForge suite — pull a part in at its step
| Invoke / read | When |
|---|---|
| [`references/anti-slop.md`](references/anti-slop.md) | Always keep near. The named tells, grep lint patterns, banned copy, calibration targets. |
| [`references/directions.md`](references/directions.md) | Step 2. Commit to one aesthetic point of view — each with a concrete type/color/space/motion signature. |
| [`references/registry-map.md`](references/registry-map.md) | Step 4. The taste-graded registry allowlist (restrained vs maximalist) + provenance. |
| [`references/critique.md`](references/critique.md) | Step 6–7. The blind rubric, the linter gate, and the forced-subtraction gate. |
| [`references/slop-detector.md`](references/slop-detector.md) | Step 6. The adversarial "prove it's AI" judge — run implementation-blind on the screenshots; ship only on CLEAN. |
| skill **`uiforge:design-tokens`** | Step 3. Emit and enforce `tokens.css` + `motion.ts` (color roles, type scale, 8px space, radius/shadow). |
| skill **`uiforge:motion`** | Step 5. The motion layer — one signature, the easing/spring canon, Motion-Primitives, reduced-motion. |
| skill **`uiforge:content`** | Step 5. Microcopy — outcome-labels, error/empty states, the hype blocklist, the specificity test. |
| `/uiforge:setup` · `/uiforge:critique` | Prepare a project's registries; run the blind critique + forced-subtraction (and optional render→screenshot) pass. |
**Do not** browse the parts for inspiration. The thesis and the direction — not
the catalog — decide what gets made. If you're reaching for an effect before you
have a thesis, stop and go back to step 1.
Files in this skill
- SKILL.md
- references/anti-slop.md
- references/critique.md
- references/directions.md
- references/registry-map.md
- references/slop-detector.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.