Back to selected work
2026IndustriaManufacturing operations cockpit, end to end

Industria: a manufacturing cockpit, eight modules, one team

A six-line plant in Brescia ran on spreadsheets, Telegram screenshots and a paper kanban. We replaced the lot with a single operations cockpit. Eight modules shipped end to end: live floor, orders pipeline, line detail with andon, multi-level BOM, warehouse bin map, quality, maintenance, reports. Both themes resolved on every breakpoint. Every ask landed in production.

ManufacturingSCADAOperations cockpit
Industria: a manufacturing cockpit, eight modules, one team

The plant runs six lines and a warehouse out of Brescia. The digital tooling we walked into was a SharePoint of fourteen spreadsheets, a Telegram group for shift handover, and a paper kanban tacked to the wall by the press line. The shortages caught at assembly stage every other week were the same shortages anyone in purchasing could have read off the BOM three days earlier. The brief opened with one line: rebuild the cockpit they wished they had.

Scope, eight modules

  • 8ModulesLive, Orders, Lines, BOM, Inventory, Quality, Maintenance, Reports
  • 6Lines30+ stations live-tracked, cycle and andon per cell
  • End to endBuildBrand, product, engineering, both themes on every breakpoint
Industria desktop Live floor in light mode. Sidebar with Live, Orders, Lines, BOM, Inventory, Quality, Maintenance, Reports. Plant header reading PLT-04, shift A. 78.4 percent OEE in giant numerals over a soft chromatic blob, 6,140 pieces produced in the last hour, 38 minutes downtime. KPI strip with parts per hour, OEE, scrap rate, downtime against shift target. Six-line list with status chips Running, Changeover, Fault, Idle, plus throughput sparklines per line. Throughput chart on the right showing produced vs target over the last 24 hours.
The home screen for plant managers. OEE, throughput, downtime, six-line status strip, 24-hour throughput chart, all on one page.

Every ask shipped

There was no scope ceiling. The brief opened on a Live floor view with OEE per line. By week two it had grown an Orders pipeline with a kanban and a Gantt. By week four a multi-level BOM with shortage propagation. By month two an Inventory sub-app with a bin map, a Quality module, a Maintenance log, and a Reports surface on top.

We absorbed every ask and shipped it. No request got pushed to phase two. No module got cut for budget. No feature came back marked out of scope. The studio stance was the same on day one and on day one hundred: if it lives on the floor, it lives in the app.

Industria desktop Orders pipeline in light mode. Header Production, Orders pipeline, with Kanban and Gantt toggles. Filter row with status counts Queued 10, Running 4, Paused 3, Completed 12, plus customer, line, priority dropdowns and a search field. Four kanban columns: Queued, Running, Paused, Completed. Each card carries the work order ID, product name, customer, progress bar, pieces produced over target, and remaining time or due date. Multiple customers visible across cards: Northwind Trailers, Vortex Mobility GmbH, Helix Refrigeration, Meridian Marine, Stellaris Robotics, Falcata Aerospace, Aquila Plumbing Co.
Production pipeline as a four-column kanban: queued, running, paused, completed. Filters down to customer, line, priority. Same data renders as a Gantt one toggle away.
Industria desktop Line detail in light mode. Six-line list on the left with current OEE per line, Body Weld 1 selected. Right panel for Body Weld 1: status Running, OEE 86.4 percent for shift A, throughput 142 against a 150 pieces per hour target, current cycle 25.4 seconds, uptime 6h 52m. Operator and active work order panel showing Vortex Mobility GmbH WO-58420 ATX-7042 with progress 1,782 of 2,400 pieces. Raise Andon button. Stations strip with five cells S01 Frame Load, S02 Spot Weld 02, S03 Spot Weld 03, S04 Robotic Seam, S05 Visual Check, each with cycle time against target. Cycle time per station chart pinned at the bottom.
Line detail goes past the dashboard tier. OEE, current cycle, uptime, station-by-station strip with cycle against target, the active operator and order pre-filled into the Raise Andon button.

