Skip to content
AKZ

01Interactive exhibit

Canon timeline

Mira Vell1752–1800

Tobin Ash1781–1849

Edda Marr1795–?

  • 1790 · Opening of the Greyhaven Library: Edda Marr
  • 1820 · Treaty of Ashford: Mira Vell, Tobin Ash
1800
widens the year by ±5

Check report

2 errors · 0 intended

  • Errorbefore-birth· Acts before birth

    Edda Marr can't open the Greyhaven Library in 1790: Edda Marr was born in 1795 (source: Characters/Edda Marr).

  • Errorafter-death· Acts after death

    Mira Vell can't sign the Treaty of Ashford in 1820: Mira Vell died in 1800 (source: Characters/Mira Vell).

An invented world, checked the way Lore-Forge checks one: dates are ranges, and a warning appears only when two ranges certainly do not overlap. Move the death year, make it approximate, or mark a deliberate contradiction as intended.

02

Context & challenge

Game worlds grow across many documents: characters, places, factions, items and events, each with its own dates and relations. As the canon grows, contradictions creep in: a character takes part in an event after their recorded death, or a place is visited after it was destroyed.

Writers need to catch these early, without a database, a cloud service or a tool that rewrites their prose.

03

Approach

A world is a plain folder: world.json plus one Markdown file per entry, in a fixed key order so git and other tools can read it. Nothing leaves the machine.

A pure TypeScript core parses the folder, indexes names and aliases, works out who did what, when and where, and runs the rules on every change. The desktop app, the lore command-line tool and outside tools all share that core.

Dates are ranges, not points: a year covers the whole year, '~' widens a date by five years by default and '?' marks it unknown. A rule fires only when two ranges certainly do not overlap, so vague dates never raise false alarms.

04

My role

Personal project. I defined the product, the world format and the rules, and directed AI coding agents through the implementation, reviewing and shipping each change.

05

What was delivered

World format and calendars

Six entry types, custom calendars and approximate dates. Characters, places, factions, items, events and notes carry statuses, aliases and relations; calendars have eras and months; dates can be exact, approximate or unknown.

Consistency engine

16 rules over lifespans, dates, places, statuses and relations. Each warning shows the broken fact next to the canon fact and its source; severity can be tuned per world, and a deliberate contradiction can be marked intended.

Story chapters

Chapters are checked against the canon as they are written. A deterministic, offline extractor proposes new or updated entries, and nothing is written until the author accepts a proposal.

Views and publishing

Timeline, family tree and relationship web. A World Codex and a Story Book come from one document model and export as PDF, Word and Markdown.

06

Engineering decisions

Plain-text canon

Worlds are folders of git-diffable text files with a fixed key order, so diffs stay small and other tools can read them.

Ranges, not points

Every date is a range, and a rule fires only when two ranges certainly do not overlap.

Warnings inform, never block

Each warning has a stable id and can be marked intended; nothing stops the author from writing.

Proposals, not rewrites

Changes found in a story are proposals the author accepts or ignores, and the Story Book assembles what was written without rewriting prose.

07

Roadmap: not yet completed

  • Documented but not built: an AI-based extractor that plugs into the same proposal pipeline, and tools such as AI-HQ reading worlds through the JSON export, the JSON check report and their versioned schemas.
  • Published installers and a licence. Windows and Linux builds are configured but not released.

08

Status & outcome

An early working prototype (v0.4) that runs from source: worlds on disk, live consistency warnings, story proposals and print-ready books. The app itself contains no AI model.

09

Attribution & publication notes

  • The timeline on this page is an original, simplified illustration with invented names. It is not a screenshot of the app and does not use the app's sample world.
  • Repository is private.

Next project

CamelBot