Anti-Default Design

A seeded roll of design constraints, and the lint checks that fire on a page with the default AI look

Overview

A Claude Code skill against the look every AI-built interface shares. The brief fixes the style, a seeded script rolls the structure, and a lint pass checks the result before the work counts as done.

Stack

Bash, the Claude Code skill format, GitHub Actions on Ubuntu and macOS

What I built

  • A roll script with a deterministic Park-Miller generator: it fires 3 of 6 design constraints (typography, layout, color, density, shape, motion, 7 options each) and draws 3 metaphor words from the system dictionary, with a bundled fallback list. The same seed reproduces the same roll.
  • A lint script with 10 checks for the default fingerprint: the usual fonts, indigo accents and purple gradients, uniform rounded corners, soft shadow stacks, hover lift, a missing viewport tag and a layout with no responsive path. Every hit must be fixed or justified.
  • A pinned design direction written into the project with its seed, so re-runs keep it and a re-roll changes the structure while the style survives.
  • A suite of 35 shell tests (roll determinism, seed reproduction, every lint check against clean and dirty fixtures, threshold edges, usage errors), run in CI on Ubuntu and macOS.

Key decisions

  • Randomness comes from a script, never from the model. Asked to be different, a model returns the most probable different, so the entropy has to come from outside it.
  • The roll is a visible command with its seed in the output, so a skipped step shows and any roll can be reproduced.
  • The brief owns the style and the dice only touch the structure. An earlier version let the roll own both, and a sci-fi spec-sheet look landed on a sushi bar.
  • Seven versions, each tested against real briefs, and each one documents the loophole that broke the one before it.