What the night field broke
The homepage is a real 3D scene built by an agent team. Here is everything that went black, spun around the wrong point, or skated across the ground before it worked.
Five real bugs, in the order the pipeline hit them — generation, export, runtime, rigging — and then the process that actually caught all four, which isn't a bug at all.
01 Generation
The first thing the night field did was go black. The homepage uses Blender for scene layout and Hyper3D Rodin for mesh generation. Rodin GLBs ship with the KHR_materials_pbrSpecularGlossiness extension and metalness set to 1. Under a point light with no environment map, that renders as pure black: no ambient, no diffuse, nothing. The fix takes three lines. Rebuild the material on load, drop metalness to 0.15, set roughness to 0.7. Two floats. The problem is invisible unless you know what Rodin ships by default, and the error gives you nothing useful: a dark viewport where a mesh should be.
02 Export
The parked model orbited the wrong center. Blender's export_apply bakes object transforms into vertex coordinates, so any offset from origin gets permanently cooked into the mesh. The model sat wrong in the scene and rotated around a ghost point in empty space. The fix: zero the location, apply all transforms, and recenter geometry before export, in that order. It's a Blender hygiene rule that's easy to skip when you're iterating fast, and it only costs you when the model needs to sit somewhere specific.
transform_apply(location=True) before export — every time, not just when it looks wrong.
03 Runtime
The scene went black on first load. WebGL context lost. In react-three-fiber, Suspense for async loads has to live inside the Canvas component. Put it outside and every useGLTF or useTexture call triggers a full Canvas remount. Chain enough of those together and the browser drops the WebGL context entirely. The surface error pointed at the GPU. The actual cause was Suspense placement, two components up the tree. That distance between symptom and source is what makes it slow to diagnose: you look at the wrong layer for a while before you find the real one.
Suspense outside the Canvas remounts the WebGL context on every load; move it inside and the context survives.
04 Rigging
The four-legged creature's feet skated. The animation ran without a rig, using a skin-modifier skeleton decimated for a low-poly faceted look, body and legs as separate meshes articulated through pivot groups. The constraint is arithmetic: foot-ground speed must equal body travel speed. Amplitude times frequency times leg length. Those numbers have to agree, and there's no automatic feedback when they don't. Without a rig to enforce ground contact, nothing catches the drift. You adjust the keyframes and check again. You do that until the feet actually step.
the ring is the foot, the dot is the body. Watch where they land.
05 Process
None of this got caught by one agent generating and shipping. It took a critique-panel workflow: a composition critic, a 3D-craft critic, and an anti-slop reviewer looking at renders separately, with a fixer agent gated on typecheck and screenshot confirmation. Capped at two or three rounds, because quality converges by then. More rounds just drift. The homepage is proof of the same argument made elsewhere on this site about production AI: agents generate, agents and humans review, in that order, on purpose.
The front door of n3wth isn't a metaphor for that argument. It is that argument, running live.
The actual rock formation from the homepage — /models/rocks.glb, Rodin-generated. Same mesh, same light. The fix rebuilds the material on load, before anything else runs.