Hallmark spends 67 KB of rules to avoid AI design slop

The Hallmark design skill for Claude Code is a whole design system wearing a skill’s clothes. It installs 106 files and about 659 KB of instructions, and the main rule file alone runs 67 KB. That buys 20 named themes, 21 page structures, and a 58-gate slop test that fires before your agent hands anything back.

Key Takeaways

  • AI tools default to the same look because they learned from the same sites.
  • Hallmark picks a structure and a theme per brief, so two pages differ.
  • The main rule file is 67 KB, a real bite out of your agent’s context.
  • A 58-gate checklist runs before the page comes back to you.
  • It can also audit or redesign a page you already have.

Why every AI-built page looks the same

Ask a coding agent for a landing page and you usually get the same page back. It reaches for Inter, drops a purple-to-blue gradient somewhere, and lays out three equal feature cards with a rounded-square icon tile above each heading. Cards end up inside other cards, and gray text ends up on a coloured panel.

The cause is a distribution problem, which is also why it’s fixable. A language model asked for a landing page returns the most probable landing page. That page is whatever the training data holds thousands of near-copies of.

A page that looks AI-made reads as low effort, whatever the product behind it is worth. Hallmark bets that a polite prompt can’t move the output off that default, so the constraint has to be specific and enforced.

What the Hallmark design skill for Claude Code installs

Most agent skills are a page of instructions, while this one is closer to a design department. A shallow clone of the repo gives hard numbers.

PieceMeasured
Files under skills/hallmark106
Total instruction weightabout 659 KB
SKILL.md67,444 bytes
Slop-test rules31,065 bytes
Named themes20
Page macrostructures21
Component archetypes50
Genres4

The 20 themes each carry a name: Specimen, Atelier, Brutal, Newsprint, Studio, Manifesto, Terminal, Midnight, Almanac, Garden, Riso, Sport, Bloom, Coral, Cobalt, Aurora, Editorial, Carnival, Lumen, and Hum. The 50 component archetypes split into 9 heroes, 5 section heads, 6 features, 4 CTAs, 4 testimonials, 8 footers, and 14 navigation bars.

Landing page for a content extraction API with a large black headline reading Any URL in Clean Markdown out, a blue call-to-action button, and two dark code panels showing a curl request and a JSON response
The Cobalt theme, from the modern-minimal genre
Image: Nutlope/hallmark

That size is survivable because almost none of it loads at once. The main rule file tells the agent to read a slim index, pick a name, then open only the matching file. A typical build pulls five to seven archetype files. The rule file is blunt: reading the component cookbook end to end is the single biggest token waste in the skill.

Install is one command, npx skills add nutlope/hallmark, with documented drop-in paths for Claude Code, Cursor, and Codex. The project is MIT licensed and made by Together AI , with a live gallery of generated pages at usehallmark.com .

A 67 KB SKILL.md is still roughly 17,000 tokens the agent reads before writing a single line of HTML. You pay that slice of context on every run.

How the theme and structure picks work

The mechanism is a forced choice from a fixed catalogue, recorded in plain text before any code, and never the same choice twice running.

First comes a genre, and there are four. Editorial is the default, and modern-minimal covers the Stripe and Linear school. Atmospheric handles the dark AI-tool look, while playful covers the soft post-Linear style. The genre then scopes which themes are allowed and which gates apply.

Next comes a macrostructure from the 21 on file: Bento Grid, Long Document, Marquee Hero, Manifesto, Quote-Led, Type Specimen, and so on. A theme follows, drawn from the genre’s own cluster instead of the full catalogue.

Print fair page on a pale pink background with a heavy centred wordmark, a bold headline reading Thirty-four studios Eight presses Soy ink everywhere, and an off-register block print of a yellow circle overlaid with teal and red shapes
The Riso theme, built around off-register print colour
Image: Nutlope/hallmark

The anti-repetition rule is the clever part. Two consecutive themes must differ on at least one of three axes:

  • Paper band: dark, mid, or light background, measured from the theme’s paper lightness.
  • Display style: high-contrast serif, roman serif, geometric sans, grotesk, mono, condensed, and so on.
  • Accent hue: warm, cool, neutral, or something chromatic like Garden’s leaf green.

