Software engineer — Brooklyn, NY
01 // Statement
I work on agentic work: AI agents that work with you — as peers, on any job. Not better autocomplete; a different shape for work itself.
Getting here took eighteen years of shipping software, most of it iOS — apps for news, commerce, and media. Most of what I know I learned from things that broke in production, and from New York, which teaches the same lesson at street scale.
Brooklyn, on purpose.
Previously — Yahoo · The New York Times · Gilt Groupe
Now — LinkedIn
02 // Experiment
The preview above is live: those are the real positions of the eight planets, right now, computed by the same code the full simulator runs. Nothing else about it loads until you open it.
03 // Relativity
Ray-traced general relativityBeyond the Horizon
A rotating black hole, rendered by integrating a light ray backwards through Kerr spacetime for every pixel. The shadow, the photon ring, the far side of the disk arching overhead, the approaching limb burning blue — all of it falls out of the equations rather than being drawn on. Bend light. Change spin. Approach the horizon.
Trace some lightWebGL 2 fragment shader · no framework, no assets, no textures
Kerr geodesics · Novikov-Thorne disk · validated against the literature
04 // Arcade
Two-player holodeckHolodeck Arcade
A cooperative arcade defence game built for two people sharing one iPad in landscape. Drag your half of the glass to fly; the ship shoots by itself. When one of you goes down, the other flies over and pulls you out. One score, shared.
Begin simulationCanvas 2D · no framework, no build step · 60 fps on iPad
Two-player touch · solo · four difficulties · four bosses
05 // Train table
A railway for a three-year-oldTiny Transit: NYC
A wooden train table with a small Brooklyn growing on it: two subway lines on maple track, over a canal, down into a cutting and up onto the elevated, crossing at a station stacked two levels deep. The camera sits where a grown-up leans. One big Go button, one horn, nothing to read. Built for a particular three-year-old, so a miss is never punished and nothing here can be broken.
Open the toy boxthree.js r170 · no framework, no build step, no assets
Every texture drawn at load · every mesh built from primitives