Colophon
A record of what built this site and what I use day to day.
This site
Built with SvelteKit and deployed on Vercel. Pages and blog posts are written in MDsvex - Markdown with Svelte components embedded where needed. Code blocks are highlighted via Shiki, with Nord (light) and Night Owl (dark) themes.
Styling is TailwindCSS with Flowbite components, plus a custom design system built around OKLCh color space. The color math is handled by culori - OKLCh produces perceptually uniform palettes that RGB and HSL can’t, and once you work with it you don’t go back.
The generative art scattered through the site runs on p5.js via p5-svelte. Each sketch uses seeded randomness so the same seed always produces the same output. Noise is fast-simplex-noise. The Voronoi, ForceField, and CirclePacker algorithms are custom implementations.
Fonts: Bricolage Grotesque for body text, Qwitcher Grypen for the logo. Analytics via Google Analytics 4 in production.
Writing and editing
Neovim for most text editing - code, notes, prose drafts. I’ve been on Vim keybindings long enough that everything else feels broken.
Claude Code as an AI coding assistant, running directly in the terminal. It handles exploration, refactoring, and implementation with full codebase context. I use it heavily for this site and for most of my other projects.
Obsidian for notes and knowledge management, with a local vault. Plain markdown files, no lock-in.
Development environment
macOS. Terminal is Kitty with tmux for session management. Shell is Zsh with a custom config built up over years.
Homebrew for package management. ripgrep and fd over grep and find - faster and saner defaults. jq for JSON, delta for git diffs.
Git with a fairly minimal config. I commit deliberately and write messages that explain why, not what.
Raycast as a launcher, replacing Spotlight entirely. Fast enough that it’s invisible.
Other tools
Arc as the primary browser. Superhuman for email. 1Password for credentials.
Linear for issue tracking on serious projects. Notion occasionally for shared docs, though I prefer keeping things in plain text locally.
Figma for design work when I need it, though I usually work directly in code for UI. The OKLCh color tools on this site grew out of needing better palette tooling than Figma offers natively.
n8n for automation workflows, self-hosted. When something needs to happen on a schedule or in response to an event, it usually ends up in n8n.
Last updated March 2026.