The factory line, the fleet, the grid, and the supply chain all run on the same underlying platform. Nothing about the core changes when a new plant, sensor type, or machine joins — a new source is an adapter and a topic; a new domain is a schema, not a rewrite. That's what makes it scale.
Data rises from raw signals to a synced model to a decision, then comes back down as an action. Every layer only talks to the one next to it, through the streaming bus — which is what lets any layer scale, fail, or get replaced without the others noticing. Dashed chips mark exactly where a new source, protocol, or domain gets added.
IoT sensors, SCADA and PLCs on the plant floor; ERP, fleet telemetry, and supply-chain systems across the wider network. None of them know a digital twin exists — the only requirement is that they can be read from.
Plant & EquipmentNothing gets re-engineered to be watched — any system that can be read from can feed the twin.
Protocol adapters translate each source's native format — HL7, DICOM, OPC-UA, MQTT, a plain webhook — into one standard event, then publish it to a shared streaming bus, once, in one place.
Protocol adaptersA burst of readings or a dead sensor can't take down anything downstream — the bus absorbs it.
Continuous readings go into a time-series store; scans and documents go into a data lake; an entity & identity registry resolves which asset or site an event actually belongs to.
Five source systems' worth of data about the same machine lands on one twin, not five.
A state engine holds each entity's current synced state; a registry of pluggable domain models defines a "Wind Turbine" twin versus a "Delivery Truck" twin; history & versioning keeps every past state queryable.
A new machine type or asset class ships as a schema change, not a platform rewrite.
A simulation engine runs what-if scenarios; domain-specific ML and risk models — bearing-failure prediction, demand forecasting, grid-load risk — score and predict; a rules engine decides what crosses the threshold into an alert.
Every model runs independently — one team's risk model never waits on another's release.
REST/GraphQL APIs for anything querying twin state, a workflow & orchestration layer for multi-step actions, and a notification service for anything time-sensitive.
One API surface for every consumer — a new dashboard never has to learn the platform's internals.
Operator and control-room dashboards, technician apps, and write-back into the systems of record — a command sent to SCADA, an adjusted ERP order, a work order closed out.
The action taken here becomes tomorrow's event back at Sources — the loop closes itself.
OAuth2 · encryption · audit trail
tracing · metrics · logs
containers · auto-scale · multi-tenant
The cards above show what each layer is made of. This is the same seven layers seen as a single event actually experiences them — one vibration reading, start to finish.
Sources
0.8g vibration spike, on-device
1 · sensorIntegration
standard event, topic: vibration
2 · adapterData Platform
point stored, asset resolved
3 · storageTwin Core
twin state updated
4 · state engineIntelligence
risk flagged: bearing wear
5 · risk modelDelivery
work order drafted via API
6 · notificationConsumption
maintenance team notified
7 · dashboardA concrete walk-through: a new production site wants its sensor feed on the same platform. Nothing above the integration layer has to know this happened.
An adapter translates the plant's OPC-UA sensor feed into the platform's standard event schema.
Integration LayerEvents publish to the streaming bus under a new topic. Existing consumers are completely unaffected.
Streaming BusThe "Production Line" domain model already exists in the registry — this plant's machines reuse it, no new schema needed.
Twin CoreRisk models and dashboards pick up the new stream automatically — same APIs, same UI, new plant.
Intelligence & AppsThis is a concept architecture, built to explain why the platform scales — not a production spec. A handful of real engineering decisions are left out on purpose so the shape stays clear. Here's what an actual build would still need to answer.