All work

My Portfolio

Personal site: work, writing, experience, and life

The homepage of this site in dark mode, with the introduction on the left and a portrait photo on the right
Role
Engineering + Design
Stack
Astro · TypeScript · MDX · CSS
Timeline
Ongoing · since Sep 2026

Why I rebuilt it

Mostly to build it with Astro. A portfolio is a handful of pages that barely change, and Astro is about as little machinery as you can put behind them.

The old site was a Next.js app built with React, Tailwind, and Framer Motion, so a plain page still arrived with a framework behind it and a JavaScript bundle on every visit.

Why Astro

Astro renders to static HTML and ships no JavaScript unless you ask for it. Interactivity is opt-in, so you only pay for it where you actually use it.

What it gave me:

  • Nothing to download. The build emits zero JavaScript files. The four scripts the site needs (your saved theme on first paint, the light and dark toggle, the reading position in a post’s contents, and the photo labels on the Life page) are inlined into the page, so the browser never fetches a bundle.
  • One page, one stylesheet. No hydration, no framework runtime, and every page reads fine with JavaScript off.
  • Content stays content. Posts and case studies are MDX files with frontmatter checked at build time. Writing this page meant adding a folder and a file, not editing a component.
  • The boring parts are handled. Covers are resized and served as WebP from this site, fonts are self-hosted, and the sitemap dates each page from the last commit that changed it.

The trade-off: I gave up React’s ecosystem and complex state in the browser. This site has no app state, so that costs me nothing. If it needed a dashboard tomorrow I’d pick a different tool.