One copy of the rules
Retainer day, included hours, prepaid spent oldest first, overage rate, tax and currency per customer, covered by tests.
Consulting billing is a small ERP: contracts with retainers, prepaid hours spent oldest first, overage at a contract rate, tax and currency per customer, credit notes, late fees and statements. We built it once, tested it, and run our own practice on it.
The problem is familiar to any business that bills time against agreements: a monthly retainer with included hours, prepaid blocks bought ahead, overage at a contract rate, and customers in different currencies with different tax. Done in a spreadsheet, it drifts. Done in a package, it never quite fits.
We wrote the rules once, in one place, and covered them with unit tests. Everything else reads from those rules: the invoice draft, the statement, the portal balance and the reminder emails.
What we built
Retainer day, included hours, prepaid spent oldest first, overage rate, tax and currency per customer, covered by tests.
Drafted automatically for contracts that opt in, locked when sent, with credit notes and late fees handled.
New-invoice notices, three overdue reminders, monthly statements and low-hours alerts, sent by a job that never emails twice.
Card and US bank through Stripe or Square; a saved card is charged when an invoice is sent.
A client approves the hours or asks a question on any line while the invoice is a draft.
Drafted and sent by staff, accepted or declined by the client with a note, in the portal.
How it came together
The billing math as a library with tests, before any screen existed.
Draft, add work and expenses, lock and send, record payments.
Overview, invoices, pay, autopay, approve, quotes, prepaid hours, requests.
Drafting, notices and autopay as background jobs with a single leader so nothing runs twice.
Why it matters to you
Because it is the same problem shape: agreements, activity against them, invoices, payments and the exceptions between. The engine, the portal and the payment stack are what your dealer portal or 3PL billing is built from.
Every invoice we send and every payment we receive goes through it, which is the strongest test a system gets.
The client-portal page shows what a client sees. After the first quote you get your own login to it.
Thirty minutes, no obligation. We reply within one business day.