The model writes the words. Code writes the numbers.

That division is the whole design. A language model is good at structure and phrasing and constitutionally willing to invent a figure that fits the sentence. So it is never allowed to produce one.

How a draft gets made

1  You brief it

A sentence about the deck you need, and which uploaded sources it should draw on. Or just the sources — a document can be the whole brief.

2  You approve an outline

Titles, order, and which of your data blocks lands on each slide — editable before anything is built. You approve the story first, which is the expensive thing to get wrong.

3  Code assembles it

The model names which blocks to use; ordinary deterministic code copies every figure out of your source. The model never types a number into a chart or a table.

4  The gate checks it

Every sentence is scanned for digits and spelled-out numbers. Anything not traceable to your sources or your own brief fails. One repair attempt, then it refuses — no deck rather than an unverified one.

Running on this page as you read it.

These four sentences were checked when the page loaded, by the same function that stands between the model and a saved deck. Three are traceable to the table cited below. The fourth is a plausible sentence with a number that appears nowhere in it — the kind a fluent model produces without hesitation.

Enterprise revenue grew 27.4% quarter on quarter, from $4.82M to $6.14M.traced to Summary!B4:E8Traced
Total revenue reached $10.87M, up 15.5% on Q3.traced to Summary!B8:E8Traced
Mid-market was the only segment to contract, down 4.1% to $3.02M.traced to Summary!B5:E5Traced
Enterprise now accounts for 71% of new bookings.blocked — 71 appears nowhere in the sourceBlocked

Source:FY26_revenue.xlsx · Summary!B4:E89 figures checked · 3 of 4 claims cleared

Try to sneak a number past it.

The gate is deterministic code, not a model — which is why this runs in your browser with nothing sent anywhere, and why it answers on every keystroke.

The source FY26_revenue.xlsx Summary!B4:E8

SegmentQ3 revenueQ4 revenueChange
Enterprise4.826.1427.4
Mid-market3.153.02-4.1
SMB1.441.7118.8
Total9.4110.8715.5

Every figure traces to the source

Enterprise revenue grew 27.4% quarter on quarter, from $4.82M to $6.14M.

3 figures checked · deterministic, in your browser · no model involved

A long report becomes a readable deck.

Drop a PDF and the same pipeline runs with the document as its grounding — its tables become tables, its figures become charts, and its own argument sets the order of the slides.

And because the model only ever sees a sketch of each block — shape and labels, never the values — a long document costs a fraction of what pasting it into a prompt would. The safety property and the cost property are the same property.

What that costs →

Revenue compounds at 14% and margin has gained two points

268M
FY25 revenue
▲ 12M
16%
EBITDA margin
▲ 1%
108%
Net revenue retention
▲ 3%
2.4x
Net debt / EBITDA
▼ 0.3x
$MFY23FY24FY25
Revenue210240268
Gross profit128149169
Reported EBITDA323742
EBITDA margin15%15%16%
Free cash flow182227

Due-diligence readout9 slides.

The copilot, in the editor

Smaller help while you work: rewrite a title into an actual takeaway, suggest a layout for a crowded slide, summarise a table in a sentence. Every prose suggestion goes through the same gate before you can apply it — and title suggestions are grounded in the block values on the slide, because a takeaway written blind gets the direction of the story wrong.

Try to make it invent a number.

It is a fair test, and it is the one we built for.