Three models draw. A script checks. You choose.
Asking a model to design something and then asking the same model whether it followed the brief is not verification — it is the same guess twice. Plumb is a design module that separates the two: several engines draw the same brief in parallel, and a deterministic script measures what they produced. It exists because of a number. Given a brief with sixteen fixed hex values and a named typeface, a hosted design assistant used none of the sixteen colours and 222 instances of a typeface the brief had explicitly cancelled. Three engines run through this module, on the same brief, scored fourteen out of fourteen each. The module is public, MIT-licensed, and produces the artefacts shown here.
Verification that lives in a prompt is a request; verification that lives in code is a result
The usual approach to design quality is to write a longer prompt: mind the contrast, do not let text overflow, keep the type above twelve pixels. A model can comply with that, and it can also quietly not — and the only reader who would notice is the person who wrote the instruction in the first place.
So the checks moved out of the prompt and into code. A headless browser opens the produced file and measures it: what overflows, what is clipped, what collides, what is painted over. The brief still asks. The script decides.
Machines produce the options and the measurements; the choice stays with the person
One brief goes to three engines at once. Each renders, each is measured against the brief’s own palette and typeface, and all three land on a single contact sheet with their scores. A full run takes about ninety seconds and roughly a quarter of a dollar.
The pick stays with the person. That is deliberate: taste is not a metric, and the module does not pretend to hold it. What it removes is the part that never needed a human — regenerating one draft until the obvious defects fall out.
“Could not check” is a distinct verdict — reporting it as clean is how tools lose trust
Every check was added after a real defect shipped, not invented in advance. Text that overruns its box while nothing is technically clipped. A container that does not fit the window at all — every other rule measured content against the container and so called a 1600px slide flawless in a 1280px window, while the reader saw half a slide. Text with an opaque card painted on top of it, which passes every geometric rule because geometry cannot say what is in front.
The exit codes matter as much as the rules: zero is clean, one is violations, and two is could-not-check. A tool that reports a failed measurement as a pass is worse than no tool, because it spends the trust it did not earn.
Generative systems don’t need better adjectives — they need constraints that can be checked
The same product, the same three engines, twice. Asked for “something beautiful, your call”, the run came back with nine-pixel type, cream paper and a screen that read as a printed document: eighteen defects. Given floors instead — nothing below twelve pixels, card padding at least twenty, one recurring visual device — all three engines complied and the run came back with zero.
That is the transferable part, and it is not about design. Generative systems do not need more adjectives; they need constraints that can be checked. Write the floor, not the wish.
Public, MIT, no account and no telemetry — the keys and the memory stay with the user
Everything in this gallery came out of the module. Two of them are product screens rather than pages, and they are the ones worth reading closely: an evaluation overview where the metric that could not be read reports “absent — not exposed at this access level” instead of a zero, and holds the score deltas back while coverage sits under the threshold; and a results table where every score opens onto the answer, the retrieved source and the exact rubric line that was missed. A failed measurement has no business looking like a measurement, and a score nobody can argue with is not evidence.
The landing page is a full build — headline, figure band, process, testimonial, contact — produced from a brief and verified before anyone looked at it. The two editorial slides come from a discovery workshop deck; the client is not named, their marks are not shown, and the six employees on the slide are synthetic, names and faces both.
The module ships as a public repository under MIT: forty-two files, no install step, no account of its own. Keys belong to whoever runs it, and nothing is spent until they set one. Its working memory is a local markdown log — so the second run opens with what you did last time instead of introducing itself again.
Interested in building something similar?
Let's Connect