Initials render everywhere the contract does

One shared helper renders captured initials into every read-only view — customer copy, builder viewer, counter-sign modal and print — so no surface shows a blank line where an initial belongs.

What it is

ReadOnlyInitialProps builds the initialTargets set and the renderInitialSlot function from a contract's frozen manifest plus its stored initials, and returns {} when there are no required sections so callers can spread it unconditionally. Slots use print:break-inside-avoid so an initial never splits across a page break.

Also called: initials on the PDF · signed waiver copy · initials in the printout

See it
Initials render everywhere the contract does
Prepared for
Sutter Kline
1140 Ridge Line Rd · Fair Play
Shell package$26,623
Concrete & site$7,729
Doors & windows$5,153
Trim & finish$3,435
Total
$42,940
Signature
A printed waiver page with each clause followed by a small boxed initial image under an 'Initialed:' label. Sample data — no customer information appears here.
How it works
  1. 1Callers write `<ContractMarkdown body={body} {...readOnlyInitialProps(required, initials)} />`.
  2. 2Each slot renders the stored PNG in a bordered box behind an 'Initialed:' label, or an em dash when absent.
  3. 3The counter-sign modal overrides the label and missing text to flag gaps in the breach colour.
  4. 4Because the slots live inside #contract-print, they land in the PDF.
Why we built it

The helper exists to stop the four render surfaces drifting: 'On an executed contract, each numbered waiver section's "Client Initials: ___" line must show the customer's *drawn* initials (captured at signing), not the blank template placeholder… this helper builds both from the frozen `required_sections` manifest + stored `section_initials`, so every place that renders an executed contract stays consistent.'

The problem
  • Executed waivers printing with empty placeholder lines
  • Four render paths drifting apart over time
Sound familiar?
What you get
One consistent executed document everywhere
Initials survive into the PDF
Page breaks never split an initial from its clause

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 →