diff --git a/README.md b/README.md
index 82f28fe..befffba 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
**What the Raspberry Pi time-server guides get wrong, and the numbers to prove it.**
-Docs: **[cuckoo.warehack.ing](https://cuckoo.warehack.ing)**
+Docs: **[escapement.warehack.ing](https://escapement.warehack.ing)**
We built a GPS-disciplined Stratum 1 NTP server on a Raspberry Pi 4, followed the
published advice, and measured everything. Most of that advice is wrong on this
diff --git a/dashboard/src/gpsntp_dashboard/static/index.html b/dashboard/src/gpsntp_dashboard/static/index.html
index 0d8ef86..46d1086 100644
--- a/dashboard/src/gpsntp_dashboard/static/index.html
+++ b/dashboard/src/gpsntp_dashboard/static/index.html
@@ -174,7 +174,7 @@
-
diff --git a/dashboard/src/gpsntp_dashboard/static/style.css b/dashboard/src/gpsntp_dashboard/static/style.css
index b7b918c..a172bea 100644
--- a/dashboard/src/gpsntp_dashboard/static/style.css
+++ b/dashboard/src/gpsntp_dashboard/static/style.css
@@ -225,7 +225,7 @@ main { max-width: 1180px; margin: 0 auto; padding: 20px; display: grid; gap: 18p
* Clockmakers signed the backplate — the brass face only a repairer sees once
* the case is open. This footer is that plate: a double hairline for the plate
* edge, engraved small-caps for the name, and nothing that moves. A signature
- * should be quiet. Same markup as the docs site at cuckoo.warehack.ing,
+ * should be quiet. Same markup as the docs site at escapement.warehack.ing,
* recolored from brass to this dashboard's cyan.
*/
.ss-plate__link {
diff --git a/docs-site/.env.example b/docs-site/.env.example
index e77a21f..38f021f 100644
--- a/docs-site/.env.example
+++ b/docs-site/.env.example
@@ -4,6 +4,6 @@
COMPOSE_PROJECT_NAME=cuckoo-escapement-docs
-# Production: cuckoo.warehack.ing
-# Local dev: cuckoo.l.warehack.ing (internal only — never reference publicly)
-DOMAIN=cuckoo.warehack.ing
+# Production: escapement.warehack.ing
+# Local dev: escapement.l.warehack.ing (internal only — never reference publicly)
+DOMAIN=escapement.warehack.ing
diff --git a/docs-site/Makefile b/docs-site/Makefile
index fbc9515..75d0c99 100644
--- a/docs-site/Makefile
+++ b/docs-site/Makefile
@@ -56,4 +56,4 @@ deploy: ## Pull main + rebuild the docs container on the prod host
@echo "==> deploying $(DEPLOY_HOST):$(DEPLOY_PATH)"
ssh -A $(DEPLOY_HOST) "cd $(DEPLOY_PATH) && git fetch origin main && git reset --hard origin/main && cd docs-site && make prod"
@echo "==> sanity check"
- @curl -s -o /dev/null -w " HTTP %{http_code} %{url_effective}\n" "https://cuckoo.warehack.ing/explanation/preempt-rt-made-it-worse/"
+ @curl -s -o /dev/null -w " HTTP %{http_code} %{url_effective}\n" "https://escapement.warehack.ing/explanation/preempt-rt-made-it-worse/"
diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs
index 435948b..b22ed46 100644
--- a/docs-site/astro.config.mjs
+++ b/docs-site/astro.config.mjs
@@ -10,16 +10,17 @@
// when the dev server runs behind Caddy (TLS-terminating proxy) — without an
// explicit host/protocol/clientPort, Vite's WebSocket drops every ~10s.
//
-// Site URL comes from DOMAIN so one image serves both cuckoo.warehack.ing (prod)
-// and cuckoo.l.warehack.ing (local dev).
+// Site URL comes from DOMAIN so one image serves both escapement.warehack.ing (prod)
+// and escapement.l.warehack.ing (local dev).
import mdx from "@astrojs/mdx";
import sitemap from "@astrojs/sitemap";
import starlight from "@astrojs/starlight";
import { defineConfig } from "astro/config";
+import remarkGfm from "remark-gfm";
import starlightLinksValidator from "starlight-links-validator";
-const domain = process.env.DOMAIN ?? "cuckoo.warehack.ing";
+const domain = process.env.DOMAIN ?? "escapement.warehack.ing";
export default defineConfig({
site: `https://${domain}`,
@@ -99,7 +100,11 @@ export default defineConfig({
pagination: true,
lastUpdated: true,
}),
- mdx(),
+ // GFM tables do NOT render in .mdx without this, even though they work fine
+ // in plain .md — Astro's remark-gfm doesn't reach the MDX pipeline here. The
+ // failure is silent and ugly: the table falls through as a paragraph of raw
+ // pipe characters. It shipped that way on the landing page. Don't remove.
+ mdx({ remarkPlugins: [remarkGfm] }),
sitemap(),
],
});
diff --git a/docs-site/docker-compose.yml b/docs-site/docker-compose.yml
index cb28879..ad03415 100644
--- a/docs-site/docker-compose.yml
+++ b/docs-site/docker-compose.yml
@@ -2,7 +2,7 @@
#
# Default (no --profile flag):
# prod-style — Caddy serves the built dist/. Use for production-like
-# deploys (the public site at cuckoo.warehack.ing runs this).
+# deploys (the public site at escapement.warehack.ing runs this).
#
# --profile dev:
# Astro dev server with HMR. Volume mounts on src/ so edits hot-reload.
@@ -13,7 +13,7 @@
#
# Both services attach to the external `caddy` network and expose
# themselves to caddy-docker-proxy via labels. Edit DOMAIN in .env to
-# switch between cuckoo.warehack.ing (prod) and cuckoo.l.warehack.ing
+# switch between escapement.warehack.ing (prod) and escapement.l.warehack.ing
# (local-dev tier).
services:
@@ -28,10 +28,16 @@ services:
networks:
- caddy
labels:
- caddy: ${DOMAIN:-cuckoo.warehack.ing}
+ caddy: ${DOMAIN:-escapement.warehack.ing}
caddy.reverse_proxy: "{{upstreams 80}}"
# encode + gzip already in the container; let caddy pass through.
+ # The site was briefly live at cuckoo.warehack.ing before the rename. Keep
+ # the old host as a permanent redirect rather than letting any link that
+ # escaped rot. {uri} preserves the path, so deep links survive too.
+ caddy_1: cuckoo.warehack.ing
+ caddy_1.redir: https://escapement.warehack.ing{uri} permanent
+
docs-dev:
profiles: ["dev"]
build:
@@ -41,7 +47,7 @@ services:
container_name: cuckoo-escapement-docs-dev
restart: unless-stopped
environment:
- - DOMAIN=${DOMAIN:-cuckoo.l.warehack.ing}
+ - DOMAIN=${DOMAIN:-escapement.l.warehack.ing}
- ASTRO_TELEMETRY_DISABLED=1
volumes:
# Hot-reload bind mounts. node_modules stays inside the container
@@ -53,7 +59,7 @@ services:
networks:
- caddy
labels:
- caddy: ${DOMAIN:-cuckoo.l.warehack.ing}
+ caddy: ${DOMAIN:-escapement.l.warehack.ing}
caddy.reverse_proxy: "{{upstreams 4321}}"
# Vite HMR over WebSocket. Caddy's defaults close "idle" WS
# connections after ~10-15s; HMR doesn't send app-level pings, so
diff --git a/docs-site/package-lock.json b/docs-site/package-lock.json
index 3966f5a..7ba2fd5 100644
--- a/docs-site/package-lock.json
+++ b/docs-site/package-lock.json
@@ -12,6 +12,7 @@
"@astrojs/sitemap": "^3.7.2",
"@astrojs/starlight": "^0.39.2",
"astro": "^6.3.1",
+ "remark-gfm": "^4.0.1",
"sharp": "^0.34.0",
"starlight-links-validator": "^0.24.0"
}
diff --git a/docs-site/package.json b/docs-site/package.json
index c74adc2..96dc08d 100644
--- a/docs-site/package.json
+++ b/docs-site/package.json
@@ -14,6 +14,7 @@
"@astrojs/sitemap": "^3.7.2",
"@astrojs/starlight": "^0.39.2",
"astro": "^6.3.1",
+ "remark-gfm": "^4.0.1",
"sharp": "^0.34.0",
"starlight-links-validator": "^0.24.0"
}