Inspiration

Furniture and TV tip-overs injure about 17,800 people a year in the US, and more than half of the people killed are children aged 1–3 (CPSC, 2024). In earthquakes, falling or moving furniture causes about 30–50% of injuries (Tokyo Fire Department). The fix, an anti-tip strap, is cheap. The problem is that the risk is invisible: a wardrobe standing upright gives no hint of how far across a bedroom it would reach.

What it does

Fall Line turns that invisible risk into something you can see in your room:

  • Measure a tall piece and its fall zone appears on the floor, as wide as the piece and as deep as it is tall. The measurement is simulated in the preview; on glasses, depth would measure it.
  • If the child's bed is inside the zone, the zone turns red and the bed gets a label: In the wardrobe's fall zone.
  • Show me drops a see-through ghost of the wardrobe. It doesn't pass through the bed: a contact model brings it to rest on the mattress at 59°, with a thud at the moment of contact.
  • Fix it in one of two ways. Drag the bed out of every zone (No fall risk), or Anchor the piece: a strap appears and the zone turns grey. Only anchoring counts as secured, because moving the bed doesn't make the wardrobe safe.
  • Earthquake drill: one button drops the ghost of every unanchored piece at once, so you see at a glance what is still unsafe. Anchored pieces stay still, and the camera never shakes.
  • A summary by the door tracks N of 3 secured and names what is still unsecured. It appears only when you stand near the door, so it never floats in front of the furniture you are looking at. A small edge chevron and a spatial sound point to an unresolved risk you've turned away from.

Who it's for

Parents of small children, and anyone who lives in an earthquake zone.

Why glasses

The zone belongs on your own floor at real scale, next to the furniture and the bed it concerns. You can walk around it, and your hands stay free to fit the strap. A phone would occupy a hand and show the room through a small screen.

How we built it

  • Planned with the Devpost Learn skill pack (plan-lens). The interview produced the design brief, with five done criteria that can be checked in the preview. Two outside design reviews then tightened it. The biggest change: the ghost must stop on the bed instead of passing through it.
  • Built by a coding agent through CLAD and the Lens Studio MCP in Lens Studio 5.23.2 (SPECS Base Template, Spectacles Interaction Kit, Spectacles UI Kit). Every agent run is logged in devpost/clad-log.md.
  • Functional core, imperative shell. All decisions live in a pure TypeScript core: fall-zone geometry, a closed-form contact model, the reducer, labels and the secured count. It is covered by 301 unit, property, architecture and golden-replay tests (pnpm check). The golden tests replay two real recordings of the demo tour exactly. The Lens Studio shell only turns pinches and ticks into inputs and renders the effects.
  • LEAF scenarios check every done criterion in the preview: 19 / 19 pass in one serial run. They cover the five done criteria, seven extra checks (including the earthquake drill and the door panel), a smoke test, the five scripted demo scenarios filmed for the video and a standing-reach check through LEAF's IK body. The scenarios press the real SIK controls and measure what is rendered.
  • Sound effects come from CLAD build-sfx and the music from build-music; the narration uses an open text-to-speech model. No third-party audio.
  • Performance was traced with CLAD specs-capture-perf-trace: the steady render CPU averages 3.85 ms per frame in the desktop preview.

Challenges we ran into

  • SPECS sign-in failed on Lens Studio 5.24, so we moved to 5.23.2, the organizers' documented workaround. Some agent tools then pulled packages built for a newer Lens Studio and broke compilation, so we pinned compatible versions (Leaf 2.0.2) and wrote the rule down.
  • The first fall model let the ghost pass through the mattress. We replaced it with a closed-form contact solver, cross-checked against a brute-force sampler, and restaged the room so the ghost lands across the bed.
  • Keeping the interface readable on an additive display, where dark renders as transparent. The agent's own screenshot review caught the dark default buttons; they became light 32 × 12 cm targets, each at least 2.5° wide from the start position.
  • The status panel floated edge-on above the bed in most views. Now the core shows it only when you stand near the door, where it is read.
  • LEAF can't turn your head, so the scripted demos use a test-only camera rig at a standing eye height of 150 cm. The same rig checks that every control can be reached from where a person would stand.

Accomplishments that we're proud of

  • One clear spatial moment: the ghost wardrobe coming to rest on a child's bed.
  • An honest product: stand-ins and simulations are labelled, and the summary never counts a moved bed as "secured".
  • Evidence over claims: a tested pure core, golden replay of recorded sessions, and a LEAF scenario for every done criterion.

What we learned

On glasses, the best interface is the room itself: a zone on the floor and a label on the bed say more than any panel. Deciding placement in centimetres, show rules and done criteria up front made the agent's build far more predictable.

What's next

Measure real furniture with depth and world queries, support any tipping direction, detect real wall anchors, and test the feel on real SPECS glasses.

The repository includes the demo video and a 14-slide presentation (presentation.pdf).

Disclaimer: Fall Line is a visual aid, not an engineering assessment. Anchor your furniture.

Built With

  • biome
  • clad
  • fast-check
  • ffmpeg
  • leaf
  • lens-studio
  • lens-studio-mcp
  • node.js
  • plan-lens
  • pnpm
  • snap-spectacles
  • spectacles-interaction-kit
  • spectacles-ui-kit
  • typescript
  • vitest
Share this project:

Updates

Submission history