Tabeller ruller nu inden i sig selv, så siden ikke bliver bredere end skærmen ved
390 px. Kodeblokke og tabeller kan igen nås med tastatur. Kolofon, uses, humans.txt
og banner beskriver den nye stak. Mermaid er fjernet, da intet indlæg bruger det.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
canonical() fjernede enhver linje med godkendt: fra det signerede, og Zola kan lukke
frontmatter midt på en linje. Sammen gav det plads til ugodkendt tekst i et gyldigt
stemplet indlæg. Nu er kun den linje tjenesten skriver usigneret, og kun én gang.
Bruger runnerens python3 i stedet for setup-python, som kun har builds til Ubuntu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Samme indhold, URL'er og udseende, bygget af en enkelt zola-binær og Tailwind
standalone-CLI uden Node. Kanonisk domæne er asger.weirsoe.dk.
Blogindlæg ligger som page bundles med frontmatter Zola forstår, så de gamle
stempler er ugyldige, indtil scripts/omstempl.py er kørt med PUBLISH_KEY.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Images for a post live next to it in src/content/blog/<slug>/ and are
referenced as ./<slug>/file.png, so Astro optimises them and resolves the
path in the preview build as well. The stamp now also covers the sha256 of
every file in that folder: swapping or adding an image after approval fails
the build, and so does a folder without an approved post. Posts without
images keep their existing stamps.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Posts are written in a private drafts repo and only reach this repo through
an approval step that stamps them with an HMAC over path and content. The
deploy workflow now runs scripts/verify-approvals.mjs before the build and
refuses to build if a post is unstamped, changed after approval, or still
marked as a draft (this repo is public, so a draft here is already published).
PW_PREVIEW=1 builds the site under /udkast for the private review page:
noindex, a banner, no service worker, sitemap or comments.
The nine existing posts are stamped as approved.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Fire ugers adgangslog (81k requests) viser at ægte Googlebot kun hentede robots.txt,
favicon og et par billeder — plus én enkelt HTML-side i hele perioden. Intet af det her
løser dét (kun indgående links gør), men det fjerner de undskyldninger vi selv havde
lagt ud.
- Sitemappet havde ingen lastmod overhovedet. Nu udleder astro.config.mjs den pr. side:
statiske sider fra deres sidste commit, blogindlæg fra updated/date i frontmatter,
og oversigts-/tagsider fra det nyeste indlæg de viser. Kan en dato ikke fastslås
præcist, udelades lastmod helt — en forkert dato er værre end ingen, fordi Google
holder op med at stole på feltet.
- Det kræver rigtig git-historik, så checkout kører nu fetch-depth: 0 (default shallow
ville give alle filer samme dato).
- Nyt deploy-step pinger IndexNow med de sider dette push faktisk ændrede — udregnet af
scripts/indexnow.mjs ud fra diffen, ikke hele sitemappet, da gentagne fuld-lister er
støj. Nøglefilen lå allerede i public/, men blev aldrig brugt. Hjælper kun Bing/Yandex;
Google understøtter ikke IndexNow. continue-on-error, så det aldrig vælter et deploy.
- /favicon.ico gav 404. Tilføjet som rigtig 3-størrelses ICO (16/32/48) genereret fra
favicon.svg med samme baggrund som de øvrige ikoner.
Claude-Session: https://claude.ai/code/session_018oXJWTRxTYdcV9Kw6M7e5J