/ architecture

A modular monolith on one data spine

Fourteen modules live inside one application and describe themselves: each carries its own manifest, router, services, tests and changelog. Adding a new module is a single line of registration.

01

Data sources

The plant historian is read read-only; a second data source carries field device data; file and model assets live in object storage.

02

Shared service layer

Every module reaches data through the same async clients. Response ceilings, sampling and status-code traps are solved in one place — modules do not rediscover them.

03

Modules

Each module registers with a self-describing manifest; a catalog endpoint feeds the interface. Modules do not reach into one another.

04

Interface

A single-page application; module routes load lazily and language catalogs are split per module, so the first paint stays light.

Security and compliance

Sign-in through a corporate identity provider; role × group authorization; deny by default. Secrets live in secret management, never in source; encryption in transit and at rest; audit logging for privileged actions; dependency and static security scanning on every release.