AI-Generated UI Craft
Ask any AI coding assistant to "build a landing page" with no other direction
and the outputs cluster around a small set of tells: warm cream background
with a serif display face and a terracotta accent, or near-black with a lone
neon-green/vermilion pop; a purple-to-blue gradient hero on white; Inter or
Space Grotesk as the "safe" font; emoji used as section markers; everything
centered; rounded-lg on every card; an accent bar down the left edge of
rounded cards. None of these are wrong in isolation — the problem is they're
the default, reached for the same way regardless of what the page is
actually about, which is what makes the result read as templated rather than
designed.
The fix isn't a better palette to default to instead — any single new default
becomes the next cliché the moment enough people copy it. The fix is a
process: derive every choice from the specific subject in front of you, and
run a self-critique pass that catches genericness before shipping, not after.
1. Ground every choice in the specific subject
- Before picking a color, font, or layout, name the one concrete subject,
its audience, and the page's single job. Distinctive choices come from
that subject's own vocabulary and materials — a page about a coffee
roaster and a page about a compiler shouldn't default to the same visual
language just because both requests said "make it look professional."
- Build with the real content throughout, never placeholder/lorem text —
a design tuned against fake content will have spacing and hierarchy
decisions that don't actually hold up once real copy goes in.
2. Honor what's already there before inventing something new
- Check for an existing design system first — a tokens file, an agent
instructions file (
ARIA.md, CLAUDE.md, AGENTS.md, …), existing
component styles in the codebase.
When one exists, apply it; new choices only fill genuine gaps, they
never override what's already decided. This single check prevents most
"looks like a different app pasted in" problems in an existing codebase.
- Only invent a palette/type system from scratch when there's truly
nothing established yet.
3. Choose neutrals and type, don't default to them
- A pure mid-grey background reads as unconsidered; a grey with a slight
hue bias toward the page's own accent reads as chosen. Pure white or
near-black are fine grounds when the subject calls for them — the point
is the neutral was picked deliberately, not inherited because it's what
comes up first.
- Typography carries the page even when the page isn't about typography.
Pair a characterful display face used with restraint against a
complementary body face, plus a utility face for data/captions if
needed — not the same "safe" pairing reached for on every project
regardless of subject.
4. Design both themes with equal care
- A page that renders in both light and dark should have both themes
designed, not one theme with the other naively inverted — contrast and
the accent hue both need to keep working in both directions. If the
request commits to one visual world on purpose (a single fixed mood),
that's a legitimate choice — but it should be a choice, not an omission
because only one theme got attention.
5. Spend boldness in one place; keep everything else quiet
- Pick one place to take a real risk — an unusual type pairing, one bold
color decision, one structural idea — and keep everything surrounding
it restrained. A page that's loud everywhere has no focal point; a page
that's quiet everywhere with one considered accent reads as confident.
- If an accent color fights the rest of the palette, shift it toward
analogous or drop saturation rather than reaching for a second loud
color to balance it.
6. Structure should encode real information, not decorate
- Numbered markers, eyebrows, dividers, and labels should be true about
the content — a numbered sequence (01/02/03) only belongs on content
that's actually ordered (a real process, a timeline), not glued onto
three cards that happen to be side by side. Question every structural
device: does this tell the reader something true, or is it filling
space with the look of structure?
7. The self-critique pass — do this before shipping, every time
Before finalizing, look at the plan (palette, type, layout concept) and ask
of each part: is this what I'd produce for any similarly-categorized
request, or is it actually specific to this subject? If a color choice,
font pairing, or layout idea would be equally at home on an unrelated
project, that's the signal to revise it — not because it's bad in the
abstract, but because it isn't actually derived from anything. Only after
this check passes does the design plan get built out.
This is the step that's easy to skip under time pressure and is also the
one that most reliably separates "looks AI-generated" from "looks
considered" — everything else in this file is instruction; this step is
the enforcement.
Checklist
1---2name: ai-generated-ui-craft3description: The generation-time discipline for an AI producing UI code — not a UI category (see `terminal-software-design` for dashboards, `conversational-ui-restraint` for chat) but the self-critique process that separates a considered design from a templated one. Trigger for "this looks AI-generated", "make this feel less generic/templated", "why does every AI-built page look the same", "make this look considered/deliberate", or — proactively — before finalizing any UI generation task, as a self-check pass. Trigger regardless of which UI category skill was also used; this is orthogonal to both. Portable: self-contained prose, no script dependency.4---56# AI-Generated UI Craft78Ask any AI coding assistant to "build a landing page" with no other direction9and the outputs cluster around a small set of tells: warm cream background10with a serif display face and a terracotta accent, or near-black with a lone11neon-green/vermilion pop; a purple-to-blue gradient hero on white; Inter or12Space Grotesk as the "safe" font; emoji used as section markers; everything13centered; `rounded-lg` on every card; an accent bar down the left edge of14rounded cards. None of these are wrong in isolation — the problem is they're15the *default*, reached for the same way regardless of what the page is16actually about, which is what makes the result read as templated rather than17designed.1819The fix isn't a better palette to default to instead — any single new default20becomes the next cliché the moment enough people copy it. The fix is a21process: derive every choice from the specific subject in front of you, and22run a self-critique pass that catches genericness before shipping, not after.2324## 1. Ground every choice in the specific subject2526- Before picking a color, font, or layout, name the one concrete subject,27 its audience, and the page's single job. Distinctive choices come from28 that subject's own vocabulary and materials — a page about a coffee29 roaster and a page about a compiler shouldn't default to the same visual30 language just because both requests said "make it look professional."31- Build with the real content throughout, never placeholder/lorem text —32 a design tuned against fake content will have spacing and hierarchy33 decisions that don't actually hold up once real copy goes in.3435## 2. Honor what's already there before inventing something new3637- Check for an existing design system first — a tokens file, an agent38 instructions file (`ARIA.md`, `CLAUDE.md`, `AGENTS.md`, …), existing39 component styles in the codebase.40 When one exists, apply it; new choices only fill genuine gaps, they41 never override what's already decided. This single check prevents most42 "looks like a different app pasted in" problems in an existing codebase.43- Only invent a palette/type system from scratch when there's truly44 nothing established yet.4546## 3. Choose neutrals and type, don't default to them4748- A pure mid-grey background reads as unconsidered; a grey with a slight49 hue bias toward the page's own accent reads as chosen. Pure white or50 near-black are fine grounds when the subject calls for them — the point51 is the neutral was picked deliberately, not inherited because it's what52 comes up first.53- Typography carries the page even when the page isn't about typography.54 Pair a characterful display face used with restraint against a55 complementary body face, plus a utility face for data/captions if56 needed — not the same "safe" pairing reached for on every project57 regardless of subject.5859## 4. Design both themes with equal care6061- A page that renders in both light and dark should have both themes62 designed, not one theme with the other naively inverted — contrast and63 the accent hue both need to keep working in both directions. If the64 request commits to one visual world on purpose (a single fixed mood),65 that's a legitimate choice — but it should be a choice, not an omission66 because only one theme got attention.6768## 5. Spend boldness in one place; keep everything else quiet6970- Pick one place to take a real risk — an unusual type pairing, one bold71 color decision, one structural idea — and keep everything surrounding72 it restrained. A page that's loud everywhere has no focal point; a page73 that's quiet everywhere with one considered accent reads as confident.74- If an accent color fights the rest of the palette, shift it toward75 analogous or drop saturation rather than reaching for a second loud76 color to balance it.7778## 6. Structure should encode real information, not decorate7980- Numbered markers, eyebrows, dividers, and labels should be true about81 the content — a numbered sequence (01/02/03) only belongs on content82 that's actually ordered (a real process, a timeline), not glued onto83 three cards that happen to be side by side. Question every structural84 device: does this tell the reader something true, or is it filling85 space with the *look* of structure?8687## 7. The self-critique pass — do this before shipping, every time8889Before finalizing, look at the plan (palette, type, layout concept) and ask90of each part: **is this what I'd produce for any similarly-categorized91request, or is it actually specific to this subject?** If a color choice,92font pairing, or layout idea would be equally at home on an unrelated93project, that's the signal to revise it — not because it's bad in the94abstract, but because it isn't actually *derived from anything*. Only after95this check passes does the design plan get built out.9697This is the step that's easy to skip under time pressure and is also the98one that most reliably separates "looks AI-generated" from "looks99considered" — everything else in this file is instruction; this step is100the enforcement.101102## Checklist103104- [ ] Named the specific subject, audience, and page's single job before105 picking any color/font/layout?106- [ ] Checked for an existing design system/tokens file and applied it107 rather than inventing a parallel one?108- [ ] Is the neutral (grey/white/black chosen) deliberately tied to the109 subject, not the first grey that came to mind?110- [ ] Does the type pairing feel specific to this project, not the same111 safe pairing used everywhere?112- [ ] Are both light and dark themes actually designed, not one inverted113 from the other?114- [ ] Is there exactly one place spending real boldness, with everything115 else quiet around it?116- [ ] Would any structural device (numbers, dividers, eyebrows) survive117 the question "does this encode something true about the content"?118- [ ] Ran the self-critique pass: would this same plan show up on an119 unrelated project? If yes, what got revised?