Subs submit expenses with a receipt photo

An expense tab captures amount, category, vendor and a photographed receipt, uploaded into the builder's own storage namespace.

What it is

A form with amount, a category from materials, fuel, tools, rental, permits, meals and other, an optional vendor, an optional receipt photo and a note. The upload is authorised by the portal token, so a sub can only ever write into their own org's namespace.

Also called: receipt upload · material expense · fuel and rental costs

See it
Subs submit expenses with a receipt photo
Prepared for
Gideon Alt
1140 Ridge Line Rd · Fair Play
Shell package$26,331
Concrete & site$7,645
Doors & windows$5,096
Trim & finish$3,398
Total
$42,470
Signature
The expense tab with a category select and a thumbnail of the uploaded receipt. src/app/sub/[token]/page.tsx. Sample data — no customer information appears here.
How it works
  1. 1The receipt uploader posts the file with the portal token to /api/sub-portal/upload
  2. 2The org is resolved from the token, never from the request body
  3. 3The returned public URL is attached to the expense submitted through the log endpoint
  4. 4Submissions appear in the recent list with a submitted, approved or rejected pill
Why we built it

Receipts arrive as photographs in a text message and never make it into job costing, so the material spend on a job is whatever somebody remembered to forward. Subs submit an expense with the receipt photo attached, categorised and tied to a stage. The builder's account is resolved from the link itself rather than anything the page sends, so a sub can only ever file against their own crew.

The problem
  • Receipts detached from the job and the stage they belong to
  • Expense capture requiring an app login
Sound familiar?
What you get
Receipts land attached to a project, stage and category
The sub photographs it once and the builder approves it

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 →