← all projects
/vorma deployed

vorma

AI furniture platform with a 3D configurator. Designs-by-conversation, rendered in-browser.

Next.js React Three Fiber LangGraph Supabase TypeScript

What it is

Furniture, but agentic. Users describe what they want — “a low oak coffee table, 110×60, with hairpin legs and a lower shelf” — and an LLM-driven loop builds a parametric model that renders in their browser, in real time. Tweak the prompt, watch the geometry update.

The problem

Most online furniture configurators give you 4-8 preset variants. Anything beyond that requires a phone call, a designer, and a wait. The constraint isn’t taste — most people know what they want — it’s the gap between describing a piece and seeing it.

The approach

  • LangGraph agent that translates natural-language descriptions into a structured furniture spec: dimensions, joinery, materials, ornament. Spec validation happens at the schema level so the renderer never gets garbage.
  • React Three Fiber for browser-side 3D rendering. The spec maps to a parametric model — change a dimension, the geometry recomputes. No baked-in mesh assets, everything is procedural.
  • Supabase for users, saved designs, and the ordering pipeline. Storage for any user-uploaded reference images.
  • Iterative refinement — the chat persists, so each follow-up message is a delta on the previous spec rather than a new spec from scratch. “Make the legs thicker” doesn’t reset the dimensions; it touches one field.

Tech notes

The hardest part wasn’t the LLM, it was making the parametric model robust to weird specs. An agent that produces a shelf with negative thickness or impossibly thin tenons crashes the renderer. Schema-level validation plus a reasonable-defaults pass on the spec object catch most of it before the renderer sees anything.

Vorma is also where my [[Streaming Chat Architecture]] notes started — the chat surface and the rendered model need to stay in sync over a multi-second LLM response, which gets architecturally interesting once you have a couple of users.