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:

  1. 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.
  2. 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.
  3. 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.
  4. 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 shows 1.5 cm over on each side). The tightest jambs turn orange.
  5. 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-lens skill into a design brief (in the repo under devpost/), 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
Share this project:

Updates

Submission history