02Case study
Site Fault Tracker
A WhatsApp photo and a short note become one structured row in the team's sheet.
Offered asJob & site log
01The problem
Field reports, scattered across chats.
When a field team spots a site fault, a damaged installation or something that needs logging, the report ends up wherever it's easiest to send: a text, a WhatsApp photo, a voice note in a group chat.
Nothing gets structured, nobody can find it later, and chasing people to fill in forms becomes its own job. The value here is simple: every report lands as one clean, structured record, sent from the app the team already has open.
02Replay
One fault report, start to finish
Simulated data, real system flow. Switch between the customer's phone and the owner's side: both run on the same clock.
Field worker's WhatsApp
IMG · site_photo.jpg Inverter housing cracked at Block C, Riverside site. Split along the edge, unit still running.
Got it. Logging this now.
Logged as SF-0141 with these details:
- Location
- Block C, Riverside site
- Description
- Inverter housing cracked, split along the edge, unit still running
- Severity
- Moderate rough estimate
Owner · Crestline Solar team sheet
- Site faults · Riverside
Ref Logged Location Issue Severity (est.) Status Photo SF-0138 09:12 Block A Loose cable tray Low Resolved IMG ↗ SF-0139 11:40 Block B Panel glass chipped Moderate Assigned IMG ↗ SF-0140 12:55 Gate 2 Water pooling by cabinet High In progress IMG ↗ SF-0141 14:18 Block C Inverter housing cracked Moderate New IMG ↗ - SF-0141 sits with the week's other reports, dated, photographed and open for review
03How it works
Photo in, structured record out.
- 01
A worker sends a photo and a note
From WhatsApp, the app field staff already use. There's no new software to install and no form to fill in.
- 02
The bot acknowledges it
A quick reply confirms the report arrived, so nobody sends it twice or wonders whether it landed.
- 03
The team's own words are kept
The photo and the worker's description are logged as sent. Extra details are pulled out where the message has them, like the location it mentions.
- 04
A rough severity flag is added
A vision model looks at the photo and suggests a severity. It's a first-pass indicator for sorting, never a precise rating.
- 05
One timestamped row, ready for review
Everything lands as a single row in the team's Google Sheet, where someone can review it, act on it and find it again later.
04Stack
What it runs on
- WhatsApp Cloud API
- Receives the photo and note, sends the acknowledgement and summary
- Python
- The bot service: parsing the message and assembling the record
- Vision model
- A first-pass look at the photo for the rough severity flag
- Google Sheets
- The team's log: one row per report, with the photo attached
What it doesn't do
The severity flag is a rough first-pass estimate. Photo quality and site conditions vary too much for it to be a precise rating, which is why every row is there for a person to review.
A self-initiated project, built to prove the pattern before bringing it to a client. The bot is complete and tested end to end. Like any WhatsApp Business integration, it goes live on a dedicated business number, which is set up during onboarding.
05Walkthrough
The real thing, recorded.
The replay above uses simulated data. This is the system itself, walked through end to end on video.
06Source
Read the code
The repository is public: the webhooks, the data model, the deploy setup. The Notion write-up covers the design decisions.
Want this running for your business?
Connecting it to your own number and accounts is a standard onboarding step. Tell us how your business works and we'll tell you what it needs.
