AIRaware detects mould risk in buildings before anyone can see it. LEAKaware finds water leaks. They look like two products, and commercially they are, but underneath they are one thing.
Both are ScentStudio adapted.
Cloned, not rebuilt
The scent detection platform already knew how to do the hard parts: take readings from sensors in the field, survive unreliable connections, store time-series at volume, scope everything by organisation, and turn a wobbly line into something a customer can act on. That is most of what any sensing product needs.
So AIRaware started as a clone of it, adapted for mould — different sensors, a different model, different thresholds, an entirely different conversation with the customer, but the same bones. LEAKaware is that move made again, for water.
That is the thing worth understanding about my role. I am the platform developer on a team: I build and maintain the layer both products stand on, so that adapting it to a third molecule is a matter of weeks rather than starting again. It is deliberately unglamorous work. When it goes well, nobody notices it is there.
What the platform carries
A Laravel 12 API on PostgreSQL 17 with TimescaleDB for the time-series side. Keycloak OIDC with role-based access, because multi-organisation tenancy has to be right in the foundations rather than bolted on afterwards. Redis queues split between the application and ingestion, so a backlog of readings cannot starve anything user-facing.
A Vue 3 front end, a Flutter app on the App Store, infrastructure defined in version control across six Hetzner servers — three production, three staging, and a read-only MCP server so the team can ask questions of live device data without going near the database.
Ingestion durability was the piece worth getting right. Gateways report over connections that come and go, so readings spool to disk, replay into Redis and clean up behind themselves. A dropped connection delays data. It does not lose it.
Credit where it belongs
This is a team product and I am one part of it.
I implemented the SporeScore model that grades mould risk, against thresholds signed off by Sam Onwugbenu in Research. He did the science of deciding what the numbers should be; I built the thing that computes them and makes them legible — a dashboard a landlord acts on, and alerts early enough to be worth reading.
Colleagues have written a meaningful share of the application code above the platform layer, and the firmware underneath it is not mine at all. Calling the whole thing solo would be neater and untrue.