Down to the cycle, station by station

The Line detail page reads like the operator's own checklist. OEE for the current shift, throughput against target in real time, the running cycle in seconds, uptime since shift start. Beneath it, the station strip: every cell on the line with its own cycle time, its target and the operator on it.

We pushed past the dashboard tier on purpose. A line at 41 percent is one piece of information. A line at 41 percent with station S4 idle, no operator, and S2 pulling 26 seconds against a 25-second target is a different conversation. The Raise Andon button on the line header writes a real event into the maintenance queue, with the cell, the cycle anomaly and the active order pre-filled, so the operator never re-types what the system already knows.

Industria desktop Bill of Materials in light mode. Header Engineering, Bill of Materials, summary line products 8, nodes 98. Product list on the left with revision and shortage counts: Bracket Assembly Stage 2 selected with 18 nodes and 13 shortages, Faucet Body Final, Hinge Sub-assembly, Stamped Bracket, Compressor Housing, Aero Bracket Titanium, Robot Joint Type A, Gasket Kit R-series. Right panel for Bracket Assembly Stage 2 rev. C with header KPIs nodes 18, shortages 13, tight 1, suppliers 7, max lead 14d. Component table with part code ASM-A1, description Bracket Stage 2 Assembly, quantity 1 set, lead 0 days, supplier In-house, stock 240, status SHORT.
Eight products, 98 nodes, suppliers and lead times tracked at every level. Bracket Assembly Stage 2 carries 13 shortages: the system flags them where they actually break the order, not where they sit on the shelf.

The shortage shows up before the order

The BOM module is multi-level. Every product carries its own tree of sub-assemblies, parts and raw materials, with revision tracking and supplier lead times at every node. Shortage flags do not stay on the part where the gap shows up. They propagate up the tree to the assembly that needs them and into the orders pipeline that depends on the assembly.

A coil running short upstream now reaches the production planner before the order on the floor reads zero. The week the plant caught five shortages at assembly stage in the old system was the week we wrote the propagation. The same week, two of those shortages would already have been visible from the live BOM, with three days of lead in front of them.

Industria desktop Inventory bin map in light mode. Header Warehouse, PLT-04, summary bins 47, lots 80, suppliers 23. Tab strip Bin map, Lots, Receiving, Low-stock with counts. Four warehouse zones rendered as bin grids with fill-rate heatmaps: Zone A Raw materials 55 percent of 22 bins, Zone B Sub-assemblies 66 percent of 12 bins, Zone C Finished goods 53 percent of 9 bins, Zone H Receiving 70 percent of 4 bins. Each bin labelled by aisle and shelf position.
Warehouse rendered the way the floor actually walks it: aisles, shelves, racks, fill rate as a heatmap per zone. Receiving, low-stock and lots one tab away.
Industria desktop Inventory bin detail in light mode. Right-side drilldown panel for BIN A-01-01 with breadcrumbs Raw materials, Aisle 1, Shelf 1, rack. Four-stat header: capacity 800, used 226 at 28 percent, free 574, lots 1. Lots stored here list with one entry: LOT-2026-1148, part STL-COIL-3, supplier Brescia Steel SpA, 8,200 kg of 3mm S355 steel coil, received 12 days ago. Behind the panel the bin map continues to render so context is never lost.
A bin opened in place: capacity, used, free, lot, supplier, age. The map keeps rendering behind the panel so the planner never loses context.

Both themes, every breakpoint

Light and dark are not a device choice. Every surface in the cockpit, desktop through phone, ships fully themed in both. The desktop modules already shown above also run in dark, the same pages with the same data and a different theme. The four screens that follow are the proof.

