Skip to main content
· 8 min read · July 2026

STRATUM: Excavating Civilizations That Never Existed

An archaeology game where every dig site is a procedurally generated civilization with its own history, artifacts, and a hidden mystery — guaranteed solvable by a code validator, never by trusting the AI.

Godot 4DjangoClaude APIGeminiPydanticPostgreSQLCelery

Project status: In active development — the full dig → deduce → reveal loop is playable on device.

Infinite content, if you can trust it

Generative AI promises games infinite content. In practice it delivers infinite incoherence: plots that contradict themselves, puzzles with no solution, lore that falls apart on the second read. STRATUM is our attempt to solve that problem properly.

The premise: you are an archaeologist excavating civilizations that never existed. Each site is generated — its history, its artifacts, its inscriptions — around a hidden central mystery. You brush away soil, recover artifacts, pin evidence to a Chronicle Board, form hypotheses, and publish your findings. Then the game scores you against the truth.

The truth never ships to the device

The generation pipeline runs as a staged Django job. Each civilization is produced in phases — history, culture, artifacts, clues — with the output split into two documents: a client Manifest containing everything the player can discover, and a private truth file that stays on the server. The answer to the mystery is physically absent from your phone.

The trust anchor is a clue-graph validator: a pure-code, twelve-rule engine that checks every generated mystery for solvability and internal consistency before it ships. If the clues don't logically lead to the truth, the site is rejected and regenerated. Deterministic code gates non-deterministic AI — the model is a creative writer, never a referee.

  • Production-grade LLM ops — immutable, versioned prompts with a promote-and-audit workflow, a provider abstraction with fallback cascade across Claude and Gemini, a cost ledger, quotas, and a response cache.
  • No frameworks — direct SDKs and Pydantic-validated JSON — no LangChain, no agent frameworks. Fewer layers, fewer surprises.
  • Engineering discipline — 148 tests at 94% coverage and a fully typed codebase, enforced at every phase gate.

Making digging feel physical

On the Godot side, the excavation itself had to feel tactile. The erosion mask is a CPU byte-buffer streamed into a texture — a workaround discovered the hard way, because GPU viewport accumulation doesn't persist reliably on Android's GLES translation layer. Brush strokes remove soil, artifacts emerge gradually, a lantern follows your brush, and artifacts have condition and care mechanics so reckless digging has consequences.

The deduction layer got the same treatment: the Chronicle Board is a red-string evidence board with a custom drag-scroll implementation, because stock touch scrolling breaks the moment a card captures the press. Small details, but they're the difference between a prototype and something that feels made.

Where it's going

The full loop — dig, deduce, publish, truth reveal — is already playable on real hardware. The v2 vision is the fun part: players will author their own civilizations through a conversational AI interview, bury them, and challenge friends to dig them up. Infinite content, player-created, still provably solvable.

Technology Stack

Godot 4DjangoClaude APIGeminiPydanticPostgreSQLCelery