The problem
The systems that run a plant — ERP, MES, test, logistics — are terrible places to run reports. Every ad-hoc query competes with the transactions keeping production moving, so reporting gets rationed: locked down, batched overnight, or funneled through whoever has database access. The people with questions about production data were exactly the people who couldn't touch it.
What I built
- A consolidated "digital twin" reporting database in SQL Server — production data replicated into one queryable place, isolated from the servers running the plant.
- Grafana dashboards and Angular reporting UIs on top of it, so operations staff answer their own questions instead of filing a request and waiting.
- A family of Angular/TypeScript applications for quality, manufacturing, logistics, and administration — the primary internal tooling for operations staff — backed by C#/.NET services.
- Reusable UI modules deliberately designed to be shared across future applications, so each new internal app started from a proven base instead of a blank page.
- End-user training and post-launch support for every application deployed — shipping internal tools means owning them after launch.
Decisions that mattered
Separating "the data you run the plant on" from "the data you ask questions of" is the whole design. Once the reporting copy existed, saying yes to a new dashboard or an unusual query became cheap and safe — the failure mode of a bad query changed from "slowed down production" to "slowed down a report."
The twin stayed current through scheduled query jobs — plain SQL on a schedule pulling from the production systems, not an exotic replication stack. Boring on purpose: easy to reason about, easy to extend when a new dashboard needed data the twin didn't have yet.
The reusable module library was a bet that there would always be a next internal app. There always was. Paying a design tax on the first app to make the fifth one fast is the kind of decision that never shows up in a sprint demo and dominates the economics of internal tooling.
Outcome
Operations staff across quality, manufacturing, and logistics worked in these applications daily for years. The digital twin itself was mine end to end — the scheduled jobs that kept it fed, the queries behind the reports, and the Grafana dashboards on top — designed, built, and run solo.