Under the hood
Every tool, font, and decision that powers this site is documented openly, because I appreciate when other people do the same.
I already knew React well, and Next.js App Router gives a clean DX on top of it — nested layouts, server components, and first-class MDX support out of the box. The static export option (output: 'export') lets me produce a plain out/ folder and drop it on any host without needing a Node server. No vendor lock-in, no cold starts, no runtime surprises.
Tailwind v4 moves configuration entirely into CSS with @theme. There is no tailwind.config.ts — the design tokens live in globals.css next to the rest of the styles, which keeps everything in one place. The new PostCSS-first pipeline is fast, and the @tailwindcss/typography plugin handles MDX prose with zero extra work.
Anton is a bold, condensed, all-caps display typeface. It makes headings impossible to miss at any size, from mobile to ultra-wide. It has a constructed, architectural quality that fits a technical personal site without looking overwrought. It's free on Google Fonts and loaded at zero cost via next/font/google, so there's no flash of unstyled text.
Manrope is a geometric sans-serif with a wide range of weights and excellent legibility at reading sizes. It pairs well with Anton — one does the shouting, the other carries the argument. Like Anton, it's served through next/font/google so fonts are inlined and self-hosted at build time.
For a fully static site there is no need for Vercel or Netlify. Hostinger's shared plan costs a fraction of the price and handles a plain directory of HTML, CSS, and JS files perfectly. The .htaccess file takes care of trailing slashes, SPA-style routing fallback, and cache headers — everything the browser needs without a Node process on the other end.
Every push to master triggers a workflow that installs dependencies, runs next build, and uploads the resulting out/ directory to Hostinger over FTP using SamKirkland/FTP-Deploy-Action. It's simple, auditable, and free for public repos. The deploy credentials live in GitHub secrets and never touch the codebase.
Write me an email if you have any questions or feedback.
Curious about what has changed over time?