Gamifying My House Remodel by Accident
I set out to pick a rug size and ended up building a first person walkthrough of my own house. The 3D view caught three layout mistakes the floor plan had quietly approved.
AI-assisted writing. The plans, the planner, the walkthrough and the measurements are mine. Claude Code drafted the prose from my notes, fixed the figures so they fit their own frames, and wired the walkthrough into the page. The mistakes the walkthrough found were mine too.
The problem was a rug
I own a house in Sacramento and I am remodeling the ground floor: the wall between the living room and the dining room comes out, and about 754 square feet of carpet becomes hardwood. With the wall gone, the living room is 160 by 200 inches, and there is a 148 inch sectional going into it.
The first question was banal. What size rug.
It turned out to have a stack of constraints behind it. The sectional is 148.43 inches wide on a 160 inch wall, which leaves under six inches of wall at each end. Standard rugs top out at 144 inches. So no rug off a shelf is as wide as the sofa, and the usual advice — 18 to 24 inches of bare floor around the rug — is arithmetically impossible in this room. There is no answer that satisfies the rule, only answers that break it least.
Building the 2D planner
To answer it properly I built a scale floor plan in the browser. Sliders for the rug's size and position, the sofa's position, the depth of the fireplace. Live readouts for every clearance I cared about: the gap to each wall, how far the rug ran past the sofa, whether the sofa's front legs landed on it, the walkway between the coffee table and the console.
It is below, exactly as I used it. Drag the rug around and watch the readouts.
Best viewed on desktop.
It worked. It gave a clear answer: a 9 by 12, laid with the 144 inch side along the TV wall, front legs on, about two inches narrower than the sofa at each end. Every rule I had encoded came back green.
What the plan could not tell me
A plan seen from above is structurally bad at a few things, and it took me a while to notice that the things it was bad at were the ones I actually cared about.
Height. A floor plan has no opinion about whether a television is hung at the right height. I was choosing between two consoles: a Crate and Barrel Mota at 30 inches tall, and a low unit at 13.78. On paper both fit. In practice the tall one puts the centre of a 77 inch screen about 54 inches off the floor, a full foot above a seated eye line. The low one lets it land within a few inches of 42.
Sightlines. The room is deep enough that a 77 inch screen only subtends 21.6 degrees from the sofa. SMPTE recommends 30. That is a number you can compute from a rectangle, but not one you can feel from it.
Leftovers. Walls that stop making sense once other walls move. A plan draws every wall with the same confidence, including the ones that are only still there because nobody asked.
So I built the house instead
I wrote a first person walkthrough in Three.js. Every room to scale, 95 inch ceilings, real product dimensions for the sectional, both consoles, the coffee table, the television, the pool table and the PC case. WASD to move, mouse to look, and one key that mattered more than the rest: C, which drops the camera from standing height to a 40 inch seated eye line.
The whole thing is about 1,200 lines of plain JavaScript. No build step, no framework, no model files. Every object is a box, a sphere or a cylinder, placed from a measurement. The living room and the pool room are measured; the kitchen, dining room, entry and hall are inferred from a whiteboard sketch — good enough to walk through, not good enough to build from, and I say so in the code.
Best viewed on desktop.
The three things it caught
In order of how badly the plan missed them.
The rug was cutting through the fireplace. The planner had approved a 9 by 12 with its 144 inch side along the TV wall. In 3D it was visibly passing through the hearth, which sticks 20 inches into the room across a 68 inch run of the side wall. The planner had no rule connecting the rug to the hearth, so it had reported success. Turning the rug 90 degrees fixed that, and fixed two other things I had not been asking about: it cleared the hearth by six inches, ran ten inches under the sofa so the front legs landed on it, and brought the coffee table fully onto the rug instead of leaving it on bare hardwood. One rotation, three problems. That is the whole post in a sentence.
A wall was left standing as a pillar. Shortening the living room's south wall from 140 to 100 inches left a 14 inch stub of a different wall with nothing attached to it. On the plan it read as a short line among other short lines. In 3D it was a column standing on its own in the middle of a doorway.
The pool table does not fit, even though it fits. An 8 foot table is 54 by 96 inches and the room is 145 by 190, so the footprint clears with room to spare. But a 58 inch cue needs about 60 inches of swing on every side, and the best any side manages is 55, with two sides at 36 and 37. The plan said yes. Walking around it said no. So I built a second layout into the walkthrough — a rug and two sofas where the table would go — on a switch, so both could be judged from inside the room instead of argued about on paper.
What it cost, and whether it was worth it
It was not efficient. A rug question does not justify a game engine, and I would not defend the hours on those terms. But once the house existed, the marginal cost of the next question fell to nearly nothing, and the walkthrough has since absorbed questions about console height, television mounting height, closet depth, door swing, and whether a 103 inch media console makes a 160 inch wall look intentional or crowded. Each of those would have been its own afternoon with a tape measure and a sketch.
A 2D plan is good at answering the questions you thought to ask. Walking through the space is good at raising the ones you did not.