Jobsite photos with an explicit destination

Two taps to file a jobsite photo against the right job and stage, with two visibly different buttons for 'save to job' and 'save and send to customer'.

What it is

The crew portal offers a camera path and a library path, previews the shot with the job and stage it will attach to, and then requires the person to press one of two differently-coloured, differently-worded buttons. Project, stage, attribution and coordinates are all derived server-side.

Also called: send photo to customer · progress photos · crew photo upload · site pictures

See it
Jobsite photos with an explicit destination
🔒ridgelinepostframe.com/project/crew-j491
Riding Arena
Framing · on schedule
The confirm screen: 'Attaching to Hilltop Barn · Framing', the photo preview, a black 'Save to job' button and a red 'Save + send to customer' button. Sample data — no customer information appears here.
How it works
  1. 1Two separate hidden file inputs — one with capture=environment to force live capture, one without to open the picker.
  2. 2preparePhoto runs on both paths before upload.
  3. 3The confirm screen names the project and stage the photo will land on.
  4. 4POST /api/crew-portal/photo requires destination to be exactly 'job' or 'customer'; anything else is rejected.
  5. 5The file goes to the Supabase portal-media bucket and a stage_photos row records url, caption, taken_by, taken_by_name, taken_at, lat/lng and visibility internal|customer.
Why we built it

A photo of a mess on site and a photo of finished work look identical in an upload queue, and sending the wrong one to a customer is not recoverable. There is no default destination and no toggle: the crew names the destination — internal or customer-facing — and anything that fails to say is rejected rather than assumed. Two labelled buttons instead of a switch, because a toggle has a state you can misread in sunlight and two buttons have no state at all. Photos are stored on the builder's own file storage, so the screen works the same way for every company whatever else they run.

The problem
  • Progress photos lost in personal message threads.
  • Accidental customer-facing sends with no way to unsend.
  • Photos with no job, stage, author or date attached.
Sound familiar?
What you get
Every photo is filed against the right job and stage with no typing.
Sending to a customer is a deliberate, visibly different act.
Full attribution for the audit trail at zero cost to the person in the field.
What's inside

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 →