We resolved every component twice. Two distinct contrast targets, two type-weight scales, the same React components and the same design tokens powering four fully resolved surfaces. Andon, line status and order start are reachable on mobile in two taps from the home tab. The desktop has the planning surface, the mobile has the floor surface. Neither one is a thinned version of the other, and neither one is locked to a single theme.

Industria desktop Live floor in dark mode. Same layout as the light version. Sidebar with Live, Orders, Lines, BOM, Inventory, Quality, Maintenance, Reports. Hero card with 78.4 percent OEE, 6,482 parts produced today, throughput 6,140 pieces in the last hour, downtime 38 minutes. KPI strip with parts per hour 768 plus 5.1 percent, OEE 78.4 percent up 2.1 pp, scrap rate 1.42 percent, downtime 38m. Six-line list with the same status chips and throughput sparklines. Throughput chart on the right showing produced vs target over the last 24 hours.
Live floor, dark theme. Same OEE numerals, same six-line strip, same throughput chart. Contrast retuned for low-light shifts.
Industria desktop Line detail in dark mode, with L2 Paint Shop A selected (the light version showed L1 Body Weld 1). Six-line list on the left. Right panel for Paint Shop A: status Running, OEE 78.2 percent for shift A, throughput 96 against a 110 pieces per hour target, current cycle 37.6 seconds, uptime 6h 28m. Operator D. Reyes, product ATX-7042-PNT, work order WO-58424 Vortex Mobility GmbH, progress 1,180 of 2,400 pieces. Raise Andon button. Stations strip with four cells S01 Pre-treatment, S02 Spray Booth, S03 Cure Oven, S04 Inspect & Pack, each with cycle time against target. Cycle time per station chart pinned at the bottom.
Lines in dark, with L2 Paint Shop A selected. Different line, different stations (Pre-treatment, Spray Booth, Cure Oven, Inspect & Pack), same Raise Andon button on the header.
Industria desktop Bill of Materials in dark mode, with HNG-204-B Hinge Sub-assembly selected (the light version showed Bracket Assembly Stage 2). Header summary products 8, nodes 98. Product list on the left with revisions and shortage counts. Right panel for Hinge Sub-assembly rev. B with header KPIs nodes 9, shortages 4, tight 0, suppliers 4, max lead 14d. Component table with part code ASM-HNG, description Hinge Sub-assembly, quantity 1 set, lead 0 days, supplier In-house, stock 1,100, status SHORT.
BOM in dark, with the Hinge Sub-assembly node opened. Nine nodes, four shortages, max lead 14 days. Propagation rules untouched between themes.
Industria desktop Orders pipeline in dark mode. Same four-column kanban as the light version: Queued 10, Running 4, Paused 3, Completed 12. Filter row with status counts, customer, line and priority dropdowns and search field. Cards across the four columns with WO IDs, product names, customers (Northwind Trailers, Vortex Mobility GmbH, Helix Refrigeration, Meridian Marine, Stellaris Robotics, Falcata Aerospace, Aquila Plumbing Co.), progress bars, pieces over target and remaining time.
Orders pipeline in dark. Same four columns, same filter row, same priority pills, same hover affordances on every card.
Industria mobile Live floor in dark mode, top of screen. SCADA Online status, Live Floor header, theme toggle. Hero card Live Plant PLT-04 Shift A with 78.4 percent OEE, 5,482 parts produced today, OEE up 2.1 pp vs last shift, throughput 6,140 pieces in last 8 hours, downtime 38 minutes (12 minutes less than last shift). Vertical KPI cards beneath: parts per hour 768 with up arrow plus 5.1 percent, OEE 78.4 percent up 2.1 pp, scrap rate 1.42 percent up 0.18 pp. Bottom tab bar Live active, Orders, Lines, Reports.
Live
Industria mobile Lines screen in dark mode. Top bar SCADA Online, Assembly Lines, light-mode toggle. Header Production, Floor Lines, summary Lines 6, Running 3. Six-line list, each row with line code, name, current OEE, cell number, and throughput where running: L1 Body Weld 1 86.4 percent BWA cell 14 142 pcs/h selected, L2 Paint Shop A 78.2 percent PSA cell 02 96 pcs/h, L3 Sub-assembly Hinge 64.0 percent SUB cell 07, L4 Final Assembly 91.2 percent FNL cell 01 64 pcs/h, L5 Press Line 1200T 41.7 percent PRS cell 11, L6 Inspection CMM 72.0 percent QAT cell 03. Body Weld 1 detail card peeks at the bottom with Running pill. Bottom tab bar Live, Orders, Lines active, Reports.
Lines
Industria mobile Orders pipeline in dark mode. Top bar SCADA Online, Production Orders. Header Production, Orders pipeline, Kanban toggle visible. Status row tabs Queued 10, Running 4 selected, Paused 3, Completed visible past the edge. Stacked filters Customer All customers, Line All lines, Priority Any, plus search by ID. Queued column with three work orders: WO-58423 Stamped Bracket Lot 4 for Northwind Trailers 0 of 1,800 pieces, WO-58425 Compressor Housing for Helix Refrigeration 0 of 320 pieces, WO-58431 Hull Cleat Marine Grade for Meridian Marine. Bottom tab bar Live, Orders active, Lines, Reports.
Orders
Three primary surfaces of the floor app. Live, Lines and Orders, each one tap from the bottom bar.
Industria mobile Live floor in dark mode, scrolled to chart and orders. Throughput last 24h chart with produced vs target, peak around hour 12, dip around hour 16. Active production orders section listing 3 running: WO-58420 Bracket Assembly Stage 2 high priority for Vortex Mobility GmbH on L1 with 1,782 of 2,400 pieces ETA 5h 12m, WO-58421 Faucet Body Final for Aquila Plumbing Co. on L4 with 384 of 600 pieces ETA 4h. Bottom tab bar Live active.
Live, scrolled
Industria mobile Order detail panel in dark mode. Header WO-58434 with close icon. Product Gasket Kit R-series Lot 12, customer Helix Refrigeration, part code GSK-118-R. Progress 0 of 1,200 pieces at 0 percent. Two-row stat grid: line L4, priority Normal, ETA blank, due in 6 days. Timeline bullets Scheduled in 3 days (active), Started, In production, Completed (pending). Two CTAs: Start in cyan accent, Reset to queue in red ghost.
Order detail
Drill-down on the floor. The throughput chart and active orders sit one scroll below Live; an order detail opens with line, ETA, a four-step timeline and a Start in two taps.

