{"slug": "i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house", "title": "I built a browser CAD where you type a sentence and walk through the house", "summary": "A solo developer built Forge3D Spaces, a browser-based CAD tool that generates a furnished 3D house from a single sentence. The system uses an LLM to emit a structured program, which a deterministic solver turns into a watertight building with measured floor plans, DXF export, and cost estimates. The tool is live and free to start at spaces.forge3d.ai.", "body_md": "Concept design for a building is slow and expensive. A homeowner planning an extension, or a contractor trying to win a job, is stuck between two bad options: pay a drafter $500–2,000 for a concept package, or fight SketchUp's learning curve for a week. Meanwhile the actual *idea* — \"a 4-bed duplex with a garage and a palm out front\" — fits in one sentence.\n\nSo I built [Forge3D Spaces](https://spaces.forge3d.ai/?src=rd): you type that sentence, and a few seconds later you're walking through a furnished 3D house in your browser — with measured floor plans, DXF for AutoCAD, and a cost estimate that come out of the same model. No install. Here's how it works under the hood.\n\nThe naive approach — \"ask an LLM to emit a 3D scene\" — falls apart fast. Models are bad at spatial consistency; walls don't meet, rooms overlap, doors float. So the LLM never touches geometry directly. It emits a **structured program**, and a deterministic solver turns that into a watertight building.\n\n`json_schema`\n\nresponse format with every field required) turns \"4-bed duplex with a garage\" into a room program: room types, target areas, adjacencies, storeys.Because the plan is a real data structure, the 2D floor plan, the 3D model, the elevations, and the bill of quantities are all *views of the same thing*. Drag a wall and they all move together. Nothing drifts out of sync, because there's nothing to sync — it's one model.\n\nThe viewport is [React Three Fiber](https://github.com/pmndrs/react-three-fiber) on a `WebGPURenderer`\n\n. WebGPU is genuinely on ~75% of browsers now, but \"available\" and \"survives a real session\" are different numbers. The failure modes that bit me:\n\n`requestAdapter()`\n\nsucceeds, then `renderer.init()`\n\nthrows on specific driver/OS combos.So the renderer caches its init promise per-canvas and cleanly falls back to WebGL when init rejects, and there's an empty-draw guard around device loss. Assume the happy path will fail and it mostly won't.\n\nA wall with a door in it isn't a box minus a box you can precompute. Openings move, resize, and change type while the user edits, and the cut has to stay clean for both the 3D mesh and the exported drawings. This is CSG (constructive solid geometry), and doing it naively per-frame will melt a laptop.\n\nThe thing that made it viable was [three-mesh-bvh](https://github.com/gkjohnson/three-mesh-bvh) + [three-bvh-csg](https://github.com/gkjohnson/three-bvh-csg): build a bounding-volume hierarchy over the geometry so boolean ops are fast, and — crucially — **cache the brush geometry per node** so you only re-evaluate what actually changed. The perf cliff between \"demo scene with three walls\" and \"real project with forty\" was brutal until that caching went in.\n\nGenerating the house is step one; the real product is editing it. There's a chat panel where you say \"move the sofa off the front door\" or \"add a gable roof\" or \"plant two palms out front,\" and it happens.\n\nSame trick as generation: the model doesn't move meshes, it emits **operations** against a scene summary (node ids + positions the client sends up). `add_item`\n\n, `move_node`\n\n, `add_wall`\n\n, `add_roof`\n\n, `add_tree`\n\n, `delete_node`\n\n. The client validates each op against the real catalog and scene graph, then applies the whole batch as **one Zustand store transaction** — so a five-op edit is a single Ctrl+Z. Unknown ids are skipped and reported, never thrown, so a partially-valid plan still lands cleanly.\n\nWhole-building requests (\"design me a duplex\") are detected and handed back to the parametric generator instead of hand-built op-by-op — the solver does that job far better than 40 LLM operations ever could.\n\nIt's live and free to start: ** spaces.forge3d.ai**. Type a building, walk through it, cut the roof off, drag in furniture, export the DXF.\n\nI'm a solo founder and this week I'm giving away 30 free design concepts — drop your project (beds, rough size, style) in the comments and I'll generate it and post the walkthrough back. Brutally honest feedback is the most useful thing you can give me.\n\nWhat would you build first?", "url": "https://wpnews.pro/news/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house", "canonical_source": "https://dev.to/taskclan/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house-3cnk", "published_at": "2026-07-12 21:15:27+00:00", "updated_at": "2026-07-12 21:44:28.069219+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-products", "developer-tools", "computer-vision"], "entities": ["Forge3D Spaces", "React Three Fiber", "WebGPU", "three-mesh-bvh", "three-bvh-csg", "AutoCAD", "Zustand", "DXF"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house", "markdown": "https://wpnews.pro/news/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house.md", "text": "https://wpnews.pro/news/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house.txt", "jsonld": "https://wpnews.pro/news/i-built-a-browser-cad-where-you-type-a-sentence-and-walk-through-the-house.jsonld"}}