If two of the three match the previous run, the agent is told to pick a more distant theme. The same rotation covers navigation and footer archetypes, and the project flags that as the single most-violated rule in practice. Agents keep reaching for the genre default, so eight builds ship two navigation bars between them.

Honey farm page on a cream background with a dark green serif headline reading Honey that tastes like one hillside, a green button, and an illustrated jar of honey on faint hexagon shapes
The Garden theme: cream paper band, roman serif display, leaf-green accent
Image: Nutlope/hallmark

Before writing code, the agent must state its macrostructure, navigation, footer, and theme picks in plain text. It also has to name which axes differ from last time. Writing the pick down is what stops the default from winning. A .hallmark/log.json file keeps the run history, so the rule survives across sessions instead of resetting.

Tokens lock once a theme is chosen. Every colour and font rule has to point at a named variable. A stray hex value, OKLCH value, or font-family string counts as a gate violation.

The slop test, the four verbs, and the missing 58th gate

Hallmark ships four ways to invoke it, and only one of them writes new code.

VerbWhat it does
defaultBuilds new UI, picks structure and theme, runs the slop test before handing back.
auditScores existing code against the anti-patterns and returns a punch list. No edits.
redesignKeeps the copy, brand, and information architecture, rebuilds the visual structure.
studyExtracts structure, type pairing, and colour anchor from a design you admire.

The study verb refuses pixel-clones and template-marketplace URLs. It can also emit a portable design.md, so another AI tool inherits the same system.

Before the gates run, a self-critique scores the planned page 1 to 5 on six axes: philosophy, hierarchy, execution, specificity, restraint, and variety. Anything under 3 triggers a revision pass first. The file notes that two passes is normal and three usually means the brief is wrong.

The slop-test file spells out fixes at the property level:

  • overflow-x: clip on both html and body, never hidden, so sticky and fixed children survive.
  • No clickable text that wraps onto two lines, covering buttons, nav links, footer links, and CTAs.
  • minmax(0, 1fr) instead of a bare 1fr on any grid track holding an image.
  • overflow-wrap: anywhere on display headings, so long hyphenated words break instead of overflowing.

Every emitted page is checked at 320, 375, 414, and 768 pixels wide, which the project calls a hard floor.

The README advertises fifty-seven slop-test gates, while the gate file’s own heading says 58. The numbering runs 1 to 57, but an extra gate 38a sits between 38 and 39. So 58 is the honest figure, and the README undercounts by one. Gate 38a bans italic headings, which the project calls one of the most reliable AI tells.

Every gate is a statement you can check against real markup. “No two-line clickable text” holds up to that test in a way “make it look premium” never will.

Is a design skill worth the context it eats?

Install it if you generate UI with an agent often and keep noticing the output rhyming with itself. The diversification machinery, especially the persisted run log, is hard to replicate with prompting alone. It also earns its keep when you have a live page you suspect looks AI-made. The audit verb returns a punch list without touching your code.

Skip it if you already have a design system. The skill reads a project design.md and defers to it, so you’d be paying context for a catalogue you never open. The same goes for backend and infrastructure work, where a 67 KB design rule file is pure overhead.

The honest limitation is that a catalogue of 20 themes is still a catalogue. Two Hallmark pages from different briefs will look different from each other. But a thousand Hallmark pages across the internet will still start to share a fingerprint. The custom branch that designs from scratch only fires when the brief carries an explicit creative signal.

Sleeper train ticket page styled as a printed boarding pass, with a high-contrast serif title The Cascadia Nightjar, a red validation stamp, a timed list of station stops, and a passenger and berth detail table
A page from the custom branch, which designs outside the 20-theme catalogue
Image: Nutlope/hallmark

The same fix works outside web design: a specific constraint, enforced, with a record of what you did last time. Before committing, run audit on one page you already shipped. If the punch list tells you something you didn’t know, you have your answer in five minutes.