Hackathon · 13–15 November 2026
Kinstead
A multiplayer castle game that runs in the browser, designed and built in about two days by one person directing a team of AI agents.
This is the story of how we got there: the mockups, the art we threw away, what we learned about character design and Grok, and the engineering that lets 30 people play at once.

Thursday evening
It started with one sentence
“All right we are at a hackathon we're gonna be building some type of multiplayer game here be like a civilization style mixed with sims may be a little zelda give me give me a few mockups”Jonathon, to Sulla, 13 Nov, 6:41 PM
Sulla answered with three clickable mockups, one per ingredient, and a working name: Kinstead, “the place where kin stand”.



Source: hackathon conversation, 13 Nov 2026; mockups 01–03 in the project folder.
Mockups 04–06
Three ways the game could go
Before writing any game code we drew whole concepts, so Jonathon could react to something real instead of a description.


Art direction
16-bit, 32-bit, 64-bit or 128-bit?
We rendered the same village in different console-era styles so the only thing being compared was the look.



“i want the style to be more like runescape though, what you gave me has absolutely no detail in the characters or scene, so its not very exciting”Jonathon, reacting to an early blocky version
Source: mockups 07–09 and the hackathon conversation.
The world
A snowy ruin on a cliff, and the size of a real RTS map
Jonathon shared a hand-painted battlemap as a style reference only: snowy ruins on a cliff plateau with one bridge in. We painted our own maps in that spirit rather than copying it.
“you lost the whole look and feel of the map. you have got to get closer to this rendering”Jonathon, on the first attempt
The fix was a new renderer: every pixel of terrain painted from a height field (layered rock strata, light from the top left, ink rims on cliff edges), then a hand-drawn detail layer of snow drifts, rubble and ferns on top.




Source: hackathon and map-builder conversations, 13 Nov; mockups 10–20.
Characters, part 1
Same hero, ten styles
“give me a bunch of different character sprites so i can pick the level of detail and style i like”Jonathon

- One picker page, six characters, ten styles each, every card rated for detail.
- A reference board of real characters from 21 classic games, oldest to newest, to talk about why each one works.
- When Jonathon asked about 3D versions of characters from an existing game, the answer was no: those belong to their owners. We built an original cast that uses the same principles instead.
Characters, part 2
What makes a character design effective in a game
Five rules we kept coming back to, each one learned by looking at a render and seeing it fail.
1 · A readable silhouette
Chunky shapes you recognise from the outline alone. Our 16-bit set was “silhouette-led”: big heads, a 1 px near-black outline, four flat tones.
2 · A signature prop per role
Knight: flame tabard and shield. Ranger: hood and bow. Mage: glowing staff. Troll: huge club. If two heroes share a shape, players mix them up.
3 · Contrast with the world
Heroes must separate from snow and rock: crisp, high-contrast, a contact shadow under every figure, and sharp inside the camera's focus band.
4 · Judge it from the game camera
A character that looks great in a close-up can turn to mush at play distance. Every candidate was checked in the actual world view.
5 · Enough detail to be exciting
Faces, armour pieces, straps, tools. “No detail” was the first and loudest piece of feedback.
6 · It has to animate
A still that reads well can still fall apart in a walk or attack cycle. We learned that one the hard way (see the 3D slides).


Source: mockups 12, 21, 22; the character review in the asset conversation, 14 Nov.
Characters, part 3
Pixel heroes in a 3D miniature
Jonathon pointed at the “2D-HD” look: pixel-art characters standing in a lit 3D miniature, with tilt-shift depth of field, soft bloom, warm firelight against cold snow, and falling snow.



“i want the characters to feel more three-dimensional”Jonathon, which led us to Grok
Characters, part 4 · Grok
Grok Imagine became our concept artist
Jonathon generated hero concepts in Grok Imagine and picked his favourites. Those four became the cast: the knight is the player, the ranger and mage are friendly kin, and the frost troll is the enemy.
Voxel HD




Painted HD




