What running the plant on spreadsheets actually cost
- · Excel sheets, paper printouts, and the supervisor's memory. With no single source of truth, there was no way to know in real time which task was on which operator, how much was left, or whether an order was going to ship on time. The actual state of the plant had to be reconstructed by hand every morning.
- · Estimates lived in the foreman's head. Commitments were built on experience — knowledge that walked out the door every time someone quit or retired. The quality of the estimates depended on who happened to be in the role.
- · Delays surfaced when the client called. There was no way to spot early that a task was running over a reasonable time. The first signal of a problem was the customer asking about their order.
What DibAI changed
- · Real-time visibility into every task's status. The supervisor sees who is doing what, since when, and in which state. The plant's picture updates itself — nobody has to report.
- · Time estimates that get sharper with use. The regression model learns from every closed task. Next time a similar task comes up, it suggests a tighter estimate that matches the plant's real pace.
- · Early delay detection, before the client sees it. The dashboard flags tasks that are running over their estimate. The supervisor can reassign or reschedule before it becomes a delivery problem.
Two services, two languages, one source of truth
The product has to feel like a single app to the operator, but underneath Node.js (which handles the API and orchestration) lives alongside Flask (which only exposes the ML model). We designed the flow this way:
- 1 Node.js is the only face the client sees. React talks to a single API. The app does not know — and does not care — what runs on the other side to resolve an estimate.
- 2 Flask wakes up only when a prediction is needed. The ML service is isolated: it takes features over HTTP, returns a number. No shared state, no cascading locks.
- 3 PostgreSQL holds everything transactional. Tasks, users, history, logs. The model trains by reading from the same database, so there is no drift between what the system sees and what it learns from.
- 4 Retraining is triggered by hand, from an admin panel. The admin decides when the model is updated. Zero surprises in production from an automatic run that breaks something.
┌──────────────────┐
│ React WebApp │ ◄── Views for operator and supervisor
│ (operator + │
│ supervisor) │
└────────┬─────────┘
│ REST + JSON
▼
┌──────────────────┐
│ Node.js + │ ◄── API, auth, task CRUD, orchestration
│ Express │
└────┬─────────┬───┘
│ │
│ │ Called when an estimate is needed
▼ ▼
┌─────────┐ ┌────────────────┐
│Postgres │ │ Flask + scikit │ ◄── Linear regression
│ + Redis│ │ -learn │ (isolated service)
└────┬────┘ └────────┬───────┘
│ │
│ Reads history│
└────────►───────┘
│
▼
Admin panel triggers
manual retraining What we took away from the project
- 01
ML does not replace the supervisor — it empowers them
The model suggests an estimate. The supervisor accepts, corrects, or discards it. AI is one more tool, not the one making the call. This cuts resistance to adoption and keeps a human in the loop.
- 02
Manual retraining is a feature, not a limitation
In production, a model that retrains itself can break itself. Giving the admin the retrain button means someone is reviewing the result before promoting it. Zero surprises.
- 03
The area-based dashboard is what makes the app get used
If the app were a glorified spreadsheet, the team would not use it. What brings the supervisor back every morning is seeing the state of their area at a glance — workshop, design, warehouse, sales. The UI is what closes the loop.
We went from running the plant on spreadsheets and the supervisor's memory to having real visibility into every task. And now when a client asks when their order is ready, the answer comes from the system, not from a back-of-the-envelope guess.
Paraphrased testimonial.
Got a plant still running on spreadsheets?
20 minutes on a call about your operation. We walk through scope, architecture, and where ML actually adds value. No commitment.