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