Source: mockups 25–26 (“Jonathon's favourite Grok-generated heroes, cut out to alpha”); the Grok sub-agent result in the map conversation.
Characters, part 5 · Grok
Then every castle piece got the same treatment
33 of 33 items (castle pieces, level-2 upgrades, weapons, furniture), generated with Grok Imagine in an HD voxel style matched to the chosen heroes, and cut out with transparent backgrounds. They became the art on the build cards, the Hearthbook and the end card.












Source: mockup 27 “castle & furniture art”; commit “Castle art: HD voxel art on build cards, Hearthbook and end card”.
From concept to 3D
Can a game look exactly like the Grok art, from every angle?
The game camera orbits, so a flat picture isn't enough. We ran a fidelity spike on two pilots, the knight and the woodcutter's lodge, with four approaches.




The same four, from behind




Source: 28-fidelity-spike-report.md and its 32 captured renders.
From concept to 3D
Grok's turnarounds drift
To lock the back and sides we asked Grok for turnaround sheets of the same object. It gave us something different instead: a plausible object, not the same one.


- Prompted angles aren't reliable: several “side” and “back” views came back as three-quarter fronts.
- Helmets, emblems and sigils simplify or change between panels.
- Each panel is about 448×504 px, far below the original concept.
Source: fidelity spike report, “directly measured view consistency problems”; ASSET-PIPELINE.md finding 2.
From concept to 3D
The free trial, and an honest “dump it”
With $0 spent and nothing installed on the Mac, we fed Grok views to free image-to-3D tools and projected the Grok art back onto the meshes.

| Route | Silhouette match at concept camera | Off-angle | Result |
|---|---|---|---|
| Hunyuan3D-2 (free Space) + Grok projection | 0.85 knight · 0.92 lodge (IoU) | 3 / 5 | worked ~25k triangles |
| TripoSR on the VM's CPU + Grok projection | 0.84 knight | 2 / 5 | worked blobby |
| TRELLIS.2, Hunyuan multi-view | – | – | quota free tier: about 2 runs a day |
A last try cleaned up and animated all four heroes. Standing still, you could finally tell who was who. Animated, they fell apart. The verdict to Jonathon was blunt: keep it as a prototype, not as final art. The game ships the rigged voxel characters.
Source: mockup 29 “free image-to-3D trial”; PR #7 (draft); the asset conversation, 14–15 Nov.
From concept to 3D · the lesson
Nobody gets a faithful 3D model from one image
Our hand-sculpted and reconstructed models failed because we tried to rebuild a painting by hand, or from a single guess of its depth. Jonathon confirmed the models don't have to be cubes, which opens the proven route:
Multiple views
are the only documented way to lock the back and sides. Single-image tools invent them.
Consistent views
are the hardest part. Edit models that start from the approved art hold identity better than generic multi-view.
Mesh + auto-rig
is a solved path. Chunky voxel characters break auto-riggers.
Next step before committing: a half-day, three-asset bake-off (knight, lodge, one prop) across two paid generators and one open model, scored in the Asset Lab.
Source: ASSET-PIPELINE.md (15 Nov 2026), backed by the cited research in the asset-research folder.
Game design
Three design docs in one day
Each plan was a written design with every number in a data file checked by a validator, so code and design never drifted apart.
“Your home is your power”
Light a hearth in a frozen frontier. Every room and piece of furniture raises your Hearth Level, which makes your hero stronger. Built on a study of how ten survival and base-building games link the base to the player's power (structure only, never their content).
Restoration and completion
For players in their 30s to 50s: simple to play, no friction to start, and something visibly changes about every five minutes. Light the hearth, build your home, push back the frost.
Spend smart, guard your friends
Jonathon's direction: economic strategy, a castle instead of a house, and growth for the social side. Every build card shows its payback (“+6 wood/min · pays for itself in 1.7 min”). The frost raids at dusk.
“Rebuild a frozen castle. Spend smart so it pays you back. Guard it, and your friends', against the frost.”GAME-PLAN-CASTLE.md, page 1
Source: GAME-PLAN.md, GAME-PLAN-SIMPLE.md, GAME-PLAN-CASTLE.md (all 14 Nov 2026).
Friday · the first playable
The 14-minute castle demo
Light the Keep's hearth, restore the Gatehouse, build producers, survive two night raids, beat the Rime Troll at the bridge, and carry its warm heart home to thaw the map.






Source: castle playthrough screenshots; PR #3 “Castle mode: the v1.1 hackathon game loop” and PR #4 “3D voxel characters in play”.
Friday afternoon
Make it feel good to play
Jonathon took the controls himself and pushed a long run of changes straight from playing:
- Diablo-style controls: hold to walk, one click for the main action, right-click menu.
- The tool in your hand decides the click: felled trees, dug dirt and mined stone become pickups.
- Build anywhere, drag to draw walls, hold to turn a building as you drop it.
- Survival: a real cottage home, wolves and a thief, day and night, a door you can shut.
- Wolves raid your food stores at night, gnawing swing by swing.
- Walls and buildings between the camera and your hero fade see-through.
Source: commit history on feat/diablo-controls, 14 Nov.
Engineering
One room per map, on Cloudflare
kinstead-rooms routes /ws/<map> to that map's room.GameRoom per map holds the world: players, plots, stores, doors, farms, teams.Plots, not chaos
Each player gets their own plot on the shared map. When a map is full, the server recycles the plot of the player who has been away longest, but never a town whose owner was seen within a week.
The server decides
A trust pass made the server the owner of ownership and sync, so a client can't claim another player's buildings.
OOP, one job per class
The original single-file room was split into small services: PlayerRegistry, WorldState, MobRelay, FarmSync, PlotRecycler, Teams, Markets, RoomStats…
Testable locally
A local Durable Object server and a two-browser headless harness let agents play two players against each other before anything shipped.
Source: server/src/ and server/wrangler.toml; PRs #8, #14, #28.
Saturday · today's batch
A town that is busy without you






- Every worker visibly busy, with work poses and carried loads; a bedtime routine and meet-ups.
- Building panels with livestock orders, and full build details with live costs.
- Farm fields, herds, stock and workers synced, so visitors see your town as it really is.
Source: PRs #9, #10, #11, #15, #16, #18, #19, #21; QA screenshots from the two-browser harness.
Saturday · today's batch
Stone walls you can walk, and a gatekeeper


- Ramparts: stone walls as tall as the stone gate, a stone tower with a stair inside, and a player-only walkway along the top.
- Walls join up: neighbouring walls link automatically into solid runs.
- Gatekeeper: closes the gate at night and opens it for you and your teammates, never for strangers.
- Tower bowmen were strengthened to hold off wolf packs.
Source: PRs #12, #17, #26, #29; QA screenshots.
Performance
Making it smooth for 30 players
We ran a live load test with 30 players on one map, found the bottleneck, fixed it, and ran it again.
What changed
- Server: creature updates batched and sent 4 times a second, only to players in range; farms sync only what changed; resyncs throttled.
- Client: only the nearest 60 remote creatures are drawn, reusing the same actors instead of creating new ones.
Source: PR #25 “perf/thirty-players”; load-test numbers measured on 15 Nov.
The process
One director, a team of AI agents
What we learned
- Show, don't describe. Mockups and screenshots beat paragraphs for every decision.
- Make agents look at what they built. Screenshot it, compare it to the reference, then report.
- Ask for an honest verdict. “Dump it” on the 3D experiment saved hours.
- Small parallel branches, merged in batches, then one integration test before deploy.
- Test like a player. Two real browsers found bugs that unit tests never would.
Source: GitHub merchantprotocol/kinstead (PRs #1–#29, commit log); the build conversations.
Next
Where Kinstead goes from here
Lend a hero
Visit a friend's castle and lend them a hero to guard it. They see who held their walls.
Gentle async raids
Raid another player's saved castle as an auto-battle the server simulates. No destruction, a loot cap and shields.
Art that matches Grok
The three-asset bake-off, then the multi-view → mesh → re-projected art → auto-rig pipeline for the heroes and buildings.
Cleaner code underneath
The client-side OOP refactor pull requests are ready and held until after today's demo.
Source: GAME-PLAN-CASTLE.md (stretch and v2), ASSET-PIPELINE.md.
Your turn
Play Kinstead now
Open it on your laptop. No account, no download.
multiplayer.kinstead.pages.dev/play?mode=castle&map=demo
Light your hearth, build your castle, and guard it with your friends against the frost.