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.
- how to play · the rules · (aboutOpen = true)}>about this game
+ how to play · the rules · (aboutOpen = true)}>about this game
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: {