Skip to content
Private test. Campaigns are live for invited tables; a seat arrives as a link from your DM.

What this is

A campaign wiki, a reveal engine, an operations ledger and a scheduling layer, built for one fortnightly table in Copenhagen and tested there before it is offered to anybody else.

§ 01 · Why

The three things that actually break a long campaign

Nobody remembers. Six sessions in, the innkeeper is “the one with the scar”. Sixty sessions in there are four hundred named things and the only complete copy is in one person’s head.

Everybody knows different things. This is the interesting part of running a game and the part every tool gets wrong. Wikis are either fully public or fully private, and both of those destroy the thing that makes a mystery work. Per-role visibility is not enough either: the player who bribed the harbourmaster knows something the other four do not, and that state is the campaign.

Nobody can find a Sunday. The most common cause of death for a campaign is not a bad session. It is three cancelled ones in a row and a group chat that goes quiet.

§ 02 · How it is built

Two rules that are not negotiable

Concealment happens in the database. Hidden material is removed by row level security before anything is serialised, and the surrounding text is merged server side. It never reaches a browser and gets hidden with CSS. If a player’s device can fetch it, it has leaked, whatever the interface shows, and that is true no matter how careful the components are.

No failure is swallowed. Every write that fails says so, in place, beside the control that failed, and the row stays on screen. A row that vanishes when a save fails is indistinguishable from a row that never existed, which is the number one recorded bug class in tools like this one.

§ 03 · Vocabulary

Why these particular words

Each of these avoids a collision with something that already exists in the hobby. Getting one of them wrong is cheap now and very expensive in two years.

Favour
A redeemable token, earned and later spent. Not “boon”, which is a published feature category in the 2024 core rules and would collide at the exact moment a player asks what they have.
Seal · Sealed
Concealment. Not “veil”, which is a real safety practice about content a table has agreed happens off screen. Using the same word for a database feature would collide with it in the moment somebody most needs it to mean what they think it means.
Interlude
The between-session turn. Downtime orders go in, and consequences come out.
Table Mode
The at-the-table view. Dark, larger targets, read only, and fast enough that opening it beats guessing.
Record
The encyclopedia. Not “entries”, which is what the ledger calls the two halves of a transaction, and a word that means two things in one product is a word that will eventually be misread by somebody in a hurry.

§ 04 · How it looks, and why

One ink, and colour reserved for limits

A campaign is a survey of a world that is only partly charted, so the product is drawn like a survey: one cool graphite ink, emphasis by density rather than hue, hatch where nothing has been surveyed yet, and colour used only for a limit.

Concealment has no hue at all. It is hatch and true italic and nothing else, so the private layer is never louder than the campaign it describes, and so it is never spottable by somebody glancing across a table at the wrong moment. That constraint is the reason for most of the rest of the palette.

§ 05 · The name

Yes, this domain had something else on it

LeagueKit is a campaign platform for tabletop role-playing games: a wiki, a reveal engine, a ledger and the logistics of a long campaign, for the person running it. It is not League of Legends tooling, and it has nothing to do with the sports league product that used to sit on this domain beyond the name and the address.

LeagueKit was a sports league product on this same domain. This shares the name and the domain with it and no code at all. That is worth saying here because anybody who recognises the name will ask, and because the previous site advertised twenty-five pages that all served one holding page. This one advertises what it actually has.

What has actually been built, dated