diff --git a/CONVENTIONS.md b/CONVENTIONS.md index 0b0fce5..1d78167 100644 --- a/CONVENTIONS.md +++ b/CONVENTIONS.md @@ -66,8 +66,8 @@ README. - **The family list** in the about panel, *More games in Kestrel's Hall*, comes from `family.json` and its heading links to the family's landing page, gamehall.kestrelsnest.social. A new game is added to the kit's - `family.json` and given a card on that page in the blog repo; both are - hand-kept. + `family.json` and given a card on that page (`gamehall/` in the kit); + both are hand-kept. - **A move names the round it was made for.** The room counts rounds played (`resolved` in its view), and a page sends that count with each move; the server refuses a move whose count is behind, so a slow diff --git a/README.md b/README.md index d9245f2..943aba4 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ heading linking to the family's landing page. Add a game here, then deploy the games. That landing page, https://gamehall.kestrelsnest.social, is one static page -in the blog repo (`~/Sites/blog/static/gamehall/index.html`) with a card -per game, written by hand, and it deploys with the blog. A new game is not -in the family until it has its card there too. +in `gamehall/site/` with a card per game, written by hand. It is served by +Caddy on the shared host beside the games (`gamehall/gamehall.caddy`) and +published with `gamehall/deploy.sh 159.203.115.252`. A new game is not in +the family until it has its card there too. diff --git a/gamehall/deploy.sh b/gamehall/deploy.sh new file mode 100755 index 0000000..5e84b71 --- /dev/null +++ b/gamehall/deploy.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Publish Kestrel's Hall to the shared host: the page to /opt/gamehall and +# its Caddy site file beside the games'. Usage: gamehall/deploy.sh +set -euo pipefail +HOST="${1:?usage: gamehall/deploy.sh }" +HERE="$(cd "$(dirname "$0")" && pwd)" + +rsync -az --delete "$HERE/site/" "root@$HOST:/opt/gamehall/" +scp -q "$HERE/gamehall.caddy" "root@$HOST:/etc/caddy/sites/gamehall.caddy" +ssh "root@$HOST" ' + set -e + chown -R root:caddy /opt/gamehall + chmod -R g+rX /opt/gamehall + # Validating as root would create the access log as root; Caddy runs as caddy and must own it. + touch /var/lib/caddy/gamehall-access.log + chown caddy:caddy /var/lib/caddy/gamehall-access.log + caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile >/dev/null 2>&1 + chown caddy:caddy /var/lib/caddy/gamehall-access.log + systemctl reload caddy +' +echo "published." diff --git a/gamehall/gamehall.caddy b/gamehall/gamehall.caddy new file mode 100644 index 0000000..f6dc74a --- /dev/null +++ b/gamehall/gamehall.caddy @@ -0,0 +1,23 @@ +# Kestrel's Hall, the front door of the family: a static page, no server. +gamehall.kestrelsnest.social, gamehall.159.203.115.252.sslip.io { + root * /opt/gamehall + encode gzip zstd + + header { + Strict-Transport-Security "max-age=31536000" + X-Content-Type-Options "nosniff" + X-Frame-Options "DENY" + Referrer-Policy "no-referrer" + # Revalidated on every load, so a deploy shows up at once. + Cache-Control "no-cache" + } + + log { + output file /var/lib/caddy/gamehall-access.log { + roll_size 10MiB + roll_keep 30 + } + } + + file_server +} diff --git a/gamehall/site/face.jpg b/gamehall/site/face.jpg new file mode 100644 index 0000000..0a1c134 Binary files /dev/null and b/gamehall/site/face.jpg differ diff --git a/gamehall/site/favicon.svg b/gamehall/site/favicon.svg new file mode 100644 index 0000000..02bf02b --- /dev/null +++ b/gamehall/site/favicon.svg @@ -0,0 +1 @@ +K \ No newline at end of file diff --git a/gamehall/site/hands.png b/gamehall/site/hands.png new file mode 100644 index 0000000..929a111 Binary files /dev/null and b/gamehall/site/hands.png differ diff --git a/gamehall/site/index.html b/gamehall/site/index.html new file mode 100644 index 0000000..137e0bd --- /dev/null +++ b/gamehall/site/index.html @@ -0,0 +1,207 @@ + + + + + +Kestrel's Hall + + + + + + + + + + + + + + +
+ +
+

Kestrel's Hall

+

Free board games in the browser. Play with friends by sending a link, or alone against the house. No accounts, no adverts, no timers, and nothing sold.

+
+ + + +
+
+

How a table works

