KahWee - Web Development, AI Tools & Tech Trends

What I actually run: Claude Code workflows, static blogs on Cloudflare, React/Vite tooling, and AI cost notes. By KahWee.

Static blog on Cloudflare: the stack I actually run

I did not pick Cloudflare because of a conference talk. I picked it because a personal blog should be cheap, fast on a phone, and boring to operate. This is the map of posts about that stack.

Why static

Most readers hit the site from a phone feed. Why I built a static blog is the original argument: Markdown in, HTML out, CDN in front, no app server to babysit. Claude Code helped build a lot of the generator path; the hosting choice was independent of that.

If you want the agent side of the build, use the Claude Code workflow map. This page stays on deploy and edge.

Pages vs Workers

Cloudflare is folding Pages into Workers. For a pure static site the migration can be a config nudge, not a rewrite. Pages to Workers: do you need to move? is the decision note: free tier math, when server-side execution starts to matter, and the one-line assets directory change.

I moved because the product direction was clear and the site was already static. I did not move for SSR fashion.

Edge quirks that still bite

Pretty URLs and tag path renames show up as Workers rewrites. Rewriting /tag/* to /tags/* is the pattern I used so old links did not 404 forever.

DNS is where people lose weekends. Cloudflare 525 with Fly.io is the gray-cloud / full-proxy mismatch writeup: proxy on when the origin certificate does not match what Cloudflare expects. Same class of bug shows up whenever you put CF in front of someone else's TLS.

Tooling around the content

The monorepo side of this world is Vite, Bun, and shared CSS — not Cloudflare-specific, but it is how the HTML gets produced:

If the build is slow, the CDN cannot save you from a bad authoring loop. Fast lint in an AI-heavy workflow lives in Biome.

What I do not run here

No Next.js for the blog. I paid that tax elsewhere — Next to Remix costs, Remix to React Router v7, loaders vs React Query. Those posts are for app work. The blog stays static on purpose.

What I track next

Workers assets defaults, build minutes, and whether any "platform feature" starts requiring a server I do not want. When the deploy story changes, I write a dated post and leave this page as the spine.