Project

Property Twin

A walkthrough video of a property becomes a living digital twin: a 3D model you can explore in the browser and, as the product grows, the objects, systems, documents and maintenance history anchored to it.

The idea

One twin, every stage of ownership

Property tools are fragmented. A realtor uses one platform for the listing, a buyer gets a PDF inspection report, a contractor works off photographs texted to them, and the homeowner ends up as the only thing holding it together — badly, from memory.

Property Twin is built on the premise that all of those people are looking at the same building, and should be looking at the same model of it. A property starts as a listing, becomes a workspace for contractors and inspectors, and ends up a living record for whoever owns it. Unlike 3D tour software, the twin is meant to live with the property rather than exist for the length of a sale.

The capture step has to be something anyone can do, which is why the input is a walkthrough video shot on a phone rather than a scanning rig.

Status

What works today

Upload a walkthrough in the browser, watch the reconstruction job run, and get back a structured scene — rooms with walls, doors, doorways and windows cut through them, and labelled objects placed inside. End to end, in a real browser, against real Postgres and object storage, with the reconstruction itself on a GPU on another machine.

The product's shape is settled, and it is worth being precise about: this is a structural hologram, not a photoreal tour. The output is geometry you can measure and hang information off, not a pretty flythrough.

Accuracy is graded against a tape measure rather than by eye. A closed loop sends a capture to the GPU box and scores the resulting model against known room dimensions with nobody watching — the front room of the test walk currently passes on every band. Two rooms of the three-room walk are still open, and they turn on a 1.4 m cased opening that the room split reasonably reads as open-plan.

Architecture

Bytes never touch the API

Reconstruction runs on a GPU on a different machine from everything else, and that worker talks only to a queue and an object store — never to the database, never to a shared disk. That single constraint shapes the whole system.

ANOTHER MACHINE — GPU Your browser React + R3F API FastAPI Object store MinIO / S3 Postgres jobs, scenes Queue Reconstruction Celery worker create, poll rows enqueue job video and model bytes worker reads and writes bytes
Thick lines carry bytes, and none of them pass through the API. A walkthrough capture is gigabytes, so the browser transfers directly to the object store through presigned URLs; the API only ever moves JSON.
Reconstruction

One forward pass instead of a pipeline

The reconstruction engine is a swappable interface — four engines are registered against one contract suite, and which one runs is a single environment variable. A fresh checkout defaults to a fake engine that returns a canned cloud whatever you upload, because a checkout has no GPU and no object store; the page says so above the viewer rather than pretending otherwise.

The deployed engine regresses poses, depth, intrinsics and one global metric scale together, in a single pass. The previous stack solved those separately and reconciled them at a seam, and that seam is where the bad artifacts came from — mixed units, ghost walls, wild per-frame scale variance. A model with no seam cannot mix units. It also replaced roughly fifteen GPU-minutes per room with tens of seconds.

Front end
React and react-three-fiber, rendering the scene as a layered hologram rather than a point cloud
Back end
FastAPI and Postgres, with Celery over a queue for jobs
Storage
S3-compatible object storage, written directly from the browser via presigned URLs
Reconstruction
A single-forward-pass model on a dedicated GPU machine, behind a swappable engine interface
Verified by
An automated loop that grades reconstructed rooms against tape-measured dimensions
Next

What's left

The near-term work is accuracy on hard rooms: walls the depth model never saw, and deciding where one room stops and the next begins when the opening between them is wide enough to be genuinely ambiguous. After that, the layer the whole thing is actually for — anchoring objects, systems, documents and maintenance history to the geometry, so the twin becomes a record rather than a model.

It isn't deployed publicly, and there's nothing to sign up for yet. This page is the write-up.

Back to home