The Free Website Maker Nobody Lists: Claude Commits, GitHub Pages Deploys, Your Bill Stays $0
Michael Sacca•Search "free website maker" and you'll get the same list: Wix, Squarespace, Webflow, Canva, maybe WordPress.com if the list-writer is feeling adventurous. All of them are free the way a gym is free — the door is open, and everything you actually need is behind a paywall. Custom domain? Paid. Remove the branding? Paid. Enough bandwidth to survive being shared once? Paid.
But there's a "free website maker" that never makes those lists, because it isn't a product at all. It's a workflow: Claude writes the site, Claude commits it to a Git repository, and a free static host picks it up and deploys it. Hosting is genuinely free at hobby scale. The labor is free too, because the labor is Claude's. Nobody can put a paid tier on it.
This is the deployment half of the puzzle. AI Domain Hosting Is Real Now — Just Not Where the Search Results Say covered which AI build tools connect to which hosts and how to pick a stack. Here we go deeper on the two hosts that are actually, durably free — GitHub Pages and Cloudflare Pages — and on the wiring that lets Claude do the committing, not just the coding.
Why these two hosts, specifically
Static hosting has quietly become a commodity, and two providers give it away at the tier you need:
- GitHub Pages serves a repository's static files for free, including a custom domain with HTTPS. The constraint is that it serves static files — no server-side code, no database.
- Cloudflare Pages also serves static files free, with unlimited bandwidth on the free tier and a global CDN in front of it. It additionally supports edge functions if you later need a little dynamism.
For an LLM-built site, the static-only limitation is barely a limitation. Claude generates HTML, CSS, and JavaScript. That's the whole artifact. If you need a contact form or dynamic data, you wire in a third-party API or a serverless function — which is exactly the pattern in Stop Copy-Pasting From ChatGPT: Wire Your Site to the LLM API So It Updates Itself.
The reason to prefer these over a builder's free tier isn't just cost. It's that a Git repo plus a static host is the least locked-in arrangement that exists. Your site is plain files, version-controlled, portable to any competitor host by changing one setting. If that exit-path argument sounds familiar, it's the same one behind Your Free Website Builder Won't Let You Leave: How to Have an LLM Rebuild Your Site as Code You Own — except here you never get locked in to begin with.
The setup, in three parts
The workflow has three moving parts: the repository, the connection, and the Claude side. Let's take them in order.
1. The repository
Create a repo on GitHub — for a user site it's literally named yourusername.github.io; for a project site, any name works and the site lives at a subpath. The repo is now your deployment target. Claude (via Claude Code running in your project directory, or via an MCP-connected environment) works directly inside it: writes index.html, styles.css, and whatever else, stages the files, commits with a message, pushes.
That last sentence is the part that separates this from every "AI built my website" tutorial that ends at a code block you copy-paste yourself. When Claude has Git access, "publish the changes" is a single instruction. Claude diffs what changed, writes the commit message, and pushes. You review before it pushes — more on the guardrails below — but you never touch the terminal unless you want to.
2. The connection
This part is one-time setup, and it's almost embarrassingly simple:
- GitHub Pages: In the repo settings, point Pages at your main branch. Every push to main now deploys. There is no step three.
- Cloudflare Pages: Connect Cloudflare to your GitHub account and select the repo. Cloudflare watches it and deploys on every push. Point your custom domain's DNS at it, and HTTPS is handled automatically.
Either way, the deploy trigger is the push itself. That's the architectural gift of Git-based hosting: deployment stops being a thing you do and becomes a thing that happens. Claude pushes; the host reacts. You never click a publish button again.
3. The Claude side
Two configurations work, depending on how hands-on you want to be:
Claude Code in your project directory. You open a terminal in the folder, tell Claude what to build or change, and it edits the files and (with your approval) commits and pushes. This is the most direct route and requires no MCP configuration at all — the CLI already has filesystem and shell access.
Claude + an MCP Git/server tool. If you're running Claude Desktop, an MCP server that exposes Git operations (and optionally shell commands) lets Claude perform the same commit-and-push from the chat interface. This is the same approval-gate architecture described in "Marketing Agent" Doesn't Mean Chatbot: you grant Claude a narrow set of tools — read files, write files, run git commands — and it can ship a site but not, say, delete your whole machine.
If you want the full autonomous version — Claude generating new content, committing, and deploying on a schedule while you sleep — that's the MCP pipeline laid out in Your AI Should Publish While You Sleep. The deployment target in that pipeline can just as easily be GitHub Pages or Cloudflare as anything else. The recurring-update maintenance loop from You Built the Site in a Weekend. Who Updates It Next Month? plugs in on top: broken-link checks, content refreshes, and dependency bumps all become pushes, and pushes become deploys, automatically.
The guardrails you actually need
Handing an LLM push access to your production site sounds reckless until you add two cheap controls:
Branch protection. Require that changes to main go through a pull request, even if you're the only person on the repo. Claude opens a PR, you glance at the diff on GitHub's web interface, you merge, deploy happens. This turns Claude's write access into a review gate with a ten-second approval step — and GitHub's free tier includes this.
A staging branch, or staging project. With Cloudflare Pages you can connect the same repo twice — one project deploys from main, another from a staging branch. Claude pushes to staging, you look at the live preview, then merge to main. On GitHub Pages you can approximate this with a second repo or a gh-pages-style branch. The point is that "deploy" and "preview" stop being the same event.
Where "free" gets honest asterisks
Let's be precise about what $0 actually buys, because vague freemium hand-waving is exactly what this workflow is supposed to replace:
- Hosting: genuinely free on both platforms for static sites at personal scale. Cloudflare's free tier is generous on bandwidth; GitHub Pages is fine for any site that isn't trying to serve video.
- Your domain: still the one bill you can't avoid — the same conclusion The $0 Website, Audited reached. Every registrar charges something annual. That's not the host's freemium trap; that's the DNS system.
- Claude itself: depends on your subscription tier and usage. The hosting is free; the labor isn't literally free, it's bundled into a plan you may already pay for. If you're using the free chat tier, you're doing the copy-paste version and the "automatic" part of this post doesn't apply yet.
- GitHub free tier: private repos, Actions minutes, and Pages all exist at $0 with reasonable limits. A simple static site won't brush against them.
The honest comparison isn't "$0 versus builder's free tier." It's "$0 hosting + a Claude subscription you may already have" versus "free builder whose real price is a branded footer, a no-export clause, and an upsell screen every time you touch the design."
What this actually feels like
Once it's wired up, the experience is strange in a good way. You write: "Update the services page to include the workshop offering, and tweak the hero copy to mention it." Claude edits two files, writes "Add workshop to services page, update hero" as the commit message, pushes. Twenty seconds of nothing. Then Cloudflare's dashboard shows "Deploying," then "Success," and the change is live worldwide.
No export dialog. No "publish" button behind a plan upgrade. No branded footer you paid $12/month to remove. Just text files in a repo, an LLM that knows how to change them, and a host that's decided static files are cheap enough to give away.
That's the free website maker nobody lists — not because it's secret, but because it isn't a product anyone can put on a comparison chart. It's a repo, a push, and a deploy that happens without you.