aboutsummaryrefslogtreecommitdiff
path: root/frontend-design/SKILL.md
blob: cfebc7ad32bdd94384315b2cacfbcddf372fe58a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics. Do NOT use for narrow maintenance tasks (single CSS bug fix, dependency upgrade, accessibility-only retrofit), for projects where the stakeholder has explicitly specified "minimal, functional, no creative direction," for backend / API / data-pipeline work, for non-web UIs (mobile native apps, desktop apps, terminal apps), or when the requested work is code refactoring without a visible design component.
license: Complete terms in LICENSE.txt
---

This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.

The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.

## Design Thinking

Before coding, understand the context and commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?

**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.

Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
- Visually striking and memorable
- Cohesive with a clear aesthetic point-of-view
- Meticulously refined in every detail

## Frontend Aesthetics Guidelines

Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.

NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.

Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.

**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.

Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.

### Creative but bounded

The bold directions above — gradient meshes, heavy texture, overlap, custom cursors, maximalist density — are tools, not obligations. They earn their place only when they serve the work. Creativity here means making a striking, intentional choice *within* these guardrails, not reaching for decoration by default:

- **Domain fit.** The aesthetic answers to the purpose and audience. A marketing-style gradient-and-orb treatment on an operational dashboard, a data table, or a settings panel is a mismatch, not a flourish. Pick the direction the task earns; an editorial poster and a trading console want different intensities.
- **Readability first.** Type stays legible, contrast stays above the floor (see the accessibility gate below), and nothing overlaps text into illegibility. A single-hue palette that collapses hierarchy, or an overlap that buries a label, is a defect even when it looks bold in a still frame.
- **Responsive stability.** The composition holds across viewports without content jumping, clipping, or reflowing into chaos. A layout that only works at one width isn't finished.
- **No effect that degrades the workflow.** Decorative blobs, orbs, animated backgrounds, custom cursors, and grain overlays come out the moment they slow the task, distract from the primary action, or fight the content for attention. The effect serves the user's goal or it goes.

Maximalism is still on the table — but it's deliberate density that stays usable, not noise. When a generic gradient, a decorative orb, or a texture is doing nothing for the task, that's AI slop wearing a costume. Cut it.

---

## Workflow (Added)

For non-trivial work, walk these four phases. Load the referenced files only when that phase is active — keeps context lean for simple component requests.

1. **Intake** — see [references/workflow.md](references/workflow.md) for the question set. Establishes purpose, audience, operational context, functional priorities, technical constraints, brand references, success criteria.
2. **Commitment** — same file: pick one archetype from the list in *Design Thinking* above, state what you're trading away, lock font pairing / palette / motion philosophy / layout approach as one-line decisions.
3. **Build** — code it. Keep the chosen direction visible in every choice; the aesthetic guidance above applies here. Pull [references/responsive.md](references/responsive.md) if the component is layout-significant, and [references/accessibility.md](references/accessibility.md) for the detail behind the gate below. Build accessibly as you go rather than retrofitting at the end.
4. **Review** — see [references/design-review.md](references/design-review.md). Self-audit against the archetype and the anti-pattern list, then clear the accessibility gate below before handoff. Emit a short rationale using [references/rationale-template.md](references/rationale-template.md) so the next iteration has context.

For **simple component tweaks, quick polish, or one-line style changes**, skip the workflow — apply the aesthetic guidance inline. Accessibility still applies: a change that touches focus, contrast, target size, motion, or labeling clears the relevant gate items below before it ships.

## Accessibility Gate (required before handoff)

Accessibility is a baseline for *all* frontend work, not a feature reserved for interactive components — static pages, layouts, and styling passes are in scope too. Target WCAG 2.2 AA by default (AAA on specific criteria for regulated contexts — confirm with the user). Clear every item before handoff; [references/accessibility.md](references/accessibility.md) carries the implementation detail.

- **Keyboard operation** — every interactive element reachable and operable with the keyboard alone (Tab / Shift-Tab / Enter / Space / Esc / arrows). No keyboard traps; you can Tab out of every modal and menu.
- **Focus visibility** — a visible focus indicator on every focusable element (`:focus-visible`, ≥ 3:1 against its background). Don't strip the ring without a replacement.
- **Focus not obscured** (WCAG 2.2) — the focused element isn't hidden behind sticky headers, footers, or overlays. Scroll the focused control into a clear view.
- **Target size** (WCAG 2.2) — interactive targets are at least 24x24 CSS pixels, or have enough spacing to clear the equivalent. Decorative density doesn't excuse cramped tap targets.
- **Contrast** — text and UI components meet AA thresholds (4.5:1 normal text, 3:1 large text and component boundaries). Check the worst-case point under gradients and atmospheric effects, after the effect is applied.
- **Reduced motion** — `prefers-reduced-motion` honored for animation, transition, parallax, autoplay, and scroll-triggered reveals.
- **Labels** — every form field has a visible label (placeholder is not a label); icon-only controls have an accessible name; errors are programmatically associated.
- **Semantic structure** — native elements and landmarks over `div`-with-role; one `<h1>` with no skipped heading levels.

For a ship-bound build, run Lighthouse + axe and fix CRITICAL and SERIOUS findings on top of this manual pass.

## References (Added)

| File | Load when |
|---|---|
| [workflow.md](references/workflow.md) | Starting a new interface / non-trivial redesign |
| [accessibility.md](references/accessibility.md) | Any frontend build — detail behind the required Accessibility Gate (keyboard, focus, target size, contrast, motion, labels, semantics) |
| [responsive.md](references/responsive.md) | Layout-significant component or page; multi-viewport concerns |
| [design-review.md](references/design-review.md) | Review phase; auditing existing frontend code |
| [rationale-template.md](references/rationale-template.md) | Emitting a `design-rationale.md` alongside the build |

---

## Attribution

Forked from [anthropics/skills/skills/frontend-design](https://github.com/anthropics/skills/tree/main/skills/frontend-design) — Apache 2.0 licensed. See `LICENSE.txt` in this directory for the original copyright and terms.

**Local additions** (not upstream):
- The description above now lists explicit negative triggers (narrow maintenance, operational-only, backend, non-web UI, refactoring without visible design).
- The *Workflow* and *References* sections at the end of this file are local additions.
- The files under `references/` are local additions authored for this fork. They extend the upstream's aesthetic guidance with intake questions, a design-review checklist, accessibility and responsive discipline, and a rationale-doc template.

The upstream skill's aesthetic-direction content is intact; the additions are additive and load progressively (references only pull into context when a phase needs them).