A rules layer for AI-generated interfaces

Your agent’s first screen is usually wrong.

Reckon is a rules layer for design agents building the software nobody demos: every figure traces to real data, every action fits the record it sits on, every state is drawn before a user finds it.

Design agent
no rules✓ rules loaded
Claude Designunauditedauditing every figure
41%96%
figures traced to data · this sample
Screens generated8
Aggregates derived314
Actions withheld02
States drawn4 / 99 / 9
componentsAGENTS.mdfixturesderivation
✓ same model, same brief, one rules layer added
Assessed payable
no source✓ sums 3 rows
$268,500.00$256,482.00
Ready for decision$174,960.00
Approved, unpaid$67,050.00
Held by legal$14,472.00
✓ the figure names the array it came from
Quarter on quarter
unverified✓ recomputed
+12.4%+8.9%
✓ the omitted line changed the direction
Work queue · ready for decision
3 impossible✓ all valid
41 of 4 can be decided
ClaimCargoStatePayable
CLM-2026-0114Dry-type transformerevidence complete$32,160.00Decide
CLM-2026-0121Woven fabric rolls1 document missing1 document missing$20,600.00DecideEvidence
CLM-2026-0093Deck winch, two cratesescalated to legalescalated to legal$64,000.00DecideNo offer
CLM-2026-0140Ceramic tablewaredelivered Aug 2025time-barred 11 days$18,900.00$0.00DecideClosed
✓ every action read from its record, not from the row

Four ordinary widgets, exactly as an agent first generated them — watch each one correct itself. Nothing about the styling changes. Only the figures, the actions and the states that were never true underneath.

What it isRules · shells · tokens

A design system whose product is the rules. It ships components and tokens, but those are the easy part. What it actually carries is a rules layer that tells a design agent how to assemble a screen and derive the numbers on it — for dense, record-centric software where people act on a queue before a clock runs out.

FIG 0.1

Every figure names its data

One convention runs through everything. Status is data; derived state is not — overdue is computed, never stored. And a new status value is never absorbed on the model’s judgement. It stops and asks.

FIG 0.2

Rules for the shell, and room inside them

Specialised guidance for the parts every business app grows: shells, work queues, record pages, decision surfaces. Each one names three expressive choices and a reason for each — the room where your product becomes recognisably yours.

FIG 0.3

Some rules are compiled, not stated

Components and tokens you can point at your own brand, packaged so Claude Design picks them up on load. And where a rule can be enforced rather than described, it is — pagination derives its own total, so a footer cannot carry an invented number.

The failure modeSemantic, not cosmetic

A plausible number is worse than no number.

Ask an agent for an operations screen and you get something that photographs well. Then you read it. The expensive rework here is semantic — a figure that will not reconcile, a control that lies about when it applies — and no component library touches any of it.

01What the rules add →

Assessed payable by month derivedcapped

240k180k120k60k0
Sep 2025Mar 2026Aug 2026

Time to decision, by queue state

Audit for Aug 203 findings
Screens
Work queue
At risk · generated 1 hour ago
  • The payable figure above the table is a literal; it matches none of the rows beneath it.
  • One claim is missing a mandatory document and is still counted as ready.
Recovery detail
Reconciles · generated 1 hour ago
  • Every figure names the data it comes from.
  • Expired, rejected and empty states all render.
In practiceJudged by what a team must undo

Output a team can build straight from.

The brief named a job, not a screen. The rules add what a brief never says out loud: totals name their rows, settled records are not offered actions, routes exist and status values are a closed set. Nobody reverse-engineers intent from a picture.

02Who should use this →
RULESMODELFIXTURESDERIVERENDERAUDIT
Work queue
figures name their arrays
Claim detail
evidence gates the decision
Decision
liability cap applied
Recovery
every enum value drawn

ClaimsDesk

“I’m an adjuster. I need to see what’s burning down, and I can only act on claims that are actually ready for me.”
Screens generated8
Derived aggregates14
States exercised9 / 9
Actions withheld2
One pass · no corrections
Failure modesWhat goes wrong · the rule that closes it

Every rule exists because something broke.

Not hypotheticals. Each is a specific way generated business UI goes wrong underneath a finished-looking surface — and each has a rule written against it.

04How the rules hold →
Mode 01A filter that counts the wrong thing
Goes wrongA filter reading “All statuses (11)” — where 11 was the number of records, not the number of statuses. Nobody catches it, because it looks like a count.
The ruleEvery figure names the data it comes from. A count that cannot say which set it counted does not render.
Mode 02A control that lies about when it applies
Goes wrongA confirmation dialog offering to void an invoice the data settled fourteen minutes earlier. The row looked like every other row.
The ruleStatus is data; derived state is not status. The action is read from the record, and the count above stops calling it actionable.
Mode 03A footer that invents its own total
Goes wrongA list reading “Showing 1–25 of 128” where 128 was typed, or a counter padded until it reads “1 / 2” on a set of one.
The ruleThis one is compiled rather than stated. Pagination derives its own range and total from the real set, so the footer cannot carry a made-up number.
MachineryStated · compiled · checked

A rule nobody can check is a preference.

Written guidance drifts. The model reads it, agrees with it, then violates it on the fourth screen. So the rules are held three ways — and the strongest do not depend on the model’s judgement at all.

05How it works →
LedgerAugust
Movements
Opening balance$96,200.00
Invoiced$64,300.00
Credit notes($12,600.00)
Collected($19,500.00)
Closing$128,400.00
Closing balancederived
$128,400.00
opening + invoiced − credited − collectedcompiled
Layer 02 · CompiledWhere a rule can be enforced, it is not written down

