
The serious part
Why a vibe-coded game still needs lockstep fingerprints, a 71-test suite, bot play-testers and real friends on real PCs - including a bug only their machines could find.
Devlog
Built with Claude, Blender and Unreal. Every step, written down.
An open, behind-the-scenes diary of building an original LEGO strategy game with Claude (Claude Code and a team of subagents), Blender and Unreal Engine 5. What worked, what broke, and who decided what.
Written afterwards from our project notes and commit history; dated to when the work happened.

Why a vibe-coded game still needs lockstep fingerprints, a 71-test suite, bot play-testers and real friends on real PCs - including a bug only their machines could find.

The honest failure list from five weeks of directing Claude - invented "done", an 8,280-line line-ending commit, overwritten files, stale notes and determinism bugs - and the check that caught each.

The build, test and capture loop that lets one person and Claude work on 120,000 lines of Unreal C++ - the scripts, the headless test runs, the launch flags and what breaks.
Why a vibe-coded game still needs lockstep fingerprints, a 71-test suite, bot play-testers and real friends on real PCs - including a bug only their machines could find.
vibe-codingtestingdeterminismplaytestshipping
The honest failure list from five weeks of directing Claude - invented "done", an 8,280-line line-ending commit, overwritten files, stale notes and determinism bugs - and the check that caught each.
vibe-codingclaudefailuresprocesstesting
The build, test and capture loop that lets one person and Claude work on 120,000 lines of Unreal C++ - the scripts, the headless test runs, the launch flags and what breaks.
vibe-codingunrealclaudetestingprocess
Every unit in the game is a Python script that places LEGO parts in Blender. How we drive it with Claude, how a model is checked against a reference, and what failed.
vibe-codingblendermodelsclaudeprocess
One person, Claude and 2,240 commits in five weeks. The ten habits that kept a vibe-coded game from falling apart, with the numbers and the scars behind each one.
vibe-codingclaudeagentsprocesstokens
On 24 October a trailer battle became a game mode on paper and, a few hours later, a battle you can launch from a command line. The plan, the phases, the models, the costs and what is not done.
vibe-codingbig-battleplanningclaudetokens
Thirty-two days after the first commit, an honest snapshot - what exists, what has been proved and what has not, and the plan from here.
statusnumbersroadmap
How the logo suite, the colours and this website were made - a human-approved logo as the source, a brand kit drawn by scripts, and a static site that rebuilds in seconds.
brandwebsitetooling
How we capture trailer footage from the game itself - a recorder that steps in exact frames, a CSV queue that runs overnight, battles that repeat exactly, and the takes we threw away.
trailercaptureunrealdeterminism
What we added to make the game feel good to play - brick scatter, kill streaks, wave-clear banners, a boss moment and a build-assembly effect - and how we proved it changes nothing in the simulation.
juicevfxgame-feeltesting
Achievements that watch the simulation without touching it, 70 brick-shaped badges drawn by code, a Steam lobby layer tested without Steam, and the audits and crashes on the way to a build friends can play.
achievementsmultiplayersteambuilds
The wave generator was a first guess. Three bot players with different skill levels played every level, we tuned until the middle one could win 36 of 50, and we learned what a bot cannot tell you.
tower-defensebalancebotstesting
Who wrote the campaign, who decided it, how it changed from version two to 4.2, what we cut, and how a running joke about a naval handbook ended up in three cutscenes.
storywritingclaudevoice
We tried to build the cutscenes inside the game with LEGO puppets, then chose AI video for them and assembled everything in DaVinci Resolve. What each cost, what each gave, and a plain statement that the clips are AI-generated.
cutscenesgrokunrealdavinciai
How a written mission script becomes a playable level in one agent run, why every mission is proved by a bot before a person plays it, and what broke.
campaignclaudeagentstesting
Tower Defense went from one prototype level to a 50-level, six-chapter plan in a week. A wave generator wrote 1,910 waves in a day; Opus-versus-Sonnet rules kept the cost sane.
tower-defenseclaudeagentsdesign
A plain inventory of every AI tool used on Brick & Mortar - code, models, images, video, voices and music - and the decisions that stayed with a person.
aihonestyprocess
Ships need water that behaves like water. A one-screenshot bug report led to a rebuilt water layer, new projectiles and a scripted fleet battle we could film.
unrealnavywatervfx
We stopped planting the forest every time the game loads, baked it with Unreal's procedural content tools instead, and spent a day teaching snow to look like snow from a drone camera.
unrealpcgsnowperformance
A plain list of where every kind of scenery in the game comes from - public-domain elevation data, CC0 scans, free library plants, and our own LEGO - with the licences and the mistakes.
assetslicencesunrealphotoreal
Our own notes grew by 148 per cent in two and a half days and every agent was reading them. What that cost, and the role we invented to fix it.
claudetokensprocess
How an online match works when only your clicks cross the internet, the sixteen places our code could have disagreed with itself, and the first real match with a friend.
unrealmultiplayerdeterminismtesting
How we check LEGO models against reference photos with a script, and how a rig-audit script found 20 rigging mistakes in 113 models in one pass.
blenderlegoqatooling
On day five the one big chat became a small company - a CEO role that never does the work and specialists that each own their own files.
claudeagentsprocess
Three days of terrain - a procedural mesh, a rewrite as a real Unreal Landscape, real elevation data for the maps, and grass that finally looked like grass.
unrealterrainart-direction
How a Python script turns the open LDraw parts library into game-ready models, and the bugs it produced on day two.
blenderlegopipeline
How the project actually started - what was on the PC, what we installed, what Claude wrote before the engine existed, and what broke.
setupclaudeunreal