Plug-in model. Every demo field in this dashboard comes from a single JS object shape (vehicles[], items[], PLACES{}, DRIVERS[]). To go live, replace the seed arrays with a JSON feed from the source systems below. The renderer doesn't care if data is mocked or real — same shape in, same UI out.
Fleet & Vehicles · Source: ELD / TMS / Fleet Maintenance
| Field | Demo value | Status | Real source |
unitId, VIN, plate, DOT # | WCS-T42 | Tracked | FMCSA filing & fleet roster (always on file — required since 1995) |
| Live GPS (lat/lng, heading, speed) | Animated demo | Tracked | ELD/telematics — likely Samsara, Geotab, or Omnitracs. Ask: "Do we have an API key / webhook export?" |
| HOS (Hours of Service) status | — | Tracked | ELD provider — mandatory since 2017. Same API as GPS. |
| Vehicle type / hazmat-equipped flag | tanker / box / rail | Tracked | Fleet maintenance system or fleet asset master |
| Maintenance / fuel level | — | Tracked | Telematics + maintenance log |
Driver Roster · Source: HR / Compliance / DOT Files
| Field | Demo value | Status | Real source |
| Name, employee #, hire date | Generic placeholder names | Tracked | HR system (ADP / Paychex / Paylocity) |
| CDL #, class, endorsements (H, X, N, T) | CDL-A H/X N | Tracked | DOT driver qualification file — required to maintain |
| CDL expiration, medical card, hazmat retest | — | Tracked | DOT compliance system (often DriverFacts, J.J. Keller) |
| Safety score | 96 | Computed | Derived from CSA / FMCSA score + internal incident log. Some TMS surface it; otherwise calc in-house from inspections + accidents per 100k mi. |
| On-time % | 94% | Computed | Not surfaced by most TMS by default. Compute as (deliveries within delivery window) / (total deliveries) over rolling 90 days from BOL timestamps. |
| Lifetime miles | 487k | Tracked | ELD aggregate per driver |
On using real names: avoid scraping LinkedIn — Webb's HR almost certainly has a clean driver export with full CDL data. Pulling from LinkedIn would mismatch any field that requires verified data (CDL #, hazmat expiration). The driver array shape here is exactly what an HR CSV export looks like; map columns directly.
Load Manifests · Source: TMS / ERP
| Field | Demo value | Status | Real source |
| Bill of Lading lines (productId, qty, weight) | Webb product IDs (real) | Tracked | ERP. For chemical distributors, very likely Datacor Chempax or SAP IS-Oil/Chemicals. |
| Hazmat info: UN #, hazard class, packing group, ERG #, placard | — | Tracked | Verisk 3E or VelocityEHS. Critical for compliance. |
| Customer ship-to / bill-to (with geocode) | Real Midwest customers | Tracked | ERP customer master. Geocodes may need a one-time enrichment via Google Maps API or Mapbox. |
| Order value (cost & sell) | Computed from unit price × qty | Tracked | ERP. Sell-side from invoice; cost-side from PO. |
| Real-time ETA | From GPS progress | Computed | Modern TMS (McLeod LoadMaster, MercuryGate) compute live. Older setups give static ETA — compute from GPS + Google Distance Matrix API if needed. |
Rail Tank Cars · Source: Railroad EDI / RailInc
| Field | Demo value | Status | Real source |
| AAR car #, owner, type (DOT-111 etc.) | CSXX-#### | Tracked | AAR Umler database — every car has a permanent record. |
| Waybill / cargo / hazmat | — | Tracked | Railroad EDI 417 messages — CSX / NS / Marquette Rail send to shippers. |
| Last reported location (CLM) | — | Tracked | RailInc CLM (Car Location Messages) — fires at every interchange/yard. Not continuous GPS but reliable. |
| Live GPS on the car itself | Animated demo | Ask | Only if Webb's cars are GPS-equipped (Trinity TrackLite, RailPulse). Many tank-car fleets aren't — confirm before promising live blip. |
Floor Inventory · Source: WMS / ERP
| Field | Demo value | Status | Real source |
| Product ID, CAS, family, container, qty on hand | Real Webb SKUs | Tracked | ERP / Datacor Chempax inventory module. |
| Floor location (aisle/bay/level) | Auto-generated | Ask | WMS — if Webb uses bin-level location codes. Otherwise warehouse foreman knows it; may need to digitize via one-time bin scan. |
| Days on floor, last sale, last purchase | Demo | Tracked | Derive from ERP transaction history — sales orders & purchase receipts joined by SKU. |
| Velocity (sales/wk) | Demo | Computed | Rolling 30-day average from sales order line items. Standard inventory analytics query. |
What to Ask For — Punch List
- One sample export from each system: TMS, ELD, ERP, HR. CSV or JSON; even a week of data is enough to confirm the schema.
- Confirmation of telematics provider (Samsara / Geotab / Omnitracs / other) and whether API access is already provisioned.
- Confirmation of ERP — if it's Datacor Chempax, their REST API maps almost 1:1 to the data shape used here.
- List of rail-car-fleet IDs and the carriers (CSX, NS, MQT). Confirm whether cars have onboard GPS or only CLM-level tracking.
- Customer master with geocoded lat/lng. If only addresses, run a one-time geocode (Google Maps API ~$5/1000 addresses).
- Pulling driver safety/on-time KPIs: confirm if TMS has them; if not, agree on a definition and back-compute from BOL data.
Drop-in shape. When you have real data, replace the JS seed arrays with fetch('/api/vehicles').then(r => r.json()). Keep the field names identical: {unitId, type, plate, driver, origin, destination, progress, status, cargo[], etaHours}. Everything in the UI is keyed off these.