π§ WIP β the format and the L1 example are real; every other block is a stub until its chain is built.
These are the pages attendees work from during floor time β the teaching load lives here, not in the 20-minute demo. They publish as the site's attendee sub-pages (one page per step). Full content gets written per-block as each chain is built, because that's when the APIs are real. This page locks the format and works one block as the example.
Keep each page under a screen and a half. If a step needs more, it's two steps.
Where you are: workshop/stage-01. Empty Vite app, deps installed.
The goal: a rendered scene β one mesh, lit, on a WebGPU canvas. Thirty lines, most of them familiar.
The work: everything you know about a three scene β something to render, a light so you can see it β expressed as JSX. <Canvas> gives you the renderer, the default camera, and the frame loop. Every tag inside it is a real three object; the tree is the scene graph.
import { Canvas } from '@react-three/fiber/webgpu'
export default function App() {
return (
<Canvas>
<ambientLight intensity={0.5} />
<directionalLight position={[5, 5, 5]} />
<mesh>
<boxGeometry />
<meshStandardMaterial color="hotpink" />
</mesh>
</Canvas>
)
}
It worked when: a pink cube renders. Change the color prop and it updates without a reload.
If you're stuck: black screen usually means the lights didn't make it in, or hardware acceleration is off in your browser. Agent prompt: "My R3F canvas renders black β here's my App.jsx, what's missing?"
Where you are: workshop/stage-02. The Eiffel model is in /public.