01Side project
Factory Floor ERP
Barcode scans, FIFO boards and smart lamps running a real factory.
- For
- Freelance, for a rubber parts manufacturer in a bonded zone
- Role
- Top contributor, full stack
- Period
- 2024 → Now
Illustration redrawn for this portfolio. Not a screenshot, no client data.
- 200+
- backend modules in the system
- 4
- scan stages guarded by one state machine
- 13
- Redux Toolkit slices behind the React pages
- 5
- production stages traced per unit
Context
A manufacturing ERP covering incoming material, the warehouse, press lines, subcontractors and customs reporting. I'm the top contributor on a small team and built most of the React front end plus the warehouse and reporting modules behind it.
The factory sits inside a bonded zone, so every gram of material has to be traceable from the purchase order to the customs report. The system has grown to more than 200 backend modules on CodeIgniter 3 (HMVC) and MySQL, with React pages embedded where the workflow needs to feel fast.
Most of my work lives on the shop floor: operators with barcode scanners, a FIFO board, racks with lamps, and supervisors who need to see what is stuck. The software has to be correct first and forgiving second, because a wrong scan becomes a wrong stock number.
Stack
- PHP
- CodeIgniter 3 (HMVC)
- MySQL 8
- React
- Redux Toolkit
- Ant Design
- Webpack 5
- MQTT
- PhpSpreadsheet
- Docker
Interactive
Try to skip a stage
A simplified model of the real scan flow. Each station only accepts a lot in the right status, and the FIFO board scan is what switches the rack lamp on.
Lot
RM-2409-017
NBR compound, 25.0 kg
ORDERED
Rack lamps
Waiting for a scan. Start at Weighing, or try to skip a stage.
What I built
- 01
Four stage scan pipeline
Weighing, FIFO board, rack and stock in, modeled as a status guarded state machine. A lot can only move to the next stage, and lot level quantity checks stop incoming material from being used twice.
- 02
Smart lamps over MQTT
Scanning an order at the FIFO board lights the lamp on the matching rack. I wrote a dependency free MQTT publisher in PHP over raw TCP sockets, and isolated broker outages so a dead lamp never blocks a scan.
- 03
Incoming material chain
Lot ordering with real time FIFO depletion tracking, delivery schedules linked to purchase orders with data snapshots, and a monitoring dashboard that flags negative stock, fully used lots and expiry.
- 04
Subcontractor billing
Daily billing that prices checking and finishing output against per part price lists and splits totals per press line, plus productivity dashboards with daily completion rates per subcontractor.
- 05
WIP completion dashboard
Traces every production unit across five stages from press to packing, surfaces the incomplete ones and offers a bulk fix that realigns skipped stage records.
- 06
Customs reporting
A spare part stock balance report built on a stored procedure with opening balances anchored to stock opname, date indexes for speed and a configurable reporting cutoff.
- 07
Reconciliation tooling
Transactional CLI scripts with a dry run mode that true up the material ledger against physical counts. They fixed a live accounting mismatch without a risky manual edit.
- 08
Login hardening
Captcha on login with a provider switch between a hosted challenge and a self hosted image grid challenge that needs no external service.