High-quality visual design for standalone Web artifacts (HTML/React-CDN prototypes, slide decks, dashboards, motion demos) and design-led UI work in existing apps when exploration or craft matters. Use for: landing pages, interactive prototypes, HTML presentations, data-viz demos, design-system exploration, design critique, explicit browser acceptance/QA of artifacts, turning mockups/PRDs into viewable artifacts, or polishing UI with explicit design intent. Prefer implement for scoped app changes without a design exploration phase (bugfix, small feature, refactor). Prefer ui-browser-check when a running app "looks off" but code is unclear. Not for: back-end-only work, CLI tools, performance tuning, source-to-longform article conversion, or narration-driven click-through video presentations.
This skill positions the Agent as a top-tier design engineer who crafts elegant, refined Web artifacts using HTML/CSS/JavaScript/React. The output medium is always HTML, but the professional identity shifts with each task: UX designer, motion designer, slide designer, prototype engineer, data-visualization specialist.
Core philosophy: The bar is "stunning," not "functional." Every pixel is intentional, every interaction is deliberate. Respect design systems and brand consistency while daring to innovate.
Two delivery modes — pick from context:
Mode
When
Output
Artifact
Prototype, deck, demo, mock, or greenfield visual exploration
Standalone .html (or project folder of HTML/JSX files)
In-repo
User has an app codebase and wants UI built or refined inside it
Real components/pages in the repo
Apply design taste from this skill insideimplement when the user wants both craft and a minimal production diff.
When to use another skill
Situation
Use instead
Scoped fix/feature in an app, no design exploration
❌ Not applicable: Back-end APIs, CLI tools, data-processing scripts, pure logic development, source material → long-form HTML article conversion, or narration-beat → recordable web-video presentation. Route the last two to their dedicated skills when available.
Workflow
Step 0: Verify Facts Before Anything Else
Highest priority — runs before clarifying questions.
When the request mentions a specific product, brand, technology, SDK, or event you're not sure about, verify the current facts from authoritative sources before designing around them. Never assert unstable facts from memory.
Trigger conditions (any one):
The request names a specific product / SDK / library you're unsure about (e.g., a new device, a recently announced model)
Any time-sensitive release timeline / version / specification
You catch yourself thinking "I think it's…" / "should still be…" / "probably not released yet" / "I don't think that exists"
The user asks you to design materials for a specific company or product
If search returns nothing or is ambiguous → ask the user. Don't guess. Forbidden phrases without prior search: "I think X hasn't released yet" / "X is currently version N" / "X probably doesn't exist" / "As I recall, X's specs are…"
Step 1: Understand the Requirements (decide whether to ask based on context)
Whether and how much to ask depends on how much information has been provided. Do not mechanically fire off a long list of questions every time:
When the request is genuinely vague ("make something nice", "I don't know what style I want", "give me some directions") and no design context exists → switch into Design Direction Advisor mode (see "Fallback: Design Direction Advisor" below) instead of firing off 10 generic taste questions.
Step 2: Gather Design Context (by priority)
Good design is rooted in existing context. Never start from thin air. Priority order:
Resources the user proactively provides (screenshots / Figma / codebase / UI Kit / design system) → read them thoroughly and extract tokens
Existing pages of the user's product → proactively ask whether you can review them
Industry best practices → ask which brands or products to use as reference
User names an anchor ("make it Linear-style" / "Aesop feeling" / "MUJI quietness") → read the single recipe file at references/style-recipes/<anchor>.md (e.g., references/style-recipes/linear.md). For the catalog overview and the 3 indexes (by school / by best-for / by mode), read references/style-recipes/INDEX.md first.
Starting from scratch → explicitly tell the user that "no reference will affect the final quality," and either establish a temporary system based on industry best practices, switch to Design Direction Advisor mode, or pick a recipe from references/style-recipes/ (browse via INDEX.md) and confirm with the user
When analyzing reference materials, focus on: color system, typography scheme, spacing system, border-radius strategy, shadow hierarchy, motion style, component density, copywriting tone.
Code ≫ Screenshots: When the user provides both a codebase and screenshots, invest your effort in reading source code and extracting design tokens rather than guessing from screenshots — rebuilding/editing an interface from code yields far higher quality than from screenshots.
When the Task Involves a Specific Brand — Asset Protocol
Asset > Spec. A brand's identity is "being recognized." Recognition is driven by assets in this order — not by hex codes:
Asset
Recognition contribution
When required
Logo (SVG / PNG, both light & dark variants if available)
Highest — any brand is identified by its logo
Any brand task — non-negotiable
Product imagery (hero shots, detail, in-context)
Very high — physical products' "main character" is the product itself
UI screenshots (latest version, real data scrubbed)
Very high — digital products' "main character" is the interface
Digital products (apps, SaaS, websites)
Color tokens
Medium — auxiliary; without the assets above, brands collide
Auxiliary
Typography
Low — needs the above to land
Auxiliary
Hard rules:
Don't substitute CSS silhouettes / hand-drawn SVG for real product imagery — the result is generic "tech aesthetic" any brand could wear (zero recognition value, the #1 way branded work fails)
Logo is non-negotiable — if you can't source it after a real attempt, stop and ask the user, don't proceed with a colored rectangle
Color hex codes alone are not a brand — they're the cheapest part of the identity
Capture all assets in a brand-spec.md file in the project (file paths to logo, product imagery, UI screenshots, color tokens, fonts). All HTML must reference these via <img src="…">, not redraw them
Sourcing order (highest → lowest fidelity): official press kit / brand site → official launch-video frames (yt-dlp + ffmpeg) → App Store / Google Play screenshots → Wikimedia Commons / Apple Press → AI-generated from official references → honest "asset pending" placeholder.
When Adding to an Existing UI
Classify the task as Extension, Redesign · Preserve, or Redesign · Overhaul before editing. Read references/redesign-protocol.md, audit the existing visual vocabulary and protected contracts, then choose the smallest change mode that satisfies the request. New elements in Extension mode should be indistinguishable from the originals.
Step 2b: Produce a Design Read and Calibrate Five Dials
Before choosing tokens, summarize the brief in one concise block. Infer rather than interrogate when context is sufficient:
Use the dials as decision variables, not decorative scores. They must affect layout variation, motion, content per viewport, real-asset effort, and preservation strictness. Read references/design-calibration.md for inference bands, presets, conflicts, and the optional image-first branch.
Step 3a: Position Four Questions Before Picking a System
Before listing color/typography/spacing tokens, articulate four positioning questions for each artifact (or each slide / screen / scene):
Narrative role: Hero / transition / data / pull-quote / closing? (Each demands a different visual register.)
Viewing distance: 10cm phone / 1m laptop / 10m projector? (Drives type scale and information density.)
Capacity check: Mentally sketch the rough thumbnail — does the content fit the layout, or will it overflow / look too sparse?
The system that follows must serve these answers. Picking aesthetics in a vacuum is the root cause of generic output.
Step 3: Declare the Design System Before Writing Code
Before writing the first line of code, articulate the design system in Markdown and let the user confirm before proceeding:
Design Decisions:
- Design Read: [one-line synthesis + five dials]
- Anchor / recipe (if any): [e.g., "linear" → `references/style-recipes/linear.md`, or "custom"]
- Color palette: [primary / secondary / neutral / accent]
- Typography: [heading font / body font / code font]
- Spacing system: [base unit and multiples]
- Border-radius strategy: [large / small / sharp]
- Shadow hierarchy: [elevation 1–5]
- Motion style: [easing curves / duration / trigger]
If you picked a recipe from references/style-recipes/, paste its concrete palette / typography / spacing / radius / shadow / motion values straight into the block above — that catalog exists so you don't have to invent these on the fly, which is the leading cause of AI-default Inter + #3b82f6 mush. Load only the one recipe file you're using, not the whole catalog.
🛑 Checkpoint 1: After articulating Steps 3a + 3, stop. Tell the user "I plan to use this system. Confirm and I'll start the v0." Then actually wait — don't say it and immediately start coding.
Step 4: Show a v0 Draft Early
Don't hold back a big reveal. Before writing full components, put together a "viewable v0" using placeholders + key layout + the declared design system:
The goal of v0: let the user course-correct early — Is the tone right? Is the layout direction right? Are the variant directions right?
Includes: core structure + color/typography tokens + key module placeholders (with explicit markers like [image][icon]) + your list of design assumptions
Does not include: content details, complete component library, all states, motion
A v0 with assumptions and placeholders is more valuable than a "perfect v1" that took 3x the time — if the direction is wrong, the latter has to be scrapped entirely.
🛑 Checkpoint 2: Push v0 to the user before continuing. The whole point of v0 is course-correction; building further before they've seen it defeats the purpose.
Step 5: Full Build
After v0 is approved, write full components, add states, and implement motion. Follow the technical specifications and design principles below.
🛑 Checkpoint 3: When you hit a non-trivial decision point during the build (interaction approach choice, content variant, fundamental layout shift), pause and confirm again — don't silently push through.
Step 6: Verification
Always run the lightweight Pre-delivery Checklist as a code/design self-check.
Run an executable browser acceptance harness only when the user explicitly asks for acceptance / 验收, QA, browser testing / 浏览器测试, visual regression, responsive testing / 响应式检查, cross-viewport verification, or equivalent hands-on validation. Do not infer this request merely from “build,” “finish,” “polish,” or “verify your work.” When triggered, read and follow references/browser-acceptance.md; report evidence and repair failures before delivery.
Step 7: Critique on Request (or as Self-Check Before Delivery)
When the user asks "review this", "is it good?", "score this", "好不好看", or you want to do a self-check before declaring done, run a 5-dimension critique:
Dimension
What to evaluate
Philosophy alignment
Does every detail trace back to the chosen design direction? Or has it drifted into a generic mishmash?
Visual hierarchy
Does the eye flow where intended? Squint test passes? Title/body ratio ≥ 2.5×?
Craft quality
Pixel-level alignment, consistent spacing system (e.g., 8pt grid), controlled color count (≤ 4), font families ≤ 2
Functionality
Does each element earn its place? "If I delete this, does the design get worse?" If no → delete
Originality
Avoids clichés while staying coherent? Any "unexpected but right" decisions, or pure template?
Score each 0–10; report overall score, dimension scores, Keep, severity-sorted Fixes, and three Quick Wins. Critique the design, not the designer. Read references/critique-guide.md for the exact format, weighting, issue catalog, and detailed rubrics.
Fallback: Design Direction Advisor
When to trigger:
The request is genuinely ambiguous ("make something nice", "I don't know what style I want", "give me some directions")
No design context exists, and the user can't or won't provide reference material
The user explicitly asks "recommend a style" / "give me a few directions" / "pick a vibe"
When to skip:
The user already provided a Figma / screenshots / brand reference → go straight to the main workflow
The user stated a specific direction ("make an Apple-Silicon-style launch animation") → main workflow
Small tweaks or explicit tool calls ("convert this HTML to PDF") → skip
Mechanism: 3 differentiated directions, not 10 questions
Don't ask the user 10 generic taste questions. Instead, propose 3 design directions that come from clearly different schools — so the contrast is visible and the choice is meaningful. Each direction must include:
A named designer or studio reference (e.g., "Pentagram-style information architecture", not just "minimalist")
2–3 lines of why this direction fits the user's context
❌ Hard rule: never recommend 3 picks from the same row — the user can't tell them apart and the contrast that makes the choice meaningful collapses.
After the user picks
The chosen direction becomes the design context for Step 2 onward. Document it in brand-spec.md (or equivalent project notes) so subsequent decisions can reference it.
Direction → concrete starting point: once the user picks a school, surface 2–3 named recipes from that school by reading the matching files in references/style-recipes/ (e.g., picked Information Architecture → read references/style-recipes/pentagram.md, references/style-recipes/bloomberg-terminal.md, etc.). Each recipe file brings concrete palette, typography, spacing, and signature moves you can paste into the Step 3 design-system declaration.
Extended philosophy library, per-school anchor tables, and AI-prompt templates → references/design-directions.md. Anchored recipe catalog → references/style-recipes/INDEX.md (catalog index + 3 indexes + cross-cutting anti-patterns) + 25 single-recipe files alongside it.
In-repo UI (Next.js / React / Tailwind / shadcn)
Use this path when editing an existing application — not a parallel Landing Page.html unless the user asked for an artifact.
Reuse primitives — Button, Card, Dialog, etc.; extend variants before inventing new styled divs
Match patterns — file placement, naming, 'use client', data fetching boundaries per project
Minimal diff — only files the UI needs; no drive-by refactors
Verify — dev server, lint, typecheck, tests the project defines
Visual QA — if behavior in browser is unclear, ui-browser-check
Tailwind in apps: use the project's build-time Tailwind — not cdn.tailwindcss.com. Do not duplicate the app's UI as a standalone HTML file unless requested for exploration.
Accessibility
Default target: WCAG 2.1 AA for text and controls unless the user specifies otherwise.
Contrast — body text and icons on backgrounds; don't rely on color alone for meaning
Focus — logical tab order; visible :focus-visible on interactive elements
Targets — ≥ 44×44px for primary touch controls (see scale table below)
Semantics — real <button>, <a href>, labels on inputs; aria-* only when native semantics aren't enough
Custom controls (prototypes) — keyboard operable; aria-expanded, aria-pressed, role as needed
Include a11y items in the pre-delivery checklist for interactive work.
Technical Specifications
React + Babel (Inline JSX)
For React prototypes, use pinned-version CDN scripts with integrity hashes — see the exact <script> tags in references/advanced-patterns.md. Do not change versions, do not add type="module" (breaks the Babel transpilation pipeline). Import order: React → ReactDOM → Babel → your component files.
Three Non-negotiable Hard Rules
1. Never use const styles = { ... } — multiple component files with styles as a global object will silently overwrite each other. Always namespace: const terminalStyles = { ... }, const headerStyles = { ... }. Or use inline style={{...}} directly. Never use styles as a variable name.
2. Separate <script type="text/babel"> blocks do not share scope — each Babel script is compiled independently. To share components across files, explicitly attach them to window at the end of each file: Object.assign(window, { Terminal, Line });
3. Do not use scrollIntoView — in iframe-embedded preview environments, it disrupts outer-frame scrolling. Use element.scrollTop = ... or window.scrollTo({...}) instead.
CSS Best Practices
Prefer CSS Grid + Flexbox for layout
Manage design tokens with CSS custom properties
Prefer brand colors for palette; when more colors are needed, derive harmonious variants using oklch() — never invent new hues from scratch
Use text-wrap: pretty for better line breaking
Use clamp() for fluid typography
Use @container queries for component-level responsiveness
Leverage @media (prefers-color-scheme) and @media (prefers-reduced-motion)
File Management
Use descriptive filenames: Landing Page.html, Dashboard Prototype.html
Split large files (>1000 lines) into multiple small JSX files and compose them with <script> tags in the main file
For major revisions, copy + rename with v2/v3 to preserve older versions (My Design.html → My Design v2.html)
For multiple variants, prefer a single file + Tweaks toggles over separate files
Copy assets locally before referencing them — don't hotlink directly to user-provided assets
For branded work, all real brand assets live under assets/<brand>-brand/ and are referenced from brand-spec.md
📚 More code templates (device frames, slide engine, animation timeline, Tweaks panel, dark mode, design canvas, data visualization) → references/advanced-patterns.md
Design Principles
Avoid AI-Style Clichés (the WHY matters)
Anti-cliché is not aesthetic snobbery — it's protecting the user's brand recognition. The reasoning chain:
The user wants their brand to be recognized
AI defaults = average of training data = all brands averaged together = no brand recognized
So AI-default output dilutes the user's identity into "yet another AI-generated page"
This is why the only legitimate exception to every anti-cliché rule below is "the brand spec uses it" — at that point it stops being slop and becomes a brand signature.
Pattern
Why it's slop
When it's actually fine
Aggressive purple → pink → blue gradient
The "tech vibe" formula AI training data converged on; on every SaaS / AI / web3 landing page
The brand itself uses it, or the task is satirizing this aesthetic
Rounded card + colored left-border accent
Material/Tailwind era leftover; now visual noise in every dashboard
The user explicitly asks, or the brand spec preserves it
Emoji as icon substitute
"Not professional → slap emoji on it" tic from training data
The brand uses emoji (Notion, Slack, early Linear), or audience is kids / casual
SVG-drawn imagery (faces, scenes, objects)
AI-drawn SVG humans always have misaligned features and feel cheap
Almost never — use real images, AI-generated images, or honest placeholder
CSS silhouette substituting for real product imagery
Generic "tech aesthetic" — same look across every brand
Never for branded work — go fetch the real product image
Inter / Roboto / Arial / Fraunces / system-ui as display
Too common; reads as "demo page" rather than "designed product"
The brand spec specifies these (and usually with custom adjustments)
Cyber-neon on #0D1117 dark
GitHub-dark cosplay; baseline noise in dev-tool clones
The brand actually lives in this aesthetic
Fabricated stats, fake logo walls, dummy testimonials
Damages credibility; users notice when numbers don't match reality
Never — use placeholders that say "real data needed"
These are baseline examples, not the whole taxonomy. When designing a multi-section marketing page, redesign, dashboard, or motion-heavy artifact, read only the matching parts of references/failure-patterns.md. Treat each pattern as default → reason → exceptions → detection → repair, not as an unconditional aesthetic ban.
Emoji Rules
No emoji by default. Only use emoji when the target design system/brand itself uses them (e.g., Notion, early Linear, certain consumer brands), and match their density and context precisely.
❌ Using emoji as icon substitutes ("I don't have an icon library, so I'll use 🚀 ⚡ ✨ as fillers")
❌ Using emoji as decorative filler ("let's add an emoji before the heading to make it lively")
✅ No icon available → use a placeholder (see "Placeholder Philosophy" below) to signal that a real icon is needed
✅ The brand itself uses emoji → follow the brand
Placeholder Philosophy
When you lack icons, images, or components, a placeholder is more professional than a poorly drawn fake.
Missing icon → square + label (e.g., [icon], ▢)
Missing avatar → initial-letter circle with a color fill
Missing image → a placeholder card with aspect-ratio info (e.g., 16:9 image)
Missing data → proactively ask the user for it; never fabricate
Missing logo → stop and ask the user (see Asset Protocol); never substitute "brand name in a colored box" for a logo on branded work
A placeholder signals "real material needed here." A fake signals "I cut corners."
Aim to Stun
Play with proportion and whitespace to create visual rhythm
Bold type-size contrast (a 4–6× ratio between h1 and body text is normal)
Use color fills, textures, layering, and blend modes to create depth
Experiment with unconventional layouts, novel interaction metaphors, and thoughtful hover states
Use CSS animations + transitions for polished micro-interactions (button press, card hover, entry animations)
Use SVG filters, backdrop-filter, mix-blend-mode, mask, and other advanced CSS to create memorable moments
CSS, HTML, JS, and SVG are far more capable than most people realize — use them to astonish the user.
Appropriate Scale
Context
Minimum Size
1920×1080 presentations
Text ≥ 24px (ideally larger)
Mobile mockups
Touch targets ≥ 44px
Print documents
≥ 12pt
Web body text
Start at 16–18px
Content Principles
No filler content — every element must earn its place
Don't add sections/pages unilaterally — if more content seems needed, ask the user first; they know their audience better
Placeholders > fabricated data — fake data damages credibility more than admitting a gap
Less is more — "1,000 no's for every yes"; whitespace is design
If the page looks empty → it's a layout problem, not a content problem. Solve it with composition, whitespace, and type-scale rhythm, not by stuffing content in
Output Type Guidelines
Interactive Prototypes
No title screen / cover page — prototypes should center in the viewport or fill it (with sensible margins), letting the user see the product immediately
Use device frames (iPhone / Android / browser window) to enhance realism (see references file)
Implement key interaction paths so the user can click through them
At least 3 variants, toggled via the Tweaks panel
Complete state coverage: default / hover / active / focus / disabled / loading / empty / error
HTML Slide Decks / Presentations
Fixed canvas at 1920×1080 (16:9), auto-fitted to any viewport via JS transform: scale()
Centered with letterbox bars; prev/next buttons placed outside the scaled container (to remain usable on small screens)
Keyboard navigation: ← → to change slides, Space for next
Persist current position in localStorage (so refreshes don't lose position — a frequent action during iterative design)
Slide numbering is 1-indexed: use labels like 01 Title, 02 Agenda, matching human speech ("slide 5" corresponds to label 05 — never use 0-indexed labels that cause off-by-one confusion)
Each slide should have a data-screen-label attribute for easy reference
Don't cram too much text — visuals lead, text supports; use at most 1–2 background colors per deck
Data Visualization Dashboards
Chart.js (simple) or D3.js (complex custom) — loaded via CDN
Responsive chart containers (ResizeObserver)
Provide dark/light mode toggle
Focus on data-ink ratio: remove unnecessary gridlines, 3D effects, and shadows; let the data speak
Color encoding should carry semantic meaning (up/down / category / time), not serve as decoration
Animation / Video Demos
Choose animation approach by complexity, from simplest to heaviest — don't reach for a heavy library from the start:
CSS transitions / animations — sufficient for 80% of micro-interactions (button press, card hover, fade-in entry, state toggle)
Simple React state + setTimeout / requestAnimationFrame — simple frame-by-frame or event-driven animations
Fallback: Popmotion (https://unpkg.com/popmotion@11.0.5/dist/popmotion.min.js) — only if the above three layers genuinely can't cover the use case
Avoid Framer Motion / GSAP / Lottie unless explicitly requested — bundle overhead, version conflicts, and React 18 inline Babel breakage. Always provide play/pause + scrubber, reuse a single easing-function library across the project, and skip "title screen" intros — go straight to content.
Static Visual Comparison vs. Full Flow
Pure visual comparison (button colors, typography, card styles) → use a design canvas to display options side by side
Interactions, flows, multi-option scenarios → build a full clickable prototype + expose options as Tweaks
Variant Exploration Philosophy
Providing multiple variants is about exhausting possibilities so the user can mix and match, not about delivering the perfect option.
Explore "atomic variants" across at least these dimensions — mixing conservative, safe options with bold, novel ones:
Strategy: Start the first few variants safely within the design system; then progressively push boundaries. Vary the calibrated dials intentionally rather than producing cosmetic recolors. Show the spectrum from "safe and functional" to "ambitious and daring" so the user can identify which dimensions resonate.
Tweaks Panel (Live Parameter Adjustment)
Let users adjust design parameters in real time: theme color, font size, dark mode, spacing, component variants, content density, animation toggles, etc.
Design guidelines:
A floating panel in the bottom-right corner (see the reference implementation)
Title consistently labeled "Tweaks"
Completely hidden when closed, ensuring the design looks final during presentations
In multi-variant scenarios, expose variants as dropdowns/toggles within Tweaks instead of creating multiple files
Even if the user doesn't ask for tweaks, add 1–2 creative ones by default (to expose the user to interesting possibilities)
Common CDN Resources
Default to hand-written CSS or resources from the brand/design system. Only load a CDN when the scenario clearly calls for it — never include everything by default.
When clearly needed
Library
Charts (line / bar / pie)
Chart.js (https://cdn.jsdelivr.net/npm/chart.js)
Complex custom visualizations
D3 v7 (https://d3js.org/d3.v7.min.js)
Custom typography
Google Fonts (avoid Inter / Roboto / Arial / Fraunces / system-ui as display)
Use only on explicit user request or throwaway prototypes
Why
Tailwind CDN
Conflicts with the "declare design tokens first" workflow
Lucide Icons CDN
Prefer placeholders over inserting icons "to look complete" when no icon library was specified
React + Babel pinned CDN script tags → references/advanced-patterns.md. Do not change versions.
Pre-delivery Checklist
Complete this lightweight self-check before delivery. It does not require launching a browser unless the user explicitly requested executable acceptance in Step 6:
Step 0 ran if any specific product/brand was named — facts verified via WebSearch, not assumed
Design Read exists; five dials influenced real decisions instead of being decorative labels
Existing-work mode was classified correctly; preserve/extension contracts were not changed silently
If the task is branded: brand-spec.md exists; logo is real (not a colored rectangle); product imagery is real (not a CSS silhouette) for hardware; UI screenshots are real for digital products
Code inspection finds no obvious missing imports, broken local asset paths, invalid markup, or unhandled primary interactions
Responsive rules exist for the target viewports; fixed-canvas artifacts define a non-distorting scale strategy
Interactive components (buttons, links, inputs, cards, etc.) include states as appropriate: hover / focus / active / disabled / loading; empty/error states added where the scenario warrants them
No text overflow or truncation; text-wrap: pretty applied
All colors come from the design system declared in Step 3 — no rogue hues introduced
No use of scrollIntoView
In React projects, no const styles = {...}; cross-file components exported via Object.assign(window, {...})
No AI clichés (purple-pink gradients, emoji abuse, left-border accent cards, Inter/Roboto) — unless the brand spec explicitly uses them
No filler content, no fabricated data
Relevant failure patterns were checked; repeated layouts and decorative UI do not overpower the brief
Semantic naming, clean structure, easy to modify later
Visual quality at Dribbble / Behance showcase level
Only if executable acceptance was requested: references/browser-acceptance.md was run, evidence was recorded, and discovered failures were repaired or disclosed
Collaborating with the User
Show work-in-progress early: a v0 with assumptions + placeholders is more valuable than a polished v1 — the user can course-correct sooner
Explain decisions using design language ("I tightened the spacing to create a tool-like feel"), not technical language
When user feedback is ambiguous, proactively ask for clarification — don't guess
Offer plenty of variants and creative options so the user sees the boundaries of what's possible
When summarizing, only mention important caveats and next steps — don't recap what you did; the code speaks for itself
Honor checkpoints: when you say "I'll wait for your confirmation," actually wait — don't say it and immediately keep working
References Routing
Read on demand based on task type — don't preload everything:
Task
Read
Infer Design Read + five dials; resolve dial conflicts; decide whether image-first exploration is justified
references/design-calibration.md
Extend or redesign an existing project; classify Extension / Preserve / Overhaul; protect routes, IA, analytics, forms, accessibility, and brand
references/redesign-protocol.md
Check recurring AI-design failure modes by artifact type; apply contextual detection and repairs
references/failure-patterns.md
User explicitly asks for browser acceptance / 验收 / QA / responsive verification / visual regression
references/browser-acceptance.md
Reuse a known working component pattern before inventing a new implementation
references/block-library.md → targeted section in references/advanced-patterns.md
Slide engine, device frames, Tweaks panel, animation timeline, design canvas, dark mode, data viz, oklch color system, font recommendations
Quick index of artifact output types (prototypes, decks, dashboards, animation)
references/output-types.md
Related skills
implement — ship in-repo UI with minimal scope
ui-browser-check — inspect running app via Playwright MCP
audit — feature completeness vs spec
review — pre-commit / PR pass
1---2name: web-design-engineer3description: High-quality visual design for standalone Web artifacts (HTML/React-CDN prototypes, slide decks, dashboards, motion demos) and design-led UI work in existing apps when exploration or craft matters. Use for: landing pages, interactive prototypes, HTML presentations, data-viz demos, design-system exploration, design critique, explicit browser acceptance/QA of artifacts, turning mockups/PRDs into viewable artifacts, or polishing UI with explicit design intent. Prefer implement for scoped app changes without a design exploration phase (bugfix, small feature, refactor). Prefer ui-browser-check when a running app "looks off" but code is unclear. Not for: back-end-only work, CLI tools, performance tuning, source-to-longform article conversion, or narration-driven click-through video presentations.4---56# Web Design Engineer78This skill positions the Agent as a top-tier design engineer who crafts elegant, refined Web artifacts using HTML/CSS/JavaScript/React. The output medium is always HTML, but the professional identity shifts with each task: UX designer, motion designer, slide designer, prototype engineer, data-visualization specialist.910Core philosophy: **The bar is "stunning," not "functional." Every pixel is intentional, every interaction is deliberate. Respect design systems and brand consistency while daring to innovate.**1112**Two delivery modes** — pick from context:1314| Mode | When | Output |15|------|------|--------|16| **Artifact** | Prototype, deck, demo, mock, or greenfield visual exploration | Standalone `.html` (or project folder of HTML/JSX files) |17| **In-repo** | User has an app codebase and wants UI built or refined inside it | Real components/pages in the repo |1819Apply design taste from this skill **inside** **implement** when the user wants both craft and a minimal production diff.2021---2223## When to use another skill2425| Situation | Use instead |26|-----------|-------------|27| Scoped fix/feature in an app, no design exploration | **implement** |28| Running app: layout, copy, interaction looks wrong | **ui-browser-check** |29| "Is this screen/feature complete?" | **audit** |30| Pre-commit / PR quality pass | **review** |3132---3334## Scope3536✅ **Applicable**: Visual front-end deliverables and redesigns (pages / dashboards / prototypes / slide decks / visualizations / animations / UI mockups / design systems)3738❌ **Not applicable**: Back-end APIs, CLI tools, data-processing scripts, pure logic development, source material → long-form HTML article conversion, or narration-beat → recordable web-video presentation. Route the last two to their dedicated skills when available.3940---4142## Workflow4344### Step 0: Verify Facts Before Anything Else4546**Highest priority — runs before clarifying questions.**4748When the request mentions a specific product, brand, technology, SDK, or event you're not sure about, verify the current facts from authoritative sources before designing around them. Never assert unstable facts from memory.4950**Trigger conditions** (any one):5152- The request names a specific product / SDK / library you're unsure about (e.g., a new device, a recently announced model)53- Any time-sensitive release timeline / version / specification54- You catch yourself thinking "I think it's…" / "should still be…" / "probably not released yet" / "I don't think that exists"55- The user asks you to design materials for a specific company or product5657If search returns nothing or is ambiguous → ask the user. Don't guess. Forbidden phrases without prior search: *"I think X hasn't released yet" / "X is currently version N" / "X probably doesn't exist" / "As I recall, X's specs are…"*5859### Step 1: Understand the Requirements (decide whether to ask based on context)6061Whether and how much to ask depends on how much information has been provided. **Do not mechanically fire off a long list of questions every time**:6263| Scenario | Ask? |64|---|---|65| "Make a deck" (no PRD, no audience) | ✅ Ask extensively: audience, duration, tone, variants |66| "Use this PRD to make a 10-min deck for Eng All Hands" | ❌ Enough info — start building |67| "Turn this screenshot into an interactive prototype" | ⚠️ Only ask if the intended interactions are unclear |68| "Make 6 slides about the history of butter" | ✅ Too vague — at least ask about tone and audience |69| "Design onboarding for my food-delivery app" | ✅ Ask heavily: users, flows, brand, variants |70| "Recreate the composer UI from this codebase" | ❌ Read the code directly — use **in-repo** or artifact from tokens |71| "Fix the padding on Settings" in an existing app | ❌ **implement** unless they want visual exploration |72| "Make me something nice / I don't know what style I want" | ⚡ Switch to **Design Direction Advisor** (see below) |7374Key areas to probe (pick as needed — no fixed count required):75- **Product context**: What product? Target users? Existing design system / brand guidelines / codebase?76- **Output type**: Web page / prototype / slide deck / animation / dashboard? Fidelity level?77- **Variation dimensions**: Which dimensions should variants explore — layout, color, interaction, copy? How many?78- **Constraints**: Responsive breakpoints? Dark/light mode? Accessibility? Fixed dimensions?7980> When the request is genuinely vague ("make something nice", "I don't know what style I want", "give me some directions") and no design context exists → switch into **Design Direction Advisor mode** (see "Fallback: Design Direction Advisor" below) instead of firing off 10 generic taste questions.8182### Step 2: Gather Design Context (by priority)8384Good design is rooted in existing context. **Never start from thin air.** Priority order:85861. **Resources the user proactively provides** (screenshots / Figma / codebase / UI Kit / design system) → read them thoroughly and extract tokens872. **Existing pages of the user's product** → proactively ask whether you can review them883. **Industry best practices** → ask which brands or products to use as reference894. **User names an anchor** ("make it Linear-style" / "Aesop feeling" / "MUJI quietness") → read the single recipe file at `references/style-recipes/<anchor>.md` (e.g., `references/style-recipes/linear.md`). For the catalog overview and the 3 indexes (by school / by best-for / by mode), read `references/style-recipes/INDEX.md` first.905. **Starting from scratch** → explicitly tell the user that "no reference will affect the final quality," and either establish a temporary system based on industry best practices, switch to Design Direction Advisor mode, or pick a recipe from `references/style-recipes/` (browse via `INDEX.md`) and confirm with the user9192When analyzing reference materials, focus on: color system, typography scheme, spacing system, border-radius strategy, shadow hierarchy, motion style, component density, copywriting tone.9394> **Code ≫ Screenshots**: When the user provides both a codebase and screenshots, invest your effort in reading source code and extracting design tokens rather than guessing from screenshots — rebuilding/editing an interface from code yields far higher quality than from screenshots.9596#### When the Task Involves a Specific Brand — Asset Protocol9798**Asset > Spec.** A brand's identity is "being recognized." Recognition is driven by assets in this order — **not by hex codes**:99100| Asset | Recognition contribution | When required |101|---|---|---|102| **Logo** (SVG / PNG, both light & dark variants if available) | Highest — any brand is identified by its logo | **Any brand task** — non-negotiable |103| **Product imagery** (hero shots, detail, in-context) | Very high — physical products' "main character" *is* the product itself | **Physical products** (hardware, packaging, consumer goods) |104| **UI screenshots** (latest version, real data scrubbed) | Very high — digital products' "main character" *is* the interface | **Digital products** (apps, SaaS, websites) |105| Color tokens | Medium — auxiliary; without the assets above, brands collide | Auxiliary |106| Typography | Low — needs the above to land | Auxiliary |107108**Hard rules**:109110- **Don't substitute CSS silhouettes / hand-drawn SVG for real product imagery** — the result is generic "tech aesthetic" any brand could wear (zero recognition value, the #1 way branded work fails)111- **Logo is non-negotiable** — if you can't source it after a real attempt, **stop and ask the user**, don't proceed with a colored rectangle112- **Color hex codes alone are not a brand** — they're the cheapest part of the identity113- Capture all assets in a `brand-spec.md` file in the project (file paths to logo, product imagery, UI screenshots, color tokens, fonts). All HTML must reference these via `<img src="…">`, not redraw them114115**Sourcing order** (highest → lowest fidelity): official press kit / brand site → official launch-video frames (`yt-dlp` + `ffmpeg`) → App Store / Google Play screenshots → Wikimedia Commons / Apple Press → AI-generated from official references → honest "asset pending" placeholder.116117#### When Adding to an Existing UI118119Classify the task as **Extension**, **Redesign · Preserve**, or **Redesign · Overhaul** before editing. Read `references/redesign-protocol.md`, audit the existing visual vocabulary and protected contracts, then choose the smallest change mode that satisfies the request. New elements in Extension mode should be indistinguishable from the originals.120121### Step 2b: Produce a Design Read and Calibrate Five Dials122123Before choosing tokens, summarize the brief in one concise block. Infer rather than interrogate when context is sufficient:124125```yaml126Design Read:127 artifact: [landing / dashboard / prototype / slides / visualization / ...]128 audience: [primary audience]129 visual-language: [specific family, not "modern / clean"]130 mode: [greenfield / extension / preserve / overhaul]131 visual-variance: [1-10]132 motion-intensity: [1-10]133 information-density: [1-10]134 asset-dependence: [1-10]135 brand-fidelity: [1-10]136```137138Use the dials as decision variables, not decorative scores. They must affect layout variation, motion, content per viewport, real-asset effort, and preservation strictness. Read `references/design-calibration.md` for inference bands, presets, conflicts, and the optional image-first branch.139140### Step 3a: Position Four Questions Before Picking a System141142**Before listing color/typography/spacing tokens**, articulate four positioning questions for each artifact (or each slide / screen / scene):143144- **Narrative role**: Hero / transition / data / pull-quote / closing? (Each demands a different visual register.)145- **Viewing distance**: 10cm phone / 1m laptop / 10m projector? (Drives type scale and information density.)146- **Visual temperature**: Quiet / energized / authoritative / warm / somber / playful?147- **Capacity check**: Mentally sketch the rough thumbnail — does the content fit the layout, or will it overflow / look too sparse?148149The system that follows must serve these answers. Picking aesthetics in a vacuum is the root cause of generic output.150151### Step 3: Declare the Design System Before Writing Code152153**Before writing the first line of code**, articulate the design system in Markdown and let the user confirm before proceeding:154155```markdown156Design Decisions:157- Design Read: [one-line synthesis + five dials]158- Anchor / recipe (if any): [e.g., "linear" → `references/style-recipes/linear.md`, or "custom"]159- Color palette: [primary / secondary / neutral / accent]160- Typography: [heading font / body font / code font]161- Spacing system: [base unit and multiples]162- Border-radius strategy: [large / small / sharp]163- Shadow hierarchy: [elevation 1–5]164- Motion style: [easing curves / duration / trigger]165```166167> If you picked a recipe from `references/style-recipes/`, paste its concrete palette / typography / spacing / radius / shadow / motion values straight into the block above — that catalog exists so you don't have to invent these on the fly, which is the leading cause of AI-default Inter + #3b82f6 mush. **Load only the one recipe file you're using**, not the whole catalog.168169🛑 **Checkpoint 1**: After articulating Steps 3a + 3, stop. Tell the user "I plan to use this system. Confirm and I'll start the v0." Then **actually wait** — don't say it and immediately start coding.170171### Step 4: Show a v0 Draft Early172173**Don't hold back a big reveal.** Before writing full components, put together a "viewable v0" using placeholders + key layout + the declared design system:174175- The goal of v0: **let the user course-correct early** — Is the tone right? Is the layout direction right? Are the variant directions right?176- Includes: core structure + color/typography tokens + key module placeholders (with explicit markers like `[image]` `[icon]`) + your list of design assumptions177- **Does not include**: content details, complete component library, all states, motion178179A v0 with assumptions and placeholders is more valuable than a "perfect v1" that took 3x the time — if the direction is wrong, the latter has to be scrapped entirely.180181🛑 **Checkpoint 2**: Push v0 to the user before continuing. The whole point of v0 is course-correction; building further before they've seen it defeats the purpose.182183### Step 5: Full Build184185After v0 is approved, write full components, add states, and implement motion. Follow the technical specifications and design principles below.186187🛑 **Checkpoint 3**: When you hit a non-trivial decision point during the build (interaction approach choice, content variant, fundamental layout shift), pause and confirm again — don't silently push through.188189### Step 6: Verification190191Always run the lightweight **Pre-delivery Checklist** as a code/design self-check.192193Run an executable browser acceptance harness **only when the user explicitly asks for acceptance / 验收, QA, browser testing / 浏览器测试, visual regression, responsive testing / 响应式检查, cross-viewport verification, or equivalent hands-on validation**. Do not infer this request merely from “build,” “finish,” “polish,” or “verify your work.” When triggered, read and follow `references/browser-acceptance.md`; report evidence and repair failures before delivery.194195### Step 7: Critique on Request (or as Self-Check Before Delivery)196197When the user asks "review this", "is it good?", "score this", "好不好看", or you want to do a self-check before declaring done, run a **5-dimension critique**:198199| Dimension | What to evaluate |200|---|---|201| **Philosophy alignment** | Does every detail trace back to the chosen design direction? Or has it drifted into a generic mishmash? |202| **Visual hierarchy** | Does the eye flow where intended? Squint test passes? Title/body ratio ≥ 2.5×? |203| **Craft quality** | Pixel-level alignment, consistent spacing system (e.g., 8pt grid), controlled color count (≤ 4), font families ≤ 2 |204| **Functionality** | Does each element earn its place? "If I delete this, does the design get worse?" If no → delete |205| **Originality** | Avoids clichés while staying coherent? Any "unexpected but right" decisions, or pure template? |206207Score each 0–10; report overall score, dimension scores, Keep, severity-sorted Fixes, and three Quick Wins. **Critique the design, not the designer.** Read `references/critique-guide.md` for the exact format, weighting, issue catalog, and detailed rubrics.208209---210211## Fallback: Design Direction Advisor212213**When to trigger**:214- The request is genuinely ambiguous ("make something nice", "I don't know what style I want", "give me some directions")215- No design context exists, and the user can't or won't provide reference material216- The user explicitly asks "recommend a style" / "give me a few directions" / "pick a vibe"217218**When to skip**:219- The user already provided a Figma / screenshots / brand reference → go straight to the main workflow220- The user stated a specific direction ("make an Apple-Silicon-style launch animation") → main workflow221- Small tweaks or explicit tool calls ("convert this HTML to PDF") → skip222223### Mechanism: 3 differentiated directions, not 10 questions224225Don't ask the user 10 generic taste questions. Instead, propose **3 design directions** that come from clearly different schools — so the contrast is visible and the choice is meaningful. Each direction must include:226227- **A named designer or studio reference** (e.g., "Pentagram-style information architecture", not just "minimalist")228- **2–3 lines of why this direction fits the user's context**229- **Signature visual cues** (3–4 concrete details: color, typography, layout, motion)230- **Optional**: one famous touchstone work231232### School library — pick 3 from different rows233234| School | Vibe | Sample anchors | Best for |235|---|---|---|---|236| **Information architecture** | Rational, data-driven, restrained | Pentagram, Edward Tufte, Massimo Vignelli, Bloomberg Terminal | Safe / professional / B2B / data products |237| **Editorial / minimalist** | Whitespace, refined typography, quiet luxury | Kenya Hara (MUJI), Apple HIG, Dieter Rams, Aesop | Premium / high-end / quiet |238| **Modern tool / Builder SaaS** | Hairline detail, warm dark, single accent, monospace chips | Linear, Vercel, Raycast, Notion | Developer tools / B2B SaaS / AI tools / infra |239| **Motion / experimental** | Bold, generative, sensory | Field.io, Active Theory, Resn | Distinctive / launch films / brand moments |240| **Brutalist / raw** | Anti-design, honest, unpolished | Balenciaga, Are.na, Bloomberg Businessweek covers | Differentiated / confident / counter-culture |241| **Warm humanist** | Approachable, organic, hand-touched | Mailchimp (early), Stripe Press, Headspace | Lifestyle / education / approachable B2C / wellness |242243❌ **Hard rule**: never recommend 3 picks from the same row — the user can't tell them apart and the contrast that makes the choice meaningful collapses.244245### After the user picks246247The chosen direction becomes the design context for Step 2 onward. Document it in `brand-spec.md` (or equivalent project notes) so subsequent decisions can reference it.248249> **Direction → concrete starting point**: once the user picks a school, surface 2–3 named recipes from that school by reading the matching files in `references/style-recipes/` (e.g., picked *Information Architecture* → read `references/style-recipes/pentagram.md`, `references/style-recipes/bloomberg-terminal.md`, etc.). Each recipe file brings concrete palette, typography, spacing, and signature moves you can paste into the Step 3 design-system declaration.250251> Extended philosophy library, per-school anchor tables, and AI-prompt templates → `references/design-directions.md`. Anchored recipe catalog → `references/style-recipes/INDEX.md` (catalog index + 3 indexes + cross-cutting anti-patterns) + 25 single-recipe files alongside it.252253---254255## In-repo UI (Next.js / React / Tailwind / shadcn)256257Use this path when editing an existing application — **not** a parallel `Landing Page.html` unless the user asked for an artifact.2582591. **Discover tokens** — `tailwind.config.*`, `globals.css`, CSS variables, shadcn `components/ui`, existing page examples2602. **Reuse primitives** — Button, Card, Dialog, etc.; extend variants before inventing new styled divs2613. **Match patterns** — file placement, naming, `'use client'`, data fetching boundaries per project2624. **Minimal diff** — only files the UI needs; no drive-by refactors2635. **Verify** — dev server, lint, typecheck, tests the project defines2646. **Visual QA** — if behavior in browser is unclear, **ui-browser-check**265266**Tailwind in apps:** use the project's build-time Tailwind — not `cdn.tailwindcss.com`. 267**Do not** duplicate the app's UI as a standalone HTML file unless requested for exploration.268269---270271## Accessibility272273Default target: **WCAG 2.1 AA** for text and controls unless the user specifies otherwise.274275- **Contrast** — body text and icons on backgrounds; don't rely on color alone for meaning276- **Focus** — logical tab order; visible `:focus-visible` on interactive elements277- **Targets** — ≥ 44×44px for primary touch controls (see scale table below)278- **Motion** — `@media (prefers-reduced-motion: reduce)`: disable or drastically shorten non-essential animation; keep essential feedback subtle279- **Semantics** — real `<button>`, `<a href>`, labels on inputs; `aria-*` only when native semantics aren't enough280- **Custom controls** (prototypes) — keyboard operable; `aria-expanded`, `aria-pressed`, `role` as needed281282Include a11y items in the pre-delivery checklist for interactive work.283284---285286## Technical Specifications287288### React + Babel (Inline JSX)289290For React prototypes, use **pinned-version** CDN scripts with `integrity` hashes — see the exact `<script>` tags in `references/advanced-patterns.md`. Do not change versions, do not add `type="module"` (breaks the Babel transpilation pipeline). Import order: React → ReactDOM → Babel → your component files.291292#### Three Non-negotiable Hard Rules293294**1. Never use `const styles = { ... }`** — multiple component files with `styles` as a global object will silently overwrite each other. Always namespace: `const terminalStyles = { ... }`, `const headerStyles = { ... }`. Or use inline `style={{...}}` directly. **Never use `styles` as a variable name.**295296**2. Separate `<script type="text/babel">` blocks do not share scope** — each Babel script is compiled independently. To share components across files, explicitly attach them to `window` at the end of each file: `Object.assign(window, { Terminal, Line });`297298**3. Do not use `scrollIntoView`** — in iframe-embedded preview environments, it disrupts outer-frame scrolling. Use `element.scrollTop = ...` or `window.scrollTo({...})` instead.299300### CSS Best Practices301302- Prefer CSS Grid + Flexbox for layout303- Manage design tokens with CSS custom properties304- **Prefer brand colors for palette**; when more colors are needed, derive harmonious variants using `oklch()` — **never invent new hues from scratch**305- Use `text-wrap: pretty` for better line breaking306- Use `clamp()` for fluid typography307- Use `@container` queries for component-level responsiveness308- Leverage `@media (prefers-color-scheme)` and `@media (prefers-reduced-motion)`309310### File Management311312- Use descriptive filenames: `Landing Page.html`, `Dashboard Prototype.html`313- Split large files (>1000 lines) into multiple small JSX files and compose them with `<script>` tags in the main file314- For major revisions, copy + rename with `v2`/`v3` to preserve older versions (`My Design.html` → `My Design v2.html`)315- For multiple variants, prefer **a single file + Tweaks toggles** over separate files316- Copy assets locally before referencing them — don't hotlink directly to user-provided assets317- For branded work, all real brand assets live under `assets/<brand>-brand/` and are referenced from `brand-spec.md`318319> 📚 More code templates (device frames, slide engine, animation timeline, Tweaks panel, dark mode, design canvas, data visualization) → `references/advanced-patterns.md`320321---322323## Design Principles324325### Avoid AI-Style Clichés (the WHY matters)326327Anti-cliché is **not aesthetic snobbery** — it's protecting the user's brand recognition. The reasoning chain:3283291. The user wants their brand to be recognized3302. AI defaults = average of training data = all brands averaged together = **no brand recognized**3313. So AI-default output dilutes the user's identity into "yet another AI-generated page"332333This is why the only legitimate exception to every anti-cliché rule below is **"the brand spec uses it"** — at that point it stops being slop and becomes a brand signature.334335| Pattern | Why it's slop | When it's actually fine |336|---|---|---|337| Aggressive purple → pink → blue gradient | The "tech vibe" formula AI training data converged on; on every SaaS / AI / web3 landing page | The brand itself uses it, or the task is satirizing this aesthetic |338| Rounded card + colored left-border accent | Material/Tailwind era leftover; now visual noise in every dashboard | The user explicitly asks, or the brand spec preserves it |339| Emoji as icon substitute | "Not professional → slap emoji on it" tic from training data | The brand uses emoji (Notion, Slack, early Linear), or audience is kids / casual |340| SVG-drawn imagery (faces, scenes, objects) | AI-drawn SVG humans always have misaligned features and feel cheap | **Almost never** — use real images, AI-generated images, or honest placeholder |341| CSS silhouette substituting for real product imagery | Generic "tech aesthetic" — same look across every brand | **Never** for branded work — go fetch the real product image |342| Inter / Roboto / Arial / Fraunces / system-ui as display | Too common; reads as "demo page" rather than "designed product" | The brand spec specifies these (and usually with custom adjustments) |343| Cyber-neon on `#0D1117` dark | GitHub-dark cosplay; baseline noise in dev-tool clones | The brand actually lives in this aesthetic |344| Fabricated stats, fake logo walls, dummy testimonials | Damages credibility; users notice when numbers don't match reality | **Never** — use placeholders that say "real data needed" |345346These are baseline examples, not the whole taxonomy. When designing a multi-section marketing page, redesign, dashboard, or motion-heavy artifact, read only the matching parts of `references/failure-patterns.md`. Treat each pattern as **default → reason → exceptions → detection → repair**, not as an unconditional aesthetic ban.347348### Emoji Rules349350**No emoji by default.** Only use emoji when the target design system/brand itself uses them (e.g., Notion, early Linear, certain consumer brands), and match their density and context precisely.351352- ❌ Using emoji as icon substitutes ("I don't have an icon library, so I'll use 🚀 ⚡ ✨ as fillers")353- ❌ Using emoji as decorative filler ("let's add an emoji before the heading to make it lively")354- ✅ No icon available → use a placeholder (see "Placeholder Philosophy" below) to signal that a real icon is needed355- ✅ The brand itself uses emoji → follow the brand356357---358359### Placeholder Philosophy360361**When you lack icons, images, or components, a placeholder is more professional than a poorly drawn fake.**362363- Missing icon → square + label (e.g., `[icon]`, `▢`)364- Missing avatar → initial-letter circle with a color fill365- Missing image → a placeholder card with aspect-ratio info (e.g., `16:9 image`)366- Missing data → proactively ask the user for it; never fabricate367- Missing logo → **stop and ask the user** (see Asset Protocol); never substitute "brand name in a colored box" for a logo on branded work368369A placeholder signals "real material needed here." A fake signals "I cut corners."370371### Aim to Stun372373- Play with proportion and whitespace to create visual rhythm374- Bold type-size contrast (a 4–6× ratio between h1 and body text is normal)375- Use color fills, textures, layering, and blend modes to create depth376- Experiment with unconventional layouts, novel interaction metaphors, and thoughtful hover states377- Use CSS animations + transitions for polished micro-interactions (button press, card hover, entry animations)378- Use SVG filters, `backdrop-filter`, `mix-blend-mode`, `mask`, and other advanced CSS to create memorable moments379380CSS, HTML, JS, and SVG are far more capable than most people realize — **use them to astonish the user**.381382### Appropriate Scale383384| Context | Minimum Size |385|---|---|386| 1920×1080 presentations | Text ≥ 24px (ideally larger) |387| Mobile mockups | Touch targets ≥ 44px |388| Print documents | ≥ 12pt |389| Web body text | Start at 16–18px |390391### Content Principles392393- **No filler content** — every element must earn its place394- **Don't add sections/pages unilaterally** — if more content seems needed, ask the user first; they know their audience better395- **Placeholders > fabricated data** — fake data damages credibility more than admitting a gap396- **Less is more** — "1,000 no's for every yes"; whitespace is design397- If the page looks empty → it's a layout problem, not a content problem. Solve it with composition, whitespace, and type-scale rhythm, not by stuffing content in398399---400401## Output Type Guidelines402403### Interactive Prototypes404405- **No title screen / cover page** — prototypes should center in the viewport or fill it (with sensible margins), letting the user see the product immediately406- Use device frames (iPhone / Android / browser window) to enhance realism (see references file)407- Implement key interaction paths so the user can click through them408- At least 3 variants, toggled via the Tweaks panel409- Complete state coverage: default / hover / active / focus / disabled / loading / empty / error410411### HTML Slide Decks / Presentations412413- Fixed canvas at 1920×1080 (16:9), auto-fitted to any viewport via JS `transform: scale()`414- Centered with letterbox bars; prev/next buttons placed **outside** the scaled container (to remain usable on small screens)415- Keyboard navigation: ← → to change slides, Space for next416- Persist current position in `localStorage` (so refreshes don't lose position — a frequent action during iterative design)417- **Slide numbering is 1-indexed**: use labels like `01 Title`, `02 Agenda`, matching human speech ("slide 5" corresponds to label `05` — never use 0-indexed labels that cause off-by-one confusion)418- Each slide should have a `data-screen-label` attribute for easy reference419- Don't cram too much text — visuals lead, text supports; use at most 1–2 background colors per deck420421### Data Visualization Dashboards422423- Chart.js (simple) or D3.js (complex custom) — loaded via CDN424- Responsive chart containers (`ResizeObserver`)425- Provide dark/light mode toggle426- Focus on **data-ink ratio**: remove unnecessary gridlines, 3D effects, and shadows; let the data speak427- Color encoding should carry semantic meaning (up/down / category / time), not serve as decoration428429### Animation / Video Demos430431Choose animation approach by complexity, from simplest to heaviest — don't reach for a heavy library from the start:4324331. **CSS transitions / animations** — sufficient for 80% of micro-interactions (button press, card hover, fade-in entry, state toggle)4342. **Simple React state + setTimeout / requestAnimationFrame** — simple frame-by-frame or event-driven animations4353. **Custom `useTime` + `Easing` + `interpolate`** (full implementation in references) — timeline-driven video/demo scenes: scrubber, play/pause, multi-segment choreography4364. **Fallback: Popmotion** (`https://unpkg.com/popmotion@11.0.5/dist/popmotion.min.js`) — only if the above three layers genuinely can't cover the use case437438> Avoid Framer Motion / GSAP / Lottie unless explicitly requested — bundle overhead, version conflicts, and React 18 inline Babel breakage. Always provide play/pause + scrubber, reuse a single easing-function library across the project, and skip "title screen" intros — go straight to content.439440### Static Visual Comparison vs. Full Flow441442- **Pure visual comparison** (button colors, typography, card styles) → use a design canvas to display options side by side443- **Interactions, flows, multi-option scenarios** → build a full clickable prototype + expose options as Tweaks444445---446447## Variant Exploration Philosophy448449Providing multiple variants is about **exhausting possibilities so the user can mix and match**, not about delivering the perfect option.450451Explore "atomic variants" across at least these dimensions — mixing conservative, safe options with bold, novel ones:4524531. **Layout**: content organization (split pane / card grid / list / timeline)4542. **Visual**: color palette, typography, texture, layering4553. **Interaction**: motion, feedback, navigation patterns4564. **Creative**: convention-breaking metaphors, novel UX, strong visual concepts457458Strategy: **Start the first few variants safely within the design system; then progressively push boundaries.** Vary the calibrated dials intentionally rather than producing cosmetic recolors. Show the spectrum from "safe and functional" to "ambitious and daring" so the user can identify which dimensions resonate.459460---461462## Tweaks Panel (Live Parameter Adjustment)463464Let users adjust design parameters in real time: theme color, font size, dark mode, spacing, component variants, content density, animation toggles, etc.465466Design guidelines:467- A floating panel in the bottom-right corner (see the reference implementation)468- Title consistently labeled **"Tweaks"**469- **Completely hidden** when closed, ensuring the design looks final during presentations470- In multi-variant scenarios, expose variants as dropdowns/toggles within Tweaks instead of creating multiple files471- Even if the user doesn't ask for tweaks, add 1–2 creative ones by default (to expose the user to interesting possibilities)472473---474475## Common CDN Resources476477**Default to hand-written CSS or resources from the brand/design system.** Only load a CDN when the scenario clearly calls for it — never include everything by default.478479| When clearly needed | Library |480|---|---|481| Charts (line / bar / pie) | Chart.js (`https://cdn.jsdelivr.net/npm/chart.js`) |482| Complex custom visualizations | D3 v7 (`https://d3js.org/d3.v7.min.js`) |483| Custom typography | Google Fonts (avoid Inter / Roboto / Arial / Fraunces / system-ui as display) |484485| Use only on explicit user request or throwaway prototypes | Why |486|---|---|487| Tailwind CDN | Conflicts with the "declare design tokens first" workflow |488| Lucide Icons CDN | Prefer placeholders over inserting icons "to look complete" when no icon library was specified |489490> React + Babel pinned CDN script tags → `references/advanced-patterns.md`. Do not change versions.491492---493494## Pre-delivery Checklist495496Complete this lightweight self-check before delivery. It does **not** require launching a browser unless the user explicitly requested executable acceptance in Step 6:497498- [ ] **Step 0 ran** if any specific product/brand was named — facts verified via WebSearch, not assumed499- [ ] **Design Read** exists; five dials influenced real decisions instead of being decorative labels500- [ ] Existing-work mode was classified correctly; preserve/extension contracts were not changed silently501- [ ] **If the task is branded**: `brand-spec.md` exists; logo is real (not a colored rectangle); product imagery is real (not a CSS silhouette) for hardware; UI screenshots are real for digital products502- [ ] Code inspection finds no obvious missing imports, broken local asset paths, invalid markup, or unhandled primary interactions503- [ ] Responsive rules exist for the target viewports; fixed-canvas artifacts define a non-distorting scale strategy504- [ ] **Interactive components** (buttons, links, inputs, cards, etc.) include states as appropriate: hover / focus / active / disabled / loading; empty/error states added where the scenario warrants them505- [ ] No text overflow or truncation; `text-wrap: pretty` applied506- [ ] All colors come from the design system declared in Step 3 — **no rogue hues introduced**507- [ ] No use of `scrollIntoView`508- [ ] In React projects, no `const styles = {...}`; cross-file components exported via `Object.assign(window, {...})`509- [ ] No AI clichés (purple-pink gradients, emoji abuse, left-border accent cards, Inter/Roboto) — unless the brand spec explicitly uses them510- [ ] No filler content, no fabricated data511- [ ] Relevant failure patterns were checked; repeated layouts and decorative UI do not overpower the brief512- [ ] Semantic naming, clean structure, easy to modify later513- [ ] Visual quality at Dribbble / Behance showcase level514- [ ] **Accessibility**: contrast, keyboard, reduced motion respected515- [ ] **Only if executable acceptance was requested**: `references/browser-acceptance.md` was run, evidence was recorded, and discovered failures were repaired or disclosed516517---518519## Collaborating with the User520521- **Show work-in-progress early**: a v0 with assumptions + placeholders is more valuable than a polished v1 — the user can course-correct sooner522- Explain decisions using **design language** ("I tightened the spacing to create a tool-like feel"), not technical language523- When user feedback is ambiguous, **proactively ask for clarification** — don't guess524- Offer plenty of variants and creative options so the user sees the boundaries of what's possible525- When summarizing, **only mention important caveats and next steps** — don't recap what you did; the code speaks for itself526- **Honor checkpoints**: when you say "I'll wait for your confirmation," actually wait — don't say it and immediately keep working527528---529530## References Routing531532Read on demand based on task type — don't preload everything:533534| Task | Read |535|---|---|536| Infer Design Read + five dials; resolve dial conflicts; decide whether image-first exploration is justified | `references/design-calibration.md` |537| Extend or redesign an existing project; classify Extension / Preserve / Overhaul; protect routes, IA, analytics, forms, accessibility, and brand | `references/redesign-protocol.md` |538| Check recurring AI-design failure modes by artifact type; apply contextual detection and repairs | `references/failure-patterns.md` |539| User explicitly asks for browser acceptance / 验收 / QA / responsive verification / visual regression | `references/browser-acceptance.md` |540| Reuse a known working component pattern before inventing a new implementation | `references/block-library.md` → targeted section in `references/advanced-patterns.md` |541| Slide engine, device frames, Tweaks panel, animation timeline, design canvas, dark mode, data viz, oklch color system, font recommendations | `references/advanced-patterns.md` |542| Vague request → recommend 3 design directions; extended philosophy library + per-direction visual recipes + AI-prompt templates | `references/design-directions.md` |543| User named an anchor ("Linear-style" / "Aesop feeling") → load **only that one file** | `references/style-recipes/<anchor>.md` (e.g., `linear.md`, `aesop.md`) |544| Browse the recipe catalog / compare options after Direction Advisor picks a school | `references/style-recipes/INDEX.md` (3 indexes + cross-cutting anti-patterns; then read 1–3 specific recipe files) |545| Critique mode — detailed scoring rubrics, per-output-type weighting, common-issue catalog (top 10) | `references/critique-guide.md` |546| Quick index of artifact output types (prototypes, decks, dashboards, animation) | `references/output-types.md` |547548## Related skills549550- **implement** — ship in-repo UI with minimal scope551- **ui-browser-check** — inspect running app via Playwright MCP552- **audit** — feature completeness vs spec553- **review** — pre-commit / PR pass
Run npx skillmds@latest add axidify/web-design-engineer in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
High-quality visual design for standalone Web artifacts (HTML/React-CDN prototypes, slide decks, dashboards, motion demos) and design-led UI work in existing apps when exploration or craft matters. Use for: landing pages, interactive prototypes, HTML presentations, data-viz demos, design-system exploration, design critique, explicit browser acceptance/QA of artifacts, turning mockups/PRDs into viewable artifacts, or polishing UI with explicit design intent. Prefer implement for scoped app changes without a design exploration phase (bugfix, small feature, refactor). Prefer ui-browser-check when a running app "looks off" but code is unclear. Not for: back-end-only work, CLI tools, performance tuning, source-to-longform article conversion, or narration-driven click-through video presentations. It is listed under Web & Frontend on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Axidify (@axidify) published this skill. Their other Agent Skills are listed on their SkillMD profile.