+
    +
  • Open a table and you get a four-letter code and a link. Send it to a friend; they sit down and you begin.
  • +
  • No one home? Every game seats the house: an automaton, a housecarl, a rival wizard. Play now, alone.
  • +
  • Nothing to sign up for. Your browser holds your seat. Close the tab and come back; the game is where you left it.
  • +
  • Watchers welcome. Anyone with the link can sit in the Peanut Gallery and, if the host allows, join the table talk.
  • +
  • Something went wrong? Every table has a report button that reaches the keeper, pinned to the exact moment.
  • +
+
+
+

The keeper

+
+ Eric Wagoner +
+

I am Eric, and I keep these tables from Athens, Georgia. These are games I have loved at a real table, rebuilt so friends can play them from wherever they are, with the door left open for anyone who wanders in.

+

Send word to eric@ericwagoner.com, @kestrelsnest.social on Bluesky, or @eric@toots.kestrelsnest.social on Mastodon. I roost at blog.kestrelsnest.social.

+
+
+

The hosting

+

The games are free and will stay free. They run on small servers that cost a few dollars a month; anyone who wants to chip in toward the hosting can at ko-fi.com/kestrelsnest. Nothing is unlocked by it and nothing is withheld without it.

+
+
+ +
+

Wiz-War is Tom Jolly's design; the rights rest with Steve Jackson Games. Waving Hands is Richard Bartle's. Nothing here is official or endorsed by Steve Jackson Games or Richard Bartle. Hnefatafl belongs to everyone; it is a thousand years old.

+
+ +
+ + diff --git a/gamehall/site/og.png b/gamehall/site/og.png new file mode 100644 index 0000000..6fdb768 Binary files /dev/null and b/gamehall/site/og.png differ diff --git a/gamehall/site/rock.svg b/gamehall/site/rock.svg new file mode 100644 index 0000000..b734082 --- /dev/null +++ b/gamehall/site/rock.svg @@ -0,0 +1,11 @@ + +RockRock illustrated in shaded ink on parchment. + + + + + + + +Rock + diff --git a/gamehall/site/skeleton.svg b/gamehall/site/skeleton.svg new file mode 100644 index 0000000..30bd87b --- /dev/null +++ b/gamehall/site/skeleton.svg @@ -0,0 +1,11 @@ + +SkeletonSkeleton illustrated in shaded ink on parchment. + + + + + + + +Skeleton + diff --git a/gamehall/site/tafl.svg b/gamehall/site/tafl.svg new file mode 100644 index 0000000..c2d1bbc --- /dev/null +++ b/gamehall/site/tafl.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/gamehall/site/treasure-0.svg b/gamehall/site/treasure-0.svg new file mode 100644 index 0000000..b8df618 --- /dev/null +++ b/gamehall/site/treasure-0.svg @@ -0,0 +1,11 @@ + +TreasureOpen treasure chest with gold coins and a matching wizard color and crest. + + + + + + + +Treasure + diff --git a/gamehall/site/troll.svg b/gamehall/site/troll.svg new file mode 100644 index 0000000..dcc7d0b --- /dev/null +++ b/gamehall/site/troll.svg @@ -0,0 +1,11 @@ + +TrollTroll illustrated in shaded ink on parchment. + + + + + + + +Troll + diff --git a/gamehall/site/wizard-0.svg b/gamehall/site/wizard-0.svg new file mode 100644 index 0000000..de2b721 --- /dev/null +++ b/gamehall/site/wizard-0.svg @@ -0,0 +1,11 @@ + +WizardDark-skinned woman with silver curls and a green winged helmet. + + + + + + + +Wizard + diff --git a/gamehall/site/wizard-1.svg b/gamehall/site/wizard-1.svg new file mode 100644 index 0000000..d504aa9 --- /dev/null +++ b/gamehall/site/wizard-1.svg @@ -0,0 +1,11 @@ + +WizardBrown-skinned man with a short dark beard and red tiger hood. + + + + + + + +Wizard + diff --git a/gamehall/site/wizard-2.svg b/gamehall/site/wizard-2.svg new file mode 100644 index 0000000..70eae39 --- /dev/null +++ b/gamehall/site/wizard-2.svg @@ -0,0 +1,11 @@ + +WizardAndrogynous tan-skinned wizard with dark hair and a magenta horned crown. + + + + + + + +Wizard + diff --git a/new-game.sh b/new-game.sh index 7b94432..8511026 100755 --- a/new-game.sh +++ b/new-game.sh @@ -50,7 +50,7 @@ Next: 6. Put the game in the family: add it to the kit's family.json (every game's about panel lists the others from that file at its next deploy), then give it a card on the family's landing page, Kestrel's Hall, hand-written HTML in - the blog repo at ~/Sites/blog/static/gamehall/index.html, and deploy the blog. + the kit's gamehall/site/index.html, and publish it: gamehall/deploy.sh . Card art is the game's own drawing; never a publisher's logo or scan. CONVENTIONS.md in the kit is the house style every game follows. MSG