Signature audit trail: who, when, from where

Every signature stores the signer's name, email, phone, drawn image, exact timestamp, IP address and browser user agent — for both parties.

What it is

The contracts row carries a full pair of signature blocks: customer_signer_name/email/phone, customer_signature_image, customer_signed_at, customer_ip_address, customer_user_agent — and the same six for the counter-signer plus counter_signer_user_id. Per-section initials carry their own per-section timestamps.

Also called: signature audit · IP address on contract · proof of signing · timestamp

See it
Signature audit trail: who, when, from where
Prepared for
Gideon Alt
1140 Ridge Line Rd · Fair Play
Shell package$30,411
Concrete & site$8,829
Doors & windows$5,886
Trim & finish$3,924
Total
$49,050
Signature
A signature block in the viewer: drawn ink, the typed name, and 'Signed Mar 14, 2026, 4:12 PM' in tabular numerals. ContractViewModal SignatureBlock. Sample data — no customer information appears here.
How it works
  1. 1The sign route reads the IP from x-forwarded-for (first hop) or x-real-ip, and the user agent from the request headers.
  2. 2Email is lowercased and trimmed; phone is reduced to digits before storage.
  3. 3The counter-sign path records the signing user's id so the counter-signer of record is a specific person.
  4. 4The public customer-facing read deliberately omits the audit fields: it 'Returns only the fields needed to render the contract page — not the full audit trail.'
Why we built it

The route header names the purpose: 'The customer's IP is captured for the audit trail; user_agent comes from the request headers.' The complementary restraint on the public read exists so the evidence trail isn't served to anyone holding the link.

The problem
  • Signatures with no supporting metadata
  • Audit data exposed on a public endpoint
Sound familiar?
What you get
Timestamped, IP-stamped evidence for both signatures
The counter-signer is a named user, not just a name string
Audit fields stay off the customer-facing payload

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →