Variants

Builds multiple variants of a component you're working on and helps you iterate and pick one.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/variant, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit jakubkrehel/skills/skills/variant#main ~/.claude/skills/variant

For one project only, change the path to .claude/skills/variant. This skill also uses picker.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Variants

Show the full text111 lines
namedescriptiondisable-model-invocation
variantBuilds multiple variants of a component you're working on and helps you iterate and pick one.true

Variants

This skill takes one described piece of UI and builds three versions that differ on purpose. They go behind a picker in the real page, so you can flip between them and choose.

Every other skill here judges. This one produces candidates and hands the decision back. Reviewing existing UI is interface-review and better-interface, and it does not pick the winner.

Different answers, not different tints

Three variants that differ in accent color teach nothing. You flip between them, see no real choice and the run is wasted.

So each variant is a different answer to the same brief, on an axis this collection owns:

Axis Owner What varies
Structure better-layout Grouping, order, column count, what collapses
Density better-layout Spacing scale, hit areas, how much fits
Emphasis better-colors Where filled color goes, what recedes
Type better-typography Scale steps, weight contrast, measure
Voice better-writing Labels, tone, how much copy

Pick one primary axis and give each variant a different position on it. Secondary choices follow from it rather than varying on their own. A dense variant may need a smaller type step, and that is coherence, not a second axis.

Varying every axis at once produces three unattributable results. You learn which you liked, not what made it work, so the next piece starts from nothing.

The floor every variant clears

A variant that wins on looks and fails an escalation trigger is not a candidate. It is a bug with a nice surface.

Before a variant enters the picker it clears better-interface's escalation triggers. Every control has an accessible name, keyboard reaches everything a pointer does, focus is visible, nothing clips at 320px and no meaning rides on color alone.

That floor is identical across variants. It is not an axis and never trades against one. Where a direction can only work by breaking it, say so and drop the direction.

1. Scope one piece

One piece of UI per run. "The dashboard" is not a piece; the metric card is. Where the brief spans several, name the one the others hang off, say why and offer the rest as later runs.

Restate the brief in one sentence: what the thing is, where it renders, what it has to do.

2. Learn the ground

Variants have to look like they could ship tomorrow, so read what they stand on:

  • The styling system, the component library and any motion library.
  • The tokens: color, spacing, radius, type scale, easing.
  • The product's density and voice. A dense professional tool bounds how far the boldest variant may go.
  • Where the piece renders: against what background, beside which neighbours, at which widths.

With no project to read, use neutral grays, one accent and the system font stack, and say that is what you did.

3. Name the axis before writing code

Default to three variants. Go to five only when asked, or when the space is genuinely wide. Past five nobody compares, they scroll.

Write the set down first, a name and an axis position each. Names say what the direction is, so Quiet, Editorial, Dense, never Option A.

This step is done when no two variants share a position and you can state each one's axis in a phrase.

4. Build it into the real page

A variant looks fine in isolation, which is why isolation is the wrong place to judge it. Host the variants on the page that will actually contain the piece, with the real chrome, the real neighbours and realistic data.

Select with a URL search param (?variant=quiet), so every variant is a link you can send someone. A floating control sets it; picker.md holds the spec.

Render one variant at a time, full size. Thumbnails distort spacing and scale, and spacing is usually the thing you are choosing between.

Where no page can host it, build one self-contained HTML file and keep the same picker.

Give every variant real content: product-shaped copy, plausible names and the number of items the page will really carry. Lorem ipsum and three rows make every structure look good.

5. Present the tradeoffs and stop

Flip through every variant yourself first. Each one renders, each interaction responds, the console is clean.

Then hand the decision over:

Variant Axis position Right when Costs
Quiet Lowest visual weight The page is used daily Least memorable
Editorial Largest type, most space The moment deserves weight Eats vertical space

Say where the picker is running, which key flips it and which width you judged at. The answer can change between 375px and 1440px.

Never mark a favourite in the table. Asked directly, answer from how often the piece is seen and from the product's personality, not from which one you enjoyed building.

6. Promote one, delete the rest

On a choice: build that variant properly where it belongs, following the project's own conventions, then delete the others and the harness.

Asked for another round instead, keep the harness and run step 3 again, taking new positions around the direction you leaned toward.

Until promotion, the harness never imports from production and production never imports from the harness.

Before you finish

