Parts
Your spare-parts catalog: what you have, what your fleet needs, and what repairs consume

Overview
Spare parts are the single biggest operational risk most operators don't track well. A hashboard fails at 2am; the on-call tech walks to the shelf and finds the bin empty because yesterday's repair wasn't written down. The machine sits idle for weeks waiting on a replacement. Parts connects three things that are usually disconnected: what parts exist (the catalog), what the fleet needs (fleet demand), and what repairs consume (ticket-linked consumption).
Parts and the miner assets are the two views of the Inventory section, switched with the Miners | Parts toggle at the top of the page. Miners is the asset-lifecycle view of your machines; Parts (this page) is the spare-components catalog.
Miners vs. Parts
| Miners (assets) | Parts | |
|---|---|---|
| What it is | Unique, serialized machines. | Fungible spare components (one S21 hashboard is interchangeable with another). |
| Identified by | Asset code / serial. | An auto-generated SKU (e.g. HB-0001). |
| Tracked as | Individual units with a lifecycle status. | A type of part with a quantity. |
| Scope | The whole workspace. | One site: each part's stock belongs to a single site. |
The parts catalog
Each row in the Parts table is one part at one site, identified by a SKU that Commander generates and never changes. A part has:
| Field | Notes |
|---|---|
| SKU | Auto-generated and immutable (e.g. FAN-0003). |
| Name | e.g. "Antminer S21 Hashboard". |
| Category | One of the categories below, each with a colored icon for at-a-glance scanning. |
| Site | The single site this stock lives at. Set on creation; not editable afterward. |
| Unit cost | Optional. |
| Supplier | Optional. |
| Compatible models | The miner models this part goes into, and how many per miner; this drives fleet demand (see Bill of Materials). |
| Total / Reserved / Available | Stock counts (see Stock: total, reserved, available). |
| Threshold method & stock status | How low-stock is calculated and the resulting health (see Thresholds & stock status). |
| Custom fields | Any extra properties your workspace defines (see Settings). |
Categories: Hashboard · Fan · PSU · Control board · Cable · PDU · Connector · Other.
Parts are per-site. When you add a part for several sites at once, Commander creates one part per site, each with its own SKU and its own independent stock. A ticket can only reserve parts from its own site.
Add a part with Add Part; import many at once via CSV import.
Stock: total, reserved, available
Three numbers describe every part's stock:
- Total: how many units are physically at the site.
- Reserved: units spoken for by open tickets but still on the shelf.
- Available:
Total − Reserved. This is what gates new reservations.
Stock quantities are read-only in the table. You change the Total count in the part detail page via Adjust Stock.
Reserved vs. consumed
This is the link between Parts and Tickets:
- Reserved: a technician links a part to an open ticket. Available drops; Total is unchanged. The unit is claimed so no one else plans to use it.
- Consumed: the ticket closes (a Completed lane). Reserved parts are deducted from Total, and a Ticket consumption entry (stamped with the ticket's code) is written to the part's stock history.
- Released: the ticket is canceled (or the reservation is removed). The reservation is returned to Available; Total is untouched.
This two-step flow (reserve → consume) exists to prevent double-allocation: two technicians can't both plan on the last hashboard. See Tickets → Parts on a ticket for the ticket side.
Adjusting stock
On the part detail page, Adjust Stock applies a delta (+/−) with a reason that feeds the part's stock history:
Restock · Correction · Damaged · Other
Ticket-driven consumption is not a manual reason; it's recorded automatically when a ticket closes, and shows in the history as Ticket consumption with a link to the ticket.
Thresholds & stock status
Every part can define a Target (the stock level you want to maintain) and a Reorder point (the level that triggers a low-stock alert). A toggle in the part detail modal picks how these are set:
- Manual: absolute quantities. Set the target (e.g. 100 units) and reorder point (e.g. 20 units) directly. Best for parts that don't map to per-miner counts: cables, PDUs, tools.
- Fleet demand: thresholds as a percentage of fleet demand (see below). Best for parts that scale with your fleet: hashboards, fans, PSUs.
- Not set: no thresholds; the part isn't tracked for low-stock.
From the thresholds, Commander derives each part's stock status:
Healthy · Low · Critical
When a part crosses its reorder point (including when a ticket close consumes it), a low-stock alert fires.
Fleet demand
The idea: Commander already knows how many miners you run and how many of each part they contain, so it can compute exactly how many of a part your fleet could need, and set thresholds off that number.
For each part:
Fleet demand = Σ (parts per miner × deployed miners of that model)
Example: a hashboard used by two models:
| Model | Parts per miner | Deployed miners | Subtotal |
|---|---|---|---|
| Antminer S21 | 3 | 180 | 540 |
| Antminer S21+ | 3 | 120 | 360 |
| Total fleet demand | 900 |
That 900 isn't how many you keep on the shelf; it's the denominator for your threshold percentages:
| Threshold | Meaning | Example (900 fleet demand) |
|---|---|---|
| Total Target (X%) | Ideal stock level; restock up to this. | 10% = 90 |
| Reorder point (Y%) | Triggers a low-stock alert; time to order. | 5% = 45 |
The gap between target and reorder is your supplier lead-time buffer: if replacements take three weeks to arrive and you burn ~8 hashboards a week, you want enough runway between "time to order" and "restocked."
Bill of Materials (BOM)
Fleet demand is only right if Commander knows what's inside each miner. That's the BOM: a cross-reference of models (rows) against part SKUs (columns), where each cell is how many of that part a miner of that model contains, with a fleet-demand total per part at the bottom.
The BOM is a read-only view; its data comes from the Compatible models you set on each part (e.g. "Antminer S21: 3 hashboards per miner"). Open it with the BOM button in the Parts controls bar.
Parts table, KPIs & filtering
The Parts view opens on a KPI row: Total SKUs, Total units, Low stock (SKUs), Critical (SKUs), and Consumed (30d, units).

Filtering follows Commander's two-level pattern:
- Category dropdown in the controls bar for quick narrowing by part type.
- Funnel icon opens the filter dialog: Category, Stock status (Healthy / Low / Critical), Supplier, Threshold method (Fleet demand / Manual / Not set), and a timeframe.
Parts bulk actions
Select rows to enable Bulk Actions, then apply the same value across all selected parts (Category, Supplier, Threshold method, Total Target %, or Reorder point %), changing multiple properties in one pass. A separate Adjust Stock bulk action applies a signed quantity change with a reason (Restock / Correction / Damaged / Other) to every selected part, respecting per-site permissions and negative-stock guards. Delete releases any active reservations before removing the parts.
Part detail page
Click a part to open its detail page:
- Part details: edit name, category, unit cost, supplier, and compatible models. SKU and Site are read-only.
- Stock KPIs: Total, Reserved, Available, and Stockout (days) (a runway estimate from recent consumption).
- Adjust Stock: apply a delta with a reason (Restock / Correction / Damaged / Other).
- Stock vs. threshold: a meter showing current stock against target and reorder point.
- Threshold settings: switch between Manual and Fleet demand and set the values.
- Stock activity: a history table plus a per-day chart. Ticket consumption entries link back to the ticket that consumed the part.
- Notes & files: attach notes and documents to the part.
CSV import
Import or update many parts at once with a CSV. Existing parts are matched by SKU; a row with a blank SKU and a site creates a new part.
Settings
Parts share the Inventory ⚙ Settings dialog. Open it from the Parts view to manage parts Custom Fields: extra properties (text, number, date, select, and more) that then appear on the part, in the Parts table, and in the filter dialog. See Inventory → Settings.