The Challenge
The client operated a growing roofing contracting business across multiple crews and service territories, but their operations ran on five disconnected tools — spreadsheets for estimates, group texts for crew scheduling, a separate invoicing app, manual photo collection, and paper-based insurance scope sheets. Every job required a rep to re-key the same information across multiple systems, and there was no single place to track a lead from first contact through to a paid invoice.
The insurance workflow was the most acute pain point. Adjusters send scope sheets in Xactimate or PDF format containing dozens of line items — RCV totals, ACV calculations, depreciation holdbacks, O&P percentages, and trade breakdowns. Estimators were manually re-keying these documents into their quoting tool, introducing errors and costing hours per job. For a company closing 15–20 insurance jobs per month, this was a significant operational drag.
At the same time, field crews had no structured way to document job-site conditions. Photos were texted from personal phones, checklists were verbal, and customer sign-offs happened on paper that could be lost before it reached the office. The absence of a structured field documentation layer created disputes and complicated supplement claims with insurance carriers.
The client needed a platform built specifically for roofing — not a horizontal CRM adapted to it — that could handle the full lifecycle from inbound lead to closed invoice, with AI handling the document-heavy middle layer that consumed the most manual effort.
The Solution
We designed and built RoofOps: a cloud-native, multi-tenant SaaS CRM and operations platform purpose-built for roofing contractors and architected to expand to adjacent trades — HVAC, solar, restoration, and plumbing — through configuration rather than a second codebase.
The platform delivers the complete operational lifecycle in three phases. Phase 1 established the core platform: a full CRM covering leads, prospects, and customers with territory-based routing and auto-assignment rules; a multi-section estimating engine with live margin calculation, e-signature capture, and SMS-based quote approval; crew scheduling with conflict detection; a dispatch board with real-time status tracking; progress billing and collections; and a React Native field app with offline-first sync, GPS check-in/out, photo capture, completion checklists, and customer sign-off.
Phase 2 connected the platform to the external systems roofing companies depend on: QuickBooks Online bi-directional sync for customers, invoices, and payments; a Stripe payment gateway for online card and ACH collection; vendor pricing API integration for real-time material cost lookup; and a workflow automation engine that codifies repeatable processes — lead received through to invoiced — as configurable trigger-based rules.
Phase 3 delivered the AI intelligence layer that directly addressed the insurance documentation bottleneck. A vision AI pipeline analyzes job-site damage photos and classifies damage types — hail, wind, granule loss, flashing failure, ponding — with per-photo confidence scores and annotated output. A document ingestion engine reads Xactimate and insurance PDF scope sheets via OCR, extracts structured line items, ACV/RCV totals, depreciation, O&P, and trade breakdowns, and reconciles the insurance scope against field-documented damage into a single unified estimate scope. The result pre-populates the estimate editor with a one-click action — eliminating manual re-entry entirely. Every AI output passes through a human-in-the-loop review queue before it touches live records.
The platform runs in the client’s own AWS account under a fully isolated multi-tenant architecture. The client owns the source code, cloud infrastructure, and data from day one, with no vendor lock-in.
Development & Implementation
- Designed a multi-tenant data model with row-level isolation, three-level tenant hierarchy (tenant → subsidiary → branch), and automated cross-tenant isolation testing
- Implemented RBAC with seven built-in roles, custom permission-set builder, and branch-scoped role assignment
- Engineered an offline-first Flutter field app with a local sync queue, conflict resolution, GPS-stamped photo capture, structured completion checklists, and e-signature capture
- Built a vision AI pipeline for roofing damage classification using hosted vision models with human-in-the-loop confirmation and feedback capture for ongoing fine-tuning