— Project 02
karlhorning.dev
This is the fourth version of karlhorning.dev. Previous versions split the blog and portfolio across two separate repositories — one in Next.js, one in Eleventy — and keeping them in sync was a real overhead. Every blog post had to be reflected in both places, and context-switching between React and Eleventy's template language to maintain consistent designs cost around 2–3 hours a month. Moving everything into a single Next.js codebase fixed that.
The blog is driven by a JSON file generated by a script. Each post has a meta.ts alongside its page; the script reads those files and generates both posts.json and an RSS feed. The site is deployed as a static export to GitHub Pages — no backend, no CMS.
Accessibility testing came from a personal stake in it as much as professional habit. After auditing with WAVE and Lighthouse, I added Playwright with axe-core — which flagged issues that manual review had missed. Automated tools cover around 40% of accessibility problems at best, so I also test with a screen reader and keyboard navigation. The site needs to actually work that way, not just pass an audit.
Source code