02Case study

All work

Site Fault Tracker

A WhatsApp photo and a short note become one structured row in the team's sheet.

Built & Tested — Ready for Onboarding Studio-built · self-initiated

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.

Site Fault Tracker Simulated data · real system flow

Field worker's WhatsApp

  1. IMG · site_photo.jpg

    Inverter housing cracked at Block C, Riverside site. Split along the edge, unit still running.

    WhatsApp · from ••• 0457 · 14:18
  2. Got it. Logging this now.

    WhatsApp · bot · 14:18
  3. 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
    WhatsApp · bot · 14:18

Owner · Crestline Solar team sheet

  1. Site faults · RiversideGoogle Sheets
    RefLoggedLocationIssueSeverity (est.)StatusPhoto
    SF-013809:12Block ALoose cable trayLowResolvedIMG ↗
    SF-013911:40Block BPanel glass chippedModerateAssignedIMG ↗
    SF-014012:55Gate 2Water pooling by cabinetHighIn progressIMG ↗
    SF-014114:18Block CInverter housing crackedModerateNewIMG ↗
  2. SF-0141 sits with the week's other reports, dated, photographed and open for review
Replay with simulated data. A field worker on the Crestline Solar team sends the WhatsApp bot a photo and a short note: an inverter housing is cracked at Block C of the Riverside site. The bot acknowledges, then replies that it has logged the report as SF-0141, with the fields it pulled out: the location from the message, the worker's own description, and a severity flag marked as a rough estimate. In the team's Site faults sheet, SF-0141 is added below the day's earlier reports (a loose cable tray, now resolved; chipped panel glass, assigned; water pooling by a cabinet, in progress), with its time, location, issue, estimated severity, status New and the photo attached.

03How it works

Photo in, structured record out.

  1. 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.

  2. 02

    The bot acknowledges it

    A quick reply confirms the report arrived, so nobody sends it twice or wonders whether it landed.

  3. 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.

  4. 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.

  5. 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.

Built & Tested — Ready for Onboarding

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.

Next case study · 03 Dynamic Scheduler