Sample projectSample project — a concept I built to show how this kind of system works. Not a client job.
A CRM for a heating and plumbing crew
Hollis Mechanical (fictional), 12 people: owner, two office staff, nine techs.
The kind of business, and the mess
Hollis is the sort of company that's busy enough to be disorganised. Leads come into a shared inbox and a voicemail box. Jobs live on a whiteboard in the office, which is great until someone wipes it. Quotes are Word documents saved as "Quote FINAL v3". Maintenance-plan customers are meant to get a reminder each spring and autumn; some do.
Nobody's doing anything wrong. There's just nowhere for the information to live.
What the system does
- A pipeline board from new lead to paid, with the money in each column added up
- Customer records with full service history: every visit, quote, photo and invoice
- A quote builder with standard line items and a branded PDF
- A day-schedule view for each tech that works on a phone
- Maintenance-plan renewal reminders, sent on time without anyone remembering to
- An invoice sync to QuickBooks Online when a job is marked done
Stack, and why
Laravel and MySQL for the core, React for the board and the schedule because they're the interactive parts, and the QuickBooks Online API for invoices. Hosted on a small server in Hollis's name. The office could hire any PHP developer to maintain it later.
What a build like this would typically cost
$22,000–$32,000 · 10–14 weeks after discovery
A sample band for a build like this, not a quote for yours. It would start with the $1,500 discovery sprint.
What would move the price
More than one accounting system. Offline use for techs in basements with no signal. Migrating years of jobs from an old system instead of one spreadsheet. A customer-facing booking page on top.
Screens
- Oct 06 09:12Call logged · Asked about rooftop unit noise
- Oct 06 11:40Quote #Q-1042 sent · $2,840
- Oct 03 15:05Photo added · RTU-2 nameplate
- Sep 18 08:30Job scheduled · Spring filter change
- Sep 02 16:22Invoice #4471 paid · $385
- Sep 02 14:10Invoice #4471 sent · $385
- RTU-2 compressor diagnosis
- Quarterly filter change