Personal Project

Stanza

A spatial decision log for the furniture you already own. Stanza turns an ordinary room photograph into a measured 3D model, lets you rearrange furniture, and keeps a record of every arrangement you tried and why you rejected it.

Live Demo Open Source

What It Does

Stanza takes a single room photograph and reconstructs it in 3D with real measurements in metres. You can then drag furniture around in both 3D and plan views, and the constraint engine tells you whether the door still opens, whether anyone can get to the window, and how much effort it will take to move everything there.

Most room planners stop at the pretty picture. Stanza is built around the decision: which layout you commit to, and remembering next spring why you moved the bookcase back.

How It Works

Photo Calibration

Upload one photograph. A Web Worker detects line segments, estimates vanishing points, and recovers the camera parameters.

3D Reconstruction

Mark the floor and box the furniture. Each box is lifted into a metric object with real dimensions derived from the camera model.

Constraint Checking

Validates door swings, walking routes, outlet reach, viewing distances, and the daylight patch that crosses the floor.

Move Planning

Diff two arrangements and get numbered steps in a workable order, with time estimates and paths routed around obstacles.

Key Features

  • Metric, not decorative. Real dimensions in metres from camera calibration. If it says 82 cm between the table and sofa, you can act on that number.
  • Constraints, not vibes. Layouts are evaluated against door swings, walkways, outlets, and ergonomics.
  • Effort is part of the design. Each arrangement shows how many minutes, people, and metres of dragging it needs.
  • Decisions persist. Arrangements fork into a tree. Each can be adopted, rejected, or parked with a rationale and the metrics at the time.
  • Runs locally. No backend, no account, no photo uploads. Everything stays in your browser.

Tech Stack

TypeScript Next.js React three.js React Three Fiber Zustand Dexie (IndexedDB) Tailwind CSS