← All posts
Launch

Invoicing Where the Work Lives: Create Invoices Directly from a Job

You shouldn't have to leave a job to bill for it. You can now start an invoice tied to a job straight from the job detail page — keeping the work and the money in one place.

Every job is, eventually, an invoice. That's the whole point. So it always felt strange that the two lived on opposite ends of the app: you'd finish triaging a job, pivot to the invoicing module, re-select the customer, re-key the line items, and hope you didn't miss anything. The context you'd just built up evaporated the moment you switched tabs.

We're fixing that. You can now create an invoice directly from a job's detail page Create an Invoice from a Job.

Why we built it

The job detail page is where the truth lives. It's where the customer, the scope, the notes, and the status all converge. By the time you're ready to bill, you've already done the work of figuring out what to bill for — you just need somewhere to write it down.

Forcing a context switch at that moment was costing our users in two ways. First, in time: re-selecting a customer and re-establishing context is pure overhead. Second, in accuracy: every hop between screens is a chance to invoice the wrong customer, miss a line item, or forget to link the invoice back to the job it came from. Decoupling invoices from jobs meant reporting was lossy too — answering "how much did we bill against this job?" required manual bookkeeping.

Keeping the invoice tied to the originating job from the moment of creation removes all of that. The link isn't something you remember to add later; it's a property of how the invoice was born.

What it unlocks

The immediate win is fewer clicks and cleaner data. But the more interesting consequence is that a job now has a coherent financial timeline attached to it. Quotes, jobs, and invoices stop being three disconnected ledgers and start behaving like one continuous record of a customer engagement.

That opens the door to questions we couldn't easily answer before: which jobs are billed but not paid? Which are completed but not yet invoiced? Which job types consistently get invoiced for more — or less — than they were quoted? None of that requires new data entry from you. It just requires that the link between a job and its invoice exist by default, which is now the case Create an Invoice from a Job.

It's also a nicer experience for the person doing the billing. You stay on the page you were already on. The dialog opens, you confirm the details, you're done. No tab-hopping, no copy-pasting a job reference into a notes field so future-you remembers what this invoice was for.

What's next

This is the first step in stitching the job lifecycle and the billing lifecycle into a single, continuous flow. Next up: pulling job line items and quoted amounts into the invoice automatically, and surfacing invoice status back on the job detail page so the round trip is visible from either side. If you've got opinions on what that should look like, we'd love to hear them.

References

Source MDX: generated:jobs_create_invoice_from_job