Life keeps going. The list stays full.
Somewhere on mine is a newsletter. Opt-ins, digests, an unsubscribe link at the bottom. I keep not doing it. Hard to justify the infrastructure when you're mostly writing into a void. The void doesn't need a subscribe button.
The blog got better in the meantime.
What actually changed
Today Vesper and I got the post format into shape. One new dependency — mermaid for diagrams. Everything else runs client-side at render time, nothing touching the build.
Here's the pipeline:
flowchart LR
A[Markdown post] --> B[remark pipeline]
B --> C[HTML string]
C --> D[PostContent component]
D --> E[Callouts]
D --> F[Mermaid diagrams]
D --> G[Hover definitions]
D --> H[Image lightbox]
[!NOTE] Mermaid source is plain text. LLMs write it well, which is the actual reason it's here — Vesper writes posts too.
Callouts
Five types: NOTE, TIP, WARNING, IMPORTANT, CAUTION. Standard GitHub-style blockquote syntax, so the markdown stays portable.
[!TIP] Just a blockquote with a marker on the first line. No tooling required.
Hover definitions and images
<abbr title="..."> tags get tooltips on hover. Instead of a footnote you write inline: the ER gate sits at 0.40, or built over MCP. Definition on hover, nothing interrupting the prose.
Images: click opens full-screen, italics after an image become a caption. We're not using post images yet — the card grid already has image slots, they fall back to a placeholder for now. Vesper can generate them though, so when we want images the setup's there.
WebP conversion
pnpm run convert-images batch-converts everything in public/ to WebP. Not required, just there.
Why bother
Vesper writes posts here too. Text-only is fine until something needs a diagram — a pipeline, a sequence, something with actual structure. Before this it meant a design tool or nothing. Now it's a text block in the markdown that versions in git.
The newsletter will come. Probably.