Static personal site (Astro 5). Content is Markdown.
npm install
npm run dev # http://localhost:4321
npm run build
npm run preview| Page / type | File |
|---|---|
| Home intro | src/content/pages/home.md |
| About | src/content/pages/about.md |
| Blog post | src/content/posts/<slug>.md |
| Project | src/content/projects/<slug>.md |
| Images | public/images/… |
| CV PDF | public/images/cv-joris-strakeljahn.pdf |
---
title: "Title"
date: 2026-07-20
summary: "One-line teaser."
category: analysis # analysis | project | note | talk
cover: "/images/covers/<slug>-light.png"
coverDark: "/images/covers/<slug>-dark.png"
coverAlt: "Short alt text"
draft: false
updated: 2026-08-13 # optional; only if you published a revision
---summary is the listing teaser and the meta description. draft: true keeps the page out of lists, routes, and RSS. Cover is optional. Prefer a light/dark pair (cover + coverDark) so the hero matches the site theme toggle. Inside Markdown, mark screenshot pairs the same way: class="img-light" / class="img-dark" on sibling <img> tags.
date is the first publish day and never changes. RSS uses that date as pubDate and the page URL as guid, so later edits are not a new feed item. The feed item is the full HTML (light-theme screenshots only). updated plus a snapshot in src/content/revisions/ make the Edited control appear. Typo-only fixes: edit the live file, skip both.
Snapshots are split the same way as the live files: blog under posts/, projects under projects/.
src/content/posts/<slug>.md
→ src/content/revisions/posts/<slug>-YYYY-MM-DD.md
src/content/projects/<slug>.md
→ src/content/revisions/projects/<slug>-YYYY-MM-DD.md
Examples:
src/content/posts/asmap-collaborative-launch.md
src/content/revisions/posts/asmap-collaborative-launch-2026-07-09.md
src/content/projects/asmap-dashboard.md
src/content/revisions/projects/asmap-dashboard-2026-07-09.md
When a published post or project needs a real correction (not a typo):
- Copy the whole live file into the matching revisions folder. Name it
{slug}-{YYYY-MM-DD}.md, where the date is the day that version was current (usually the previousdateor lastupdated). Frontmatter can stay; only the body is diffed. - Edit the live file. Set
updated:to today. - The Edited control appears. A click diffs that snapshot against the current text. The page always shows the latest version.
The folder (posts/ vs projects/) is required. A flat file in src/content/revisions/ will not match.
Never overwrite an image file that a snapshot still points at. The overlay diffs Markdown, not pixels — same src plus a replaced PNG would show the new screenshot in both “old” and “new”.
- Swap: keep the old file, add a new one (
network-tab-2026-08-12-light.png), changesrcin the live Markdown. The overlay stacks Removed (old figure) then Added (new figure). - Delete: remove the
<figure>from the live file. Leave the PNG inpublic/images/so the snapshot can still render it. - Caption-only fix: that also replaces the whole figure in the overlay, because figures are one HTML block. Fine for a real correction; skip a snapshot for a typo.