diff --git a/deploy/Caddyfile.tmpl b/deploy/Caddyfile.tmpl index be8cb17..abd7aba 100644 --- a/deploy/Caddyfile.tmpl +++ b/deploy/Caddyfile.tmpl @@ -43,7 +43,7 @@ __HOST__ { header @immutable Cache-Control "public, max-age=31536000, immutable" @mutable not path /_app/immutable/* header @mutable Cache-Control "no-cache" - try_files {path} {path}.html /index.html + try_files {path} {path}.html /shell.html file_server } } diff --git a/src/lib/components/Hall.svelte b/src/lib/components/Hall.svelte index 1b82f92..646b34b 100644 --- a/src/lib/components/Hall.svelte +++ b/src/lib/components/Hall.svelte @@ -220,7 +220,7 @@

Waving Hands

Wizards duel with their hands, and the right run of gestures is a spell.

Richard Bartle's 1977 pencil-and-paper duel, free in your browser. Each turn every wizard chooses a gesture for each hand, and all are shown together. A Fireball is F-S-S-D-D on one hand, and a Shield is a single palm. Play the bot, or open a table for up to a dozen wizards and play by turns.

- +
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 2477701..63e0a83 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1,4 +1,5 @@ -// The duel lives in the browser and is saved to local storage, so nothing is rendered on the -// server. Each route is prerendered as an empty shell that the client fills in. +// The duel lives in the browser and is saved to local storage, so by default a route is +// prerendered as an empty shell that the client fills in. The hall, the rules and the guide +// turn rendering on in their own +page.ts, since their text is the same for everyone. export const ssr = false; export const prerender = true; diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..3634166 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1,3 @@ +// The page is text that reads the same for everyone, so it is rendered at build time and served whole; +// the browser-only state it shows (held seats, the saved name) fills in once the script runs. +export const ssr = true; diff --git a/src/routes/guide/+page.ts b/src/routes/guide/+page.ts new file mode 100644 index 0000000..3634166 --- /dev/null +++ b/src/routes/guide/+page.ts @@ -0,0 +1,3 @@ +// The page is text that reads the same for everyone, so it is rendered at build time and served whole; +// the browser-only state it shows (held seats, the saved name) fills in once the script runs. +export const ssr = true; diff --git a/src/routes/rules/+page.ts b/src/routes/rules/+page.ts new file mode 100644 index 0000000..3634166 --- /dev/null +++ b/src/routes/rules/+page.ts @@ -0,0 +1,3 @@ +// The page is text that reads the same for everyone, so it is rendered at build time and served whole; +// the browser-only state it shows (held seats, the saved name) fills in once the script runs. +export const ssr = true; diff --git a/static/family.json b/static/family.json index 155ee63..81980f2 100644 --- a/static/family.json +++ b/static/family.json @@ -31,8 +31,16 @@ "name": "Dip", "url": "https://dip.kestrelsnest.social", "pitch": "Seven powers share one map, and none of them has to keep its word.", - "players": "2 to 7", + "players": "2 to 10, depending on the map", "origin": "Allan B. Calhamer's Diplomacy, 1959; an unofficial rebuild" + }, + { + "slug": "wyrm", + "name": "Wyrm", + "url": "https://wyrm.kestrelsnest.social", + "pitch": "Chess on three boards, with a Dragon in the air above your King and a Basilisk in the earth below.", + "players": "2", + "origin": "Gary Gygax's Dragonchess, Dragon Magazine No. 100, 1985; an unofficial rebuild" } ] } diff --git a/vite.config.ts b/vite.config.ts index 52cdd77..f04ee5d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -11,7 +11,9 @@ export default defineConfig({ filename.split(/[/\\]/).includes('node_modules') ? undefined : true }, // A static build: the duel runs entirely in the browser, so Caddy serves files and nothing else. - adapter: adapter({ fallback: 'index.html' }) + // The fallback is the empty shell Caddy serves for a room address; it is not index.html, so the + // hall's own prerendered page is not overwritten by it. + adapter: adapter({ fallback: 'shell.html' }) }) ], server: {