← All decisions jacob@stephens.page
Decision Record

Self-host the signing instrument and its audit trail over a SaaS signature service

ADR 0017 · Accepted ยท in production (sign.stephens.page, Documenso v2.11.0) · ~1066 words

Context

A small business needs to send a proposal and get it signed. The default answer is a SaaS e-signature service - DocuSign, Dropbox Sign, or Documenso's own hosted tier - and for most teams it is the right call.

It also puts the one legally binding document - the signed instrument (the contract) plus the audit trail proving who signed it, when, and from where (the evidence if it is contested) - on someone else's infrastructure, under their retention policy, breach exposure, and freedom to change terms or disappear. Handing both to a third party is a defensible convenience for low-stakes documents and a quiet abdication for consequential ones - the category a signature exists to mark.

This is the decision the rest of this repo keeps making: where the authoritative copy lives, and who can touch it. ADR 0002 keeps the database off the application container; ADR 0009 pins database access default-deny to named hosts; ADR 0015 keeps Terraform state off the provider it provisions. A signature is the highest-stakes instance, the artifact whose purpose is non-repudiation, so it gets the same treatment.

Decision

Self-host the signing service so the signed instrument and its audit trail never leave infrastructure I control, and gate every consequential action behind a named human. Use Documenso (open-source, AGPL) rather than build: the signing cryptography and the audit log are exactly the parts a solo author should not reimplement.

Consequences

When I'd revisit

If document volume or counterparty risk rises - anything a court might weigh - the self-signed cert is the first thing to replace, a CA-issued or eIDAS/AATL-chained certificate swapped in at the same env var, no architecture change. And if this stops being one business's signing line and becomes a service others depend on, the single-container, single-host posture is no longer enough: it would want the bundled durable storage, backups of the document store as well as the database, and a second node - at which point the convenience case for a managed service has to be re-argued honestly against the sovereignty case this ADR makes, not assumed to lose.


Seventh-boundary appendix

Every signature-system narrative and every ADR bridging to the new toolchain carries this appendix. It asks who is affected upstream and downstream of the automation, not only how it behaves.

One of a set of architecture decision records. Source markdown lives in the infrastructure-patterns repo, which is the canonical copy.