# Public site and comms

## overview.md
```yaml
id: public-site-and-comms
title: Public site and comms
area: comms
summary: The public-facing Lor website — an Astro static site that renders this workspace's markdown, built agent-legible from day one.
repo: n/a — this workspace (site/, epics/, deliverables/, brand/)
depends_on: []
```

## What this is

The public website for Lor: The Ten Thousand Things, plus the weekly-deliverable comms cadence it's built to carry. The site is deliberately a *thin renderer* over content that already exists as plain markdown at the repo root (`epics/`, `deliverables/`) — it does not own any content. Astro 5 content collections use the glob loader pointed at `../epics` and `../deliverables` so nothing is duplicated into `site/`.

## Why it exists

Kris has a standing weekly commitment to share a deliverable with a friend (Travis). This site turns that private habit into a public one, and does double duty as the front door for the eventual Christmas 2026 release. It also demonstrates, concretely, the "repo is the source of truth, the site is a rendering of it" principle — see the `/workshop` page and the third deliverable (`deliverables/003-this-website.md`).

## Scope

- Pages: `/`, `/deliverables` + `/deliverables/[n]`, `/epics` + `/epics/[id]`, `/codex`, `/workshop`, `/about`, `/press`, `/join`.
- Agent-legibility surfaces: `/llms.txt`, every content page also served as raw markdown at `<path>.md`, `/epics/index.json`.
- Design: "storybook cover" direction (decided 2026-07-30, Kris, from mockups) — see `brand/design.md` for the full record: painted title-screen hero, saturated cream/gold/plum/pink palette, self-hosted Pixelify Sans + Press Start 2P, dark-panel dialogue-UI components (Kris panels, choice buttons), coloured-ball epic cards, hexagram broken/unbroken lines as a sparing graphic motif, mobile-first (the game itself is mobile). Supersedes the earlier "restrained ink-on-parchment, no gradients/shadows" description.
- **Hosting: the AI Task Runner platform, not GitHub Pages.** `npm run build` writes straight into `../public` (a symlink the platform manages) and the site is immediately live at `brand/site.config.json`'s `siteUrl` (currently `https://lor.kris.ai-task-runner.com`) — no deploy step, no repo settings to flip. A GitHub Actions Pages workflow was drafted early on but is unused and disabled (`.github/deploy-site.yml.disabled` — kept outside `.github/workflows/` because the git token in use refuses to push *any* file under that path, even a disabled one, without `workflow` scope); kept only in case a future custom domain makes Pages worth reactivating.
- Giscus comments component on deliverable pages, gated off via `brand/site.config.json`'s `comments.enabled` — **permanently off as of 2026-08-04**: giscus requires a public repo, and the decision (`epics/workspace-dashboard/questions/001-repo-visibility.md`) is that no lor repo will ever be public. The component stays in the codebase only until a non-GitHub comments approach is ever wanted.
- `/join` beta-signup: no backend exists; falls back to mailto until `brand/site.config.json`'s `betaFormEndpoint` is filled in.

## Non-goals

- No CMS, no backend, no database. If it can't be a markdown file read at build time, it's out of scope for this epic.
- Not responsible for deciding the game's name (see `naming-and-brand`) — the site renders whatever `brand/brand.json` says, including the "working title" marker while `titleIsProvisional` is true.
- Not responsible for the marketing *plan* (channels, timeline, audience) — that lives in `marketing-and-communication/` and its own `CLAUDE.md`.

## Parked ideas

- **Health-bar-style progress indicators** for epic/task completion (from the game's own combat
  UI — Kris liked the look). Left out for now: there's no meaningful completion signal to show,
  since most epics are parked ideas rather than measured work in progress. Revisit once an epic
  has a real, measurable completion signal worth visualizing — a task count alone isn't it.

## Key open questions

- ~~Whether/when to enable GitHub Discussions + Giscus.~~ Answered 2026-08-04: never on this repo — all lor repos are permanently private (giscus needs a public repo). If comments are ever wanted, it's a different mechanism entirely. Same decision makes the GitHub Pages fallback (`.github/deploy-site.yml.disabled`) cost money if ever revived — Pages on a private repo needs a paid plan.
- Whether a real beta-signup backend gets built before `/join` needs to convert visitors, or mailto suffices through launch.
- Whether the weekly deliverable cadence to Travis continues privately in addition to, or is fully replaced by, the public posts.

