Spirescape
Playable prototype · Sep 2026 · set in the Gloomfell worldSlay the Spire combat in a RuneScape world. I wrote the design down before I wrote the code.
Spirescape mixes Slay the Spire's card combat with RuneScape's open-world skilling and economy. I designed it before I built it. Eighteen rounds of a structured design interview produced 168 locked decisions, each with an ID, a date and the reason behind it, in one log that is the only source of truth. Superseded decisions get struck through, not deleted. Open questions have their own file. No document and no agent is allowed to invent an answer. Every rule in the code cites the decision it comes from, and because "everything connects to something" is the one design pillar, the content loader refuses to start if any material has fewer than two uses.
The prototype is a zero-art tutorial you can play in a browser. One shared rules library is compiled by both a headless .NET server and a Unity 6 client, so the client never works out a rule itself. It sends what you meant to do and draws whatever the server's 600 ms tick sends back, and a second browser is a second player in the same world. The test suite plays the whole tutorial end to end over a real socket with a headless client, and a smoke driver plays the opening in a built player and saves screenshots. It runs on a five-dollar Lightsail box in Sydney behind Caddy, which serves the WebGL build, fetches its own certificate and proxies the WebSocket on the same origin. The music is written as MIDI in Python and rendered through a General MIDI bank, the way the 2004 RuneScape soundtrack was.
- Built with
- Shape
- Shared rules core, authoritative headless server, thin Unity client
- Design
- 168 locked decisions over 18 interview rounds; the code cites them by ID




Zero art on purpose. Every object is a primitive or a line of text spawned from code, so I could play, test and argue about the rules before modelling anything.





