A collapsible dashboard card headed with the outstanding total or All paid in full. Unpaid rows sort by due date and carry an overdue state computed from the due date. Paid and void invoices fold into a single toggle that names the count. Rows open the full invoice document in place. Draft invoices never appear.
Also called: what do I owe · my invoices · outstanding balance · paid receipts
The one live question is answered before they scroll
The card heads with the outstanding total, or with All paid in full when there is nothing owing. On a job billed six times, five settled invoices used to push the single outstanding bill down the list and bury the only thing the customer opened the page to find out. Unpaid rows lead; a customer who is square with you is told so instead of being handed a list to audit.
Oldest due first, and overdue says overdue
Unpaid invoices sort by due date so the one to pay next is the one at the top, and a bill past its date carries an overdue marker worked out from the date itself rather than from a status somebody remembered to change. Chasing a draw is a phone call; a customer who can see which one is late often does not need the call.
Paid invoices fold away but stay one tap from the page
Settled invoices collapse behind a toggle that says how many are back there. Folded never means gone: a paid invoice is the customer's receipt and it is what they come back for at tax time, or what a lender asks for mid-build. Hiding history to tidy a page is how a builder ends up emailing PDFs from eight months ago.
A half-written invoice cannot appear on their page
Drafts are excluded before the list ever leaves the server, and an invoice you deleted is gone from the customer's view as well. Of every surface that has to honour a deletion, this is the one where getting it wrong is visible to the person who was billed — and a customer who sees a number you were still working on will treat it as a bill.
- 1GET /api/client-portal/invoices resolves the link to its project and returns customer-safe columns
- 2Draft invoices are excluded server-side so admin work in progress never leaks
- 3Unpaid rows sort oldest-due first; settled rows sort the other way behind the toggle
- 4Overdue is derived by comparing the due date to now
- 5A row opens /invoice/{portal_token}?embed=1 inside a modal
On a job billed six times, five settled invoices pushed the one outstanding bill down the list and buried the answer to the only question the customer had. Unpaid invoices sort to the top and paid ones fold into a group that stays one tap away. Folded never means dropped: a paid invoice is the customer's receipt, and it is the thing they come back for at tax time.
- Outstanding bills buried under settled history
- Receipts becoming unreachable once paid
- Draft invoices leaking to a customer surface
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →