F2 Innovations · Fleet Management Dashboard
F2 Innovations · Fleet Management Dashboard

Fleet control,
zero ambiguity

Fleet control,
zero ambiguity

Fleet control,
zero ambiguity

A responsive web dashboard for monitoring and operating a live fleet of

industrial 3D printers — designed to surface machine state fast and enable

intervention without losing context

A responsive web dashboard for monitoring and operating a live fleet of industrial 3D printers — designed to surface machine state fast and enable intervention without losing context

A responsive web dashboard for monitoring and operating a live fleet of industrial 3D printers — designed to surface machine state fast and enable intervention without losing context

Product Design · End - To - End · Iot

Product Design · End - To - End · Iot

// Context

A live printer fleet demands more than simple monitoring
A live printer fleet demands more than simple monitoring

A plant operator is tracking multiple printers at once: active jobs, material consumption, thermal state, and fault conditions across the floor. When a machine fails mid-print, the interface has to show what happened, what is at risk, and what action is safe to take next.

A plant operator is tracking multiple printers at once: active jobs, material consumption, thermal state, and fault conditions across the floor. When a machine fails mid-print, the interface has to show what happened, what is at risk, and what action is safe to take next.

// Problem

Four failure modes the interface had to design against
Rules the interface has to hold

These aren't abstract usability goals — each one is a concrete way a fleet dashboard goes wrong in operation.

These aren't abstract usability goals — each one is a concrete way a fleet dashboard goes wrong in operation.

These aren't abstract usability goals — each one is a concrete way a fleet dashboard goes wrong in operation.

P-01

Identical machines, identical names

The floor runs two “F2 Pro” and two “F2 Lite” units. Any view that names a machine without placing it invites intervention on the wrong printer.

P-02

Metrics that contradict each other

When each screen computes its own numbers, output on the overview disagrees with output in analytics — and the operator stops trusting both.

P-03

Alert noise burying the one that matters

Low-stock notices, maintenance reminders, and a critical thermal fault all compete for the same attention. Repetition of one fact across widgets multiplies the noise.

P-04

Dashboards that need a hunt

If finding the problem requires scrolling, or worse, visiting three screens, detection time scales with fleet size. The overview must resolve at a glance — on one screen.

P-01

Identical machines, identical names

The floor runs two “F2 Pro” and two “F2 Lite” units. Any view that names a machine without placing it invites intervention on the wrong printer.

P-02

Metrics that contradict each other

When each screen computes its own numbers, output on the overview disagrees with output in analytics — and the operator stops trusting both.

P-03

Alert noise burying the one that matters

Low-stock notices, maintenance reminders, and a critical thermal fault all compete for the same attention. Repetition of one fact across widgets multiplies the noise.

P-04

Dashboards that need a hunt

If finding the problem requires scrolling, or worse, visiting three screens, detection time scales with fleet size. The overview must resolve at a glance — on one screen.

// How Overview reads

// How Overview reads

Glance, live, decide
Glance, live, decide

Twelve widgets on one screen resolve in three horizons. Each layer answers a different question, and each takes a different span of attention to read.

Twelve widgets on one screen resolve in three horizons. Each layer answers a different question, and each takes a different span of attention to read.

Twelve widgets on one screen resolve in three horizons. Each layer answers a different question, and each takes a different span of attention to read.

Glance

Horizon 1 — top strip

2s
5 KPIsone question each
Is anything wrong?5 / 12

Live

Horizon 2 — middle band

10s
3 widgetsdonut · heatmap · queue
What's running?3 / 12

Decide

Horizon 3 — lower band

60s
4 listsresolve on Overview
What needs me next?4 / 12

Glance

Horizon 1 — top strip

2s
5 KPIsone question each
Is anything wrong?5 / 12

Live

Horizon 2 — middle band

10s
3 widgetsdonut · heatmap · queue
What's running?3 / 12

Decide

Horizon 3 — lower band

60s
4 listsresolve on Overview
What needs me next?4 / 12

Fleet state. Machine health.
Job progress. All inline

Fleet state.
Machine health.
Job progress. All inline

Print ActivityLast 20 weeks
DecJanFebMarApr
Mo
We
Fr
Su
Less
More

203

Total prints

14.3

Avg / week

Mar 17

Peak week

Print ActivityLast 20 weeks
DecJanFebMarApr
Mo
We
Fr
Su
Less
More

