-
-
Furniture Fit — will your sofa make it through the door? Answered in your Specs.
-
The question every move starts with: you measured the door and the sofa… will it fit?
-
Today: tape measure, mental math and doubts. With Furniture Fit: the answer, written in the doorway.
-
Furniture Fit — a Snap Spectacles Lens built with CLAD in Lens Studio.
-
Step 1: pinch the door frame's bottom-left, bottom-right and top corners; points snap to the frame.
-
The opening is measured and labelled in the doorway: 90 × 205 cm.
-
Step 2: drag the sliders — the true-scale sofa ghost resizes live and the verdict updates (here: TIGHT).
-
Step 3: CARRY — as the sofa crosses the door plane, its real L-shaped cross-section lights up like a scan.
-
FITS: 5 cm to spare, 2.5 cm on each side; the tightest jambs turn orange.
-
REMEASURE clears the marks — now measure the narrower 82 cm door.
-
WON'T FIT: 3 cm short — the frame turns red and the section shows 1.5 cm over on each side.
-
Looked away? An arrow at the edge of the view points back to the tightest jamb.
-
How it decides: box envelope × every pose, rolled in 5° steps; keep the one with the most clearance.
-
Conservative estimate · no turns or stairs. Code: github.com/eairpho-code/furniture-lens
Inspiration
Every move has the same moment: you measured the door, you measured the sofa, and you are still not sure. A tape measure gives two numbers; it doesn't tell you which way to tip the sofa, whether 5 cm is enough, or which side is the tight one. Phone AR can show how furniture looks in a room, but you have to hold the phone up and there are no free hands left to measure. Glasses can put a true-scale sofa next to your actual door and keep both hands free.
What it does
Furniture Fit is a Snap Spectacles (Specs) Lens built around a single spatial moment:
- Measure — stand in the doorway and pinch the frame's bottom-left, bottom-right and top corners. The opening lights up with its size, e.g.
90 × 205 cm. - Size the sofa — three sliders (length / width / height, 5 cm steps) on a see-through panel near your hand. A true-scale sofa ghost beside the door resizes live, and the verdict updates as you drag.
- Carry — the ghost carries itself through the door in its best pose. The moment it crosses the door plane, its real cross-section (the sofa's L-shaped side profile) glows like a scan.
- Verdict, in the doorway — FITS (
5 cm to spare · 2.5 cm each side), TIGHT (under 3 cm, verify on site) or WON'T FIT (3 cm short, the frame turns red and the section shows1.5 cm overon each side). The tightest jambs turn orange. - Look away — if the tightest jamb leaves your view, an arrow at the edge of the view points back to it.
REMEASURE clears the marks so you can check another door. Every answer is labelled Conservative estimate · no turns or stairs.
How I built it
- CLAD + Lens Studio. The Lens was planned with CLAD's
plan-lensskill into a design brief (in the repo underdevpost/), then built from it in Lens Studio 5.24 with the Spectacles Interaction Kit and UI Kit, all in TypeScript. - Fit solver. The sofa is a box envelope. For each choice of which edge leads through the door, the solver rolls the cross-section from 0° to 90° in 5° steps, measures clearance against the opening's width and height, and keeps the pose with the most room.
- Visuals. The sofa ghost is one generated mesh (seat, back and arms merged, rounded edges, uniform transparency). The scan effect slices that mesh with the door plane every frame to draw the glowing section. Colors follow a three-hue palette (cyan / orange / red) tuned for an additive display.
- Testing with LEAF. Each of the five done criteria from the design brief, plus the panel's soft follow, is a LEAF scenario that drives real input (SIK pinches, slider drags, button presses) and logs every check with actual vs expected values. All six pass in the preview.
Challenges
- Honest answers about rotation. I prototyped full 6-DoF path planning (RRT-Connect) to see whether tilting and turning the piece while carrying it would rescue more furniture. In an open room it "fit" everything, which is not believable. With realistic limits (120 cm hallway, ceiling, lift height) it rescued 0 of 58 near-misses. So the Lens keeps the simple fixed-pose check and says so.
- Small numbers in a big world. Clearances of a few centimetres must stay readable at 3 m, so the result lives in the doorway itself and the cross-section shows the margin on each side.
- Testing hands without hands. The preview has no hands, so input is driven through LEAF. Getting slider drags to land on exact values took a feedback loop around SIK's drag behavior.
Accomplishments
- A complete measure → size → carry → verdict loop with no menus, built around one clear question.
- The scan cross-section, which shows why it fits or doesn't, not just a yes or no.
- Every done criterion is checked by an automated LEAF test.
What I learned
Spatial UI is mostly about where information sits: the verdict belongs in the doorway, the controls belong at the hand, and anything out of view needs a pointer back. And being explicit about limits (no turns or stairs, verify on site) builds more trust than a confident wrong answer.
What's next
Testing on real Specs for hand feel and marking accuracy; hallway and turn checks with a simple, explainable carrying path; more furniture shapes than a box; checking several doors along a route.
Built with
CLAD · Lens Studio · Spectacles (Specs) · Spectacles Interaction Kit · Spectacles UI Kit · LEAF · TypeScript
Note on the demo video
The video is a real recording of the Lens running in the Lens Studio preview. The preview can't receive real pinches from a mouse, so the gestures in the video are driven by a LEAF test script that sends real SIK input events (pinch, drag, press) to the Lens. Parts are sped up or slowed down, and each such part is labelled on screen.
Built With
- clad
- leaf
- lens-studio
- snap-spectacles
- spectacles-interaction-kit
- spectacles-ui-kit
- typescript
Log in or sign up for Devpost to join the conversation.