This is the site itself, so you can check how it’s built by viewing the page source.
What I actually did
I didn’t write this code. I decided what it should do, reviewed it, and rejected a lot of it. A few of the decisions on this site, and why:
Three views of one body of work. The switch in the header (Home, Timeline, Game Dev) shows the same work three ways. Home is the complete view. Game Dev is a deep read of one part of it, with its own navigation and its own hero. Timeline is everything in date order. A game shows up on two of the three and keeps one canonical URL, because splitting it into two pages would split its search ranking to solve a problem nobody has.
One place decides what’s visible. Content used to carry its own flags (includeInCV, featured, draft) scattered across every file. Now a single visibility layer answers “does this appear, and where”, per entry and per surface. Absent configuration means visible, so a new project is never invisible because I forgot to list it somewhere.
The CV is a contract, not a scrape. The site emits spec-compliant JSON Resume at build time. A CV generator fetches that one URL and never touches the HTML, which means I can redesign the entire site without breaking it. The phone number and street address are deliberately left out of it, because it’s a public endpoint, and public JSON endpoints get scraped.
Bad content fails the build. Every piece of content is validated against a shared schema. A date written as “Summer 2024” doesn’t render oddly, it stops the build, because free-text dates are the single most common reason a resume parser drops an entry entirely.
What this shows
My programming is in the games. This site shows something else: deciding what should exist, keeping the structure consistent, and telling output that works from output that only runs.
Built with
Astro with MDX and view transitions, TypeScript throughout, Zod for the content schema, deployed on Vercel. It’s a monorepo: the site, a shared schema package that the future CV service will import directly, and a small companion app for editing content and toggling visibility without hand-editing JSON.