Case study 08 / 17Azure Cloud
Cloud delivery of a 3D digital twin and a client demo at parity
Moved a 3D twin to its own cloud host with managed settings and caching, and brought its client demo level with the product, checked daily.
Stack
- Azure App Service
- Azure CLI
- Node.js
- CesiumJS
- WebGL
- Web Workers
- Brotli
- Next.js
01 · How it works
- Data flow
What it does
I moved a browser-based 3D twin of a pipeline system and a channel from a developer machine to its own cloud host, with its settings and imagery token managed outside the code. In the same effort I brought the product's cloud demo, the version external clients evaluate, from 229 commits behind to parity.
Read more
Every product API route is now answered or excluded for a stated reason, and a daily check flags new drift.
5 connections· select a part to trace it
- Build package to Cloud app server: precompressed brotli files
- Cloud app settings to Cloud app server: token on restart, no deploychanged
- Web client to Cloud app server: parallel requests at start
- Cloud app server to Web client: brotli, or 304 with 0 byteschanged
- Web client to Terrain service: terrain requests with token
02Results
- R01Lower is better
Client demo views failing a walkthrough (of 38)
Before 14, after 0, eliminated. Lower is better.BeforeAfter - R02Lower is better
Data a repeat visit downloads
Before 9.4 MB, after 0.01 MB, 940× lower. Lower is better.BeforeAfter - R03Lower is better
First visit, page load to scenario ready
Before 5.1 s, after 4 s, −22%. Lower is better.BeforeAfter
What it achieved
- Client demo: 14 of 38 views failing → 0, at parity with the product
- API coverage: 55 routes unanswered → every route answered or excluded for a stated reason
- Imagery token: hard-coded in source → one cloud app setting, rotated without a redeploy
Read more
- Drift: found by hand → flagged the same day, and a lost patch anchor stops the copy
- Repeat visit: 9.4 MB downloaded again → 0.01 MB or less, served from cache
The challenge
The twin ran from a developer machine with a hard-coded imagery token, so rotating the token required a code change. In the cloud it was slow for reasons the server could not explain: the host idled near 5% CPU while the browser chained requests, waited on terrain and recomputed the physics on every visit, with nothing cached.
Read more
The client demo had drifted much further: 229 commits behind, 55 product API routes unanswered and 14 of 38 views failing a walkthrough. What external clients evaluated no longer matched what the product does.
What I learned
Measure before buying hardware: a larger plan would have doubled the cost of a server idling at 5% CPU, when the delays lived in the browser. I planned to precompute the default scenarios, then measured the physics at 72 ms; the real wait was worker start-up, so the first scenario now runs on the page thread with nothing stored to go stale.
Read more
I rejected a token-hiding proxy, since the browser receives the token regardless. The demo runs the product's own engines over recorded scenarios: current behavior, nothing staged.
Stack
- Azure App Service
- Azure CLI
- Node.js
- CesiumJS
- WebGL
- Web Workers
- Brotli
- Next.js
Skills
- Cloud deployment
- Web performance
- HTTP caching
- Secrets management
- Drift detection