## Relevant docs

- `land-of-lor/CLAUDE.md`, `land-of-lor/docs/README.md` — source material for `/codex`.
- `marketing-and-communication/CLAUDE.md` — the broader comms plan this site's launch feeds into.
- `WHY.md` — tone and priority reference for `/about`.

## status.md
```yaml
updated: 2026-08-06
parked: false
tasks: {"backlog":1,"needs-input":0,"ready":0,"doing":0,"review":0,"done":0}
open_questions: []
tag: blocked
next: Nothing urgent. The Giscus/Discussions question is closed (2026-08-04 decision: repos permanently private, giscus impossible). Optional, non-blocking: whether /join ever needs a real form backend, and whether/which historic docs get ported into the deliverables log as backdated entries.
```

## Task summary

1 backlog · 0 ready · 0 open questions. Not parked — this epic is live and mostly shipped,
actively maintained rather than a shelved idea — but the derived tag reads "blocked" simply
because there's currently no ready task and no open question, which is the mechanical fallback
for "nothing pending." Read that as "stable," not "stuck." The one backlog task (porting historic
docs into the deliverables log) is deliberately not ready — it waits on Kris naming which
documents, if any.

## Open questions

None tracked. The Giscus/Discussions item closed on 2026-08-04 — all lor repos are permanently
private (see `epics/workspace-dashboard/questions/001-repo-visibility.md`), and giscus requires a
public repo, so comments-via-GitHub can never happen. One minor, non-blocking item remains
(whether `/join` needs a real backend), recorded as plain prose in `overview.md`.

## Next

Nothing pending. The two minor items above, and the historic-docs porting task, can be picked up whenever, with no urgency.

## tasks/ (1)

### public-site-and-comms/001 — Consider porting land-of-lor/docs/historic/ artifacts into the deliverables log as backdated entries
```yaml
id: public-site-and-comms/001
title: Consider porting land-of-lor/docs/historic/ artifacts into the deliverables log as backdated entries
epic: public-site-and-comms
state: backlog
priority: 3
blocked_by: []
estimate: M
created: 2026-08-06
updated: 2026-08-06
claimed_by: null
claimed_at: null
delivers: []
review_artifact: null
```

## What to do

`land-of-lor/docs/historic/` holds real, dated artifacts of this project's history — the Gen-1
interactive tools (`lor-periodic-table.html`, `lor-kernel-sim-v0.html`, `lor-graph-of-changes.html`)
and the 19 July "great inversion" explainer doc among them. These are exactly what the
deliverables log exists to hold: dated project history, made public. Some of them may be worth
porting into `deliverables/` as earlier, backdated entries rather than staying invisible in a
human-owned docs folder. **Not a site-archive folder** — that concept is explicitly dropped; this
is about the existing deliverables log, extended backwards.

This is deliberately **not ready** — Kris picks which specific documents (if any) get ported, and
when. Do not act on this without that direction.

## The one design detail this will raise (flagged now, not solved now)

Deliverable numbering currently starts at 001 and counts forward. Backdated entries slotting in
*before* 001 need either a date-based ordering scheme instead of (or alongside) sequential
numbers, or a numbering convention that tolerates prepending (e.g. negative/zero-indexed, or a
separate date-sort that doesn't care about the number at all). **Settle this at port time, once
there's a concrete document to port and a concrete date to give it — not now, in the abstract.**

## Definition of done

Not applicable until Kris names specific documents to port. When he does: each ported entry gets
real deliverable frontmatter (`number` or equivalent, `date` matching the artifact's actual
origin, `title`, `summary`, `epic`, `artifacts`), and the numbering question above is resolved
concretely for that entry.

## Where the work lands

This workspace repo (`deliverables/`), reading source material from `land-of-lor/docs/historic/`
per the human-owned/read-only rule in this workspace's `CLAUDE.md` — read only, never move or
alter the source docs themselves.

## Docs to read first

`land-of-lor/docs/historic/` (the actual candidate artifacts); `deliverables/README` conventions
(the existing three entries, for format); this workspace `CLAUDE.md`'s "Who edits what" section.

## questions/ (0)

## deliverables (1)

- #3 — This website (2026-07-29) — /deliverables/3