Skip to content
Resources

Position

Why this tool refuses to use AI for color

Color accessibility has exact answers, and a model that produces a different one each run cannot be checked, cited or trusted. The case for deterministic math.

6 min read

There is no model anywhere in this product. Every palette, score, repair and token comes out of arithmetic over hex values — the same input produces the same output, on any machine, forever, with no request made. That is a deliberate constraint rather than a gap in the roadmap, and it is worth explaining, because “AI-powered” is the default claim in this category.

The questions here already have exact answers

Whether text can be read against a background is not a matter of taste or judgement. It is a ratio, defined by a published standard, computable in a few lines. Whether two colours are distinguishable is CIEDE2000, a formula with decades of perceptual research behind it. Whether a repair preserved a brand hue is a subtraction.

Asking a language model to estimate any of these is strictly worse than computing them. It is slower, it costs money per call, and it is approximately right in a domain where exactly right was available for free. A tool that guesses at a number it could have calculated has made an engineering error, not an innovation.

A critic has to be reproducible

The Proof Score is meant to be pasted into a pull request and argued with. That only works if it holds still. A score that returns 71 today and 68 tomorrow for an unchanged palette is not a measurement — it is a mood, and the first time someone notices the drift, every number the tool has ever produced becomes suspect at once.

The same applies to the audit report. Its whole design goal is to be committed next to the code it describes and diffed when the palette changes. A report that rewords itself on every run produces noise in every diff, and a diff full of noise is a diff nobody reads.

“Because a model said so” is not a reason

When a repair changes a brand colour, somebody senior is going to ask why. The answer has to survive that conversation. Ours is: this pairing measured 3.1:1, the standard requires 4.5:1 for body text, and lightness was moved by the smallest amount that cleared it while leaving hue untouched.

That sentence can be checked, disputed on its merits, and cited. The alternative — a fix whose justification is that a model produced it — puts the designer in the position of defending a decision they cannot explain. Most people, correctly, will not do that. They will revert the change, and the tool will have been worse than useless.

Determinism is what makes the tools feel instant

A practical consequence, not an ideological one. Because the scoring is arithmetic, it runs on every frame while you drag a slider — the palette is re-diagnosed continuously as you edit. A network round-trip per frame is not a slower version of that experience; it is a different, worse product with a loading spinner where the feedback loop should be.

It also means the tools work offline, keep your palettes private by construction rather than by policy, and cost nothing to run — which is why full diagnosis can stay free rather than being metered per call.

Where a model would genuinely help

Being honest about the limits of this position: taste is not deterministic. “Does this palette feel premium?”, “does this suit a children’s brand?” and “what would a 1970s poster do here?” are real questions with no formula, and a model is a reasonable instrument for them. Tools built on that premise are solving a different problem, and solving it legitimately.

This product answers the narrower question — will these colours work — and that one has a right answer. Where an exact answer exists, guessing is not a feature.

See the arithmetic in full →