The problem
Data sat in the ERP, scanning systems, IoT and Excel. Reports arrived a day late, several departments rebuilt the same Excel by hand, and nobody saw line vs plan, energy or warehouse fill as it happened.
What I built
A Next.js dashboard that receives live output over MQTT straight in the browser, and pulls plans and master data from an ASP.NET Core API connected to the ERP, HR, WMS and reporting databases, drilling down from company to factory, line and product.
Key features
- Live actual vs plan, drilling down to line and product
- Workforce by department: present, in shift, off shift and overtime
- Machine status: running or under maintenance
- Power load, solar share and CO₂ avoided for ESG
- Warehouse and ASRS occupancy, plus monthly sales vs forecast
- Notifications, Thai/English, dark mode and layouts for factory TV screens
Under the hood
- 08:00 business-day rule in both the API and the header: anything before 08:00 belongs to the previous working day, with a “yesterday’s output” badge
- Two-speed data: live counts over MQTT on WebSocket into a Zustand store; plans and master data polled from the API every 30 seconds
- Output per hour ignores idle time by dropping runs of three or more zero-output 10-minute windows before averaging