photo
on-device watermark, required-shot list, photo grid.
▸ produces · evidence(photo)
— primitives
your dispatcher invented your workflow. your senior tech corrected it. it lives in a binder, a checklist, and someone's head. we gave it 35 step-type primitives — every one a 1:1 with a move you already make on a job.
the field is talking back.
on-device watermark, required-shot list, photo grid.
▸ produces · evidence(photo)
clip with caption. compressed on-device.
▸ produces · evidence(video)
typed fields with conditional logic. validation.
▸ produces · job_values(form)
drawn signature. on-device pdf.
▸ produces · evidence(sig)
barcode + qr scanner (one-shot or list).
▸ produces · job_values(scan)
dedicated qr capture.
▸ produces · job_values(scan)
typed measurement with units, tolerance flag.
▸ produces · job_values(meas)
drop a pin. captured gps + accuracy.
▸ produces · job_values(geo)
many pins on one map. surveys, walks.
▸ produces · job_values(geo[])
shows a pdf or manual in flow.
▸ produces · audit_log(view)
the workflow forks.
one-of-many. drives branches.
▸ produces · job_values(sel)
many-of-many. drives branches.
▸ produces · job_values(sel[])
yes / no. drives branches.
▸ produces · job_values(bool)
1–n scale. drives flags.
▸ produces · job_values(rating)
"is this the right site?" geo + manual.
▸ produces · job_values(check)
geofence the job. flags out-of-bounds.
▸ produces · job_values(geo)
elapsed-time clock per step.
▸ produces · audit_log(timer)
inline guidance, no input.
quote to contract, in the workflow.
capture contact + consent.
▸ produces · job_values(lead)
configurator + option spaces + recipes.
▸ produces · job_values(quote)
margin guard + manager approval gate.
▸ produces · audit_log(approval)
branded pdf render of the quote.
▸ produces · evidence(pdf)
signature on the quote.
▸ produces · evidence(sig)
invoice generation. tax + terms.
▸ produces · evidence(pdf)
contract on file. terms accepted.
▸ produces · evidence(pdf)
stripe payment sheet / tap-to-pay (ios).
▸ produces · audit_log(payment)
terms-of-service acceptance gate.
▸ produces · audit_log(terms)
the shape of the run.
visual divider between phases of a job.
"i confirm i did this" gate.
▸ produces · audit_log(ack)
hand off to the maps app. captures eta.
▸ produces · audit_log(nav)
choose from the customer roster on device.
▸ produces · job_values(customer)
choose from the asset roster on device.
▸ produces · job_values(asset)
freeform operator note. timestamped.
▸ produces · job_values(text)
numeric input. range + tolerance.
▸ produces · job_values(num)
scheduled or captured timestamp.
▸ produces · job_values(ts)
branches and repeaters are not primitives — they are control flow on top of the primitives above. nest any step inside a branch or a repeater. the workflow body is a tree.