
NO DOM IN THE ROOM
Put on a headset and the browser hands the display to the session. The page still runs — its state, its events, its stylesheets — but nothing on it is drawn any more. Every menu and label the app needs has to exist as geometry now: in a room, drawn once per eye, 72 to 120 times a second. The demos here came out of that problem.

WHO DOES THE LAYOUT?
One answer is to rebuild the UI layer inside the scene: your own box model, your own line breaking, your own text. Years of work to end up behind the browser. The other leaves it where it belongs: mount the panel into a hidden container, let the browser lay it out, mirror the result. One object per node, glyphs redrawn from the measured line boxes, pointer rays arriving back as DOM events, so CSS still decides how a hovered button looks.

THREE SMALL LIBRARIES
A mirror pays for itself only if a change costs the mutations it implies, with nothing diffing in between. So: three small libraries instead of a framework. signal is reactivity on RxJS, so a value off the network and one off a checkbox are the same kind of thing. justdom binds it to the DOM, freedom to a three.js scene. Everything under Demos runs on them.
All three go up on GitHub as they become fit for someone other than me to use: github.com/apendua

The name is @apendua
Fifteen years of web applications and distributed systems, a PhD in algebraic geometry, and the demos above on the side. Come say hello.