The share button lands on the instant replay. One click mints a slug — persistent, unguessable, one per (room, turn) — and copies a /watch link anyone can open: the server rebuilds exactly that turn for the nameless SPECTATOR, public knowledge only, none of the rest of the game visible. The page arrives with its OpenGraph card pre-baked into the head (crawlers never run the app): the turn's title and round in the text, and an og.png of the maze itself — cells, walls, doors, warp mouths, homes, standees — painted server-side and PNG-encoded with nothing but node's own zlib. The viewer page wears its chrome: the WIZ-WAR masthead linking home, the turn's title, the reel opening straight into the turn-owner's eyes with a "watch it again" loop, and a footer that says what this table is and deals the visitor in. The share page loads as its own entry so a shared link never drags the full app's socket appetite along; the reel's modal scrim learns to stand in a page instead of over one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
11 lines
439 B
TypeScript
11 lines
439 B
TypeScript
import { mount } from "svelte";
|
|
|
|
// /watch/<id> is the public share page — one turn, anyone may look. It
|
|
// loads its own component so the full app (and its live socket appetite)
|
|
// stays out of a shared link's way.
|
|
const target = document.getElementById("app")!;
|
|
const page = location.pathname.startsWith("/watch/")
|
|
? import("./SharePage.svelte")
|
|
: import("./App.svelte");
|
|
page.then(({ default: Root }) => mount(Root, { target }));
|