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 @@ - + How this clock works 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" }