I wanted a simple blog to write about software, selfhosting, and whatever else I’m working on. Here’s how I set it up.
Choosing the framework
I started by evaluating Hugo and Astro. Hugo is fast and mature, but after looking at the build process, deployment options, and overall developer experience, Astro felt like a better fit. It has a richer ecosystem of themes, better support for modern tooling, and is easy to deploy anywhere.
Choosing the theme
I browsed through several Astro blog themes before settling on AstroPaper. It comes with sensible defaults out of the box — dark mode, SEO, search via Pagefind, automatic OG image generation, and Tailwind CSS for styling. Clean design, well maintained, and easy to customize.
Choosing where to host
I evaluated a few hosting options and went with Cloudflare Pages. It’s free, simple to set up, and deploys automatically from a GitHub repo on every push.
Deploying to Cloudflare Pages
The plan was to connect Cloudflare Pages directly to the GitHub repo for automatic deploys on push.
This turned out to be the trickiest part. The Cloudflare Pages GitHub integration wouldn’t show my repository — clicking “Connect to Git” kept redirecting me back to the GitHub app configuration page instead of showing the repo picker. After some searching, this seems to be a known issue, especially on mobile browsers. Removing the Cloudflare GitHub app and reinstalling it from a desktop browser fixed it.
The build settings for Cloudflare Pages are simple:
- Framework preset: Astro
- Build command:
pnpm build - Build output directory:
dist - Environment variable:
NODE_VERSION=22
The whole setup was done with Claude Code
The entire blog setup — from customizing the config, writing the About page, creating posts, and pushing to GitHub — was done in a single Claude Code session. Including this post.
This blog post was written with the help of Claude Code.