The first render is a product decision
The Kinetic Garden begins as an HTML page. The name, positioning, selected work, and CV navigation do not wait for a renderer. That order matters: the visitor came to understand the work, and the canvas is one way to explore it.
A WebGL context can fail. A GPU can be busy. A visitor may prefer reduced motion. None of those conditions should remove access to a case study.
A boundary around the experience
The public pages use Astro. A React island contains the interactive scene, and the scene module is loaded separately. The reading route uses the same content records but does not import the world.
const World = lazy(() => import('./World'));
// The semantic portfolio has already rendered.
<Suspense fallback={null}>
<World quality={quality} preferences={preferences} />
</Suspense>
The scene has two failure boundaries: capability detection before initialization, and an error boundary around the mounted world. Context loss also needs handling after the renderer has started. A loading check alone does not cover it.
Make the alternate path useful
Reading mode is a deliberate route with a compact profile, experience, work, skills, and CV actions. It is not an error message. It should be the fastest path for someone who wants to evaluate the engineering rather than explore the sculpture.
What still needs measurement
A split bundle is an architectural choice, not proof of speed. Production verification needs to inspect the actual network waterfall, measure the critical route, and check representative devices. A beautiful desktop render is not a substitute for that evidence.