This is the reader. You're looking at it.
The body renders in Source Serif 4. Headings stay in Playfair italic so the editorial tone carries over from the rest of the site. Meta lines (date, reading time, tag) stay in Inter so they read as scaffolding rather than content.
Writing
Writing happens in Obsidian. The vault is rooted at content/articles/,
attachments are saved next to each note, and Markdown is the native format. No
WYSIWYG, no database, no login, no rate limits, no one to email when something
breaks.
When I paste an image, Obsidian drops the file into the article's folder and
inserts a standard Markdown reference. The build copies images from
content/articles/<slug>/ into public/articles/<slug>/ and rewrites
relative paths. The MDX stays portable — previews work inside Obsidian and on
the live site identically.
Code
Syntax highlighting is baked at build time with Shiki via
rehype-pretty-code. No runtime cost. The github-dark-dimmed theme matches
the rest of the palette.
export type ArticleMeta = {
slug: string;
title: string;
subtitle?: string;
date: string;
tag: string;
excerpt: string;
readingTime: string;
};Inline code shows up as a quiet pill — useful for filenames, flags, and
the occasional identifier.
Links and emphasis
Body links look like this — underlined, white, no color accent. Strong text is bold white, emphasis is italic. Lists inherit the same reading serif:
- Small units, well-bounded.
- Narrow column, ~680px.
- Generous leading.
Good prose is a well-lit room. Good formatting is the lamp.
What this file is
A placeholder. Replace it with the first real article whenever you're ready.
Create a new folder under content/articles/ (e.g. 2026-05-shipping-alone),
add an index.mdx with frontmatter, write, paste images, commit.
That's the whole workflow.