The strongest rules do not depend on the model agreeing with them. A footer derives its own range and total from the array beside it, so there is nowhere to type a number that was never true.

AGENTS.mdloaded on every pass
12## Derivation
13
14Every figure names the
15data it comes from.
16
17Status is data. Derived
18state is computed.
19
20## Expression
21
22Every shell names three
23choices, with reasons.
Layer 01 · StatedThe conventions the model reads before it draws

This is the layer that shapes the first draft, and the layer that can drift. Naming it as such is the reason the other two exist.

Auditbefore handoff
6 / 7
Figures traced to named dataok
Status values a closed setok
Every enum value renderedok
Phone width to wide desktopok
Unknown status partially_settled
Not in the declared set. I will not add it on my own judgement.
Layer 03 · CheckedWhat is left gets read, not trusted

And when something falls outside the set, the system does not decide for you. It stops and asks — slower, and correct.

The compiled layer is the one worth arguing about — it is the only kind of rule that survives a model that disagrees with it.
Who it is forClaude Design users, and whoever acts on the output

You are paying for less rework.

Everyone generating business UI already has components. What they lack is anything that makes the output true underneath. The standard here is what a real team has to undo before it can build.

06What it costs →
WhoTodayWith Reckon
DesignThe states nobody asked for arrive drawn.
TodayTwelve happy-path frames, then a month of edge cases found in review.
With ReckonLoading, empty, filtered-to-nothing, error and permission-denied already exist.
EngineeringA handoff you can build straight from.
TodayReverse-engineering intent from a picture, then asking which figures were ever true.
With ReckonRoutes exist and status values are a closed set. Read the logic, not the arithmetic.
The businessApproval that means approval.
TodayA stakeholder signs off on a mockup whose totals do not add up — or sends it back.
With ReckonErrors surface in generation, where they cost nothing to fix.
Built for the software nobody demos — dense, record-centric tools where people act on a queue before a clock runs outNo runtime · no lock-in
PricingThe layer is free · the expertise is not

Free. Take all of it.

No tiers, no seats, no renewal. Reckon is free and stays free — what I sell is the work of applying it to a product that already exists.

Reckon
AGPL-3.0 · free to use
Free
All of it · no account · no telemetry

The rules, the components and every worked product. Clone it, point the tokens at your brand, and use it on client work without asking me.

The layer
  • The full rules filestated, compiled, checked
  • Shell and archetype recipes
  • Fixtures that carry the awkward cases
The system
  • Components and tokenson your own primitives
  • Every worked product, end to end
  • Claude Design setup, ready to load

Free because the rules are worth more once people use them.

Work with me
Hire me
Freelance · by the engagement

I wrote these rules over twelve years of building this kind of software. The layer is free; the judgement behind it is what I do for a living.

Product and UI design
UX for dense, record-heavy screens
Design systems and tokens
Getting real output from design agents
A rules layer written for your codebase
Everything in the box — rules, components, tokens and every worked productAGPL-3.0 · no account · no runtime
In useFrom teams building operational software

What it changed.

Not that it looked better. That the screen agreed with itself, and nobody had to check.

One product, not eleven
Eight screens that felt like they were designed by the same person on the same day. That is the part I could never get out of a generator.
Joel KaminskiFounder
The same object, everywhere
An invoice behaved like an invoice on every screen it appeared on. Same label, same states, same actions available in the same order, whether it was a row in a list or the whole page. We used to lose a week reconciling those differences after the fact — three designers, three mental models of the same record, and nobody noticing until QA. Here the model of the domain was decided once, and everything downstream inherited it.
Ana FerreiraFront-end engineer
What a screen is for
It stopped giving me a dashboard when what I described was a queue. Somebody has clearly thought about the difference between software you read and software you act in — and the numbers on it are load-bearing rather than decorative, which is the same insight applied twice.
Marta IlvesDesign lead, logistics
Hierarchy
The most severe row is the one you see first. Sounds obvious. Nothing else does it.
Tom SørensenEngineer
The unglamorous half
Empty, permission-denied, filtered-to-nothing, the record somebody archived last week. Those screens are most of the actual experience in an internal tool, and they are the ones that never make it into the mockup that gets approved. Having them arrive designed changed what our handoff even means.
Priya RamanathanDesign lead, clinical
QuestionsAnswered plainly

Straight answers.

The questions a sceptical lead asks before they will put an unfamiliar file in front of their team.

07Back to the top →
Answer 01

No.

It ships components and tokens, but that is not what you are buying. The product is the rules layer that decides what gets computed, what gets shown and what gets refused — plus the machinery that makes those rules checkable.

Answer 02

If it reads a rules file, yes.

It is built for Claude Design users generating business UI. Because the layer is plain markdown loaded as project instructions, anything else that reads a rules file will use it too. There is nothing proprietary to integrate.

Answer 03

No. The judgement, yes.

The tokens are yours to set and brand fit is a config change. The judgement rules are not configurable, because that is the product. If you want a different opinion about derivation, you want a different product.

Answer 04

Nothing breaks.

The rules are written against behaviour rather than internals, so upstream releases move underneath them. Where a rule does need to change, it changes in one file you can read in an afternoon.

Answer 05

Once. Then faster.

Marginally slower on the first generation. Considerably faster by the fourth, because you are not re-prompting it to fix a total that never tied.

Reckon

Ship the screen.
Not the guesswork.

Components are the easy part. What you are missing is the layer that decides what gets computed, what gets shown, and what gets refused.

Built for Claude Design · plain markdown · nothing to run