Files
runicgateway.com/src/pages/index.astro
wtclaude c29ec94f46
All checks were successful
PR checks / checks (pull_request) Successful in 1m25s
feat(screens): phase 9 — real screenshots, from a real shard
D4 asked for screenshots of the review stack rather than placeholders. Seventeen
of them: eleven of the site in a browser, six of the app on a phone, all from one
demo deployment wired to a running ServUO shard over a real sidecar, captured on
one day (D42).

The deployment is branded "Runic Gateway Demo" rather than a real community (D43),
and the captures sit beside the claims they support — the homepage, /features/, and
five of the administration pages phase 7 could describe but not show (D44).

The rig is committed rather than remembered (D45):

  scripts/seedDemo.mjs        content, by driving the site's own API — never SQL,
                              because a row the product could not have produced is
                              a screenshot of a product that does not exist
  src/data/screens.mjs        every capture: route, viewport, scroll, alt, caption
  scripts/captureScreens.mjs  npm run screens:capture
  scripts/checkScreens.mjs    the ninth check script, in CI

Shard-side dressing is servuo-plugins' scaffolding (D46), never deployed.

The rig found five things nothing else had. One is fixed upstream — a fresh
module-uo install pinned wire protocol 3 against a sidecar speaking 4, released as
v1.0.2, which this repo's own facts check then caught in platform.json. Four are
raised as product observations and worked around in the rig: a renamed guild
member never reaches the site, a guild deleted while the shard is down is a ghost
row forever, "Houses in danger" cannot show a house that was already collapsing,
and the app's news list prints raw ISO timestamps.

Players online reads 0. Logging a character in needs a UO client driven by hand,
and that is where this stopped — PLAN.md §10 says exactly why, and how to retake
the two frames that would change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 09:55:55 -05:00

37 lines
1.4 KiB
Plaintext

---
import Base from '../layouts/Base.astro';
import { brand } from '../lib/brand.mjs';
import Hero from '../components/home/Hero.astro';
import DataPath from '../components/home/DataPath.astro';
import WhatItLooksLike from '../components/home/WhatItLooksLike.astro';
import SelfHosted from '../components/home/SelfHosted.astro';
import Capabilities from '../components/home/Capabilities.astro';
import GetStarted from '../components/home/GetStarted.astro';
/**
* The homepage — PLAN.md §13 phase 3.
*
* Ordered as an argument rather than as a brochure: what it is (hero), how the hard part
* works (the data path), why you would want it on your own hardware, what you actually get,
* and how to start. The data path comes second on purpose — it is the claim in the tagline,
* and a visitor who does not believe it has no reason to read the feature list.
*
* The page itself holds no copy and no facts. Each section reads versions from
* `platform.json` and brand text from `brand.mjs`, so nothing on this route can go stale
* without a check going red first (§12).
*
* `bareTitle` because the hero's own <h1> is the tagline: the default suffix would render
* "Runic Gateway — Put your … — Runic Gateway".
*/
---
<Base title={`${brand.siteName} — ${brand.tagline}`} description={brand.tagline} bareTitle>
<Hero />
<DataPath />
<WhatItLooksLike />
<SelfHosted />
<Capabilities />
<GetStarted />
</Base>