For the person who reads the manual
Docs.The whole control surface.
Everything the designer does is either a document, a key or a URL. Here are all three — plus the QA gates it ships behind, so you know what "it works" means in numbers.
The document — *.webhome.json
| levels | one entry per storey; walls, openings and objects reference their level |
| walls | reference nodes; two walls are adjacent exactly when they share a node |
| openings | reference their wall by id — window, door, garage, passage; rectangle, circle or triangle |
| roof | kind: gable, hip, flat or shed; gable/hip fit the minimum-area oriented rectangle of the perimeter |
| objects | library placements — position, rotation; legality re-checked on load |
| terrain · garden · roads | heights, splat paints, plants, road points |
| doc.look | grade, LUT look, fog and sun position — the film look travels with the file |
| doc.sun | the sun the renderer reads — whether it came from the ephemeris or your hand |
| doc.wind | direction and strength — one front across the whole site |
Autosave lands in localStorage; Ctrl+S writes a *.webhome.json. Designs saved to your account are stored server-side as the same opaque JSON.
Keyboard
| 1–9 · 0 | tools · the Sun tool |
| B | arm or disarm editing (the Design door does the same) |
| click · Shift · dbl-click | walls: set corner · lock 15° · end the run |
| Q E R | rotate a placed object (or the gizmo) |
| WASD · Shift | walk · run |
| V | third person (from walk mode) |
| E | open the door in front of you |
| Esc | leave walk mode |
| F | frame the design |
| Ctrl+Z/Y | undo · redo (scoped) |
| Ctrl+S | save a *.webhome.json |
| Delete | remove the selection, whatever tool is live |
| Space | play the day (Sun tool) |
URL parameters
?design=<url> | open a shared design; sign-in happens silently if you have a castomo session |
?fresh=1 | ignore the autosave, start clean |
?empty=1 | an empty site — no starter house |
?quality=low|medium|high | pin the render tier (ultra exists in the View menu) |
?reveal=0|1 | force the build-reveal on or off (off by default for automation) |
No query string? The designer opens on a different house from the 140-design catalogue each visit — and on your own last work if you have autosaved one.
QA gates — what "works" means
| 60 FPS | gated on a stress design: 1 foundation, 2 levels, 15 walls, 8 openings incl. triangles, 50 objects |
| < 300 draw calls | one merged mesh per material per level per category; furniture instanced |
| < 250 MB JS heap | gated on the same stress design and on a 4,386-plant garden |
| solar physics | solstice noon vs the earth's tilt, equinox sunrise due east, equation-of-time extremes, polar day/night, lunation length, Warsaw midsummer 04:14–21:01 |
| texture seams | every procedural finish scored across its wrap; the gate is 1.3 |
| placement rules | no standing inside walls, no overlaps (shared area, 0.1 m² floor), ceiling and floor limits; rugs and tucked chairs exempt |
| the room | two real browsers against a live co-editing session — roles, areas, presence, voice |
The designer itself lives at builder.castomo.com/editor — WebGL2 required, everything else optional.