making interactive scenes with codex
what happened when i turned a koi pond reference into a reusable process, then used it to build an interactive tape rack.
i wanted to write about the playground because it is the first thing on this site that feels more like a small world than a page.
the original spark was this post from Shawn, which pointed me toward a koi pond where the water, fish, light, ripples, and disappearing edge all worked together. the interesting part was not one shader. it was the layering.
then i wondered what would happen if i used the same process for something completely different. the answer became a tape rack: a tactile carousel for browsing famous samples.
the two experiments
the koi pond is the smaller reference study. click the water and the disturbance spreads outward; click near a fish and it gets scared away. this is the actual pond component embedded in the article, not a screenshot or a simplified illustration.
koi pond
the tape rack is the second experiment. it turns a list of tracks into a physical-feeling object: drag through the cassettes, load one into the player, then play, pause, or eject it. the visual reference was a tape rack concept by louis.
tape rack
the skill i ended up making
the first attempts were not especially good. an agent can make a canvas move in one turn. it is much harder to make movement, proportions, lighting, materials, and interaction feel like they belong to the same object.
so i turned the process into a Codex skill called reference-accurate-interactive-recreation. it accepts a URL, canvas, screenshot, video, written description, or a pile of references and turns them into a set of visual and technical decisions.
the working checklist is:
- observe the reference — understand the camera, motion, edge treatment, and what stays still.
- decompose the scene — separate background, depth layers, hero objects, lighting, interaction, and interface chrome.
- choose the cheapest convincing renderer — canvas 2d was enough for the pond study; CSS and DOM interactions made the cassette rack easier to tune and adapt to small screens.
- build one hero object first — the pond water and one cassette were better starting points than trying to create everything at once.
- add motion as a system — fish need behavior, and the cassettes need coherent focus, selection, loading, and ejection states.
- verify the feel — performance, scale, pointer behavior, edge blending, and mobile gestures are part of the recreation.
the skill is not a visual style. it is a way to turn a reference into decisions before decorating a div.
making the rack feel physical
the rack works because the interaction has weight. tapes move past a fixed focus point, the selected cassette travels into the player, and ejecting it reverses that path. the sound and small delays make those state changes legible without adding controls for every animation.
the player looks up the selected track on YouTube and starts its audio when the cassette loads. the rack keeps its own play, pause, and eject controls, with no separate video player taking over the scene.
what i will reuse
the reusable result is the habit of treating an interactive visual as a stack of small decisions:
- stabilize the camera before adding motion
- make one object convincing before making a collection
- share endpoints between animation paths
- make interaction change the scene, not just toggle a label
- check performance while the scene is still small enough to fix
if i ask Codex to recreate something from a screenshot next month, i want it to ask what the screenshot is made of before it starts decorating a div.