Invoicing
Generating invoices from engagements and tracking payments.
Invoicing
The invoicing system turns completed work into bills. Invoices are generated from engagements, tracked through to payment, and reflected in the financial dashboard.
Creating an invoice
From Invoices in the sidebar, click New invoice.
Fill in:
- Client — who to bill
- Engagement — which engagement this covers (optional but recommended)
- Invoice number — auto-suggested, editable
- Issue date — usually today
- Due date — typically 30 days out
Save. The invoice is created in status Draft.
Line items
Every invoice has one or more line items. Each line item is:
- Description — what you're billing for
- Quantity — number of units (hours, days, fixed items)
- Unit price — in cents, the currency follows the client
Add lines with Add line item. Reorder them with drag or up/down controls.
The integer cents rule
Money is always stored in integer cents. Never floats.
This is a hard rule. Floating-point arithmetic produces artifacts:
0.1 + 0.2 = 0.30000000000000004. For accounting, that's unacceptable.
So $1,250.00 is stored as 125000. Every addition, subtraction, and
multiplication is integer math. The display layer formats it back to a
currency string.
You never see the raw integer — the UI shows formatted currency. But the math is exact.
Tax
Set tax per invoice:
- Tax rate — percentage
- Tax label — "VAT", "GST", "Sales Tax", or whatever applies
The tax is applied to the subtotal. The invoice shows subtotal, tax, and total.
Currency
Currency is set per client. A client billed in EUR gets EUR invoices. A client billed in USD gets USD invoices.
The currency is stored with the invoice — changing the client's currency later doesn't retroactively change existing invoices.
Status workflow
Invoices move through:
- Draft — being prepared, not sent
- Sent — delivered to the client
- Paid — payment received
- Overdue — past the due date, not yet paid
- Cancelled — voided
Overdue is computed automatically — you don't set it. Any invoice past its due date that isn't paid shows as overdue.
Recording payment
When payment arrives, open the invoice and click Record payment.
Enter:
- Amount received
- Date received
- Method (bank transfer, card, other)
- Reference (transaction ID, cheque number)
Save. Status changes to Paid if the full amount was received, or stays Sent with a partial-payment note if it's a partial.
PDF export
Invoices export as PDFs, matching the report export quality. The PDF includes:
- Your company letterhead
- Invoice number, dates, status
- Client billing details
- Line items with totals
- Payment instructions
Download the PDF and send it, or attach it to an email.
Payment instructions
The invoice footer carries your payment instructions — bank details, payment link, or wire instructions. These come from your company settings and appear on every invoice.
The financial dashboard
The Business section in the sidebar shows a financial dashboard:
- Revenue month-to-date — payments received this month
- Revenue year-to-date — payments received this year
- Outstanding invoices — total unpaid
- Overdue invoices — total past due
- Pipeline value — sum of expected values for open engagements
- Effective hourly rate — revenue divided by logged hours
- Expenses — from the infrastructure inventory and cert fees
Everything updates live as you log invoices and payments.
Editing invoices
Draft invoices can be edited freely. Once marked Sent, edit only what needs to change — line items, notes, status.
Changing the amount on a Paid invoice is discouraged. If you need to adjust, cancel the original and issue a new one. The audit trail keeps both.
Cancelling an invoice
To void an invoice, open it and click Cancel. Enter a reason.
Cancelled invoices stay in the list but don't count toward revenue or outstanding totals.
Invoice numbering
Numbers are unique. The system suggests the next number based on the
previous one — 2026-0001, 2026-0002, and so on. You can override the
suggestion, but uniqueness is enforced.
Recurring invoices
The system doesn't currently generate recurring invoices automatically. For retainers, create a new invoice each period from the same engagement.
Where to go next
- Managing clients — billing details
- Your first engagement — the full workflow
- Reference: CLI — scripted invoice generation