← All posts

Building This Site With Astro (as a Python Person)

August 3, 2026AstroWeb DevNotes to Self

I write Python day to day, so picking a web framework for this site meant weighing “how powerful is it” against “how much do I actually need to understand to maintain it in six months.” Astro won on the second axis.

Why Astro specifically

Astro compiles pages down to plain HTML by default — no JavaScript framework runtime shipped to the browser unless you explicitly ask for it. That matters for a portfolio site: it doesn’t need to be an interactive web app, it needs to be fast and easy to update. Blog posts and project write-ups live as plain markdown files with a small, validated frontmatter schema (Astro calls this a “content collection” — if you’ve used Pydantic models or dataclasses in Python, it’s the same idea: a schema that catches typos and missing fields before they become a broken page).

What actually needed JavaScript

Almost nothing. The one exception is the dark/light theme toggle, which needs to run in the browser to read the visitor’s click and remember their choice. Everything else — page structure, content, layout — is resolved once at build time, the same way a Python script runs once and produces an output file.

Adding new content going forward

New blog post: add a markdown file to src/content/blog/. New project: add one to src/content/projects/. Commit, push, and Vercel rebuilds the site automatically. No admin panel, no database, no login screen to lose track of — just files in a git repo, which is a workflow that already makes sense coming from Python tooling.