Customer invoice page (no password)

Every invoice has an unguessable link that opens a branded, printable, payable page — no account, no password.

What it is

A public page at /invoice/{portal_token} rendering the same branded document the builder approved, with payments received listed, payment instructions, a Print/Save PDF button and — when the business has a card processor connected — a Pay button. Opening it stamps viewed_at on the invoice.

Also called: customer portal invoice · invoice link · view invoice online · pay link

See it, piece by piece
01

Your customer opens the bill in one tap, with no account to make

Every invoice has its own link that opens a branded page carrying the document, the payments received against it, your payment instructions, and a Pay button when you have a processor connected. There is no login, because a customer who has to create an account to look at a bill is a customer who pays later. It is also not a PDF attachment to be lost in an email thread.

04

The same page prints as a clean PDF

The customer's page renders the same branded layout as the copy you approved, and print or save-as-PDF strips the surrounding chrome so the output matches whichever screen it was opened from. A link on the end opens straight into the print dialog, for the copy that has to go into a file or across to a lender.

How it works
  1. 1The token is 24 cryptographically-random bytes (48 hex chars) generated with crypto.getRandomValues at invoice creation.
  2. 2The page fetches /api/client-portal/invoice?token=… which returns the invoice, line items, payments, branding, and whether payments are enabled.
  3. 3?embed=1 renders it inside the portal dashboard's modal and opens Stripe in a new tab, because Stripe refuses to load in a frame.
  4. 4?print=1 fires the print dialog on load.
Why we built it

Customers will not create an account to look at a bill, and a password reset loop is how an invoice goes unpaid for a fortnight. The invoice opens from a link instead — which means that link is the only thing between a stranger and the customer's amounts, line items and payment details, so it is generated the way a credential is generated rather than from a clock reading. The customer's page draws the same branded layout as the office copy, so printing it produces the same document.

The problem
  • Login friction stopping customers viewing or paying a bill.
  • PDF attachments lost in email threads.
  • No read receipt on a sent invoice.
Sound familiar?
What you get
A customer opens the bill in one tap from a text message.
The builder sees exactly when it was opened.
The same page prints as a clean PDF.

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 →