Work

A closer look at how I turn an ambiguous idea into something people can actually use. One case study in depth, followed by a few highlights from twenty years of shipping software.

Case study

SceneXP: from one 3D scene in days to a new one in hours

Role
Creator, product owner, and engineer
Stack
Three.js, vanilla JavaScript modules, Jest, NGINX on AWS
Tools
Claude Code as the primary builder, with me steering
Outcome
A shared engine, a launched platform, and a build time measured in hours

The situation

It started with one walkable 3D portfolio, the gallery. Then came the custom scenes: a tire shop with its actual service bays, a car dealership, and a series of personal tributes for family. Each one was a hit with the person it was built for, and each one made the next request more likely. That was the good news.

The problem

The second scene was built by copying the first and deleting what didn't apply. The third copied the second. It was fast at first, but every bug fix had to be repeated in every copy, the scenes quietly drifted apart, and building one still took days. If custom scenes were going to become a product rather than a hobby, a new scene had to take hours, and the fix for a door had to fix every door.

What I did

  1. Paused and wrote the plan first

    Before touching code I stopped feature work and wrote a short spec. It sorted every part of a scene into two piles: universal (movement, collision, doors, lighting, people, dialogs, checklists, telemetry) and scene-specific (the world itself, its characters, its story). That spec became the brief Claude Code worked from.

  2. Extracted a versioned parts library

    The universal pile became a shared, versioned library of modules. Each new scene pins the version it was built against, so a change to the kit can never quietly break a scene that already shipped. The existing gallery was deliberately left untouched, because a refactor that risks live work is a bad trade.

  3. Made the code domain-agnostic

    Every link, import, and asset path became relative, and the domain is read at runtime. The same scene can now be served from devsteve.com or scenexp.com without a single edit, which is what made launching a separate platform a hosting decision rather than an engineering project.

  4. Reduced a new scene to a thin layer

    A new experience is now a config file, a scene module, and its assets. The tributes for my dad, my wife, and my parents were each started by copying only that thin layer from the previous scene, and each one shipped with its own characters, conversations, treasure hunt, and social preview image.

  5. Turned every lesson into a rule

    Unit tests cover the engine modules, and I do the hands-on QA myself on desktop, phone, and a VR headset. When something bit us, it became a written rule the AI follows on every future scene: never build trim flush against the surface it decorates (it flickers), loop a silent audio element on iOS so the ring switch doesn't mute the music, and convert screenshots to sRGB before encoding them or they render dark when shared.

Working with AI, honestly

Claude Code wrote most of the code in this project. My job was everything around it: deciding what to build and what to cut, writing the briefs, reviewing the result as a user rather than as a diff, running the tests, and owning every commit and deployment. The plan-first step mattered more than any prompt trick. A clear spec is the AI's starting condition, and a good one is the difference between a scene that needs a day of corrections and one that is right the first time.

The result

SceneXP launched in July 2026 as its own platform for browser-based 3D experiences, and it now hosts fifteen of them: small-business and family tributes built on the shared engine, plus games and experiments like X's and O's (a football game where you call the plays), Fractal Garden, High Water, and Earth Defense. The first scene took days. Later scenes went from a conversation to a working world in a matter of hours, and a fix made in the kit now reaches every scene built on it. You can read the tour in Step Inside, or visit scenexp.com (opens in a new tab).

A few of the scenes

Four very different experiences, all built on the same engine. Click any card to step inside (each opens at scenexp.com in a new tab).

Highlights

Download my résumé (PDF) Full timeline

Working on something? I would love to help.

Get in touch