
PortCrane Intelligence Platform
Industrial IoT · Digital Twin
Moves plant maintenance from calendar-driven to condition-driven by scoring assets before they fail.
An industrial predictive-maintenance platform: a Go backend with TimescaleDB telemetry, a Python scoring service that flags assets before they fail, an admin web app for reliability teams and a Flutter field app for technicians on the shop floor.
Foxtroit Predictive Management turns asset telemetry into maintenance decisions. Sensor data lands in TimescaleDB through a Go API, a Python FastAPI analytics service scores assets for failure risk, and maintenance managers, planners and reliability engineers work the resulting queue from an admin web application.
The technician side is deliberately separate. A Flutter field app covers the shop floor, where the job is executing work orders rather than analysing trends — a different interface for a different task on the same data.
The repository is organized so nothing needs a full local toolchain: the frontend needs Node only, the backend needs Docker only, and every Go command runs in a container. A shared contracts package holds the OpenAPI spec, the domain model and a demo dataset.
Plant maintenance runs on fixed schedules and breakdown response: assets are serviced whether or not they need it, and the ones that fail early take production with them. The telemetry to predict failures exists but lands nowhere useful.
A platform that ingests asset telemetry into a time-series store, scores failure risk in a dedicated analytics service, and turns the output into work orders — worked by planners in an admin app and executed by technicians in a field app.
Go 1.26 REST API handling auth, RBAC and audit, with every Go command running containerized
TimescaleDB-backed telemetry storage over PostgreSQL
Python FastAPI analytics service computing predictive failure scores
Next.js 16 admin application for maintenance managers, planners and reliability teams
Flutter technician field application for Android and iOS
Shared contracts package holding the OpenAPI spec, domain model and demo dataset
MQTT configuration and database migrations under an infra directory
Maintenance planners and shop-floor technicians need the same data for completely different tasks — analysis versus execution — and one interface serving both serves neither.
Split the surfaces deliberately: an admin web application built around queues, trends and planning, and a Flutter field app built around executing a single work order, both reading one API contract.
A polyglot stack — Go, Python, Node and Flutter — normally means every contributor installs four toolchains before anything runs.
Containerized the Go toolchain entirely and kept the boundaries clean: the frontend needs Node only, the backend needs Docker only, and neither requires the other unless they are being run together.
Maintenance moves from calendar-driven and reactive to condition-driven: telemetry is scored continuously, at-risk assets surface as work orders before failure, and technicians execute against them from the shop floor.