CRM App · Construction · HubSpot2026

Pool proposals, signed and synced

Reps priced pools in one tool, then retyped everything into HubSpot. The new app lets the client pick upgrades and sign on screen, and builds the HubSpot deal on accept.

5

records and files created on accept: contact, deal, line items, PDF, Excel

Client
Zuniga Pool Construction
Year
2026
Type
CRM App · Construction · HubSpot

What was the problem?

Zuniga's reps priced each pool in one tool, then retyped the proposal into HubSpot as a contact, a deal and line items. Every signed proposal meant entering the same job twice.

What did I build?

  1. Pricing builder
  2. Choose and sign
  3. Create HubSpot records
  4. Retries and catalog admin
  1. 1A rep pricing builder that prices a pool from Zuniga's catalog, with a client presentation view.
  2. 2Upgrades chosen and the proposal signed on screen.
  3. 3On accept, the app creates the HubSpot contact, deal and line items, and attaches a branded PDF and the filled-in Excel workbook.
  4. 4Automatic retries for the HubSpot sync, and an admin screen for the catalog.

What was the result?

  • Pricing, presentation and signature happen in one flow.
  • On accept, the deal, line items and documents are created in HubSpot automatically.
  • The catalog lives in the app, so every rep prices from the same list.

What is it built with?

  • Python
  • FastAPI
  • SQLite
  • Gotenberg
  • openpyxl
  • HubSpot API
  • Docker
  • crm app
  • proposals
  • hubspot
  • construction

Have a similar problem? Let’s scope it.