Skip to main content
← Projects

Online Model Viewer

2018-2021

A web app that paints live construction status onto an interactive 3D building model, replacing per-panel database lookups with a single click.

react · three.js · node · javascript

Online Model Viewer hero

Problem

A Sydney high-rise was having its combustible façade panels replaced — thousands of them, each moving independently through inspection, removal, installation, and sign-off. Status for every panel lived in the project management system (Procore), which was accurate but slow to interrogate: to answer “what’s the state of the north face this week?” a site manager had to identify the panel on a drawing, look up its ID, query the database, and read back a row.

The client (SHAPE) wanted that loop collapsed — a way to see progress across the whole building at a glance, drawn straight from the data they were already capturing, without learning to query anything.

Approach

I built a web app that projects the live panel data onto an interactive 3D model of the building. Each panel is colour-coded by status, so the state of an entire elevation reads in one look; clicking a panel pulls its full record on demand.

Diagram contrasting the old workflow (choose panel, locate on drawing, record panel ID, search the Procore database, read results) with the new one (locate on the 3D model, click the panel, see results)

The front end is React with Three.js for the model; a Node service sits between the browser and the Procore API, normalising responses and caching them so the interface stays responsive. It runs in any browser on desktop or phone — no install, which mattered for site managers working from the scaffold.

The Model Viewer showing a building elevation with panels colour-coded green for completed against a grey wireframe

Decisions

The model is the interface, not a database query. The whole point was to make the 3D view the primary index into the data. Spatial memory does the lookup work — managers know where a panel is far better than they know its ID — so selecting one in space is faster than any search field.

A selected panel showing its ID, an aluminium-panels label, stage tabs, a photo of the completed install, and a Status: Pass result

A Node middleware layer rather than calling Procore directly. The API wasn’t shaped for “give me every panel’s current stage,” and rate limits made per-panel calls from the browser a non-starter. The middleware batches and caches, which is what keeps the click-to-detail interaction instant.

Built to generalise. Panel definitions and status mappings are data, not code, so the same viewer could be pointed at another project’s model and feed.

Outcome

The viewer went into daily use by the client and site managers, and became the default way to check progress on the project. On the strength of it, JHA’s BIM team was engaged to roll the same approach out across further projects — it shifted how the team was positioned commercially, not just how one site reported status.

The analysis panel charting status progression across the building over several months

Being able to track progress in real time gives site managers far greater control, and makes it obvious at a glance whether every trade is doing its part. — SHAPE

What I’d revisit: the caching layer was tuned to one project’s update cadence, and generalising it properly — rather than per-deployment tuning — would have made the multi-project rollout cheaper.

References

Built at JHA Services for SHAPE. No public URL — the app is proprietary.