Skip to content

Replacing a field-service system without retraining the crew

Leads, quotes, jobs, scheduling, timesheets, purchasing, a client portal and an installable phone app, built to mirror the field-service system the crew already knew, with its six-year history imported and every quote total checked against the old system.

An Australian electrical and building-services contractorClient engagement2026On the client's live database, rolling out to staff
quotes imported, every total checked against the old system
~2,850
one platform, one phone app
4 trades
audit of the old screens, treated as the build's authority
1

The problem

The business ran on a hosted field-service product for quotes, jobs, scheduling and timesheets. It worked, but it was a closed shop: no sales pipeline, no estimating help, no way to hand a customer a portal, and every extra the owner wanted was a support ticket.

A rebuild fails on the people, not the code. Roughly six staff use it all day, in vans and on site, and any screen that moves a field or renames a button costs the crew time and trust. Six years of quotes and timesheets also had to come across, because a job from 2021 is still the best guide to pricing the same job today.

The work spans four trades (air conditioning, audio visual and digital signage, security, electrical) with different checklists, certificates and compliance, and it all has to work one-handed on a phone with patchy signal.

What we built

01

Copy the old screens, then improve on top

The first job was an audit: every screen, label, field order and status of the old system captured in a document the build treats as the authority. Where the audit and the developer's taste disagree, the audit wins. Labels such as Tasks for jobs and Locations for sites are settings rather than code, and status text is read from a table, so a raw database value is never shown. New abilities (a sales pipeline, estimating, a portal) arrive as additions to familiar flows, not replacements for them.

02

Rules in the database, not the screens

Every table carries row-level security with office, manager, admin and technician roles; a technician cannot read sales records at all. Money is stored ex-GST and every total is computed by database triggers, so a browser can never send a number the database will believe. Changes to business records are logged to an audit table with who and when, records are archived rather than deleted, and a sales lead cannot move to the next stage until the fields that stage requires are filled in, with the database naming what is missing.

03

History in, reconciled, and re-checkable

A read-only importer pulled clients, sites, contacts, tasks, quotes with their lines and timesheets from the old system's API, riding out its rate limits and page-size limits. A dry run measured the load before anything was written: The new platform's total calculation matched the old system's on all of about 2,850 quotes, 2,638 of them exactly and the rest within a dollar of rounding. Staff can also scan the old system from Settings at any time, see what is new, changed or gone, and import the difference with one click, so the two can run side by side during the move.

04

A phone app that survives bad signal

Technicians get an installable app with today's jobs, the job card, photos, notes and a clock on and off that records location. Clock events, notes and photos go into an outbox on the phone and sync when the signal returns, and tap targets are sized for one-handed use on a 375-pixel screen. Office staff install a separate office app, so neither group wades through the other's menus.

05

One chat per job, with the photos in the right place

The crew already coordinated over group chats, so the platform has a messenger of its own: one conversation per job with the people booked on it and the office, a general chat per client, and direct messages. A photo sent into a job chat lands in that job's documents, and a message can be filed straight into the job notes.

06

The estimator, inside the same platform

The estimating assistant described in our separate case study is part of the platform: past proposals become a searchable library, and a plain-English brief becomes a draft in which the model names the parts and code sets every price. All model calls go through one layer that switches between providers, logs each run with its cost and enforces per-user and daily limits.

07

Trade paperwork and a portal for the customer

Checklists, safe-work method statements and service reports are signed on the phone and produce PDFs; a refrigerant log supports the licensing record that air-conditioning work requires; site surveys run offline; and a design studio places equipment, pipe and cable runs on a satellite map or floor plan. Each client gets one link to a portal showing their jobs, quotes (with online acceptance), reports, certificates and designs awaiting approval, and a way to report a fault.

The outcome

  • A working platform on the client's live database, used by the team while it is rolled out, with the former system's history imported and checkable at any time.

  • More than a hundred tables and 112 migrations, each reviewed and applied in order, with database-level permission tests alongside the unit tests. The platform deploys as a single Next.js app on Vercel and Supabase in Sydney, with no app-store listing to maintain.

  • Honest limits: the accounting hand-off to the client's ledger is built but waits on the client's keys, and the WhatsApp bridge waits on a business number. Stock and inventory, bill-of-materials kits and plan markup are deliberately not built yet.

Built with

  • Next.js
  • TypeScript
  • Supabase
  • PostgreSQL
  • Row-level security
  • Claude
  • Vercel
  • PWA

Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy

Start here

Have something shaped like this?

If any part of the above resembles a problem you are living with, a short call is the fastest way to find out whether it is the same problem underneath.

Book a 15-minute callsaveez@skofi.tech

What happens on the call

  • 15 minutes, no deck
  • We map the process on the call
  • A written scope, or an honest no
WhatsAppBook a call