As we approach 2026 and the launch of the narrative campaign, I thought I'd put a slightly different kind of story here. Ever since I started talking about this project online, I've been asked similar questions on a regular basis, about the technical side of 40k.gg or the creative process behind the initiative. I've always loved sharing my passions and giving people the tools to experience the same joy I find in what I do, but it's sometimes hard to sum things up in a few sentences during a quick chat. So today, I'm laying it all out. If any of this interests you, allow me to walk you through the birth of 40k.gg!
Preface: Blame Rocko
Before diving into the heart of the matter, I must point the finger at the friend who unwittingly sent me headlong into this ambitious project. A few years ago, after a decade-long hiatus from Warhammer on my part, I was having a perfectly mundane conversation with my friend Rocko. I can't quite remember how, but we ended up talking about Warhammer. I told him I used to be really into it with my cousins and childhood friends. He said the same, then mentioned the Fall of Cadia. Stunned (perhaps even in shock !) I asked him what he meant. The conversation then drifted to all the modern developments in the setting: the Great Rift, the return of the Primarch, and so on.
Completely floored by everything he told me, I plunged back into this fascinating universe, particularly into this "modern lore." I rediscovered everything that used to make me dream, and then some: the narrative richness, the cosmic upheavals, the over-the-top excess that always makes me chuckle... I dug out my old books and started collecting supplements and novels again, letting myself be utterly swept away.
1. Battle for Oghram & White Dwarf Memories
When the tenth edition of Warhammer 40,000 launched, Games Workshop introduced the "Battle for Oghram" campaign, a website where players could log their games and watch the conflict evolve globally. It immediately reminded me of the campaigns I used to follow in the pages of White Dwarf, especially the legendary Eye of Terror campaign.
I thought the initiative was fantastic. But, call it an occupational hazard, I couldn't help thinking the platform could be more immersive, more... alive. I started dreaming of something halfway between that website and a video game: an experience where you could actually see a star system evolve, watch players everywhere claim the story as their own, feel like history was being written before your eyes.
Around the same time, and again thanks to that occupational hazard of mine, I happened to notice that the domain name 40k.gg was available. Short, punchy, and rather funny, at least to me. I bought it without really knowing what I'd do with it, just with this gut feeling that it might come in handy someday.
2. The Perfect Excuse to Learn WebGL
I'm a software engineer with a front-end focus. My way of keeping up with current practices and technologies, and training myself when needed, is to dive into personal projects. In the past, for instance, I created video production tools for the competitive Halo community. For years, though, I'd wanted to learn WebGL and browser-based 3D technologies but had never found the opportunity to do so professionally. If I wanted to be able to suggest such solutions at work, I'd have to train myself first.
The concept of 40k.gg started taking shape in my mind, even if it was still a pipe dream at that point: a 3D planet you could examine from every angle, divided into zones where players could log their battles. The idea wasn't to create a full-fledged game, but a companion to the tabletop game, something simple, fun, and narratively engaging.
While I'm very comfortable building website front-ends today, I'm no graphic designer or illustrator, so I went hunting for inspiration across the web. I fairly quickly stumbled upon a concept by Trevan Crowe that captivated me. That design became my starting point, the rest was up to me to imagine.
"Sci-fi Website Concept" by Trevan Crowe on Dribbble
3. Under the Hood: A Lean but Complete Architecture
For this project, I decided to take a cautious, unhurried approach. I started by drafting purely functional specifications, precise enough to build on a solid foundation, but flexible enough to adapt along the way. I took notes, did some research, and really wanted to create something that would just expand on the tabletop game, not be a superset of game rules or something constraining.
Once I was satisfied with those specifications, I tackled the technical architecture. Since this was a personal project, I wasn't even sure at that point whether I'd release it publicly. However, I knew that if I did make this solution available to the community, it would have to be entirely free... meaning at my own expense! I factored in early on that this solution would need to be economical for me.
Development stretched over several months, a few evenings here and there, punctuated by sometimes lengthy breaks. After all, in the meantime I'd searched for and found a new house, got engaged, took care of way many cats and kittens... You know, events slightly more important than "making pretty planets"! But gradually, the solution took shape:
I'll get a bit technical here, so this paragraph might be a string of acronyms and odd names, but here goes: the solution is hosted on a small VPS (Virtual Private Server) that I administer myself. Sysadmin work isn't my forte, but I know enough to be reasonably paranoid and extremely careful about server security! The 40k.gg ecosystem runs on a Docker infrastructure orchestrated by Traefik as a reverse proxy, partly because I appreciate Traefik's automatic certificate issuance, and combined with Docker, the load-balancing capabilities allow for simple scaling if needed. The application core is a Node.js server using the Nuxt framework, which I find convenient for handling many things I need: game logic, the API, internationalization, site rendering (both server-side and distributing assets for client-side rendering), scheduled jobs, security headers and CSRF tokens, and so on. For data, I chose MariaDB because I value guaranteed data consistency—something a good relational database excels at, and MariaDB is a well-proven solution. Where relational databases are less stellar is performance, which is why I added Redis as a cache layer for data that might be frequently requested by users (like zone states), sparing the database from being bombarded with rapid queries. A separate back-office, also built with Nuxt, handles administration and control.
The game client itself is a Progressive Web App (a website that can be installed as an application) enhanced with Three.js for WebGL management. The real-time aspect is handled via WebSockets, though in hindsight, simple Server-Sent Events (SSE) would probably have sufficed. Since a 3D solution can require somewhat heavy assets to load, I opted to use Cloudflare as a Content Delivery Network (CDN) (and as protection against certain DDoS-type attacks).
I should mention that everything is automatically deployed via GitHub Actions (following typical Git Flow processes).
Every architectural choice was guided by one principle: deliver a complete solution on an architecture that's simple to modularize and maintain for a single person (me), without costing an arm and a leg (mine as well). No over-engineering, but no compromises either: I'm having fun and want to offer something genuinely nice!
Phew, we’re done with the technical gibberish, but I find interesting to see how the pieces go together!
4. The Community Takes the Stage
When I first started talking about the project on Reddit, it was mainly to find beta testers. The response exceeded my expectations: several players generously volunteered, which was already wonderfully kind, but on top of that, they brought suggestions I hadn't thought of—like adding a "party" system for groups of friends running crusades together, or enriching the fluff by naming planetary regions. So many ideas that made the whole thing infinitely richer than what I'd envisioned alone!
5. Drawing from Local History to Craft an Epic Narrative
Originally, I thought I'd delegate the lore writing to someone more skilled than me. But gradually, I took it on myself, with the desire to bring a particular "flavour" to this campaign.
The inspiration came from an unexpected place: my new home. When I moved to a very rural area of Nouvelle-Aquitaine (France) that I barely knew, I started doing some research into local history just for fun. Beyond the fact that this research accidentally led me to discover the site of an ancient motte-and-bailey castle mound in a wood while browsing freshly available LiDAR data (that's a story for another time), I mainly learned that the names of hamlets, plots of land, and other local places are remarkable witnesses to a fabulously rich history and to the enduring creativity of the inhabitants. Beyond that, you should know that this area suffered enormously during the Wars of Religion, and perhaps it's that last point that created a connection in my mind with the Warhammer 40,000 universe.
So I created resources to systematize this approach, get some "consistent" inspiration to build upon. You can find the complete "etymology" or origin of Ulmyllon's region names here. As a few anecdotes, I'm including some screenshots, but I want to linger on one particularly silly case that makes me laugh and which, to me, is reminiscent of the irony and humour that have always existed in this otherwise grim setting: while scouring maps for inspiring place names, I came across "St. Epur." and wondered about it. For those who don't know, place names based on "Saint So-and-so," often abbreviated "St So-and-so," are absolutely everywhere in France. Used to this, I thought "Epur? What kind of name is that?"... before realizing it was the abbreviation for "Station d'Épuration", which means Sewage Treatment Plant. The irony of this brain fart of mie was too good not to use: Saint Epur becomes a pestilential swamp where the Imperium stubbornly searches for relics, unable to accept that such a vile place could bear a saint's name, even a forgotten one.
The local dialect, the Poitevin, also offers treasures. Bredasson is "someone who meddles in everything", and so it was destined to become an Inquisitor's name. Brass-borné, the clumsy one, sounds to me like the nickname of an arrogant bourgeois child. Fisson, which refers to a serpent's forked tongue, will suit perfectly a character with a viper's tongue. I'm including a small excerpt from the glossary I've compiled but won't publish it in full: it still contains narrative elements yet to come, and certain secrets hidden on the site that I'd rather not spoil!
6. What's Next?
40k.gg is now functional, and the campaign is ready to launch, thanks in no small part to the community of testers who so generously helped me. The project will of course continue to evolve, shaped by the participants' battles.
If you run narrative campaigns and are looking for a digital companion to bring your conflicts to life, feel free to take a look. And if you'd like to contribute, whether through testing, ideas, or fluff : the doors will always be open!
Wishing you happy holidays, or should I say a Merry Sanguinala,
Tepec