We measured the floor one month after launch. The numbers below are the early delta against the spreadsheet-and-Telegram baseline the plant ran on before the cockpit went live. The lines, the products and the customer mix stayed the same in the comparison window: the only variable that changed was the cockpit.

One month on the floor

  • +16 ppOEEFrom 62 percent average to 78 percent across the six lines
  • +22%Throughput per shiftSame lines, same products, same shift length
  • -35%DowntimeAndon goes straight to the maintenance queue, no re-typing
  • Days → minutesShortage detectionBOM propagation reaches purchasing before the order reads zero
  • 30 → 4 minShift handoverRead off the live page, no screenshots in a Telegram group
  • 14 → 0SpreadsheetsThe SharePoint folder is read-only and dated

Stack

  • Next.js16
  • React19
  • TypeScript5
  • TanStack Query
  • Recharts
  • Postgres16
  • Supabase
  • Cloudflare R2
  • Vercel Edge

Eight modules, no phase two. We expanded scope four times during the build and they shipped each one on the same cadence. One month in, the cockpit already caught two shortages this month before purchasing did, and we hand the shift over in four minutes off the live page. The SharePoint of spreadsheets is in read-only and dated.

Plant Manager, IndustriaOne month after launch

Running operations on spreadsheets?

We build cockpits that fit the floor, not the org chart. Every module shipped, no phase two. Get in touch.

Start a project