Building This Site with Astro, GitHub, and Cloudflare
Notes on how this site is put together, July 2026.
What I wanted
Fast to load, easy to maintain, and no stack of services to babysit. That landed on three tools: Astro to build the site, GitHub to version it, Cloudflare for the domain, DNS and hosting.
Astro
Astro ships static HTML by default and only adds JavaScript where a page needs it, which suits a content site: projects, writing, certifications, work history.
Content collections hold the projects, writing and certifications as typed Markdown, validated against a schema at build time. If a project’s frontmatter is missing a required field the build fails right there instead of shipping a broken page. That caught several typos early.
GitHub
Every change goes through GitHub: new projects, copy edits, layout tweaks. A real commit history shows what changed and when, and a bad change can be rolled back. The whole site, content included, lives in one repository instead of being split between a CMS and a codebase.
Cloudflare
The domain is registered with Cloudflare, which also runs DNS and serves the site from its CDN. Cloudflare Pages builds straight from the GitHub repository: push to main and the static output is live a minute or two later.
The contact form runs as a small Cloudflare Pages Function, with Turnstile in front of it for bot protection.
Why these three
None of this was about the newest tool. Astro keeps the site fast and the content structured, GitHub keeps the history honest, and Cloudflare keeps domain, hosting and deployment in one place. The point was a personal site simple enough that maintaining it never becomes its own project.