203

Total prints

14.3

Avg / week

Mar 17

Peak week

Print ActivityLast 20 weeks
DecJanFebMarApr
Mo
We
Fr
Su
Less
More

203

Total prints

14.3

Avg / week

Mar 17

Peak week

Last Service60d cycle
0d ago31d left
Day 0
0102030405060
2025-12-15Due in 31d
Last Service60d cycle
0d ago31d left
Day 0
0102030405060
2025-12-15Due in 31d
Last Service60d cycle
0d ago31d left
Day 0
0102030405060
2025-12-15Due in 31d
Fleet HealthDetails →
85%
Normal
7-day delta−3%
Target90%
StatusNormal
Fleet HealthDetails →
85%
Normal
7-day delta−3%
Target90%
StatusNormal
Fleet HealthDetails →
85%
Normal
7-day delta−3%
Target90%
StatusNormal
Printer Health7d trend
0%−1.5%
MTWTFSS
0% today
Printer Health7d trend
0%−1.5%
MTWTFSS
0% today
Printer Health7d trend
0%−1.5%
MTWTFSS
0% today

F2

F2

// OVERVIEW IN MOTION

A fleet overview built for fast decisions
A fleet overview built for fast decisions

The overview brings machine health, active jobs, alerts, and material risk into one surface. Operators can scan the floor state in seconds and see where intervention is needed next.

The overview brings machine health, active jobs, alerts, and material risk into one surface. Operators can scan the floor state in seconds and see where intervention is needed next.

The overview brings machine health, active jobs, alerts, and material risk into one surface. Operators can scan the floor state in seconds and see where intervention is needed next.

// Process — The system

One operational model
One operational model

Overview aggregates across domains; every domain screen owns its facts. Creation lives in Jobs and Models, machines only assign — the same rule everywhere keeps each screen's job unambiguous.

Overview aggregates across domains; every domain screen owns its facts. Creation lives in Jobs and Models, machines only assign — the same rule everywhere keeps each screen's job unambiguous.

Overview aggregates across domains; every domain screen owns its facts. Creation lives in Jobs and Models, machines only assign — the same rule everywhere keeps each screen's job unambiguous.

Printers

Printers

Problems-first fleet list. Duplicate model names are real on the floor, so every row disambiguates by location — and idle rows say what they're ready for.

Problems-first fleet list. Duplicate model names are real on the floor, so every row disambiguates by location — and idle rows say what they're ready for.

Printer detail

Printer detail

A fixed grid in operator-flow order: identity → alert → job + thermals + controls → KPIs → context. The layout is identical for every machine, because operators compare machines by switching between them.

A fixed grid in operator-flow order: identity → alert → job + thermals + controls → KPIs → context. The layout is identical for every machine, because operators compare machines by switching between them.

Error state

Error state

The “why am I here” layer. The alert banner carries the fault context, the job card switches to honest stopped-at math with Retry where the failure lives, and temperature history auto-opens — thermal drift is what the operator came to inspect.

The “why am I here” layer. The alert banner carries the fault context, the job card switches to honest stopped-at math with Retry where the failure lives, and temperature history auto-opens — thermal drift is what the operator came to inspect.

// OPERATIONAL PRINCIPLES

Jobs queue and material risk have to stay connected
Jobs queue and material risk have to stay connected

The printers view surfaces what needs attention across the floor. The materials view shows what can slow or block production next. Together, they turn monitoring into operational awareness.

The printers view surfaces what needs attention across the floor. The materials view shows what can slow or block production next. Together, they turn monitoring into operational awareness.

The printers view surfaces what needs attention across the floor. The materials view shows what can slow or block production next. Together, they turn monitoring into operational awareness.

STATE FIRST

STATE FIRST

The production queue owns creation.

The production queue owns creation.

INLINE EXCEPTIONS

INLINE EXCEPTIONS

Warnings surface inline, not after the fact.

Warnings surface inline, not after the fact.

INVENTORY AS SIGNAL

INVENTORY AS SIGNAL

Material status is treated as an operational input, not a back-office metric.

Material status is treated as an operational input, not a back-office metric.

RISK BEFORE SHORTAGE

RISK BEFORE SHORTAGE

Low-stock states appear early enough to protect active jobs and planning.

Low-stock states appear early enough to protect active jobs and planning.

Monitoring

