U&I Renewables CRM
£580k+ of customer revenue managed through a bespoke CRM.
The problem
U&I Renewables install heat pumps, solar, batteries and cylinders - and ran the whole operation on spreadsheets and mail-merge. Customers sat in one workbook, jobs in another, invoices were assembled by hand, and the business actually bills under three different identities (U&I, UK Cylinders and Telford) that had to be untangled by eye. Website enquiries landed in an inbox and got copied across manually; cashflow was worked out by hand; field engineers rang the office for job details. It all worked when the business was smaller. By the time they had hundreds of customers, it was the bottleneck - and every hand-off was a chance to drop something.
Before and after
| Before | After |
|---|---|
| Customers, jobs and invoices in separate spreadsheets | One system with shared records and live status |
| Invoices built by mail-merge, VAT worked out by hand | Branded per-account-type PDFs, VAT auto-calculated, emailed from the record |
| Three billing identities tangled across workbooks | Account type on every customer, flowing into invoicing, calendar and statements |
| Website enquiries copied from an inbox | Forms feed a drag-and-drop sales pipeline automatically |
| Cashflow worked out manually | Live 12-month forecast with a per-line monthly breakdown |
| Engineers ringing the office for details | Their own role-based view: calendar, jobs, servicing, attachments, holidays |
The build
I built U&I a single, consolidated web app that covers the whole operation. A sales pipeline - fed directly by their website's enquiry forms - where dragging a lead through the stages creates the real quote, job and invoice behind it. Customer profiles that pull together everything linked to a person. Quoting with automatic VAT, and invoicing that knows the difference between a U&I, UK Cylinders and Telford bill - each with its own template, terms, numbering and branded PDF - including part-payment tracking. Purchase orders wired into an expense ledger, a service book that flags work coming due, a multi-engineer calendar that won't let you book someone who's on holiday, a live cashflow forecast, printable statements, staff and holiday management, file attachments on jobs and leads, global search, and an in-app notification bell that lets the team "claim" a follow-up so nobody gets chased twice. Their existing spreadsheets weren't thrown away - they were imported, so the system started life already knowing the business.
The result
The system holds 979 customers, 1,043 jobs and 805 invoices - over £580k of invoiced revenue - plus 274 service records and a 765-line expense ledger, all carried across from U&I's own data. Website enquiries now arrive in the pipeline on their own, and office staff, field engineers and management each get the view their role needs. It's in active development, shaped by the team's feedback as it takes over more of the day-to-day.
The human bit
The job was never to make U&I learn new software - it was to meet them where they already were. The migration carried their real customers, jobs and money across, so day one felt familiar rather than like starting over. And nothing here was specced once and frozen: every change ships to a review system they can open within hours, so the CRM is shaped by their actual feedback - right down to which engineer shows up in which colour on the calendar.
Under the hood
Next.js 16 (App Router, Turbopack), React 19, TypeScript and Tailwind v4 - one consolidated app rather than a separate API, chosen to deploy cleanly on the client's shared host. Prisma 7 on MySQL via a driver adapter. JWT sessions (jose + bcrypt) with role-based middleware gating office, field and admin users. Branded A4 documents render through the browser's own print engine - no headless Chrome needed on the host - and uploaded photos are auto-compressed to WebP. Brevo for transactional email, SheetJS for the Excel import, and a public webhook that ingests enquiries from the marketing site's forms. Runs under PM2 behind LiteSpeed at uni.gairware.com. Status: in active development.
Need something like this?