Pull the square footage from the floor plan / blueprints and enter it in Step 3.
Layout
2 Property Verification Send the customer a sheet to confirm their property & dimensions before the visit
×
* Records mode needs this number to generate. New-build & No-PA don't.
Mode is automatic: Existing home (Step 1) builds the confirm-this-size sheet from the link/screenshot; New build builds the help-us-confirm sheet (asks 2-car vs 3-car). Preview it, then send from the estimate screen.
3 Project Areas Check the surfaces being coated, then enter sqft and optionally a photo
Garage sq ft ×or%
4 Coating System BEST is the default quoted tier — customer sees Good and Better as alternates on the estimate
▌ Good (1 Coat Solid · 5-Year) and Better (2 Coat Solid · Lifetime) are auto-included on the customer's estimate for comparison. Good auto-hides when garage >600 sf.
PRICE PER SQ FT
Edit any tier — updates the quote live. Click Save All Settings (Pricing tab) to keep prices for next time.
Type a price here and it applies to every area right away (the box checks itself). All three options become that one price. Clear the box — or uncheck it — to go back to the Good / Better / Best prices above.
5 Extras Only checked items appear on the estimate
✓ Included at No Charge Shown on every estimate as included — uncheck to remove if it doesn't apply
6 Additional Services Optional line items not driven by sqft
7 Discount Bundle 10% applies automatically when 2+ areas are in scope — no reference needed. Pick another option only to override.
🏷 Bundle discount active — 10% off (2 areas in scope)
8 Color, Source & Notes
Tick the box under any field to print it on the estimate and the sold sheet.
For custom blends — shows on the estimate in place of the dropdown color.
9 Promo Discount Flat dollars off — applies to the BEST (Full Flake) option only
🎯 Target Price Set the $/sq ft you want the BEST (Full Flake) option to land at — the builder backs into it by auto-adjusting the area rates so the normal math (areas × rates − bundle − promo) lands on target × sq ft, rounded to the nearest dollar
🔒 Card on File Fills the Sold Sheet only — never saved to history, the cloud, or your browser; clears on a new estimate
🔒 Used only to fill the Sold Sheet you print/charge from. Not saved to history, the cloud, or your browser.
Subtotal
—
Discount
—
Grand Total
—
A Brand Configuration
🎨 Brand Color Theme
Color theme:
Pick a color, then Save All Settings. Changes show on the printed estimate.
LIVE PREVIEW
☁ Cloudinary Photo Library Pull your shared photos (banner, gallery, tiers, inclusions, area photos) live from Cloudinary by tag. Stored as links, not images — so the browser storage wall is gone.
A2c Banner Photo Upload up to 8 hero photos, click one to put it on the banner, then resize & crop. Live preview below.
Banner photo
2 Coat + Flake
$3,624 · turnkey · installed
Resize & crop the photo
Zoom100%
Left ↔ Right50%
Up ↕ Down50%
☀ Brightness100%
◐ Contrast100%
A4 County Property Appraisers The lookup list used in Step 1 — add or update as you expand
Matching State + County overwrites the existing entry. Remember to Save All Settings.
A2b Photo Library — Page 2 Build a library once — load ~4 photos per type (Garage, Patio, Driveway…), each tagged with finish & color. On each estimate, ✨ Auto-pick chooses up to 6 that match the job's areas + color; tick/untick any photo to adjust. Saved automatically.
A2d Color Swatches Upload a real swatch photo for each floor color — shown on the estimate & sold sheet when the customer picks that color. Until you upload one, a solid placeholder color is used.
A3 Customer Reviews Shown under "What Customers Say" on the estimate
Paste your best Google reviews here. Click Save All Settings to keep them. (Auto-pulling recent Google reviews comes later with the back-end.)
B Sales Representatives
Editing the active rep below applies to estimates instantly. Save Defaults to persist the full roster.
C Extras & Add-Ons Pricing Per-sf rates, percentages of base, and flat fees
▌ Auto-saves as you type · Builder labels update in real-time across the app
D Pricing Master Sheet Size-based rates. The Quick Pricing boxes on the builder page fill these in for you.
Active mode (from Consult Type): VIRTUALDefaults: in-person +5% premium over virtual
Option
🖥 VIRTUAL
🤝 IN-PERSON
0–549
550–899
900+
0–549
550–899
900+
Save keeps your brand, pricing, reps, and integration settings in this browser only. Cloud Sync stores your settings and your Estimate History on your website — enter your sync code once on any computer and everything loads and stays in sync automatically from then on. Backup to File downloads everything — settings and all saved estimates — as one file you can store in Google Drive and reload on any device with Restore from File. Reset restores GFP factory defaults.
📂 Estimate History
🔌 Integration Hooks Stubbed — ready to wire to live services
All hooks fire from real events in the app. With integrations off, events log to browser console for testing. Flip a toggle and enter credentials to activate. Each "Test" button fires a sample payload using current builder state.
📤 GoHighLevel — CRM Sync
OFF
Pushes estimate events to a GHL webhook. Use to create opportunities, attach PDF, trigger follow-up automations, sync contact data. Events fired: estimate.created, estimate.viewed, estimate.downloaded, estimate.signed_requested, estimate.deposit_requested.
💳 Stripe — Deposit Capture
OFF
Generates a Stripe Checkout link for the 50% deposit. Customer clicks "Pay Deposit" on the estimate and pays via credit card or ACH. Note: Requires a small backend (Cloudflare Worker, Supabase Edge Function, etc.) to mint Checkout Sessions — never put a secret key in this file. The Public Key field below is for the eventual frontend wire-up.
✍ E-Sign — Customer Signature
OFF
Submits the estimate PDF to DocuSign / HelloSign / Dropbox Sign for customer signature. Pre-fills signature fields on Terms page and Use & Care page. Note: Like Stripe, this needs a backend endpoint to call your e-sign provider — never expose API keys in browser code.
📊 Analytics Hook
Every estimate event is also broadcast as window.dispatchEvent(new CustomEvent('gfp.event', {detail: {...}})). Pipe it to GA4, Segment, Mixpanel, PostHog, or a Google Sheet without touching this file. Useful events: estimate.created, estimate.viewed, estimate.downloaded, estimate.deleted.
No config needed — events fire by default. Listen in your analytics shim or browser DevTools console.