Hindi for the plan. (Dutch will be pleased.)
Architectural floor plans rendered as a navigable 3D model in the browser, with a real solar model, dimension checking, and the original drawing available as an overlay to verify against. Built with Claude Code.
The plan is data in src/data/floors.js; geometry, schedules and validation
all derive from it. Pointing this at another building means replacing that
data, not editing the renderer.
npm install
npm run dev
No API keys, no accounts, no network requests at runtime.
WORKFLOW.md is the part worth reading — how to do this for your own drawings, how the repository is organised, and the pitfalls.
These hold throughout. Breaking one breaks something else.
-
All dimensions are inches. No unit conversion anywhere except at display time.
-
src/data/floors.jsis the single source of truth. Geometry, room schedules, the minimap, click-to-identify, every checker and the drawing overlay derive from it. No dimension is written down twice. -
Walls are centrelines, not boxes. Authored as
[x1, y1, x2, y2, thickness]and solved into mitred polygons. Two boxes meeting at a corner leave a triangular gap; the solver exists to prevent it. -
Openings sit on a wall centreline and are subtracted from whichever wall they touch. Moving a door edits two numbers and never the wall array.
-
Furniture is anchored, not positioned. A piece states which wall it is against and how far along. Moving a wall moves the furniture.
-
Proposed changes never mutate the drawn plan. Each patches a deep clone, so turning them all off returns exactly what the architect drew.
-
No external assets. Every material is drawn into a canvas at runtime.
-
Validation runs against the data, not the render. A picture that looks right is not evidence.
-
Plan space and world space are distinct. Plan is
(x, y)inches from the grid origin; world is(x - CX, z, y - CZ). Converted in two modules and nowhere else. -
Nothing identifying ships. The architects' title block carries names, an office address and a phone number. Only redacted scans are included; the original PDFs are excluded from the repository.
| path | contents | reference |
|---|---|---|
src/data/ |
the plan, and the tables that extend it | README |
src/lib/ |
wall solver, extrusion, layout resolution | README |
src/components/ |
three.js scene and the control panel | |
tools/ |
validation scripts and headless capture | README |
skills/ |
three transferable skills written from this build | README |
public/sheets/ |
redacted scans, for the drawing overlay |
Navigation in orbit, first person and free-fly. Daylight from a NOAA solar-position model for the site, by date and hour. Two-click measurement. Six switchable front-elevation schemes. Proposed plan changes that rebuild real geometry and toggle independently. Five interior material schemes. The architect's drawing as a scaled underlay. A scripted tour that records itself to MP4.
node tools/walls.mjs junctions close, openings land on walls
node tools/coverage.mjs no holes where walls meet
node tools/support.mjs no unsupported slab, no railing inside a wall
node tools/furniture.mjs nothing in a door swing or off the slab
node tools/check.mjs room areas against the architect's figures
The drawing underlay is the check that matters most: the model and the sheet either agree or they do not.
Two sets of terms. The software and the method are MIT. The plan data and drawings describe a specific private residence, are included only as a worked example, and are not licensed for reuse. See LICENSE.