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.