A community water-protection initiative

Catch a river pollution incident before it reaches the next family downstream.

Umfula Watch is a non-profit programme that places water-quality sensors along a river system and flags the changes that matter — a pH drop, a conductivity spike, a turbidity surge — hours before contaminated water reaches the people who depend on it.

See how it works
SITE 02 SITE 04 SITE 01
40+
Communities a single monitoring zone can protect downstream
Hours, not days
Typical head start before a plume reaches the next intake
Non-profit
Built and run by Visions2Reality Media NPC
The problem

Most pollution incidents are found by accident, not by monitoring.

A municipal or catchment-management team typically relies on scheduled grab sampling — a technician visiting a handful of points every one to four weeks — plus complaints from downstream users. Between visits, a spill, an illegal discharge, or a treatment-works failure can move a long way before anyone knows it happened.

01

Sampling frequency is too low

Weekly or monthly grab samples cannot catch a discharge that starts and ends between two visits.

02

Detection happens downstream

By the time a fish kill or an odour complaint is reported, the plume has often already passed the point where it could have been contained.

03

Reports are hard to act on quickly

Lab turnaround for a full water-quality panel can take days, long after the operational decision — close an intake, notify a downstream user — needed to be made.

The approach

Sense continuously, compare against a learned baseline, and hand a human a clear decision.

Umfula Watch does not replace laboratory testing — it tells the team exactly when and where to send a technician, and gives them a head start measured in hours, not days.

Sense

In-situ probes log pH, conductivity, turbidity, dissolved oxygen and temperature at each monitoring site, continuously.

Compare

A model trained on each site's normal daily and seasonal pattern flags departures that a fixed threshold would miss.

Investigate

Field photos and existing incident reports are pulled in automatically to help explain what the sensors are showing.

Verify

An operator reviews the evidence and confidence score before anything is escalated or acted on.

Act

Confirmed incidents trigger a notification to the relevant downstream users and a work order for sampling.

Learn

Confirmed and rejected alerts feed back into the anomaly model so it keeps matching this river's real behaviour.

Technology

The honest chain, sensor to decision

This is the same path a technical reviewer would need to see to understand what is built, what is planned, and where each part of the system actually runs.

Public website
↓
Authentication — real sessions concept
↓
Operator & manager dashboards (role-based)
↓
Application API + business logic
↓
Database — sites, sensors, readings, alerts, reports
↓
AI services — Claude, GPT, Google Vertex AI (Gemini), GPT Image
↓
AWS IoT Core → ingestion, storage, anomaly model
Current build vs. production target: this build is a front-end demonstration with a client-side telemetry simulator standing in for a live AWS IoT Core feed. The dashboard is structured so the simulator can be swapped for a real telemetry subscription without changing the rest of the interface — see the data-source note in the Demo Platform.
The hardware, in 3D

A model you can pick up and turn over — no photo required

Rather than a rendered image, this is a live, interactive 3D model of the field sensor pod, built with WebGL (Three.js) and running directly in your browser. It is a standalone component, embedded here and reused unchanged inside the operator dashboard's "Sensor Pod" tab.

Try it

What you can actually do with it

Rotate: click and drag anywhere on the model to spin it in 3D; scroll or pinch to zoom in and out.
Inspect a probe: click any coloured marker — pH, conductivity, turbidity, dissolved oxygen, or the solar panel — to read a plain-language explanation of what it measures and what it can't tell you on its own.
Simulate a reading: the Normal / Drifting / Alert buttons change the pod's status light in real time, the same light a field technician would see from the bank.
Exploded view: the toggle pulls every probe away from the housing so you can see how many independent sensors are packed into one unit.

How it's built

Under the hood

The pod's housing, dome, base, antenna, and status ring are built from primitive 3D geometry (cylinders, a hemisphere, a torus) composed into one model — no external 3D file is loaded, so it renders instantly. A raycaster listens for clicks and tests them against each probe in 3D space, which is what makes the probes individually clickable rather than just decorative. Orbit controls handle the drag-to-rotate and scroll-to-zoom behaviour, and a small state machine drives the status light's colour and pulse speed to match Normal, Drifting, or Alert.

Component boundary: sensor-pod-3d.html is a self-contained file with its own styles and script — it does not depend on anything else on this site. That's deliberate: it can be dropped into the public page, the operator dashboard, a field-training handout, or a future mobile app, and it will behave identically everywhere it's placed.
Putting it together

How the 3D model fits into the wider system

The model is a teaching and monitoring surface, not a separate product — it sits at the "Sense" end of the loop described earlier and mirrors what the AI layer and dashboard already know.

Real river sensor pod (pH, conductivity, turbidity, dissolved oxygen, solar power)
↓
3D model — the same probes, rendered so anyone can see what each one does and where it sits
↓
Telemetry simulator (production: AWS IoT Core) feeds live readings
↓
Anomaly model compares the reading to this site's learned baseline
↓
The pod's status light — Normal / Drifting / Alert — updates to match, in the model and in the field
↓
Operator dashboard shows the same state, with Claude/GPT/Gemini evidence attached, for a human to approve

In other words: the colour of the light you can trigger on the 3D model above is the exact same signal an operator sees in the Alert Center, driven by the exact same three-state logic. Today that light is driven by the buttons on this page; in production it is driven by the anomaly model reading real telemetry from AWS IoT Core. Nothing about the model itself needs to change when that switch happens — only where its data comes from.

The AI layer

