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.

Line drawing of the ground floor: living room, dining, kitchen, pool room, front entry and hall.
The ground floor. Roughly 754 square feet of hardwood, not counting the entry.

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.

Plan of the living room with the sectional, ottoman, coffee table, consoles, hearth and a 12 by 9 foot rug.
The living room after demolition. The sectional runs 148 inches in a 160 inch wall, which is the constraint everything else bends around.

It is below, exactly as I used it. Drag the rug around and watch the readouts.

The living room plan

Best viewed on desktop.

The 2D planner, as I used it. Sliders for the rug, the sofa and the fireplace depth; every clearance that mattered reads out live and goes red when a rule breaks.

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.

Section through the living room showing the viewing angle from the sofa to a 77 inch screen.
Section through the living room. A 77 inch screen at 14 feet 7 inches gives 21.6 degrees. The recommendation is 30.

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.

The ground floor plan

Best viewed on desktop.

WASD to move. Drag the mouse or use the arrow keys to look. Space to jump, C to drop to seated eye height, G to toggle the measurement grid, R to return to the front door. Click the cards, the wine bottle, the cue ball, the bear’s phone, and the closet doors.

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.

Two plans of the pool room at the same scale: an 8 foot pool table with its clearances, and a lounge layout with a rug and two sofas.
Both options, drawn at the same scale. The table fits the footprint and fails the cue clearance on all four sides.

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.