Inspiration

I wanted to see my own place in 3D and plan it before spending money on it: not a floor plan I draw by hand, my actual rooms, measured. And I wanted the plan to be honest about one thing no planner checks.

I watched a couch get wedged on a staircase turn. The flight turns ninety degrees on three winder treads, no landing, nowhere to stand it up and swing it. It came off the wall with the plaster still attached. Somebody had measured the couch. Nobody had measured the corner.

Then it happened to somebody else in the same house: a flood forced a water heater replacement, and two installers brought a 279 litre tank down the same stairs. Two objects, one staircase, and nobody measured it either time. The property listing gives all thirteen rooms to the inch and says nothing at all about the stairs.

Every AR furniture app ever shipped answers "does it look good in the room". Not one of them tells you no.

What it does

You point an Android phone at a room and walk it. Elbow Room Mobile reads the floor, the walls and the ceiling through ARCore, with no LiDAR and no depth sensor, and gives you the room back: floor area, perimeter, wall area, ceiling height, and the things standing in it, each one named from your own photographs.

Then it does three things with that room.

Design it. The room comes back as a model you can drag, spin and look into. Try eight whole looks, every floor, wall and ceiling material, and the light. PLAN drops the walls and letters every wall's length. Take a wall out or add one and the materials take-off follows: how much flooring, paint, baseboard and drywall the room needs. Add pieces from a catalogue, drop one and it pulls flush to the nearest wall, letters the gap from each side to whatever is nearest, turns terracotta when it stands through a wall, and the room keeps score against a budget.

Check it fits. Every catalogue row already carries a route verdict before you pick it, because the planner checks the thing no other planner does: whether the piece can get in. Pick a sofa, a fridge, a mattress, or look a product up by name, and it checks the front door (and whether taking the door off its hinges buys the inch you need), the hallway, and the stair turn, which is where things actually jam. It gives the margin at every pinch point, says which one loses and by how much, and draws the plan stopped at the angle where it stuck. A three-seat sofa in the example house clears the door and the hall, then loses by 2 ft 10 in at the turn. If it does not go, it tells you the longest thing that would.

Play it. A game mode for when the planning is done. PLAY puts your Sim in the room you scanned. A pad walks, a drag turns, walls and furniture stop you, and MY EYES puts the camera at the Sim's own eye height, which is the only honest way to find out what a room feels like at five foot two. MY SIM dresses the figure: build, height, skin, hair, clothes, or one photo taken with the front camera, read on the phone for three colours and deleted the same second.

Nothing is invented. Prices are always your own, the app never fills one in. Catalogue sizes are marked "typical size, not this product" until you confirm them. A room that has no measured route says so instead of guessing. There is no account, and nothing you scan leaves the phone.

How I built it

React Native and Expo, with one native Kotlin module for ARCore. The S24 I built on has no LiDAR and no time-of-flight sensor, so the scan runs on motion tracking, plane detection and raw depth from motion with its per-pixel confidence. Textureless paint gives almost no confidence, which is why the ceiling was wrong for two weeks; the fix was to trust only confident raw depth, take the top cluster, and read the ceiling from that. It now reads 7 ft 7 in on a ceiling a tape says is 7 ft 9 in.

The room model, the furniture, the Sim and the plan are all drawn by the same software renderer into SVG polygons, faces sorted in painter's order, with near-plane clipping added for the inside view. No game engine.

The corner problem is the ladder-around-a-corner problem in rectangle form. For an object of width w between corridors of clear width a and b, the length that just touches both outer walls and the inner corner at angle t is

$$L(t) = \frac{a}{\sin t} + \frac{b}{\cos t} - \frac{w}{\sin t \cos t}$$

and the object fits only if it is shorter than the minimum of that curve. The numerical solver is checked against the published closed form for a zero-width rod,

$$L_{\min} = \left(a^{2/3} + b^{2/3}\right)^{3/2}$$

which is the one part of the receipt I did not write the answer to.

Subscriptions run on RevenueCat: the paywall is built in the RevenueCat editor in the app's own palette, the entitlement gates pieces, rooms and product lookup in code, and the lookup server checks the entitlement with RevenueCat before it spends anything on a search. Product lookup runs web search behind a strict JSON schema so sizes are looked up and cited, never recalled.

Challenges I ran into

Google Play. My developer account is personal and post-2023, so the app cannot go to production until twelve testers have kept it installed for fourteen continuous days. I published videos, Shorts and a sign-up form to find them. As I write this the count is one, so the app is in closed testing and every judge will need to be on the tester list to install it.

ARCore without a depth sensor. Smoothed depth put a 7 ft 9 in ceiling at 5 ft 3 in every time. Two rooms through an opening came back as one convex hull. Three seat-height planes came back as an eight-foot bed. Every one of those needed the raw depth cloud, cells cut hollow where the floor was seen underneath, and walls snapped to the room's two axes.

Focus. The app went through a renovation phase (materials, walls, looks), then a Sims phase (furnish, play), and the stair-turn verdict had to stay the spine of both.

Accomplishments that I'm proud of

The verdict screen. The plan sweeps the sofa through the turn and stops at the pinch angle, because that is what happened on my stairs, and an animation that finished would be a lie.

A real ceiling height from a phone with no depth sensor, and furniture that comes back as separate pieces.

The catalogue rows that say no before you pick them.

A Sim that is not a Minecraft block: an architect's scale-model figure, eight-sided head, tapered torso, walking through a room that was measured.

What I learned

Ship the thing that cannot be faked first. The scan, the tester clock and the store listing all had external latency, and every day I spent on the model before the scan worked was a day the calendar did not give back.

Google checks that testers actually open the app. A link in a video is not a tester; an installed phone is not a tester; twelve people who open it for two weeks are.

A paywall is a promise. Every line on it maps to a gate in the code, and when the copy said "free trial" before a trial existed, the fix was to change the copy.

What's next for Elbow Room Mobile

Twelve testers, then production. The Samsung Galaxy Store, which has no tester gate. Rooms joined into a house, so the Sim can walk from the front door to the room and the route check becomes something you can see. The raw scan is now kept with every room, so the scanner can improve and rebuild old walks without asking anyone to scan again. And the water damage assessment that reuses the same capture, parked for v2 so v1 stays one product.

Built With

Share this project:

Updates

Submission history