Each provider does the part of the job it's actually good at

No single model handles the whole pipeline. Tasks are routed by what each provider is strongest at, and every recommendation shown to an operator carries its evidence, a confidence score, and the model that produced it.

ProviderUsed forWhy this one
Claude (current Sonnet/Opus generation)Reading historical incident reports and maintenance logs; producing structured recommendations with cited evidenceStrong long-context reasoning across many pages of prior reports for a single site
OpenAI GPT (current generation)Plain-language explanations of a sensor anomaly for a non-specialist operator; structured data extraction from lab PDFsFast, reliable at turning structured readings into a clear written summary
OpenAI image model (current generation)Technical diagrams of sensor placement and response procedure — never presented as photographyProduces on-brand illustrative diagrams without a mismatched stock image
Google Vertex AI (Gemini)Reviewing field photos for visual signs of a discharge — foam, discolouration, dead vegetation — alongside site documentsNative multimodal reasoning across image and text in a single call
AWS (IoT Core, S3, Lambda)Device connectivity, telemetry ingestion, storage, and hosting the anomaly-detection modelMature managed IoT layer already used by most municipal utilities in the region

Exact model identifiers are confirmed against each provider's current documentation at build time rather than carried over from an earlier project.

Illustrative scenarios simulated

What the system catches

Each scenario below is a labelled simulation built from documented, real-world river-pollution failure patterns — not a record of an actual incident.

JUKSKEI RIVER · GAUTENG

Sewer overflow after a pump station trip

Conductivity and turbidity both rise sharply at a monitoring point downstream of a pump station, consistent with an untreated sewage overflow. The system correlates the timing with a reported power interruption in the area and recommends notifying the operations team before the plume reaches the next abstraction point.

VAAL RIVER · FREE STATE BORDER

Gradual pH drift from an industrial discharge

pH drifts down slowly over six hours rather than spiking — a pattern easy to miss on a fixed-threshold alarm but clear against a learned baseline. Historical incident notes for the site point to a known industrial outfall upstream.

MSUNDUZI RIVER · KWAZULU-NATAL

Turbidity surge after heavy rainfall

A sharp turbidity increase follows a rainfall event and matches the site's normal storm-response pattern, so the system classifies it as expected runoff rather than an incident — avoiding a false alarm that would waste a technician's day.

CROCODILE RIVER · MPUMALANGA

Recurring low-dissolved-oxygen fault

A dissolved-oxygen sensor shows the same overnight dip three nights running. Claude's review of the maintenance history flags this as a known biofouling pattern for this probe rather than a genuine water-quality event, and recommends a cleaning visit instead of an incident response.

Walk through the operator dashboard yourself

Simulated telemetry, a live anomaly walkthrough, and the AI routing panel — clearly labelled, nothing pretending to be a real river.

Scale & infrastructure

What this looks like at catchment scale

Target

~40–120 sensor pods

Per river-monitoring zone, each reporting every 60–120 seconds. estimate

Target

~2,000–6,000 AI calls / day

Across anomaly explanation, report analysis, and photo review, per zone. estimate

Cost

R3,000–R15,000 / month

Per monitoring zone, covering connectivity, storage, and inference. estimate

A Vertex AI and Claude API credit grant would let the team move from single-photo defect review to a trained visual classifier running across every site in a zone, and extend historical-report analysis back through a full multi-year incident archive rather than the last twelve months. The human-approval step on every recommendation stays in place regardless of scale.
Who's behind this

Visions2Reality Media

Umfula Watch is a project of Visions2Reality Media, a South African non-profit company registered with the Companies and Intellectual Property Commission (CIPC).

DIRECTOR

Chantelle Palesa Malahlela

Director, Visions2Reality Media NPC. Appointed 19 September 2025.

chantelle@vision2realitymedia.co.za

"We believe in this NGO because clean water shouldn't depend on luck — communities deserve to know what's flowing past their homes before it becomes a crisis."

DIRECTOR

Agisanang Samkeliso Rakgotho

Director, Visions2Reality Media NPC. Appointed 19 September 2025.

agisanang@vision2realitymedia.co.za

"What this NGO has to offer is simple but rare: real-time evidence that turns a suspicion into a response, before a river carries the problem out of reach."

Registration number 2025 / 743908 / 08 · Non Profit Company · In Business · Registered office: Milano Street, Copperleaf Golf and Country Estate, Centurion, Gauteng, 0157.
GENERAL

Request for Quotation

rfq@vision2realitymedia.co.za

Get in touch

Request a walkthrough

For municipalities, catchment management agencies, and water utilities evaluating a pilot.

Demo Mode — Simulated Telemetry, No Real River Is Connected
Umfula Watch — Operator Console
Signed in as T. Nkosi · Water Quality Officer
Navigation
Account
7
Sites online
1
Active alerts
92%
Uptime, 30d demo data

Monitoring sites demo data

Site 01 — Upper JukskeipH 7.2 · Turb 4 NTU
Site 02 — Alexandra confluencepH 7.0 · Turb 6 NTU
Site 03 — Pump station outflowpH 6.8 · Turb 11 NTU
Site 04 — ModderfonteinpH 7.3 · Turb 5 NTU
Site 05 — KelvinpH 7.1 · Turb 4 NTU

Telemetry — Site 03 (Pump station outflow) simulated

pH6.80
Conductivity (µS/cm)410
Turbidity (NTU)11
Dissolved oxygen (mg/L)6.4
Last telemetry3 seconds ago