← all epics

Building the Game — one site, the Builder, and the building blocks

ops needs-review

repo: land-of-lor (site/, builder/, game/director for content schemas, tools/) — one repo since 2026-09-03 · depends on: world-map-and-portalsground-typeselement-tableserver-architecture · updated 2026-09-03

What this is

Kris, 2026-09-03, by voice and then in conversation: one central, live view of the game’s building blocks — the element table, the same 64 as ground types, the creatures, the world map, and each Area with its properties — with the existing editors linked together and zero duplication of data so nothing can drift. Then the ask grew into its real shape:

The architecture in short:

spellgrove.com  (Caddy on the droplet, auto-TLS)
  /            the static site, built on the droplet from site/ by lor-site-build.timer
  /director/   the game (unchanged; lor-server.cocreations.com.au keeps working alongside)
  /builder/    the Builder — admin API, own process, own database lor_builder
staging.spellgrove.com/director/   the staging game stack

The blocks and where each one lives

BlockSource of truth todayEditorPublic view
Elements (64)game/shell/elements.js (derived JSONs via game/sync-elements.sh)game/shell/card-editor.htmlcoming (/building/elements)
Groundthe ground / groundVariant blocks in elements.js; rules in game/shell/ground_rules.mjsthe area editor’s palettecoming (same page)
Creaturesno data file — game/world/entity_factory.gd (kinds), pocs/object-gallery/scenes/creatures/ (models)nonecoming (/building/creatures)
Worldgame/content/spellgrove.world.json → the DB via npm run load-worldtools/hub-ui/ (local)/world, live from the director
Areasthe area objects in the world file + game/content/areas/<slug>.ground.jsontools/hub-ui/area.html (local)coming

The local hub (tools/hub-ui/, npm run editor in game/director) already shows all five from their canonical files on one page; it is the offline mirror of what the Builder will serve.

The one exception to “the Builder serves everything”

The public world map stays the director’s /director/world-map.json. Fogging private Areas, dropping hidden portals and adding only the caller’s own home are game rules the in-game map already depends on; the Builder must not re-implement them. The Builder’s world.json is the authoring view — the full graph for a signed-in admin.

Agent kickoff is browser-side

Kris’s call (the Moment pipeline pattern): the signed-in admin pastes their task-runner API key once into the site (localStorage, never sent to the Builder) and the “Ask an agent” panel speaks MCP straight to kris.ai-task-runner.com. The Builder only serves the section’s prompt frame. No remote-code-execution credential lives on the droplet; non-admin users never see the panel.

Sequence

001 migration + domain → 002 the Builder’s read side and the hub pages → 003 sign-in → 004 publish with staging → 005 ask an agent → 006 other people’s areas. 007 is Kris’s own half-finished ask (Dirt and natural occurrence), waiting on the rest of his sentence.

Supersedes

workspace-dashboard/003 (authenticated control surface) and /004 (task kickoff) — their intent lands here as 003 and 005. server-architecture/018 (the spellgrove.com domain) — the domain is live as of 001; moving the game client’s base URL onto it is still that task.

Status

5 review1 needs-input1 backlog

Next: 001–005 built, live and in review. Kris: sign in on spellgrove.com with your game account (Papa), open Building the Game, try an edit on Staging, and paste your task-runner key into an Ask-an-agent panel for a first small task. 006 (other people's areas) is backlog; 007 waits on the rest of the Dirt sentence.

Tasks (7)

review (5)

needs-input (1)

backlog (1)

Ask an agent about this epic

    Also available as raw markdown.