Move to escapement.warehack.ing; fix GFM tables in MDX
The landing page's headline results table was rendering as a paragraph of raw
pipe characters. Astro applies remark-gfm to .md but it wasn't reaching the MDX
pipeline, so every .md page rendered tables fine and only index.mdx was broken —
which is exactly why it went unnoticed. mdx({remarkPlugins:[remarkGfm]}) fixes it.
cuckoo.warehack.ing stays as a permanent redirect; it was live briefly.
This commit is contained in:
parent
3b505644b2
commit
674ad25662
@ -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
|
||||
|
||||
@ -174,7 +174,7 @@
|
||||
<!-- Anyone reading "PPS locked · ±219 ns" and wondering what that means,
|
||||
or why this box is a Pi and not an appliance, deserves one click to
|
||||
the write-up rather than a search. -->
|
||||
<a class="foot-docs" href="https://cuckoo.warehack.ing" rel="noopener">
|
||||
<a class="foot-docs" href="https://escapement.warehack.ing" rel="noopener">
|
||||
How this clock works
|
||||
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 8h7M8 5l3 3-3 3"/></svg>
|
||||
</a>
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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/"
|
||||
|
||||
@ -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(),
|
||||
],
|
||||
});
|
||||
|
||||
@ -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
|
||||
|
||||
1
docs-site/package-lock.json
generated
1
docs-site/package-lock.json
generated
@ -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"
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user