The MES app
The shop-floor surface where operators run operations, report quantities, issue material, and log their time.
The app is Carbon's shop-floor interface. Planners release and schedule work in the ERP; operators execute and report that work from tablets or shared stations in MES. See the run the floor tour for a walkthrough and jobs, picking lists, and quality for the underlying records.
MES requires a network connection for all writes. It caches item and people picker data in IndexedDB for faster reads, but it has no offline mode. Operators cannot start work, report output, or issue material while disconnected.
Getting onto the floor
An operator signs in on the login screen with whichever methods the company has enabled: "Sign in with Google", "Sign in with Outlook", "Sign in with Passkey", or "Sign in with Email" (a magic link, which lands on a "Check your email" confirmation). The available buttons follow the company's AUTH_PROVIDERS, so a floor that only allows passkeys sees only that one.
Once in, the operator sets their context. If the company has more than one location, a "Location" submenu appears in the sidebar to pick which floor they're standing on. With a single location the choice is skipped entirely. This selection scopes the board, the assigned lists, and everything they report.
Console (shared-station) mode
Console mode turns a station into a shared kiosk. It requires the Business plan and the consoleEnabled company setting. Enabling console mode requires settings_update permission on the signed-in account; any operator can disable it.
In console mode an operator identifies themselves with a 4-digit PIN, not a full login. PINs are generated by Carbon and handed out by an admin — shown once when an operator is created or a PIN is reset, and stored only as a hash (see shop-floor PIN accounts). The station prompts to enter a PIN for the named operator, checks it, and attributes the work to that person. Three things stop it: "Incorrect PIN", "Too many incorrect PINs. Please wait a few minutes and try again." after repeated wrong guesses, or "No PIN set. Ask an admin to set a console PIN for you." if the person has none yet.
One station, many operators
A shared station is meant to hand off. "Switch Operator" re-prompts for a PIN so the next person takes over, and "Pin Out" clears the current operator. Ending the shift also pins out automatically. The PIN identifies who did the work; it is not a substitute for the person's real account.
The operations board
Released work appears on the Schedule board, with one column per . Each column lists queued by dispatch priority; the first card is the next scheduled operation.
The board is display and filter only. A Display popover lets each station tune its own view, toggling "Empty work centers" on or off and showing or hiding "Customer", "Description", "Due Date", "Duration", "Progress", "Status", "Sales Order", and "Thumbnail" on each card. Filters narrow the queue by "Work Center", "Process", "Tag", or "Assignee".
The floor shows the plan; it doesn't reshuffle it.
Operators can filter and focus, but they cannot drag a card to reschedule it. Rebalancing the plan, moving an operation to a different work center or shifting a job's dates, happens on the ERP scheduling boards, where a planner owns the sequence. What reaches the floor is the result.
Focused lists
Alongside the board, three sidebar lists cut the queue down to what one operator cares about right now:
Each card carries a status badge, its progress, and a deadline chip ("ASAP", "No Deadline", or a date that turns red when overdue). The badge tracks the operation's own status, not the job's.
Open Jobs
The "Open Jobs" list is the job-level view: columns for Job, Item, Quantity, Tracking, Assignee, Due Date, Deadline, and Status. One relabel to know here, because it trips people up:
A job at "Ready" shows as "Released" on the floor.
The ERP job status reach when they're cleared to run is Ready, but the MES Open Jobs list renders that same value as "Released" — the floor's word for "you can start this now." It's a display alias, not a different status. Closed jobs also surface in this list.
Opening a job shows its operations as a directed graph (the routing DAG), so an operator sees what feeds what. The toolbar lays it out "Left to Right" or "Top to Bottom" and offers "Fit"; nodes flag a "Rework" loop and a scrapped-quantity count when they apply.
Running an operation
Open an operation and the station panel is where the shift actually happens. A big control starts and stops the clock: "Start" opens a production event, "Pause" closes it. A toggle picks which kind of time is being logged, matching the three : "Setup", "Labor", or "Machine". The panel is tabbed into details, model (the 3D part view), procedure (work instructions, with attributes and parameters sub-views), and chat (a per-operation note thread).
The guided assembly view
An operation whose type is Assembly opens a guided 3D view instead of a plain part model: the assembly plays back one step at a time, and each step lights up the components it installs.
The player toolbar provides three visibility modes for exposing the current step:
The view only changes what the operator sees. It never changes the step order, the components a step installs, or anything reported back.
The author can also hide parts that get in the way on a particular step, and group steps into a sub-assembly that is built on its own before it goes in as one piece. Both play here exactly as authored; see assembly instructions.
The camera follows what is drawn.
Picking a view that hides parts also stops the camera treating them as obstacles. On Build and Focus, parts from later steps are not drawn, so the view angle never angles around them.
The same control appears in the ERP assembly editor, where an author checks that a step reads clearly before publishing. An author and an operator ask the model the same question, so the buttons mean the same thing on both screens.
Reporting quantities
Good, bad, and reworked units are reported separately, so yield stays honest:
Reworking in place is different from sending a unit back upstream. "Create Rework" does the latter: pick an operation under "Go back to operation", give a "Reason for rework", and Carbon re-runs every operation from that point forward to the current one.
Closing the operation is a distinct action. "Finish" ends any open events and flips the operation to Done. If quantities or steps aren't satisfied Carbon warns ("Insufficient quantity", "Steps are missing") and offers "Finish Anyways". A guard also fires when tracked material was never issued; the operator must acknowledge "I understand and want to complete without issuing" to proceed.
"End Operations" is not the same as finishing.
"End Operations" ends all the operator's active production events at once (a clean end-of-shift stop) and, when time cards are on, clocks them out. It does not complete or finish any operation. The work stays exactly where it was, ready to resume next shift.
Issuing material
Material is consumed against an operation from the same panel. The "Issue" action has an Adjustment Type: "Add to Inventory" (a Positive Adjmt.) or "Pull from Inventory" (a Negative Adjmt.). For serial- or batch- material, tabs let the operator "Scan" a barcode, "Select" from stock, or "Unconsume" to return material already issued.
Two edge cases surface right in the flow rather than failing silently. Issuing expired stock is governed by a policy (Warn, Block, or BlockWithOverride); an overridable block asks for a "Reason for issuing expired stock". And when a pick splits a batch, the station reports a "Batch Split Occurred" and offers to "Convert to New Size/Revision" or scrap the remainder.
Clocking in and out
When the timeCardEnabled company setting is on, the sidebar carries a time card: "Clock In" and "Clock Out", a "My Hours" view (a table of Date, Clock In, Clock Out, Duration), and a "Clocked in since" badge with the start time while a shift is open. Leave a shift open too long and Carbon nudges: after twelve hours it asks "Forgot to Clock Out?" with "I'm Still Working" or "Set Clock Out". Time cards are labor time for payroll and presence; they are separate from the per-operation production events that drive job costing.
Picking, quality, inspections, and maintenance
The floor does more than run operations. Four adjacent surfaces live in the same app.
On-floor picking
The "Picking" view lists the picking lists assigned to the operator. "Start" moves a list to In Progress; "Finish" takes it to Completed. Each line is worked with "Pick", "Unpick", "Short", or "Scan" (for tracked material), and a "No stock" badge flags an empty source. A short pick asks "How many were actually picked?" and records the shortfall with "Mark Short".
The floor can't reopen a closed picking list.
Once a list is Completed or Cancelled it locks. MES shows "This picking list is closed. Reopen it from the ERP to continue." — reopening requires an inventory permission the floor doesn't hold. See picking lists for the full lifecycle.
Quality issues and inspections
An operator who spots a problem raises it without leaving the station. "Create Quality Issue" captures an "Issue Type", a "Priority" (Low, Medium, High, or Critical), and a "Description", and files a non-conformance for quality to triage. See quality for how that record is worked.
Inspections and work instructions run as typed steps inside the procedure tab. A step is one of nine kinds:
Maintenance dispatch
When a machine goes down, an operator raises a maintenance dispatch from the floor. Every dispatch created here is Reactive by source (scheduled and non-conformance dispatches originate elsewhere). It carries a severity, a priority, and an OEE impact; choosing an OEE impact of "Down" ends the work center's active production events, because the center can't produce while it's under repair. The maintenance worker executes it from a detail view with Play, Pause, and Complete controls, a "Time Worked" total, and a "Spare Parts" section ("Add & Issue"), landing on "Maintenance Completed" when done.