Case study · Proof: outcome

Legacy Roofing: the CRM, and the bottleneck it revealed

The outcome. Legacy Roofing and Exteriors is a two-person company. The owner runs production almost single-handed, with his partner alongside. They were paying about $835 a month for two CRM tools that didn't talk to each other, and still didn't have what they wanted. I built one custom system that replaces both and runs for about $40 a month: a full estimate-to-payment lifecycle with customer-facing portals, digital signatures, change orders, invoicing, and payment tracking, plus a 1,550-item materials database I OCR'd out of supplier price lists feeding an estimate engine that handles waste and margin math on its own. Roughly 10 hours of AI-assisted work for the initial production build across 20 sprints and 35 sub-sprints, 900+ automated tests, deployed live on Azure with real data in it. Then I hit the harder problem, and it changed the entire engagement.

Job pipeline board: every job on a card, moving left to right through the production stages. Lead pipeline with source tracking, showing where each lead came from.

How I thought about it

What was actually going on. They were running AccuLynx and DripJobs at the same time. AccuLynx had the feature depth, DripJobs had the interface his partner actually liked. Neither tool gave them both, so they paid for two and lived with data sitting in silos between them. The monthly cost was out of proportion to the value they were using.

What I decided, and what I ruled out. The cheap move was to consolidate onto one of the two and drop the other. I ruled that out because it forced a bad trade every time: keep AccuLynx and lose the interface they preferred, keep DripJobs and lose the depth. A custom build let them keep both, unified, at a fraction of the cost. For hosting I chose Azure with managed PostgreSQL over cheaper unmanaged options, because this is a client's live business data and automated backups and failover matter more than saving a few dollars a month. One more call I'd defend: any automation I add stays back-office. A robotic voice talking to customers the owner knows personally in a small town would cost him more than a missed call ever would, so the AI works behind the scenes, not in front of his people.

The decision that mattered most came after the build. The owner went quiet. Instead of pushing the migration harder, I sat with why he wasn't responding and concluded the ask itself was wrong for the moment. Moving a business onto new software and then learning it is a heavy lift for a two-person shop in peak season that's still forming its own processes. He confirmed it on the next call. He told me he almost didn't pick up because his phone doesn't stop ringing. So I stopped selling the switch and reframed the work around giving him time back, starting with a hands-free voice intake he can call while driving to answer a structured set of diagnostic questions. That lets me find the real constraint without asking him to sit still for it.

Where this could break

The honest limits. He hasn't adopted the system into daily operations yet, so there's no day-to-day production usage to point to. That's a capacity problem, not a code problem: the automated morning briefing ran against his live pipeline and did exactly what it should, and I switched it off because a daily briefing only earns its place once somebody is working in the system every day. He runs production almost single-handed, so the week he'd need to stop and move his operation into a new tool is the same week he's short a man on a roof. Adoption in a two-person company competes with the work that pays this month, and the work that pays this month wins. The diagnostic loop stays open until he calls the intake line. It's a single-client build, so it hasn't been proven to generalize. Hover measurement integration is deferred, not delivered.

What changed

One system instead of two, at roughly five percent of the monthly cost, deployed and waiting with his real data in it. And the engagement itself changed shape, from "replace your software" to "find where your time is going and take some of it back," which is the thing he actually needs.

Materials library: 1,550 items imported from supplier price sheets by OCR. Invoicing view with payment tracking across the estimate-to-paid lifecycle. Customer portal with an e-signature step for approving an estimate.

What I'd do next

If I ran this again, I'd audit the operation before building anything. He already had a working setup, and the highest-value move was finding the real constraint first, not shipping software into a business that had no room to receive it.

Rather ask than read? The agent answers from this piece and the other case studies, and it says so when the answer is not in them.

Tell me what you’re dealing with.

You don’t have to take a meeting to find out if I can help. Send a note about where your company’s knowledge gets stuck, and I’ll tell you what I see and whether I think I’m the right fit. If you’re a one-person shop and all the knowledge is yours, you don’t need this yet, come back when you’re hiring.

Tell me what you’re dealing with

A few quick questions so I understand your situation before I reply. No meeting required, and I read these myself.

Would you rather I reply in writing, or set up a short call?