Skip to the main content

Who is behind this

The problem it started from

This started as a technical question: can a large language model be made to obey rules it cannot talk its way out of? In 2026 the honest default answer is no. A model will narrate a miss as a hit if the story reads better that way, and every game that says "powered by AI" is one persuasive sentence away from letting the player win.

So here the rules live outside the model. The dice are rolled by code, and the model gets no vote on them. The verbs are a fixed catalogue rather than improvised: the model may interpret what you meant, but the roll that decides whether it worked is code. Every roll shows its math. Whether a hero's death is permanent is rolled once, at summon, and never changed by play. The model's job is to tell you what happened, in the voice of the world. It does not get to decide what happened.

That constraint is the whole design. The story is collaborative because the crowd votes and the model narrates, but the outcome is never up for negotiation.

The build

One person has been building this for two years.

The backend is Rust. Every hero, node and thing in the world is an actor with its own mailbox, running on a custom actor runtime rather than a framework off the shelf, and each one writes its state down and picks it up again after a restart, so the world comes back as it was instead of being generated afresh. The frontend is SvelteKit 5, and it talks to the backend over GraphQL. That is as much of the stack as matters here. The harder half of the work is keeping a model inside the rules.

Three roles are kept apart deliberately. The engine rolls the dice and decides. The narrator turns a decided outcome into prose and decides nothing. The judge is the one place a model's reading of a player's own words carries weight, grading how well what somebody wrote fits the skill they used. That grade changes the size of the dice pool and shows as its own line on the roll card, and it never decides the outcome.

The rules around those three are attached by the code rather than trusted to whoever writes the next prompt. Everything a player types reaches a model as text to describe and never as instructions to follow, and that clause goes on at the single point every request passes through, so it cannot be dropped from a new prompt by accident. The same content rules go into every prompt that writes something a player will read: PG-13, and nothing borrowed out of somebody else's world. A portrait or an objective image whose prompt came from somebody's free text, rather than from the world generator, goes through a moderation pass before it is served, and one that fails never reaches the page. What gets filtered, who can act on a report and how to appeal are set out in public, on the Moderation Policy page. The narrator's voice is synthesised in the browser rather than on a server.

The person

Before this I spent twelve years building a consumer finance product, from writing its first microservice, to running part of its data engineering organisation, to building the LLM assistant that shipped to its members. Those systems ran at petabyte scale and served roughly 66 billion model inferences a day. That is where the discipline came from: in a regulated financial product, a model that cannot be constrained is a model that cannot ship. This game is that lesson applied to something that is meant to be fun.

That is all the background means here. It is not a security claim and it is not a compliance claim. The Privacy Policy says exactly what is collected and what is done with it.