Customer tracking page
When you dispatch a job, concorbit mints a unique customer tracking link. Send that link to the customer (or let the automated emails do it) and they can follow their appointment live: no login, no app, just a URL that works on any phone.
What the customer sees
Tenant branding: your logo and accent colour at the top.
Status line: "Engineer assigned", "On the way", "Arrived on site", "Work in progress", "Complete".
Progress bar: a 4-step bar showing where the appointment is in its lifecycle.
Engineer card: the assigned engineer's name and avatar. (Phone/email intentionally not shown; see "Security" below.)
Live map: while the engineer is travelling, a Leaflet map with a pin on the job address and a live pin on the engineer's van, updating every 30 seconds.
ETA: estimated arrival in minutes based on the most recent GPS ping and the distance to the job. Rough: uses a flat 40 km/h average (future upgrade to OSRM routing).
Post-completion feedback: once the job is marked complete, the page swaps the map for a 5-star rating form + optional comment. One submission per job.
Automatic notifications
Four status transitions trigger emails to the contact on the job:
| Transition | Email template |
|---|---|
| Job dispatched | Your engineer has been assigned — job {number} |
| Engineer sets off | {Engineer} is on the way |
| Engineer arrives on site | {Engineer} has arrived |
| Job completed | Your job is complete — {number} |
Each email carries the tracking link. You can customise the subject and body per template under Email → Templates.
Tenant settings
All four settings live on the Jobs module. Set them in Settings → Jobs (or tenant.settings.jobs.* if editing by API):
| Setting | Default | Description |
|---|---|---|
| customer_tracking_enabled | true | Master switch. Turn off to stop minting tokens and silently fall through all notifications. |
| customer_tracking_ttl_days | 7 | Days after completion before the link stops resolving. Clamped 1–90. |
| notification_channels | ['email'] | ['email'], ['sms'], or ['email', 'sms']. |
| sms_enabled | false | Gates SMS sends. Currently a logged stub; an SMS provider integration lands in a future session. |
Security notes
The tracking link IS the credential. Treat it like a magic link: don't post it publicly, don't forward the email body to anyone you wouldn't invite to see the engineer's live position.
Live GPS only flows while the engineer is en-route. Once the status reaches "Arrived", the live pin freezes. The engineer's movements after arrival (lunch, next job, home) are NEVER exposed.
Tokens are nulled on cancellation: if a booking is cancelled, any link texted beforehand immediately stops working.
Low ratings flag internally: a rating below 4 sends a notification to the job's creator, so unhappy customers get a human follow-up.
One feedback per job. Once a rating is submitted via the link, it's locked. The unique DB index means a second submission gets a 409.
What happens when a link expires
After customer_tracking_ttl_days past completion the link returns the "Tracking link expired" page. If the customer needs a copy of their completion confirmation, resend the "Job completed" email manually from the job detail page, which re-mints a fresh TTL window.