Freeze exactly what both parties agreed to
A contract is a snapshot with a date on it. Render it once, watermark it, keep the checksum, and make sure the same file still renders identically in five years.
What a legal team asks
Not “does it look nice”. They ask whether it can be reproduced and who saw it.
Can you reproduce it?
Pin the engine version per project. A Chromium upgrade will not silently reflow clause 14 onto the next page.
Can you prove it is unchanged?
Every render returns a SHA-256 of the bytes. Store it with the agreement row and compare whenever you need to.
Where did the data go?
Pin rendering and storage to the EU, or keep nothing at all and stream the bytes straight into your own vault.
Is the draft distinguishable?
Watermark unsigned versions with DRAFT and the counterparty name, so an unexecuted copy never circulates as final.
An archival render
No external assets, a checksum you keep, a watermark on drafts, and nothing kept on our side unless you ask.
Send the HTML instead of a URL, so the exact agreed markup is the input — nothing can change underneath it.
Watermark drafts, and drop the watermark on the executed version.
Keep the checksum and store the file yourself. We can forget it immediately.