PÚNYCODEX now serves 894 individual temple pages, one for every entry in the lexicon. One hundred seventy-three of those are flagships: hand-expanded pages with custom canvases, lore galleries, pronunciation guides, and domain ownership badges. The rest are generated from a single canonical source. This article is the story of how we learned to build at that scale without losing the detail that makes each name feel sacred.
The Source of Truth Problem
The first mistake was storing the same data in more than one place. We had a lexicon for the type tool, a separate catalog for temple generation, and a spreadsheet for domain ownership. When a single accent moved — when Apóllōn became Apollōn, for example — the change had to be chased through three files, two build scripts, and a middleware router.
The fix was ruthless canonicalization. Today the single source of truth for all 894 names is type/js/lexicon.js. Archetype data lives in js/archetypes-v2.js. Owned domains live in platform/db/owned-domains.json. Everything else — the extension lexicon, the mobile lexicon, the Android JSON assets, the middleware domain map, the browser renderer catalog — is generated.
That generation is enforced by a divergence gate in CI: after tests pass, the pipeline runs npm run generate and fails if any generated file differs from what is committed. If the gate fails, you forgot to regenerate.
From Spreadsheet to Temple
Promoting a lexicon entry to a flagship used to be a manual copy-paste marathon. Now it is scripted. scripts/create-flagship.js takes an entry id, reads the canonical archetype, assigns a per-deity canvas effect from the shared palette in js/flagship-canvas.js, and emits a full temple directory with lore and gallery pages.
The script also respects ACCURACY.md, the project's authoritative accuracy standard. Before any generated text is written, the source hierarchy is checked: Liddell–Scott–Jones, Beekes, the Oxford Classical Dictionary, and curated original-script mappings. A flagship page is not allowed to invent a Greek original; it must inherit one that has already passed validation.
The Canvas Constraint
Each flagship has an ambient canvas: storm for Zeus, void for Hades, time for Kronos, light for Apollo, water for Poseidon, and so on. The shared canvas system in js/flagship-canvas.js keeps the code small, but performance still matters. Browsers throttle off-screen canvases, and mobile GPUs struggle with particle counts that desktop handles easily.
We settled on a budget: every effect must run at 60 fps on a mid-range phone, degrade gracefully when prefers-reduced-motion is set, and never block the main thread during initial paint. The result is a library of ten effects, each under a few hundred lines, each parameterized by the archetype id so the same script renders a different mood for every god.
The Tier System as UX
The tier system began as a scholarly classifier and became a user-experience map. Tier 1 names preserve both stress and length; Tier 2 names preserve only one or neither; the three dual-tier names preserve multiple historically valid spellings. These categories determine what the temple page shows:
- Tier 1 temples display a single meta-badge and explain why the full orthography is defensible.
- Tier 2 temples label the subtype — "Accent-Preserving" or "Macron-Preserving" — and explain the single coordinate that survives.
- Dual-tier temples display two badges, two name cards, and a footer that identifies the pair as a real attested alternation.
The tier rules are documented on the Tier System page and enforced by the flywheel validator. A Tier 1 name cannot claim a dual-tier spelling, and a Tier 2 name cannot quietly upgrade itself by adding an un-attested accent.
What We Learned
The most important lesson was philological, not technical. A diacritic is not decoration. The acute on Apóllōn is the difference between a rising pitch and a falling one. The macron on Hēra is the difference between a long vowel and a short one. These distinctions were alive in the mouths of ancient speakers, and they survive in the meters of tragedy and hymn.
Building a temple means respecting those distinctions even when the web would rather forget them. It means generating 721 base temples from one canonical lexicon while still hand-expanding 173 flagships. It means running a divergence gate so that no generated file ever drifts from its source. And it means welcoming visitors through the Pantheon with a name that sounds, once again, like itself.