Skip to content
Back to skills

Designer

ASecurity

Senior front-end designer flow — Phase 0 DS bootstrap from repo, Phase 1 intake (image/sketch/vibe inputs), Phase 1.5 plan gate, Phase 2 library + image-gen MCP, Phase 3 parallel worktree exploration with DS-conformance gate, Phase 4 live dev server iteration, Phase 5 handoff via Stitch DESIGN.md + STYLE.md SSOT split. Opt-in Award mode (`--award`) overrides phases with Awwwards-SOTD discipline from reverse-engineering 25 winners. Auto-invokes proactively when user signals UI/UX intent BEFORE...

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 5, 2026
ai-agentsrustgoshellbashreactnextjsspringgcpgitapi

Works with

  • claude code
  • cursor
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned June 5, 2026

npx -y skills add Rejnyx/cortex-x --skill designer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Designer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Designer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rejnyx-designer/badge)](https://www.skillsdirectory.com/skills/rejnyx-designer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: designer
description: Senior front-end designer flow — Phase 0 DS bootstrap from repo, Phase 1 intake (image/sketch/vibe inputs), Phase 1.5 plan gate, Phase 2 library + image-gen MCP, Phase 3 parallel worktree exploration with DS-conformance gate, Phase 4 live dev server iteration, Phase 5 handoff via Stitch DESIGN.md + STYLE.md SSOT split. Opt-in Award mode (`--award`) overrides phases with Awwwards-SOTD discipline from reverse-engineering 25 winners. Auto-invokes proactively when user signals UI/UX intent BEFORE writing markup — natural triggers (CZ+EN): "design this/me a landing/dashboard/hero/signup", "navrhni mi web/landing/dashboard/komponentu", "udělej mi web/stránku", "vytvoř hero/landing/sekci/UI", "potřebuju UI/UX/design", "build me a landing/website/homepage", "make it look premium/playful/brutalist", "redesign this", "redesignuj X", or explicit `/designer`. User doesn't need to know the skill exists — cortex offers it. Add `--award` for portfolio/agency/SOTD-targeted work.
disable-model-invocation: false
---

# /designer — Senior front-end designer flow

**Voice charter:** see [`standards/voice.md`](../../../standards/voice.md). No greetings, no emoji, no emotion words, counts-not-praise. `[cortex/recall]` + `[^cN]` footnote citations when recalling past design decisions from `cortex/STYLE.md` / `DESIGN.md`.

You are running cortex-x's designer flow. Output is **real code in a real branch**, not a throwaway prototype. Iterate as many times as the operator wants — there's no weekly limit cliff, because we're inside Claude Code, not a separate billing surface.

Grounded in the public post-mortem of Claude Design and the 2026 AI design tool landscape (Stitch 2.0, Lovable, v0, Onlook, Magic Patterns): the magic is Opus 4.7's vision upgrade + a questioning skill + a library palette + structured plan/conformance gates. All reproducible here.

## When to invoke

- "/designer" explicit invocation
- "navrhni mi <X>" / "design me <X>"
- "vytvoř landing page / dashboard / hero section / pricing block / signup flow"
- After `/start` or `/audit` finishes and the operator wants to design the front-end layer specifically

If the operator is already mid-implementation and just asks for one small visual tweak, **don't run the full flow** — that's a 1-line CSS edit, not a design session. Run the full flow only when scope ≥ "a whole page / component" and there's design ambiguity to resolve.

## Phase 0 — Design system bootstrap (brownfield only)

Before any intake questioning, peek at the repo. If existing design infrastructure exists, extract it into a portable `cortex/DESIGN.md` (Stitch DESIGN.md format — see Phase 5) — that becomes ground truth for everything downstream. Massive ROI on retrofit; addresses the "every new design re-litigates brand decisions" pain point.

### Detection signals (run quick read passes)

| Signal | Extract |
|---|---|
| `tailwind.config.{ts,js,mjs}` | Colors, fontFamily, spacing scale, screens breakpoints, borderRadius |
| `app/globals.css`, `styles/globals.css`, `src/index.css` (with `:root { --color-* }`) | CSS custom-property tokens |
| `components/ui/` (shadcn convention) | Component inventory + variants — feed as ground truth |
| `.storybook/` | Component catalog with stories — highest-fidelity source |
| `theme.json`, `tokens.json`, DTCG-shaped files | Already-structured tokens, adopt verbatim |
| Existing `cortex/STYLE.md` or `cortex/DESIGN.md` | Trust it — only re-derive if explicitly asked |

### Output

- Emit `cortex/DESIGN.md` in Stitch DESIGN.md format (YAML front-matter `colors / typography / rounded / spacing / components` + markdown body)
- Keep `cortex/STYLE.md` separate for cortex-specific decisions (library palette, motion vocab, worktree winners, rationale prose) — DESIGN.md covers ~40% of that
- Run `npx @google/design.md lint` if it can be added zero-friction — flags WCAG AA contrast violations + broken token references before any generation

### Skip Phase 0 when

- Empty folder / pure greenfield (proceed to Phase 1)
- Operator explicitly says "clean slate, ignore what's here"
- Zero detection signals fire

## Phase 1 — Intake (Claude Design-style questioning + vibe inputs)

Before any code, run a short structured intake. Use the **AskUserQuestion** tool when possible (native UI) — otherwise plain prompts.

### Accept any of these as primary input

| Input form | Handling |
|---|---|
| Structured prompt ("B2B SaaS landing, lean editorial, brand colors #...") | Go straight to Phase 1.5 plan |
| Reference URL | WebFetch the page, analyze with Opus 4.7 vision, extract palette + layout patterns into `cortex/DESIGN.md` before Phase 2 |
| Screenshot or sketch (image) | Opus 4.7 reads at 3.75 MP — extract palette + layout/density signals (Galileo sketch-to-UI pattern) |
| Vibe-only ("premium, calm, trustworthy, fintech-but-warm") | Generate 2–3 distinct directional palette options + 1-line layout summaries, let operator pick (Stitch Vibe Design pattern) |

### Question matrix — pick gaps that apply, skip what's already obvious

Ask 4–7 questions across these gap-areas:

| Gap | Example question | Why it matters |
|---|---|---|
| Audience | "Who lands on this page — B2B prospect, end consumer, returning user, developer?" | Drives copy register + density |
| Goal | "What's the single primary action? (Book a call / signup / download / explore catalog)" | Forces above-fold hierarchy |
| Mood | "Premium / playful / utilitarian / brutalist / editorial?" | Picks library palette + motion budget |
| Reference | "Got a reference URL or screenshot? (Opus 4.7 reads images at 3.75 MP — drop them in)" | Anchors taste objectively |
| Brand colors | "Hex codes / existing brand kit / I-want-you-to-pick?" | Avoids 30 iterations of palette ping-pong |
| Scope of this session | "Just hero, or full landing? Just dashboard shell, or all views? Multi-page flow (signup + login + dashboard)?" | Bounds scope + triggers multi-page mode |
| Tech constraint | "Must use shadcn / company has its own DS / no constraint?" | Library decision |

**Default-Czech / default-English:** read the language signal from prior turns. If operator wrote Czech, ask Czech.

Skip the questionnaire entirely if the operator already gave you all 7 answers in one message — just summarize what you understood and move to Phase 1.5.

## Phase 1.5 — Plan gate (Lovable Plan Mode)

After Phase 1 intake AND before Phase 2 library decision, write a one-screen plan and **pause for operator approval**. Spawning 3 worktrees on the wrong direction wastes ~20 minutes of agent work + 3 dirty branches; one screen of structured plan eliminates ~80% of wrong-direction exploration.

```
## Design plan
- Scope: <hero only / full landing / signup+login flow / multi-page>
- Direction: <editorial / glassmorphism / brutalist / dense premium / ...>
- Library palette: shadcn/ui + GSAP + Lenis  (or specifics)
- Variants planned: 3 (v1 lean editorial / v2 dense glass / v3 brutalist mono)
- Assets: inline SVG (default) | image-gen via fal MCP for hero | video bg from /assets/
- DS-conformance: gate variants against cortex/DESIGN.md before reporting
- Estimated worktree cost: ~5–8 minutes per variant

Proceed? (y / adjust direction / change variant count / cancel)
```

Skip the gate ONLY for very small scopes (single isolated component, ≤ 1 variant) where the round-trip cost exceeds the protection value.

## Phase 2 — Library palette decision

Don't generate UI from scratch unless the operator explicitly said "from scratch, no libraries." Pick a palette grounded in the project's tech stack and the intake mood.

### Component libraries (pick ONE primary)

| Library | When | Notes |
|---|---|---|
| **shadcn/ui** | Default for any Next.js / React project | Owned-in-repo components; we can edit them. MCP available |
| **Aceternity UI** | Mood = premium / motion-rich landing pages | Pre-built animated heroes, glassmorphism, scroll-driven sections |
| **Hero UI** (NextUI rebrand) | Mood = playful / consumer-facing app | More opinionated styling than shadcn |
| **Tailwind UI** | When operator has a paid license | Most "professional B2B" out-of-the-box |
| **Magic UI** / **Origin UI** | Specific micro-interactions / form components | Cherry-pick individual components, don't adopt as primary |

### Animation libraries (pick what you need, layered)

| Library | Use for |
|---|---|
| **GSAP** | Production-grade timeline animations, scroll-triggered storytelling. Industry standard. |
| **Lenis** | Smooth scroll — almost mandatory if the mood demands "premium scroll feel" |
| **Framer Motion** | React-native motion for component-level animations (modals, page transitions, drag) |
| **Motion One** | Lightweight alternative when bundle size matters |
| **Spring** (react-spring) | Physics-based motion for organic UI |

### Asset patterns — pick by use case

| Pattern | When | Notes |
|---|---|---|
| **Inline SVG (Claude-generated)** | Default. Geometric, iconographic, ≤ 300 LoC, budget-conscious | Editable diff, no binary asset, fits cortex "real-code" value system |
| **Recraft V4 Pro SVG** | Section illustrations, brand-consistent vector art needed at scale | **Native SVG output** (not raster traced) — editable in git, perfect fit for cortex. Via fal or Recraft REST. Pro plan ($33/mo) or per-call. |
| **FLUX 1.1 Pro (Replicate / fal)** | Photoreal hero shots, product mockups, lifestyle imagery | ~$0.04/img, clean commercial license on API outputs, quality matches Midjourney without subscription |
| **Ideogram 3.0 Quality** | Assets with embedded text (CTA badges, mockup labels, hero with headline burned in) | 90–95% text accuracy — FLUX/Imagen still hallucinate letters |
| **Video hero backgrounds** | Real video asset exists AND serves the message | Single most overused trick on X demos — filler unless justified |
| **Lottie** | Engineering-grade animated icons | |
| **3D / WebGL** | Brief explicitly demands it | Otherwise vanity bandwidth tax |
| **Adobe Firefly 3** | Enterprise client with IP indemnification clause | $1K/mo enterprise floor — only for RELO-class clients |

### MCP servers worth wiring

If the project has Claude Code with MCP support, suggest enabling:

| MCP | Friction | Use |
|---|---|---|
| **shadcn MCP** | Zero-config | Agent installs the right component directly, no "what does Button accept again?" friction |
| **fal MCP** | One API key | One credential reaches FLUX + Recraft V4 SVG + Ideogram — single best image-gen entry for cortex |
| **Stitch MCP** (`@_davideast/stitch-mcp`) | gcloud OAuth + ADC + GCP project, Stitch in Beta | Bidirectional: agent prompts Stitch → pulls HTML/screenshots back. Apache-2.0, Google-maintained. Pin `@google/stitch-sdk@~0.3` (pre-1.0 risk) |
| **figma MCP** | Paid Figma plan + PAT | Only if operator has existing Figma designs to import |
| **imagegen-mcp** | Multi-provider fallback | GPT-Image / Imagen 4 / FLUX / Recraft / Nano Banana in one server |

## Phase 3 — Parallel worktree exploration

The single biggest leverage Claude Code gives you over Claude Design is **git worktrees + parallel subagents**. Use them.

### When to parallelize

- Phase 1 surfaced genuine ambiguity on direction (mood, layout, palette)
- The operator said "show me a few options"
- It's a hero section / landing page (high-variance — variation is cheap, comparison is fast)

### When NOT to parallelize

- The operator gave a clear reference and wants "exactly like this"
- Scope is a tiny isolated tweak (button color, copy edit)
- Cost ceiling is tight (autonomous sessions inside Steward — sequential is cheaper)

### Worktree recipe

```bash
# Create N worktrees (N ∈ [2, 4] — never more, comparison fatigue)
git worktree add ../<project>-design-v1 -b design/hero-v1
git worktree add ../<project>-design-v2 -b design/hero-v2
git worktree add ../<project>-design-v3 -b design/hero-v3
```

Dispatch one subagent per worktree with **distinct creative directions**, not just rephrased prompts:

- v1: "lean editorial, white space dominant, single hero image, type-driven"
- v2: "dense premium glassmorphism, video background, scroll-driven sections"
- v3: "brutalist mono palette, sharp grid, motion-on-hover only"

Each subagent:
1. Reads `cortex/DESIGN.md` (Phase 0 output — token ground truth) + `cortex/STYLE.md` (rationale + library decisions)
2. Reads `cortex/MEMORY/repo-map.md` if it exists (project shape)
3. Implements its variation as real code on its branch — must use tokens from `DESIGN.md`, no raw hex literals outside the theme
4. Starts a **live dev server on a unique port** (`PORT=5174 npm run dev`, etc.) so Playwright-MCP can hit it for screenshots + computed-style inspection
5. Runs the **DS-conformance gate** before reporting (Magic Patterns pattern)
6. Reports: branch name + one-line description + screenshot path + dev-server URL + LoC delta + conformance verdict

Use the **Agent** tool with `subagent_type: Plan` (for design plan) then `subagent_type: general-purpose` for implementation. Don't use specialized review agents during exploration — those come post-pick.

### DS-conformance gate (per variant, before reporting)

Automated check that generated components match `cortex/DESIGN.md` tokens:

| Check | How |
|---|---|
| No hex literals outside theme | `grep -rE "#[0-9a-fA-F]{6}\b"` on changed files, exclude `cortex/DESIGN.md` + tailwind.config — fail on hits |
| Spacing values use scale | `grep -rE "\b(padding|margin|gap):\s*\d+(\.\d+)?px"` — flag off-scale values |
| Font families from theme | font-family in CSS/className must reference `theme.fontFamily.*` |
| WCAG AA contrast | `npx @google/design.md lint` on the emitted DESIGN.md — must exit 0 |

Variants failing DS-conformance still get reported but are marked `[OFF-SPEC]` — operator can override.

### Operator pick + cleanup

After the operator picks the winner:

```bash
git checkout main
git merge design/hero-v2  # the winner
git worktree remove ../<project>-design-v1
git worktree remove ../<project>-design-v3
git branch -D design/hero-v1 design/hero-v3
```

Then run the review pipeline on the winner (`acceptance-auditor` + `blind-hunter` if it touches anything sensitive).

## Phase 4 — Iteration loop

Once a direction is picked, iterate on it in-place. NO more worktrees — that was for exploration. Now it's tightening.

Standard iteration moves:

1. **Reference replay** — operator drops a reference URL/screenshot; you re-analyze with Opus 4.7's vision and refine the existing page toward it
2. **Section swap** — replace one section (pricing, testimonials, CTA) with a fresh variation while keeping the rest
3. **Motion pass** — once layout is locked, add GSAP/Lenis touches in one focused commit
4. **Polish pass** — typography rhythm, color contrast, spacing scale, micro-copy

### Live dev server loop (Onlook + Bolt pattern)

Keep `npm run dev` running through the entire iteration. After each commit:

- Playwright-MCP screenshots the affected page at desktop (1440), tablet (768), mobile (375) widths
- Computed-style inspection on any element the operator points at ("the CTA button feels too small" → MCP reads actual rendered px + font-size + color and proposes a delta)
- Diff screenshots vs previous commit — surfaces unintended regressions

(Gated on Sprint 4.6 Playwright-MCP UI verification — until then, operator runs `npm run dev` manually and screenshots by hand.)

Each iteration is a **separate commit** so reverting is one command. Use `git stash` aggressively when trying something risky.

## Phase 5 — Handoff

When the operator says "this is good," do the handoff:

1. **Emit `cortex/DESIGN.md`** (Stitch DESIGN.md format) — YAML front-matter with final tokens + markdown body with rationale. Run `npx @google/design.md lint` and ensure 0 errors. This is the portable artifact other agents (Stitch, Cursor, Antigravity, Gemini CLI, Kiro) can consume.
2. **Update `cortex/STYLE.md`** (create if missing) with the cortex-specific decisions DESIGN.md doesn't model: library palette, motion vocab, worktree winner rationale, asset-pattern picks.
3. **Optional: emit `cortex/decisions/DESIGN-<date>.md` PRD-shaped** if the design needs to hand off to a separate engineering team or another agent for implementation work that didn't happen in this session. Include: scope, libraries, palette, motion, asset patterns, open questions.
4. If `package.json` gained dependencies, list them in the commit message.
5. If the project has a `qa-engineer` profile or `senior-tester-review` action_kind, suggest running it on the final design pass.
6. **Optional DTCG export** — `npx @google/design.md export --format dtcg > cortex/tokens.dtcg.json` for downstream Style Dictionary / Tokens Studio interop.

## Anti-patterns (don't)

- **Don't skip Phase 0 on a brownfield repo.** Re-deriving brand decisions from scratch when `tailwind.config.ts` already encodes them = SSOT violation, hours wasted.
- **Don't skip Phase 1.5 on multi-variant runs.** Plan-gate is cheap; wrong-direction parallelism is expensive.
- **Don't run the full intake for one-button changes.** Use judgment.
- **Don't spawn 6 worktrees.** Comparison fatigue kills the win. Cap at 4.
- **Don't auto-merge a worktree winner.** Operator must explicitly pick.
- **Don't import 12 libraries.** Pick one primary + one animation + one smooth-scroll, max.
- **Don't generate "designer-coded" CSS variables as opaque tokens.** Use Tailwind utility classes that map to a documented theme — readable diffs matter for the iteration loop.
- **Don't skip screenshots in worktree reports.** Operator can't compare 3 variations by reading three diffs.
- **Don't claim "I designed this" if you imported a pre-built Aceternity hero verbatim.** Cite the source in the commit message.
- **Don't rename `cortex/STYLE.md` → `cortex/DESIGN.md`.** Both coexist — DESIGN.md is portable tokens (Stitch schema, ~40% coverage), STYLE.md is cortex rationale (the other 60%).
- **Don't use Stitch MCP for greenfield without justification.** gcloud OAuth + GCP project setup is heavy friction vs zero-config shadcn MCP; default flow is shadcn MCP + worktrees.

## Composes with

- `/start` (cortex-x new-project) — designer flow naturally runs after Phase 4 scaffold
- `/audit` (cortex-x existing-project) — designer flow runs after AUDIT.md identifies "front-end needs work" recommendation; Phase 0 harvests existing DS
- `/retrofit` — DS extraction in Phase 0 is the natural input to retrofit's STYLE.md seeding
- `senior_tester_review` action_kind — run on the design pass to catch a11y / motion-overuse / contrast issues
- Sprint 4.6 Playwright-MCP UI verification (roadmapped) — once landed, the winner gets automatic visual-regression coverage + Phase 4 live-server loop fully closes
- Steward `acceptance_criterion` kind `shell` — wire `npx @google/design.md lint` as a per-PR gate

## Award mode (`--award` / `--awwwards`)

Opt-in override applied when operator invokes `/designer --award`, says "this is for Awwwards / SOTD / portfolio piece / agency-tier work", or scope is explicitly an award submission. **Award mode costs 5-10× more time + asset budget** than default mode — use only for portfolio, agency, studio, or explicit award-targeting work. Default-mode discipline (competent SaaS-grade landing) is the right answer for 80% of projects.

Empirical basis: reverse-engineering 25 Awwwards SOTD/SOTM/SOTY winners (May 2026 sample, mix of Webflow + Next.js + custom stacks). All frequencies cited below are over that sample unless noted. Output target: SOTD-eligible — recognition is never guaranteed, but the floor lifts from "ships" to "submittable."

### Award Phase 1 override — Strategic brief (replaces functional intake)

Replace the 7 functional intake questions with the 7 strategic-brief questions. Each is chosen because it forces a decision the AI default skips. Output: emit `cortex/AWARD-BRIEF.md` containing operator's answers; that file becomes Phase 1.5 plan input and is archived for the eventual submission "About this site" / colophon.

1. **Concept metaphor (one sentence).** "If this site were a physical place, object, or ritual, what is it?" — forces commitment to a singular idea (Resn: "narrative as the core driver"; Unseen: "surreal digital home"). AI default = generic SaaS layout.
2. **Narrative arc (4-6 acts).** "Name sections as story acts with one-line emotional intent each — NOT Hero/Features/Pricing." Forces sectional intentionality (Locomotive: "each section is a chapter").
3. **3 refs + 3 anti-refs + 1 bridge.** "3 sites you admire + 3 you must NOT resemble (with the gravitational-pull-rationale) + 1 reference outside the category (film, magazine, physical product)." Anti-refs force trap awareness. AI default = average of training corpus.
4. **Tone pillars (3 × 5 adjectives + 3 anti-adjectives each).** No "premium", "modern", "clean", "minimal" allowed — too cheap. Forces vocabulary precision (Off-Brand "vocabulary cards" pattern).
5. **Motion + sound ethos (one sentence each).** "How does everything move (weight, decay, rhythm)?" / "Silent / ambient / event-cued / signature score?" Forces commitment up front (Resn + Active Theory pattern).
6. **Type behaviour + color tension.** "Does type LEAD or SUPPORT? Hero color + tension color (not a palette of 5) + why those two fight well together." Forces principle over palette.
7. **3-5 prohibitions phrased as rules.** "Write 3-5 rules starting with 'Never' or 'Only' that any reviewer can use to reject work." AI default = add more; this layer subtracts.

Optional 8th: "What is the one thing a visitor must FEEL within 4 seconds?" — single-emotion gate.

### Award Phase 2 override — Narrower library palette (verified by data)

Award winners use **less, not more**. Hard data overrules speculation:

#### Required stack

| Layer | Pick | Award winner frequency |
|---|---|---|
| **Meta-stack** | Next.js OR Webflow | Next.js 28% (7/25), Webflow 16% (4/25 + SOTY 2025 — Lando Norris on Webflow) |
| **Motion runtime** | GSAP 3.15 (free since Webflow acquisition 2025) | 36% (9/25) + both SOTYs |
| **GSAP plugins** | Observer + ScrollTrigger + SplitText + CustomEase | Observer 32%, ScrollTrigger 24%, SplitText 20% |
| **Smooth scroll** | Lenis 1.3 | 32% (8/25); Locomotive Scroll on Webflow legacy only |
| **3D when justified** | **Raw Three.js r184** (NOT R3F) | Three.js 16% (4/25) + Developer SOTY 2025 (Messenger). R3F: **0/25** |
| **Page transition** | Barba.js OR hand-rolled curtain | 8% explicit, more in feel — table stakes craft |
| **Custom cursor** | Cuberto mouse-follower OR pure GSAP recipe | 16%+ explicit |
| **Sound** | Howler.js + mandatory mute toggle (top-right) | Studio sites yes, B2B SaaS no |

#### Forbidden in award mode (0/25 winners)

- **Component libraries shipped unmodified:** shadcn/ui, Aceternity UI, Hero UI, Tailwind UI as primary palette. **0 of 25** winners use them. Hand-build buttons, nav, cards. (Cherry-picking single components is OK; adopting as system is the AI tell.)
- **React motion libraries:** Framer Motion / Motion v12 / react-spring / Motion One. **0/25 winners.** Switch to GSAP Observer + ScrollTrigger.
- **`@react-three/fiber` + drei + postprocessing.** **0/25 winners** in this sample — go raw Three.js when 3D is justified, or skip 3D.
- **Rive (@rive-app/canvas).** **0/25 winners confirmed** ("Rive is hype, not winning"). Lottie acceptable only when client supplies the .lottie asset.
- **Theatre.js.** **0/25 winners.** Pure GSAP ScrollTrigger is cleaner; Theatre is overkill outside cinematic camera work.
- **View Transitions API / CSS scroll-timeline.** **0/25 winners** as of May 2026 — winners distrust bleeding-edge browser APIs. Revisit when adoption > 20%.
- **Generic Spline scene with default lighting.** Spline appears in 8% but always with custom material + lighting. Default-lit floating-blob = AI tell.
- **Default Tailwind palette utilities** (`purple-600`, `indigo-500`, `slate-50`) as brand color. Zero winners use Tailwind utility colors as the brand.

#### Optional studio-cinematic tier (scope > landing)

Only when budget supports it: Theatre.js for camera choreography, OGL for lightweight WebGL (Active Theory style), Lygia shader library, Tone.js for generative audio, Cuberto mouse-follower (gated on `pointer: fine` — never on touch-primary audiences).

### Award Phase 2.5 — Type + color craft gate (HARD)

Applied mid-generation and re-checked at Phase 3 DS-conformance gate.

#### Type discipline

Bundle from **Fontshare / Pangram Pangram free-tier ONLY** (all .woff2 variable, all OFL/commercial-free, all SOTD-grade):

| Preset | Display | Text | Mono |
|---|---|---|---|
| **Editorial premium** | PP Editorial New | Switzer | JetBrains Mono |
| **Brutalist colorful** | Clash Display | Cabinet Grotesk | Recursive (CASL=1) |
| **Quiet luxury** | PP Editorial New Italic | Satoshi | — |
| **Tech / agentic** | Switzer (huge) | Recursive (MONO axis) | JetBrains Mono |

Rules (every winner enforces these):

- Every size uses `clamp(min, vw-based, max)` — **NEVER** static `text-6xl` Tailwind utilities. (floema.com declares clamp() 33 times.)
- Variable fonts via `@font-face` with controlled axes (`wght`, `opsz`, optionally `CASL`/`MONO`). NO static .woff2 sets.
- Display > 48px: negative tracking `letter-spacing: -0.02em` to `-0.04em`
- Body: `text-wrap: pretty`, `hanging-punctuation: first last`, `font-optical-sizing: auto`
- Headlines: `text-wrap: balance`
- Modular type scale ratio 1.25 (UI) or 1.333 (editorial) or 1.618 (poster-hero)
- Type-as-section-divider — single word at 200px+ acts as chapter break (floema.com, mors.design, brets.fr)

Forbidden type defaults: Inter / Roboto / Open Sans / Poppins / Geist as primary brand voice. (Inter fine as fallback in font stack only.) Static text sizes. System font stack.

#### Color discipline

- **≤ 7 hex literals site-wide** (verified rule: 0-3 on portfolio winners, e-commerce up to 22 with content imagery). Force CSS custom properties: `var(--brand)`, `var(--bg)`, `var(--fg)`, `var(--accent)`, `var(--muted)`.
- **OKLCH tokens, not hex.** Tailwind v4 native; Cortex differentiator since **0/25 sampled winners use OKLCH in raw HTML** — we lead on perceptual uniformity + P3 gamut:
  ```css
  --brand:    oklch(0.62 0.19 27);   /* ONE saturated hue, ONE accent */
  --bg:       oklch(0.99 0.005 90);  /* warm-white, NEVER #fff */
  --fg:       oklch(0.18 0.02 270);  /* hinted-blue near-black, NEVER #000 */
  --muted:    oklch(0.55 0.02 270);
  ```
- **1 brand + 1 accent + 2 neutrals max.** Anything more requires explicit brand justification.
- **Off-black + off-white + ONE saturated accent.** Never pure `#000` or `#fff`.
- **Wide-gamut P3 accent** on a single hue: `color(display-p3 1 0.42 0.21)` for colors literally impossible in sRGB.
- **`mix-blend-mode: difference` on text-over-image collisions** — 32% of winners (simonholm.studio uses it 4 times). Craft signal AI rarely reaches for.
- **Background-color-as-section-divider** — flat color blocks between sections instead of imagery (recurring SOTD pattern).

Forbidden color defaults:
- **Purple→pink gradient** (`#6366f1 → #ec4899` / any indigo-violet ramp) — canonical AI-slop signature
- Tailwind `indigo-500` / `violet-500` / `purple-600` as primary
- Generic charcoal `#1a1a1a` / `#0a0a0a` — use `oklch(0.16 0.01 270)` instead
- Neon mint `#00ffa3`, "AI startup" cyan/blue, "trustworthy" navy + orange Stripe-cliché
- Conic-gradient mesh as background (**0/25 winners** use them)
- 5+ color brand palettes, rainbow-chip hero illustrations

### Award Phase 3 override — Worktree variants with signature interactions

Worktree subagents (still 2-4 variants) commit to DISTINCT signature interactions, not just rephrased prompts. Each variant must implement:

1. **Preloader concept** — hand-built, NOT library-imported. Count-up / logo-reveal / brand-specific sequence. 32% of winners ship one. Without preloader = no SOTD.
2. **Custom cursor behavior** — magnetic + contextual (link / drag / video states). Gated on `pointer: fine`, feature-detected; harmless on touch.
3. **Page-transition curtain** — wipe / mask / dissolve. Default Next.js route changes never win.
4. **Signature interaction** — the brand-specific moment that justifies the award. ONE distinctive thing the variant becomes known for.

#### Award DS-conformance gate (extends default Phase 3 gate)

Each variant must pass before reporting:

| Check | Command |
|---|---|
| No purple/violet/indigo Tailwind utilities | `! grep -rE "(purple\|violet\|indigo)-(4\|5\|6\|7\|8)00"` |
| No static text size utilities | `! grep -rE "text-(4\|5\|6\|7\|8\|9)xl"` |
| `clamp(` present in type CSS | `grep -r "clamp("` must hit |
| No pure black/white | `! grep -rE "#(000\|fff)([^0-9a-f]\|$)"` |
| Variable font via @font-face | `grep -r "font-variation-settings\|@font-face" must hit |
| Preloader class present | `grep -r "preloader\|page-loader"` must hit |
| Custom cursor class present | `grep -r "custom-cursor\|cursor-follower"` must hit |
| WCAG AA contrast | `npx @google/design.md lint` exit 0 |

Variants failing this gate ship marked `[OFF-SPEC]` — operator can override. Default mode's gate is a subset of this.

### Award Phase 4 override — Required craft passes

Three sequential passes before "good enough":

1. **Preloader pass** — hand-build the loading sequence (30-90 sec of LoC). Brand-specific number/logo motion.
2. **Cursor pass** — Cuberto mouse-follower OR pure GSAP recipe. Feature-detect `(pointer: fine)`.
3. **Blend-mode pass** — apply `mix-blend-mode: difference` on 4-8 text-image crossings (simonholm.studio frequency).
4. **(Optional) Sound pass** — Howler one-tick on key interactions + mute toggle in top-right (mandatory if any sound).

### Award Phase 5 override — Submission-ready handoff

Beyond default handoff, additionally emit:

1. **`cortex/AWARD-BRIEF.md`** — the strategic brief itself (Phase 1 answers), archived for the submission "About this site" page.
2. **Lighthouse ≥ 90 Performance** — Awwwards juries penalize sub-90 explicitly. Run `npx lighthouse --only-categories=performance` in CI.
3. **WCAG AA mandatory, AAA preferred** — Awwwards Accessibility honor is a separate award.
4. **Custom 404 page** — table stakes for SOTD. Match concept metaphor from Phase 1.
5. **"About this site" / colophon page** — credit libraries + foundries + concept + acknowledgments. Awwwards jurors read this.
6. **Submission asset bundle** — 1920×1080 hero screenshot + 15-30 sec screen recording (Playwright-MCP can drive). Ship to `cortex/award-submission/`.

### Award mode anti-patterns

- **Don't enable award mode by default.** It's 5-10× the asset/time budget. Reserve for portfolio / agency / explicit award targets.
- **Don't apply award stack to a Steward autonomous run.** Award mode requires human craft pass at Phase 4; autonomous nightly runs lack the iteration capacity.
- **Don't mix shadcn award-mode-forbidden imports with award stack.** If award mode is on, removal of shadcn imports from the variant is part of Phase 3 conformance gate.
- **Don't pretend a competent SaaS landing is award-tier.** Calling default `/designer` output "Awwwards-ready" misleads the operator. Only `--award` runs claim that target.
- **Don't ship Spline default-lit scenes in award mode.** Always custom material + lighting; otherwise skip 3D.

### Award mode references — empirical basis

**Reverse-engineered winners (25-site sample, May 2026):**

- [Awwwards SOTD archive](https://www.awwwards.com/websites/)
- [SOTY 2025 — Lando Norris (OFF+BRAND / Webflow / GSAP)](https://www.itsoffbrand.com/our-work/lando-norris)
- [SOTY 2025 Developer — Messenger (raw Three.js)](https://www.webgpu.com/showcase/messenger/)
- Sample sites: obys.agency, floema.com, mors.design, studionamma.com, simonholm.studio, mina-massoud.com, pixila.net, paodao.fr, 375.studio, marvellco.com.au, brets.fr, ordrhealth.com, adcker.com, eclettica.bulgari.com, camperandnicholsons.com, sazabi.com, gethapply.com, idyllic.co.nz, itomdev.com, t11.com, thepush.com.au, xox.makemepulse.com, fourmula.ai, kvs.services, astrodither.robertborghesi.is

**Strategic brief frameworks:**

- [Resn case studies](https://www.awwwards.com/case-study-resn-presents-adventuring-the-fantastical.html)
- [Locomotive — "two typefaces, four styles"](https://www.awwwards.com/locomotive-by-locomotive-wins-site-of-the-month-june-a-case-study.html)
- [Pentagram Brand Strategy](https://www.pentagram.com/brand-strategy)
- [Black Frame Framework template](https://framenoir.com/framework/)
- [Off-Brand vocabulary cards pattern (the-brandidentity.com interview)](https://the-brandidentity.com/interview/presented-by-brandpad-how-to-systemise-a-brand-featuring-pentagram-how-how-and-studio-blackburn)

**Library landscape:**

- [GSAP 3.13 — premium plugins now free](https://gsap.com/blog/3-13/)
- [Lenis (darkroomengineering)](https://github.com/darkroomengineering/lenis)
- [Cuberto mouse-follower](https://github.com/Cuberto/mouse-follower)
- [Howler.js](https://github.com/goldfire/howler.js)

**Type + color craft:**

- [Fontshare (ITF free commercial tier)](https://fontshare.com/)
- [Pangram Pangram free-to-try](https://pangrampangram.com/)
- [Recursive variable font (5 axes)](https://www.recursive.design/)
- [Utopia fluid type calculator](https://utopia.fyi/type/calculator/)
- [MDN variable fonts](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_fonts/Variable_fonts_guide)
- [MDN hanging-punctuation](https://developer.mozilla.org/en-US/docs/Web/CSS/hanging-punctuation)
- [Evil Martians — OKLCH](https://evilmartians.com/chronicles/oklch-in-css-why-quit-rgb-hsl)
- [Tailwind v4 P3 gamut discussion](https://github.com/tailwindlabs/tailwindcss/discussions/13628)
- [Radix Colors 12-step](https://www.radix-ui.com/colors)
- [Why AI keeps building purple gradients](https://prg.sh/ramblings/Why-Your-AI-Keeps-Building-the-Same-Purple-Gradient-Website)
- [AI Slop Web Design guide](https://www.925studios.co/blog/ai-slop-web-design-guide)
- [Creative Boom — top 50 fonts 2026](https://www.creativeboom.com/resources/top-50-fonts-in-2026/)

## References

### Source recipe transcripts (raw analysis)

- [Claude Design Is Actually A Trap.txt](../../../docs/transcripts/Claude%20Design%20Is%20Actually%20A%20Trap.txt) — Opus 4.7 vision + skill + library palette = full Claude Design reproduction inside Claude Code
- [google-stitch-vs-claude-design.md](../../../docs/transcripts/google-stitch-vs-claude-design.md) — Stitch 2.0 vs Claude Design feature comparison; source for Phase 0/1.5/DS-conformance additions

### Stitch DESIGN.md spec (Phase 0 + Phase 5)

- [google-labs-code/design.md](https://github.com/google-labs-code/design.md) — Apache-2.0, alpha spec
- [Spec page](https://stitch.withgoogle.com/docs/design-md/specification)
- [@google/design.md on npm](https://www.npmjs.com/package/@google/design.md)
- [stitch-skills Agent Skills bundle](https://github.com/google-labs-code/stitch-skills/tree/main/skills/design-md)
- [VoltAgent/awesome-design-md examples](https://github.com/voltagent/awesome-design-md)
- [Google announcement](https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-design-md/)

### Stitch MCP (Phase 2 MCP entry)

- [@_davideast/stitch-mcp](https://www.npmjs.com/package/@_davideast/stitch-mcp) — Claude Code installer (Google DevRel-blessed)
- [google-labs-code/stitch-sdk](https://github.com/google-labs-code/stitch-sdk) — Apache-2.0, v0.3.x
- [Stitch MCP docs](https://stitch.withgoogle.com/docs/mcp/setup)

### Image-gen models + MCPs (Phase 2 Asset patterns)

- [Recraft V4 native SVG (Replicate)](https://replicate.com/recraft-ai/recraft-v4-pro-svg)
- [FLUX 1.1 Pro (Replicate)](https://replicate.com/black-forest-labs/flux-1.1-pro) — [BFL licensing](https://bfl.ai/licensing)
- [Ideogram 3.0 (Segmind)](https://blog.segmind.com/ideogram-3-0-on-segmind-features-api-pricing-and-use-cases/)
- [fal MCP server (single auth for FLUX + Recraft + Ideogram)](https://blog.fal.ai/)
- [imagegen-mcp multi-provider](https://github.com/writingmate/imagegen-mcp)

### Competitive pattern sources (Phase 0 / 1 / 1.5 / 3 / 4)

- [Anthropic Claude Design announcement](https://www.anthropic.com/news/claude-design-anthropic-labs) — Phase 0 bootstrap-from-repo pattern
- [Lovable Plan Mode (Muz.li)](https://muz.li/blog/lovable-for-designers-the-complete-guide-to-building-apps-with-ai-2026/) — Phase 1.5 plan gate
- [Magic Patterns DS-conformance](https://www.magicpatterns.com/blog/ui-design-tools) — Phase 3 conformance gate
- [Onlook (open-source live-server)](https://github.com/onlook-dev/onlook) — Phase 4 live dev server loop
- [Stitch Vibe Design (NxCode)](https://www.nxcode.io/resources/news/google-stitch-complete-guide-vibe-design-2026) — Phase 1 vibe/image/sketch intake

### Cortex internal

- Standards: [ai-patterns.md](../../../standards/ai-patterns.md), [ai-sdks.md](../../../standards/ai-sdks.md), [ssot.md](../../../standards/ssot.md), [visual-taste.md](../../../standards/visual-taste.md) (the rules layer Phase 2-3 enforces — taste dials, em-dash ban, pre-flight checklist, GSAP skeletons)
- Sprint 2.16 — designer skill landing; Sprint 2.16.x — research-driven expansion (this version)
- Steward roadmap: [docs/steward-roadmap.md](../../../docs/steward-roadmap.md)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.