Custom Quote System with HubSpot CRM Integration for Blast Away Guys
Blast Away Guys needed an automated quote generation system with HubSpot CRM integration. The challenge was handling three service types: mandatory services, conditional upsells with dependencies (like Roof Treatment requiring Single or Dual selection), and flexible add-ons.
I built a Node.js backend API and custom HubSpot CMS theme. The backend bridges the quote interface and HubSpot's CRM, handling product data extraction, caching, and quote acceptance workflow. Custom JavaScript enforces business rules for service categories with real-time price calculation.
The mobile-responsive design enables tablet-based client consultations. Upon acceptance, the system posts data to the backend API, creates records in custom HubSpot objects, and updates the CRM profile, providing complete visibility into customer preferences and purchase intent.
Desktop Quote Interface: The desktop layout displays client information, categorized service tables, and a comprehensive pricing summary. The design incorporates clear visual hierarchy to separate mandatory services from optional upsells, making it easy for customers to understand their base package versus additional options. The interface maintains Blast Away Guys' branding while guiding customers through the quote in a logical flow from included services to potential add-ons.
Mobile-Responsive Design: Mobile-optimized interface for sales presentations. Tables are simplified with the removal of quantity and unit price columns to give the quote a simpler and more linear appearance on mobile screens.
Services Table (Mandatory Line Items): The Services table contains mandatory items that every quote must include. All checkboxes are pre-selected and disabled, visually communicating to customers that these core services are non-negotiable and included in the base price. Each line item displays service description, quantity, unit price, and line total, ensuring transparent pricing for the foundation of the service package.
Roof Treatment Table (Conditional Logic): This demonstrates the conditional selection logic where Roof Treatment is an optional upsell that requires customers to choose either Single or Dual treatment if selected. The base Roof Treatment line item is priced at $0, with actual costs coming from the treatment type selection. The system enforces dependencies through validation logic—preventing customers from selecting Roof Treatment without choosing a type, and vice versa—while providing clear visual feedback to guide valid selections.
Upsells/Add-ons Table (Optional Services): The Upsells table shows optional add-on services that the sales team manually adds to quotes based on customer needs. All items are unselected by default, giving customers complete freedom to choose any combination without restrictions. Each upsell includes detailed descriptions to help customers understand the service benefits, with clear pricing displayed for easy cost comparison before making selections.
Live Price Calculation Engine: The real-time price calculation updates instantly as customers make selections without requiring page refreshes. Every checkbox change triggers immediate recalculation of the subtotal, applies 15% GST, and displays the new total within milliseconds. The calculation engine handles complex scenarios like Roof Treatment dependencies, ensuring prices only reflect valid selections and giving customers instant feedback on how their choices affect the final price.
Quote Acceptance and CRM Integration: After reviewing services and accepting terms and conditions, customers submit their selections to initiate the backend workflow. The system captures all selected line items and acceptance timestamp, then makes API calls to the Node.js backend. This creates an Accepted Quote record in HubSpot's custom objects, generates Selected Products records for each line item, establishes associations, and updates the customer's CRM profile,completing the entire process in seconds while providing instant confirmation and eliminating manual data entry for the sales team.