Customer information form that feeds the contract

After the estimate is approved, the customer fills in the legal and property details the contract needs — and the contract writes itself from their answers.

What it is

A branded, mobile-friendly form at /client/[id]/info. Which sections render is controlled per tenant by the intake_form_sections map on invoice_settings. Answers are stored as form_data on both the estimate link and the contract row, so the contract can always be re-rendered from exactly what the customer stated.

Also called: intake form · customer info form · project info questionnaire · customer details before contract · customer information form · collect legal info · onboarding form

See it
Customer information form that feeds the contract
Prepared for
Marlin Hoover
1140 Ridge Line Rd · Fair Play
Shell package$32,451
Concrete & site$9,421
Doors & windows$6,281
Trim & finish$4,187
Total
$52,340
Signature
The customer-side form on a phone: builder's logo, the funnel progress bar at 'Project Info', and sections stacking down with only the enabled ones present. src/app/client/[id]/info/page.tsx. Sample data — no customer information appears here.
How it works
  1. 1Customer approves the estimate and lands on the form (no login, no password — the link id is the auth).
  2. 2Fields pre-fill from what's already known, with a deliberate exception: a partial name like 'keith' with no last name is left blank so the customer types their FULL legal name.
  3. 3Submit posts to /api/client-portal/submit-form, which renders and freezes the contract and stamps customer_form_completed_at.
  4. 4The customer is routed straight to /client/[id]/contract.
Why we built it

The library header lays out the pipeline it serves: estimate signed → configurable form → contract row created with the body frozen → customer signs → admin counter-signs. The name pre-fill guard is a real defect fix: 'A partial GHL first name like "keith" would otherwise sit pre-filled and get submitted as the legal name — leave it blank so the customer enters their FULL legal name.' A contract signed under a nickname is a contract with a defect in it.

The problem
  • Legal name, mailing address and site address collected by phone and mistyped into a contract
  • Contracts signed under an informal first name
  • Ownership, permit and financing questions surfacing after the job is sold
Sound familiar?
What you get
Everything the contract needs, captured once, by the customer
No login for the customer — a link is enough
Answers feed the contract, the contact record and future invoices
What's inside
Turn intake questions on and off per company
Eleven named intake sections, each a checkbox — ask only what your jobs actually need.
Co-signer and spouse capture
Capture a spouse or co-borrower and the contract writes them in as jointly responsible — or states plainly that the customer signs alone.
How they're paying, on the record
Cash, loan, insurance settlement or other — plus the lender and loan number when funds are held by a third party.
Permit number and HOA approval captured before the build
An optional intake section for the building permit number, HOA name and whether the HOA has approved — asked before the contract, not after the crew is booked.
Photo ID, deed and insurance certificate uploads
Three optional document uploads — photo ID, proof of ownership, insurance certificate — attached to the contract file by the customer, from their phone.
Build site address with autocomplete or a dropped pin
Structured site and mailing addresses with Places autocomplete — plus latitude/longitude from a manually dropped pin for sites that have no street address yet.
Intake answers update the customer record
The legal name, email, phone and mailing address the customer types are mirrored onto their contact record, so future invoices and contracts start from the corrected details.
Automatic 24h and 48h nudges when the form stalls
A customer who signs the estimate but doesn't finish the information form gets nudged at 24 and 48 hours, and the builder gets an alert — whether or not anyone is logged in.
Full legal name enforced
The form refuses a single-word name, because a bare first name is not a legal name and it flows straight into the contract and the accounting customer.
Same as mailing address shortcut
One button copies the mailing address into the build-site address, for the very common case where they are the same property.
Customer document upload
Optional sections let the customer attach a photo ID, proof of ownership or an insurance certificate straight from their phone.

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 →