Monitoring

One range control drives every number. All metrics derive from the same data model as Overview — the performance leaderboard here agrees with the dashboard's output widget, digit for digit.

One range control drives every number. All metrics derive from the same data model as Overview — the performance leaderboard here agrees with the dashboard's output widget, digit for digit.

// Design principles

Rules the interface has to hold
Rules the interface has to hold

These aren't goals or aspirations — they're constraints that emerged from the operational model. Each one is visible in the product: in the order of elements, in what's in the row, in what mobile doesn't let you do.

These aren't goals or aspirations — they're constraints that emerged from the operational model. Each one is visible in the product: in the order of elements, in what's in the row, in what mobile doesn't let you do.

These aren't goals or aspirations — they're constraints that emerged from the operational model. Each one is visible in the product: in the order of elements, in what's in the row, in what mobile doesn't let you do.

238°C/240°C
Hotend · target
28%/100% · 4h 22m left
Pairing carries meaning.

Critical values appear in relation to one another, giving the operator context at a glance and reducing interpretation time.

CompoundSignal grammar
F2 Quart · filament out
18 min
F2 Lite · review print
2h 30m
F2 Max · running
8h 14m
Time sets the order.

Rows are arranged by time to attention, so the first item signals where risk is closest and focus should begin.

SortingUrgency
No signal
Camera · P-004Last seen 14:22
Empty states carry status.

A missing feed still communicates system state through color, timestamp, and framing, so the operator can place it immediately.

Empty stateAlert
Mobile actions · P-0043 of 5
Pause print
Resume print
Cancel print
Configure machineDesktop only
Schedule jobsDesktop only
Mobile focuses on remote-safe actions.

Its role is quick intervention and status checks, with deeper setup reserved for the desktop workflow.

MobileScope
238°C/240°C
Hotend · target
28%/100% · 4h 22m left
Pairing carries meaning.

Critical values appear in relation to one another, giving the operator context at a glance and reducing interpretation time.

CompoundSignal grammar
F2 Quart · filament out
18 min
F2 Lite · review print
2h 30m
F2 Max · running
8h 14m
Time sets the order.

Rows are arranged by time to attention, so the first item signals where risk is closest and focus should begin.

SortingUrgency
No signal
Camera · P-004Last seen 14:22
Empty states carry status.

A missing feed still communicates system state through color, timestamp, and framing, so the operator can place it immediately.

Empty stateAlert
Mobile actions · P-0043 of 5
Pause print
Resume print
Cancel print
Configure machineDesktop only
Schedule jobsDesktop only
Mobile focuses on remote-safe actions.

Its role is quick intervention and status checks, with deeper setup reserved for the desktop workflow.

MobileScope
238°C/240°C
Hotend · target
28%/100% · 4h 22m left
Pairing carries meaning.

Critical values appear in relation to one another, giving the operator context at a glance and reducing interpretation time.

CompoundSignal grammar
F2 Quart · filament out
18 min
F2 Lite · review print
2h 30m
F2 Max · running
8h 14m
Time sets the order.

Rows are arranged by time to attention, so the first item signals where risk is closest and focus should begin.

SortingUrgency
No signal
Camera · P-004Last seen 14:22
Empty states carry status.

A missing feed still communicates system state through color, timestamp, and framing, so the operator can place it immediately.

Empty stateAlert
Mobile actions · P-0043 of 5
Pause print
Resume print
Cancel print
Configure machineDesktop only
Schedule jobsDesktop only
Mobile focuses on remote-safe actions.

Its role is quick intervention and status checks, with deeper setup reserved for the desktop workflow.

MobileScope
A dashboard that reads before you navigate
A dashboard that reads before you navigate

// Design System

Token-based product system
Token-based product system
Token-based product system

Core and semantic token architecture for React responsive Web App. It underpins every spacing, color, and typography decision, structured for implementation.

Core and semantic token architecture for React responsive Web App. It underpins every spacing, color, and typography decision, structured for implementation.

export function StatusBadge() {
  return (
    <span style={{
      fontSize: "var(--typography-caption-fontSize)",
      color: "var(--color-status-success-fg)",
      background: "var(--color-status-success-bg)",
      border: "1px solid var(--color-status-success-border)",
      padding: "0 var(--space-control-sm)",
      borderRadius: "var(--radius-pill)"
    }}>Active</span>
  )
}