Mistake Fix
Variants differ only in accent color or copy Move one to a different position on the primary axis, or cut it
Every axis varies at once Vary one; let the rest follow from it
Judged on a blank route Host them on the page that will contain the piece
Lorem ipsum, three rows, "Jane Doe" Real copy and the item count the page will really carry
The boldest variant skips keyboard or focus Clear the floor or drop the direction
A favourite marked in the table State each variant's cost and let the user choose
Picker restyled with the project's tokens Keep it visibly outside the design system
Harness left behind after promotion Delete it unless asked to keep it
1---
2name: variant
3description: Builds multiple variants of a component you're working on and helps you iterate and pick one.
4disable-model-invocation: true
5---
6 
7# Variants
8 
9This skill takes one described piece of UI and builds three versions that differ on purpose. They go behind a picker in the real page, so you can flip between them and choose.
10 
11Every other skill here judges. This one produces candidates and hands the decision back. Reviewing existing UI is `interface-review` and `better-interface`, and it does not pick the winner.
12 
13## Different answers, not different tints
14 
15Three variants that differ in accent color teach nothing. You flip between them, see no real choice and the run is wasted.
16 
17So each variant is a different answer to the same brief, on an axis this collection owns:
18 
19| Axis | Owner | What varies |
20| --- | --- | --- |
21| Structure | `better-layout` | Grouping, order, column count, what collapses |
22| Density | `better-layout` | Spacing scale, hit areas, how much fits |
23| Emphasis | `better-colors` | Where filled color goes, what recedes |
24| Type | `better-typography` | Scale steps, weight contrast, measure |
25| Voice | `better-writing` | Labels, tone, how much copy |
26 
27Pick **one primary axis** and give each variant a different position on it. Secondary choices follow from it rather than varying on their own. A dense variant may need a smaller type step, and that is coherence, not a second axis.
28 
29Varying every axis at once produces three unattributable results. You learn which you liked, not what made it work, so the next piece starts from nothing.
30 
31## The floor every variant clears
32 
33A variant that wins on looks and fails an escalation trigger is not a candidate. It is a bug with a nice surface.
34 
35Before a variant enters the picker it clears `better-interface`'s escalation triggers. Every control has an accessible name, keyboard reaches everything a pointer does, focus is visible, nothing clips at 320px and no meaning rides on color alone.
36 
37That floor is identical across variants. It is not an axis and never trades against one. Where a direction can only work by breaking it, say so and drop the direction.
38 
39## 1. Scope one piece
40 
41One piece of UI per run. "The dashboard" is not a piece; the metric card is. Where the brief spans several, name the one the others hang off, say why and offer the rest as later runs.
42 
43Restate the brief in one sentence: what the thing is, where it renders, what it has to do.
44 
45## 2. Learn the ground
46 
47Variants have to look like they could ship tomorrow, so read what they stand on:
48 
49- The styling system, the component library and any motion library.
50- The tokens: color, spacing, radius, type scale, easing.
51- The product's density and voice. A dense professional tool bounds how far the boldest variant may go.
52- Where the piece renders: against what background, beside which neighbours, at which widths.
53 
54With no project to read, use neutral grays, one accent and the system font stack, and say that is what you did.
55 
56## 3. Name the axis before writing code
57 
58Default to three variants. Go to five only when asked, or when the space is genuinely wide. Past five nobody compares, they scroll.
59 
60Write the set down first, a name and an axis position each. Names say what the direction is, so `Quiet`, `Editorial`, `Dense`, never `Option A`.
61 
62This step is done when no two variants share a position and you can state each one's axis in a phrase.
63 
64## 4. Build it into the real page
65 
66A variant looks fine in isolation, which is why isolation is the wrong place to judge it. Host the variants on the page that will actually contain the piece, with the real chrome, the real neighbours and realistic data.
67 
68Select with a URL search param (`?variant=quiet`), so every variant is a link you can send someone. A floating control sets it; [picker.md](picker.md) holds the spec.
69 
70Render one variant at a time, full size. Thumbnails distort spacing and scale, and spacing is usually the thing you are choosing between.
71 
72Where no page can host it, build one self-contained HTML file and keep the same picker.
73 
74Give every variant real content: product-shaped copy, plausible names and the number of items the page will really carry. Lorem ipsum and three rows make every structure look good.
75 
76## 5. Present the tradeoffs and stop
77 
78Flip through every variant yourself first. Each one renders, each interaction responds, the console is clean.
79 
80Then hand the decision over:
81 
82| Variant | Axis position | Right when | Costs |
83| --- | --- | --- | --- |
84| Quiet | Lowest visual weight | The page is used daily | Least memorable |
85| Editorial | Largest type, most space | The moment deserves weight | Eats vertical space |
86 
87Say where the picker is running, which key flips it and which width you judged at. The answer can change between 375px and 1440px.
88 
89Never mark a favourite in the table. Asked directly, answer from how often the piece is seen and from the product's personality, not from which one you enjoyed building.
90 
91## 6. Promote one, delete the rest
92 
93On a choice: build that variant properly where it belongs, following the project's own conventions, then delete the others and the harness.
94 
95Asked for another round instead, keep the harness and run step 3 again, taking new positions around the direction you leaned toward.
96 
97Until promotion, the harness never imports from production and production never imports from the harness.
98 
99## Before you finish
100 
101| Mistake | Fix |
102| --- | --- |
103| Variants differ only in accent color or copy | Move one to a different position on the primary axis, or cut it |
104| Every axis varies at once | Vary one; let the rest follow from it |
105| Judged on a blank route | Host them on the page that will contain the piece |
106| Lorem ipsum, three rows, "Jane Doe" | Real copy and the item count the page will really carry |
107| The boldest variant skips keyboard or focus | Clear the floor or drop the direction |
108| A favourite marked in the table | State each variant's cost and let the user choose |
109| Picker restyled with the project's tokens | Keep it visibly outside the design system |
110| Harness left behind after promotion | Delete it unless asked to keep it |
111 

Discussion

Alternatives

Also in Interface designSee all 106 in Design →
Frontend designGuidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.Design & UI · Apache-2.0ImpeccableUse when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.Design & UI · Apache-2.0Apple designApple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.Design & UI · MITBuilding AnimationsBuild an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations.Design & UI · MIT