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
-
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.
-
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.
-
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.
-
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.
-
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).
-
X's and O's (opens at scenexp.com in a new tab)
A football game where you call the offensive plays, then throw or run for points.
-
Fractal Garden (opens at scenexp.com in a new tab)
Plant and tend one-of-a-kind fractal trees and watch them change with the seasons.
-
High Water (opens at scenexp.com in a new tab)
A ninety-second water and weather study as a rising surf slowly overwhelms the shore.
-
Earth Defense (opens at scenexp.com in a new tab)
Fly an orbital ship and defend Earth from a dozen Martian raiders.
Highlights
-
Bolto, 2026
Took an offer-letter workflow from Figma mockups to production in under three weeks with React, Next.js, TypeScript, PostgreSQL, and Stripe, and expanded the Jest and Playwright coverage along the way.
-
Apple, 2020 to 2025
Built React and TypeScript interfaces and Node.js services for the internal CMS behind Tips content seen by millions, and served as the primary owner of the localization and validation services for more than thirty languages.
-
Yahoo, 2013 to 2015
Created an interactive SVG dependency visualization that helped bring outages caused by dependency-planning mistakes down to zero, alongside a SOX-compliant payroll approval application.
Working on something? I would love to help.
Get in touch