The front page and the about page point to the other games of the Kestrel's Nest

The list is the kit's family.json, shipped as /family.json and refreshed
at deploy when the kit is beside this checkout.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
Eric Wagoner
2026-09-23 12:26:49 -04:00
co-authored by Claude Fable 5.1
parent 13a6fc2603
commit 9d087ccaa1
5 changed files with 77 additions and 0 deletions
+12
View File
@@ -10,6 +10,7 @@
import Card from "./Card.svelte";
import Help from "./Help.svelte";
import { HELP_TABS, type HelpTab } from "./help-state";
import { otherGames, type FamilyGame } from "./family";
import { summarizeMissed } from "./catchup";
import Replay from "./Replay.svelte";
import FxGallery from "./FxGallery.svelte";
@@ -26,6 +27,11 @@
net.startGamePolling();
let name = $state(prefs.wizardName);
/** The other games of the Kestrel's Nest, for the front page. */
let family = $state<FamilyGame[]>([]);
$effect(() => {
void otherGames("wizwar").then((g) => (family = g));
});
let joinCode = $state("");
let claimPhrase = $state("");
/** A /join/<CODE> recruiting link. The visitor lands looking at the
@@ -2561,6 +2567,10 @@
<img src="/hero.jpg" alt="Through a wizard's eyes: an ambush watches its corridor through a wormhole" />
</a>
<a class="about-link clips-link" href="/clips">watch clips from the labyrinth</a>
{#if family.length}
<p class="family-line">Also at the Kestrel's Nest:
{#each family as g, i (g.slug)}{i > 0 ? ", " : " "}<a href={g.url} title={g.pitch}>{g.name}</a>{/each}</p>
{/if}
</div>
<details class="more-ways" open={local.hasSave()}>
@@ -4108,6 +4118,8 @@
margin-bottom: 1.2rem;
}
.about-link:hover { color: #43331f; }
.family-line { margin: 0.5rem 0 0; font-size: 0.85rem; color: #7b6a51; }
.family-line a { color: #5a4630; }
.clips-link { display: inline-block; margin: 0 0 0.9rem; }
.field { display: block; text-align: left; margin-bottom: 1rem; }
.field span {