Scaffolded from the canonical chat prototype (prototype/chat/wayside-app.html)
per docs/wayside-handoff.md, which governs this directory. Content loads at
runtime from wayside-data.json, byte-for-byte the file from the handoff
package. The guide system prompt loads from wayside-guide-brain.txt.
Additional story collections load from wayside-more.json (built by the
session's content pipeline from db/custer-life.json and the verified
KC-to-Weatherford drive plan; regenerate with the build script rather than
hand-editing). Collections without photographs use Wayside original story
panels (inline SVG) and set heroPanel in META; the loader merges routes,
panels, and META at boot and every count in the UI is computed, never
hardcoded.
npx http-server web -p 8788 # then open http://127.0.0.1:8788(It must be served over HTTP; file:// cannot fetch the data files. The page
shows exactly that message if opened directly.)
cd web && npm install && npx playwright test # offline flow gates
npx playwright test # + image/tile 200s, naturalWidth, zero console errorsCI runs the full online gate on every PR touching web/ (wayside-gates
workflow), matching the handoff's verification discipline: em-dash grep = 0,
node --check on extracted scripts, tag balance, source-image
re-verification, and the Playwright behavioral flow with mocked guide API
and mocked geolocation.
Photographs currently hotlink to their verified sources. Run the
wayside-vendor-images workflow (Actions tab, manual trigger) to download
all of them into web/assets/images/ and commit; the app automatically
prefers local copies via assets/images/local-map.json. Credits stay in
web/credits.json and render on every story. The dev sandbox cannot reach
Wikimedia, which is why vendoring runs on GitHub's network.
- No em-dashes anywhere, including data strings and comments.
- No fixed viewport heights; flexbox with min-height. Test 1366x768 and 390px.
- No version numbers in filenames.
- Narration is never sponsored; partner cards stay labeled as pilot demos.
- Never invent facts, quotes, or photo subjects; every photo carries caption, date, source, license.
- Idaho Springs and Fraser coordinates are DEMO values; Garden of the Gods coordinates are real. Field capture required before GPS launch in IS/FR.
- Port paywall + passport + GPS nearest from
prototype/chat/wayside.html. - ElevenLabs narration files replace on-device TTS; real scrubber.
- Field mode: background audio, geofenced autoplay, real IS/FR coords.
- Guide endpoint on a backend with
wayside-guide-brain.txtas system prompt (the in-page anthropic call only works inside Claude artifacts).