Divyansh GuptaDivyansh Gupta
All work
Industrial IoT · Full Stack · Cloud

Washpad Monitoring Platform

Real-time monitoring and control for washpad equipment, from sensor to dashboard.

NestJSNext.jsTimescaleDBMQTTNATS JetStreamDocker · Ansible
Washpad Monitoring Platform interface

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

Washpad Monitoring Platform screenshot 1
Washpad Monitoring Platform screenshot 2
Washpad Monitoring Platform screenshot 3
Washpad Monitoring Platform screenshot 4
Washpad Monitoring Platform screenshot 5
Washpad Monitoring Platform screenshot 6
Washpad Monitoring Platform screenshot 7

Architecture

Next.js Frontend / HMI
NestJS Backend API
Ingestion · Storage · WS Services
NATS JetStream · Mosquitto MQTT
TimescaleDB · Redis

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