Skip to content
All work
ConduitElectrical contractingJune 14, 2026

The invoice that writes itself out of work already recorded

Job costing and invoicing for an electrical contractor. Quotes become jobs, the crew logs hours against them, supplier bills get allocated to them, and the invoice assembles itself from whatever has not been billed yet. Built for British Columbia, down to the tax rule most software gets wrong.

Visit the working demo
QR code linking to https://conduit.digicoyote.com

Scan to open it on your phone, then Add to Home Screen.

Assembled
Invoice
From unbilled hours and bills, once
Three
Billing models
Cost plus, fixed price, T&M with a cap
Per province
Tax
BC real-property rule by default
Demo
Status
Fictional company, real money logic

The challenge

An electrical contractor bills the same work three times over before it reaches an invoice. Hours arrive on paper or by text. Supplier bills arrive by email and get matched to jobs from memory. Somebody then retypes all of it into an invoice, applies a markup, and hopes nothing was missed and nothing was billed twice.

Both failure modes cost money and only one of them is visible. Billing twice produces an argument. Missing an hour produces nothing at all - the work is simply given away, quietly, and nobody ever finds out.

The tax is worse, because getting it wrong is the kind of mistake that surfaces years later. A contractor improving real property in British Columbia is treated as the end user of the materials: they pay PST to the supplier, build it into the price, and charge the customer GST only. Most generic invoicing software has no concept of this and will happily add PST that should not be there.

What we did

The invoice is not a document somebody writes. It is a query over work already recorded.

Everything hangs off the job. A quote is built from a price book rather than typed out, and accepting it opens a job carrying the price across. Hours are logged against that job from a phone - the sparky picks a job, enters hours, and says what they did. Supplier bills are allocated to it. Permits carry their fee. Then "create invoice" pulls every unbilled hour and every unbilled bill, applies the right rate and markup, and marks the source rows as claimed. Claimed rows cannot be pulled twice, and anything unclaimed is still visibly waiting, which is what turns the dashboard into a list of money not yet asked for.

The price book is where the margin lives. An assembly is priced from its parts - labour hours times your charge-out rate, plus material at your markup - so changing the rate re-prices every future quote. Because assemblies carry hours, quoted hours and actual hours are the same unit and can be compared without anyone doing arithmetic. Prices go stale, so the book records when each item was last reviewed and flags anything older than four months.

Rates resolve down a chain rather than being entered per line: job override, then customer default, then the person's own rate, then the company default. Four places to set a rate, one place to look when it comes out wrong.

Tax follows the province, with the British Columbia real-property rule as the default and a per-invoice switch for a straight sale of goods. The rates are stamped onto each invoice when it is raised, so changing a rate next year never quietly restates an invoice already sent.

And the evidence travels with the work. The crew photograph the job from their phone, images are resized in the browser before upload, and a photo flagged for the customer appears in a captioned appendix on the invoice PDF - which is what ends an argument about hours rather than prolonging it.

The outcome

The dashboard opens on the only two questions that matter: what has been done and not billed, and who owes money. Unbilled work in progress, jobs ready to invoice, overdue invoices, and permits about to expire or with no inspection booked.

Jobs bill three ways - cost plus, fixed price, and time and materials with a not-to-exceed cap that warns as it approaches. Extras have to be approved before they are billable, and the job says so while they are sitting unapproved, because an unapproved extra is the most common way a contractor works for nothing.

Being straight about what this is: the company in it is fictional and the data is seeded. It is a working system rather than a deployment - built to be shown, argued with, and then fitted to a real contractor's way of working. The tax handling and the money flow are real, and they are the parts worth arguing about first.

Ready to build something that lasts?

Tell us what you are trying to ship. We will tell you how we would approach it - scope, stack, and timeline - before you commit to anything.