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]Key rules
Section titled “Key rules”- 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.
Insurance jobs
Section titled “Insurance jobs”- 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).
Warranty jobs
Section titled “Warranty jobs”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.