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.**
|
**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
|
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
|
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,
|
<!-- 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
|
or why this box is a Pi and not an appliance, deserves one click to
|
||||||
the write-up rather than a search. -->
|
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
|
How this clock works
|
||||||
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 8h7M8 5l3 3-3 3"/></svg>
|
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 8h7M8 5l3 3-3 3"/></svg>
|
||||||
</a>
|
</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
|
* 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
|
* 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
|
* 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.
|
* recolored from brass to this dashboard's cyan.
|
||||||
*/
|
*/
|
||||||
.ss-plate__link {
|
.ss-plate__link {
|
||||||
|
|||||||
@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
COMPOSE_PROJECT_NAME=cuckoo-escapement-docs
|
COMPOSE_PROJECT_NAME=cuckoo-escapement-docs
|
||||||
|
|
||||||
# Production: cuckoo.warehack.ing
|
# Production: escapement.warehack.ing
|
||||||
# Local dev: cuckoo.l.warehack.ing (internal only — never reference publicly)
|
# Local dev: escapement.l.warehack.ing (internal only — never reference publicly)
|
||||||
DOMAIN=cuckoo.warehack.ing
|
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)"
|
@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"
|
ssh -A $(DEPLOY_HOST) "cd $(DEPLOY_PATH) && git fetch origin main && git reset --hard origin/main && cd docs-site && make prod"
|
||||||
@echo "==> sanity check"
|
@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
|
// when the dev server runs behind Caddy (TLS-terminating proxy) — without an
|
||||||
// explicit host/protocol/clientPort, Vite's WebSocket drops every ~10s.
|
// explicit host/protocol/clientPort, Vite's WebSocket drops every ~10s.
|
||||||
//
|
//
|
||||||
// Site URL comes from DOMAIN so one image serves both cuckoo.warehack.ing (prod)
|
// Site URL comes from DOMAIN so one image serves both escapement.warehack.ing (prod)
|
||||||
// and cuckoo.l.warehack.ing (local dev).
|
// and escapement.l.warehack.ing (local dev).
|
||||||
|
|
||||||
import mdx from "@astrojs/mdx";
|
import mdx from "@astrojs/mdx";
|
||||||
import sitemap from "@astrojs/sitemap";
|
import sitemap from "@astrojs/sitemap";
|
||||||
import starlight from "@astrojs/starlight";
|
import starlight from "@astrojs/starlight";
|
||||||
import { defineConfig } from "astro/config";
|
import { defineConfig } from "astro/config";
|
||||||
|
import remarkGfm from "remark-gfm";
|
||||||
import starlightLinksValidator from "starlight-links-validator";
|
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({
|
export default defineConfig({
|
||||||
site: `https://${domain}`,
|
site: `https://${domain}`,
|
||||||
@ -99,7 +100,11 @@ export default defineConfig({
|
|||||||
pagination: true,
|
pagination: true,
|
||||||
lastUpdated: 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(),
|
sitemap(),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# Default (no --profile flag):
|
# Default (no --profile flag):
|
||||||
# prod-style — Caddy serves the built dist/. Use for production-like
|
# 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:
|
# --profile dev:
|
||||||
# Astro dev server with HMR. Volume mounts on src/ so edits hot-reload.
|
# 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
|
# Both services attach to the external `caddy` network and expose
|
||||||
# themselves to caddy-docker-proxy via labels. Edit DOMAIN in .env to
|
# 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).
|
# (local-dev tier).
|
||||||
|
|
||||||
services:
|
services:
|
||||||
@ -28,10 +28,16 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- caddy
|
- caddy
|
||||||
labels:
|
labels:
|
||||||
caddy: ${DOMAIN:-cuckoo.warehack.ing}
|
caddy: ${DOMAIN:-escapement.warehack.ing}
|
||||||
caddy.reverse_proxy: "{{upstreams 80}}"
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||||
# encode + gzip already in the container; let caddy pass through.
|
# 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:
|
docs-dev:
|
||||||
profiles: ["dev"]
|
profiles: ["dev"]
|
||||||
build:
|
build:
|
||||||
@ -41,7 +47,7 @@ services:
|
|||||||
container_name: cuckoo-escapement-docs-dev
|
container_name: cuckoo-escapement-docs-dev
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- DOMAIN=${DOMAIN:-cuckoo.l.warehack.ing}
|
- DOMAIN=${DOMAIN:-escapement.l.warehack.ing}
|
||||||
- ASTRO_TELEMETRY_DISABLED=1
|
- ASTRO_TELEMETRY_DISABLED=1
|
||||||
volumes:
|
volumes:
|
||||||
# Hot-reload bind mounts. node_modules stays inside the container
|
# Hot-reload bind mounts. node_modules stays inside the container
|
||||||
@ -53,7 +59,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- caddy
|
- caddy
|
||||||
labels:
|
labels:
|
||||||
caddy: ${DOMAIN:-cuckoo.l.warehack.ing}
|
caddy: ${DOMAIN:-escapement.l.warehack.ing}
|
||||||
caddy.reverse_proxy: "{{upstreams 4321}}"
|
caddy.reverse_proxy: "{{upstreams 4321}}"
|
||||||
# Vite HMR over WebSocket. Caddy's defaults close "idle" WS
|
# Vite HMR over WebSocket. Caddy's defaults close "idle" WS
|
||||||
# connections after ~10-15s; HMR doesn't send app-level pings, so
|
# 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/sitemap": "^3.7.2",
|
||||||
"@astrojs/starlight": "^0.39.2",
|
"@astrojs/starlight": "^0.39.2",
|
||||||
"astro": "^6.3.1",
|
"astro": "^6.3.1",
|
||||||
|
"remark-gfm": "^4.0.1",
|
||||||
"sharp": "^0.34.0",
|
"sharp": "^0.34.0",
|
||||||
"starlight-links-validator": "^0.24.0"
|
"starlight-links-validator": "^0.24.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
"@astrojs/sitemap": "^3.7.2",
|
"@astrojs/sitemap": "^3.7.2",
|
||||||
"@astrojs/starlight": "^0.39.2",
|
"@astrojs/starlight": "^0.39.2",
|
||||||
"astro": "^6.3.1",
|
"astro": "^6.3.1",
|
||||||
|
"remark-gfm": "^4.0.1",
|
||||||
"sharp": "^0.34.0",
|
"sharp": "^0.34.0",
|
||||||
"starlight-links-validator": "^0.24.0"
|
"starlight-links-validator": "^0.24.0"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user