Washpad Monitoring Platform
Real-time monitoring and control for washpad equipment, from sensor to dashboard.
Overview
A monorepo of backend, ingestion, storage, websocket, and frontend services for monitoring and operating washpad equipment in real time. Sensor and equipment data arrives over MQTT and OEM integrations, is normalised and persisted to a time-series store, and is pushed live to operator dashboards and HMI screens. It bridges directly with SCADA-style gateways for on-site industrial control.
The challenge
The system had to keep up with a continuous stream of equipment telemetry, stay correct across service restarts and network blips, and be deployable onto industrial hardware in the field rather than a managed cloud environment. That meant designing the ingestion and storage path for throughput and durability, and building infrastructure automation robust enough for a small team to run deployments and updates on site.
What I built
- Multi-service monorepo: backend API, ingestion, storage, and websocket services
- MQTT-based ingestion pipeline for equipment and sensor telemetry, plus OEM integrations
- TimescaleDB schema for high-volume time-series data with efficient rollups
- NATS JetStream messaging between services for decoupled, durable delivery
- Live operator dashboard and HMI screens over WebSockets
- Two deployment paths: containerised via Docker Swarm/ACR, and native via Ansible for bare-metal industrial hosts
Screenshots







Architecture
Engineering highlights
Time-series ingestion
Equipment telemetry lands over MQTT, gets normalised, and is written to TimescaleDB in a schema designed for fast range queries and rollups rather than row-by-row lookups.
Service decoupling
Ingestion, storage, and the websocket layer are separate services connected over NATS JetStream, so a slow consumer or a redeploy of one service doesn't stall data collection.
Dual deployment model
The same services ship either as containers behind Docker Swarm with an Azure Container Registry pipeline, or natively via Ansible playbooks for sites that need to run without Docker.
SCADA bridge
An optional integration path into an Ignition Gateway lets the platform sit alongside existing industrial control systems instead of replacing them outright.
Results
6
Services in the monorepo
2,300+
Commits
2
Deployment paths supported
MySSH
Security · Infrastructure · CLI