More projects · Side project
Voxel Game
A browser sandbox of fine voxel cubes: deterministic worlds, a sculpted character, and everything designed as data.
Infinite deterministic terrain grown from a seed, four biomes, trees and rocks built voxel by voxel, and a sculpted, procedurally animated character with a full mining loop: dig terrain and props, drops conserved one to one, edits persisted per world. The north star is everything as data. Adding a new item should cost a data entry, never new code, and the axe proved it by landing with zero code.
Stack
- TypeScript, Three.js, Vite + MagicaVoxel
Built with
- Claude + Claude Code
Scale
- 82 commits, milestones M0 to M5
Status
- Playable, worlds persist
How it was built
I never wrote the code directly. Claude and I co-authored prompts for Claude Code, which implemented against a report-first discipline: report before building, stop at gates, respect the do-not-touch list. Every commit passed my eye in the game, at eye level, before landing, because the implementer's throttled preview cannot judge motion or visual quality. A live tune panel let me dial grip angles, step heights, and gait timing by hand, then bake them into the code as data.
In the world
Where the sandbox stands today.
Every world grows from a seed. Terrain, biomes, trees, and rocks are deterministic: the same seed and coordinates always produce the same world, so nothing is stored except what the player changes. These three landscapes, alpine, meadow, and pine forest, are one seeded world.
The inventory and equipment interface, with the character wearing what the data says: hood, tunic, pants, sandals, pickaxe. Garments and tools are data entries, so adding a new item costs a data entry, never new code.
The mining loop up close: dig terrain and props, drops spawn where the voxels came out and are conserved one to one, and every edit persists in that world.
The clearest dead end was the run animation: multiple tuning rounds each made it worse, with the implementer's metrics reporting smoother while my eye saw rubberbanding. The run was reverted byte-exact via git, and the lesson became law in the project's rules.
Motion feel cannot be tuned blind.
What it taught
Taste has to be enforced by eye. Data-driven design is what made the world scale, but every judgment about motion, proportion, and feel had to happen in the game, at eye level, before anything committed.
Where it's headed
The character is clothed and equipped now, and the sandbox loop holds up, so the roadmap turns toward life: creatures, starting with a deer whose rig is already underway. Beyond that, destruction physics and debris, and under the hood, sub-chunk meshing as the candidate fix for remesh cost as the world gets busier.
Next side project
Kalshi Trading System
A probability model, risk controls, and automated execution for BTC binary markets, and the dashboard that revealed the model was overconfident.