Senior Capstone · delivered to AkzoNobel Coatings, Warsaw IN
Predictive Maintenance Platform
Calling machine failures hours before the alarm would.
- Year
- 2026
- Role
- ML + full-stack (capstone team of 5)
- Status
- Shipped
- Type
- Senior Capstone
A production predictive-maintenance system for an AkzoNobel coatings plant where an hour of unplanned downtime costs $40K–$60K per machine.
The problem
AkzoNobel’s Warsaw, Indiana plant ran on threshold alarms: a sensor crosses a hard limit, the line is already going down, and the floor is reacting instead of planning. At $40K–$60K per machine per hour of unplanned downtime, every alarm that fires late is expensive.
The brief was to turn a stream of vibration and temperature telemetry into something an operator could act on a shift early — without asking them to read a data-science notebook.
Approach
- Built the operator-facing dashboard in Next.js + TypeScript with role-based authentication, so floor operators, engineers, and admins each see the right surface.
- Trained survival-analysis and KNN models that produce a daily failure-risk score per machine, surfacing degradation hours before a threshold alarm would trip.
- Designed a multi-service architecture: an ingestion microservice pulls sensor telemetry into VictoriaMetrics (Prometheus-compatible) and PostgreSQL; a Python ML service scores daily; the web app reads and visualizes.
- Containerized the whole stack with Docker Compose behind Caddy for automatic TLS, plus VAPID web-push and SMTP email so alerts reach people off the dashboard.
- Shipped Chart.js trend views and one-click PDF/Excel report exports for shift handoffs and management review.
Impact
- Delivered as a running system to AkzoNobel’s Warsaw plant, not a prototype.
- Flags failure risk hours ahead of the existing threshold-based alarms.
- Reproducible one-command deploy (Docker Compose) with persistent metrics + relational storage.
Stack
Frontend
ML
Backend & Data
Infra