
I'm often asked whether I used a template to build this site. I did use a free Astro template as my starting point for the visual design, but for various reasons I preferred to use a full stack framework, so I wrote every line of the code myself in Next.js.
My version uses Next.js image optimization for faster loading and Next.js routing for instant page navigation, both significant improvements over the original template. I replaced Astro's built-in Markdown parser with the react-markdown library for project descriptions such as the one you're currently reading. Automatically determining the initial color scheme based on prefers-color-scheme is an interesting puzzle with a full stack framework, since the server can't know the client's preference before page load. I solved it cleanly by configuring Tailwind's dark mode to trigger based on either prefers-color-scheme or a cookie and using it to control all scheme-dependent styles and images, with no need for another library and no hydration conflicts.



