Technical Blog - Thursday 30 October

Building a board game's digital version with coding agents

By Cascha van Wanrooij

Building a board game's digital version with coding agents

I’m an ML Engineer at KickstartAI. Over the summer, I wanted to spend a few spare hours on something useful and fun, so I volunteered to help with a digital version of the Zero Hunger Game. This physical board game for education is an initiative of the Zero Hunger Lab at Tilburg University, designed in collaboration with Breda University of Applied Sciences. 

Essentially, the game teaches students about the second UN Sustainable Development Goal (SDG) by focusing on the unequal food distribution around the world. During gameplay, students try to feed their populations as best as they can. 

What I appreciate about the game is that it exposes students to hard choices without telling them what to think, and even touches on questions around what it feels like to have to ask for food. I was a spectator during parts of the physical game’s design process and I once played it with early elementary school kids in a previous job. That helped a lot when I started sketching a digital prototype. I do not want to spoil mechanics here. If this interests you, you can read more about the Zero Hunger Lab’s project and consider playing the physical game when you can.

The physical Zero Hunger Game. Source: Breda University of Applied Sciences

Mind you, I’m not a game designer, nor a frontend engineer. But I can read React and I’m comfortable with FastAPI. Since the physical board game already exists, the game’s guide effectively serves as a complete specification, every rule and possible player action is already defined and tested. That made the project a good experiment to push today’s AI coding agents as far as I could. I’m also an avid reader of Simon Willison’s blog. Let’s use his recent definition of an AI agent to anchor this article too: an LLM agent runs tools in a loop to achieve a goal.

What we are building and why

From what I understand, teachers in the Netherlands and elsewhere have shown interest in the Zero Hunger Game. Running the physical version takes a trained host who guides the rules and the flow. You also need the game box with the chips and cards to be at the school on the day, which puts a natural limit on where it can be played. A digital version can widen access, while also handling the rules. We still want students in the same physical room, since conversation works better face to face, which points to a format similar to Kahoot. A teacher opens a lobby on a host screen, puts it on the projector, and students join from laptops or phones with a code. The teacher advances rounds at the right moments while the software keeps state and nudges the flow.

We try to keep as much of the original look and feel as possible in the digital version. Some example screens:

Zero Hunger Game
Source: Zero Hunger Lab

The technical choices

I split the web design into three parts. First, a Python backend with FastAPI and a SQL database that tracks game state. Second, a host frontend for the teacher. And third, a player frontend for the students. 

The frontends talk to the backend over WebSockets so everyone stays in sync as actions happen. I didn’t use a game engine because the web stack is what I know, it’s easy to deploy to browsers without installs, and coding agents are very fluent in this territory, thanks to a large amount of training data. 

I began with Claude Code. My workflow was simple. Ask it to add a backend route for a new feature. Then have it write a small markdown note that documents the request and response for the frontends. Use that note as the spec when asking for the matching host and player UI. It worked because a FastAPI route doubles as both code and documentation.

Later, I tried GPT-5-Codex through the Codex CLI. It’s a fine-tuned GPT-5 specifically for coding. I found it slightly better for this project and cheaper per token, which mattered over many iterations.

The AI-scout

One pattern I picked up from a blog post by Josh Bleecher Snyder that helped a lot is to send out a scout. If you have played Age of Empires or StarCraft the analogy is obvious. Scouts are cheap units you send into the fog to learn something quickly. Here the scout is an agent you point at a fuzzy task with minimal constraints. You let it try, not because you expect a perfect solution, but because the attempt can reveal options or difficulties you hadn’t considered. Sometimes the scout gets lost. That’s fine. The point is what you learn for a few cents worth of tokens, not whether you land its exact edits.

To give a concrete example: the physical game ends each round with a short in-character announcement by the host that connects choices to consequences. I wanted a digital moment that felt thematic without turning into a wall of text. I sent a scout to explore end-of-round ideas. It proposed a newspaper front page that highlighted what happened, and it suggested tracking national wealth over rounds with a small chart. The chart was too complex for the target age, but the newspaper idea stuck.

Silent collapse

Andrej Karpathy talks about silent collapse in his conversation with Dwarkesh Patel, which clicked for me. You may be familiar with collapse in GANs. Individual samples look fine, yet together they cover only a narrow slice of what is possible. Karpathy calls this collapse in LLM’s “silent” because it’s not immediately obvious if you look at a single response. But try asking a model for a joke a 100 times, and you get variations of three of the same jokes. This lack of “entropy” limits the creative value that these models offer.

An example of not-so-silent collapse in a GAN model generating faces. The model has failed to capture the true variance of pictures of faces, and so all faces look alike, as you can see below:

GAN model collapse
Source: IET Image Processing

In day to day work with coding agents, I feel a version of that in web design. Ask for a new screen and you get the same overused gradients and components. It looks polished in isolation but numbing as a set. This parody at vibe-coded.lol captures this blandness nicely. To my frustration, I encountered this many times while trying to expand the functionality of my frontend screens. Time and again, Codex would “drift” away from the current game design towards slick but cookie-cutter menus, clashing with current game design so far. This means that, for frontend design, I had to really step in and give Codex very small tasks with targeted instructions. Another way to try to fight this collapse was to sometimes switch to Claude Code. While the data these underlying models were trained on overlaps a lot, their tastes are not identical. This would sometimes nudge everything into a more creative direction.

Concluding thoughts

Building this has been humbling. I realized how much creativity went into crafting the original board game, and how even translating it to a browser already forces tough choices. When it comes to experimenting with AI agents, I’ll say it’s definitely been a success. Am I still the one injecting entropy when things start to feel too similar? Yes. But you can definitely use agents to boost creativity: send a cheap agent into the fog, see what it finds, keep only what helps, and do not worry if it gets lost. Finally, if you’re interested in the broader scope of things, Karpathy’s recent conversation with Dwarkesh is a good counterweight to the current agent hype. In fact, if you haven’t seen it yet, why are you reading this slop? 

💡 Want to learn more about the KickstartAI community and our mission to accelerate AI adoption in the Netherlands? Check out our website, listen to our podcast, or follow us on LinkedIn! Want to connect with Cascha? Find him on LinkedIn!