Independent product Architecture · Real-time systems
Dragon Lords
An independent cross-platform game with a split backend, an API, background jobs and a real-time service. Included because of the architecture, and labelled as an independent product.
What it is
Dragon Lords is an independent game, in public alpha, set in a fantasy world and played across desktop and mobile. It is not a client project. It is here because the interesting part, for a business looking at custom software, is not the dragons. It is the shape of the system behind them.
The business problem
There is no client brief. The technical problem is the one a growing product eventually hits: several kinds of work that should not live in one process. A player action, a saved record, a slow piece of processing and a live update to other people are different jobs, and they get in each other’s way if they share a single queue and a single server.
The work
The current client is written in Unity and C#. An earlier version used Angular, Ionic and Capacitor. It was rewritten when that stack was getting in the way of the game itself.
Behind the client, a Laravel API stores the durable data in MySQL, with Redis alongside it. Work that does not need to finish inside the player’s click goes through RabbitMQ and queued jobs. Live multiplayer updates go through a separate WebSocket service written in Go. Redis pub/sub carries events between the Laravel API and that Go service, so the two backends can stay in step without being the same program.
The design work was deciding which responsibility sits where, and keeping those boundaries intact as the game grew. World navigation, combat, gathering, crafting, inventory and multiplayer all had to fit that split.
Why it is here
A bespoke business system rarely starts this large. It does, sometimes, end up with an API, a worker and a live channel. Dragon Lords is the place that combination has been designed and operated as a whole, in public, and still in active development.
Technologies