Skip to content

Job lifecycle

flowchart TD
LEAD[Lead arrives<br/>web form / WhatsApp / SMS] --> INTAKE[Intake: create job<br/>quote, vehicle, insurance flag]
INTAKE --> SCHED["Schedule + assign tech<br/>(a tech MUST be assigned first)"]
SCHED --> REM[Automated reminder texts]
REM --> WC{Mark work complete}
WC -->|Unpaid job| GATE[Payment preference gate<br/>required choice]
GATE -->|Zelle / Venmo| TXT1[Text with payment details<br/>from the entity settings]
GATE -->|Credit card| TXT2[Stripe payment link texted]
GATE -->|Cash| CASH[No text — tech collects]
TXT1 --> PAY[Record payment]
TXT2 --> PAY
CASH --> PAY
PAY --> WELL{"How did the job go?<br/>(required on record payment)"}
WELL -->|Thumbs up| DRIP[Review drip starts]
WELL -->|Thumbs down| SKIP[No review texts]
PAY --> DONE[Job completed]
DONE -.->|Customer reports an issue| WARR[Warranty claim]
WARR --> WVISIT[Schedule return visit<br/>unpaid, defaults to original tech]
WVISIT --> WRES[Mark resolved]
  • A technician must be assigned before a job can be scheduled, completed, or have a payment recorded.
  • Marking work complete on an unpaid job forces a payment-preference choice — Zelle, Venmo, credit card, or cash. The matching text fires automatically (Zelle/Venmo texts pull the entity’s payment details; credit card creates/re-sends a Stripe link; cash sends nothing). Completion itself is never blocked by a text failing.
  • Recording a cash payment immediately adds that cash to the tech’s balance (they’re holding our money). See tech pay.
  • “How did the job go?” on the record-payment dialog is required: 👍 starts the review drip; 👎 skips it quietly.
  • Receipts are on-request only — a paid job’s actions menu has Send receipt; nothing goes out automatically.
  • Customer names auto-normalize (“JOHN SMITH” → “John Smith”) everywhere, including texts — no need to fix capitalization by hand.
  • Flag is_insurance at intake (or later in the job’s Money section). On an insurance job the quote = the customer’s deductible — recorded through the normal payment flow.
  • The insurer’s payment is a separate fact, recorded via Record insurance payment in the job’s actions menu. It does not gate job completion.
  • The jobs board has an Insurance tab; its badge counts jobs still awaiting the carrier.
  • Note: ROAS revenue counts only the deductible on insurance jobs (by design, for now).

Post-completion “customer reports an issue” flow, under Operations → Warranty:

  • Open a claim from the job’s actions menu (Warranty / fix needed) — one live claim per job.
  • Schedule the return visit (defaults to the original tech). The visit is unpaid — no payout, no payment, no ROAS impact; the original job’s money is untouched.
  • One auto-text goes out when the visit is scheduled — deliberately generic; the word “warranty” never reaches the customer.
  • Warranty visits show on the Operations calendar in purple.