· 4 min read
A new site, built for the agent era
Retiring the 2012-era Jekyll site and launching something that looks like 2026. Notes on the stack, the design choices, and what I learned along the way.
The site you’re reading has been running on the same Jekyll template since 2012. It served me well through a PhD, a few jobs, and a couple of career shifts, but it was starting to feel like showing up to a conference in a t-shirt I bought in grad school — still wearable, but maybe communicating more than I intended.
So I rebuilt it. This is both a launch post and a note to future me.
The stack
- Astro 5 — static-first, islands architecture, content collections with typed frontmatter. It builds down to flat HTML that GitHub Pages can serve directly.
- Tailwind CSS v4 — the new
@themeblock and OKLCH colour system make it surprisingly pleasant to set up a design system in one file. - MDX for long-form content like the Langflow case study and these posts.
- Dynamic OG images generated at build time with Satori.
- View Transitions API for smooth page-to-page navigation — small polish that matters.
- Inter, Newsreader, and JetBrains Mono for the type, with small-caps and OpenType ligatures turned on.
Total build output: ~400 KB of JS, most of which is icon sprites. Lighthouse scores at 100 across the board for the static pages.
Why stay on GitHub Pages
I considered moving to Vercel or Cloudflare Pages. Both are excellent. But for a portfolio site with no server-side features, GitHub Pages is still the right call in 2026:
- Zero ops, zero cost.
- Deploys straight from a push to
main. - Custom domain + free TLS.
- The repo is the backup.
Astro builds static HTML, so nothing about this choice locks me into Pages. If I ever need server-rendered routes I can flip the adapter and move hosts without rewriting a single page.
Design principles, such as they are
- Type first. Headlines in Newsreader because serifs still communicate thoughtfulness; body in Inter; mono in JetBrains. Small-caps on for proper numerals in tabular data. Nothing radical.
- One accent colour. A single teal used sparingly — the status dot in the header, the left border of a blockquote, the eyebrow labels at the top of a section. The rest is grayscale.
- Dark mode by default. Technical audience, dim rooms, laptops at night. Toggleable.
- No animations that aren’t doing work. View transitions and hover nudges earn their keep; parallax and floating particles do not.
- Content collections over page components. Every project, publication, and post is a Markdown file with typed frontmatter, so adding new ones is a matter of writing content — not editing JSX.
What’s on the site
- Projects — Langflow featured, plus bullet-matching, discreteRV, intRo, Daisi, Docling, and Omni Analytics.
- Publications — the full academic paper trail, now with sorghum-head counting for extra colour.
- CV — rendered from a single
cv.mdat the root of the repo. The PDF and the web version both come from the same source. - /llms.txt — a 2026 affectation: a structured index for agents that want machine-readable context about me.
What I cut
The Jekyll site had a Classes page that hadn’t been updated since 2015, a Teaching page ditto,
and a Contact page whose form had never worked. None of those made it. If I go back to teaching
I’ll put those back; until then, grep git log for the archaeology.
Housekeeping
- The old
masterbranch is nowmain, and the GitHub default branch is updated. - The old Rmd-authored PDF CV pipeline is gone — Markdown-first, PDF exported from that source.
- The entire legacy tree is preserved under
src-legacy/in the repo history so nothing is lost.
If you spot a broken link or a stale fact, please email ericrhare@gmail.com and I’ll fix it. The site’s source is open on GitHub.
— Eric