Back to home

Colophon

How this site is made, what powers it, and the principles behind it.

Stack

Framework Astro 6.4, static site generation with content collections
Hosting GitHub Pages, deployed via GitHub Actions on every push to the default branch
Styling Vanilla CSS, modularized into base, layout, article, home, archive, components, and print stylesheets. No preprocessors, no Tailwind.
Typography IBM Plex Mono for UI, code, and data. IBM Plex Sans for article body. Both served as WOFF2 from the site itself.
Color palette Graphite Cyan — dark background (#080a09), muted green accent (#8ed957), built with custom properties. Dark mode only.
Syntax highlighting Shiki with Catppuccin Mocha theme, processed at build time.
Search Pagefind, a fully static search library with zero infrastructure. Index is built after the Astro build.
Comments Giscus, a comments system powered by GitHub Discussions. Stored in a separate blog-comments repository.
Content format Markdown with YAML frontmatter, rendered through Astro content collections. Custom remark/rehype plugins handle Obsidian-style wikilinks and callouts.
Favicon & OG images Hand-drawn SVG favicon. Open Graph images generated at build time from og-default.svg.
RSS Feed at /rss.xml, generated from the same content collection.

Principles

  • No third-party tracking. No analytics, no cookies, no fingerprinting. I don't know who visits.
  • Static first. Every page is a pre-rendered HTML file. No server, no database, no API at request time.
  • No JavaScript required. The content is readable with JS disabled. Interactive elements (search, code copy, link previews) are progressive enhancements.
  • Self-hosted assets. Fonts, icons, and search index are served from the same domain. The only external request at runtime is Giscus for comments, loaded lazily.
  • Readable offline. Print stylesheet strips chrome and preserves content.
  • Content longevity. URLs are stable. Slugs don't change. Old posts are updated with corrections and version notes rather than replaced silently.

Writing toolchain

I write posts in Obsidian on NixOS, with niri as the Wayland compositor. Posts are Markdown files with YAML frontmatter, versioned in Git alongside the site code.

The content lives in src/content/blog/, one .md file per post. The frontmatter schema requires title, description, draft, type, tags, and date at build time.

History

This blog has gone through five iterations:

2019

A prototype on ricardof.dev, probably built with Hugo. Portuguese-only, with a few articles and a projects section. Source code lost.

Blog screenshot from 2019 — Hugo prototype on ricardof.dev

2022

Built with Jekyll, deployed to GitHub Pages at blog.ricardof.dev. Minimalist layout, mostly in Portuguese with some posts in English.

Blog screenshot from 2022 — Jekyll with minimalist theme

2024

Posts lived directly in Obsidian, published with the Digital Garden plugin (Eleventy under the hood). Translated remaining Portuguese posts to English.

Blog screenshot from 2024 — Obsidian Digital Garden with graph view

Early 2026

An Obsidian vault published with Quartz. Kept the Obsidian workflow but added backlinks, graph view, and callout rendering.

Blog screenshot from early 2026 — Quartz with graph view and backlinks

Mid 2026

Migrated to Astro for finer control over layout, performance, and the content pipeline. This is the current version.

Blog screenshot from mid 2026 — Astro with Graphite Cyan theme