14 November 2026 · 2 min read
How this site is built: Astro, Cloudflare Workers and a $0 hosting bill
A small, boring and cheap setup for a personal site — static pages, Git-driven deploys, a contact form without a mail server, and a browser-based editor.
When I set up this site, I had three requirements: it should cost nothing beyond the domain, adding or removing content should take seconds, and there should be nothing to patch at 2 a.m. Here is the setup I ended up with.
The stack
- Astro generates plain static HTML. No server, no database, almost no attack surface.
- GitHub holds the code and the content. Experience, skills and certifications live in small YAML files; blog posts are Markdown.
- Cloudflare Workers serves the static assets from the edge and runs one tiny function for the contact form.
- Cloudflare Registrar sells the domain at cost, so renewals don’t jump after year one.
Git push = deploy
Cloudflare’s Git integration builds and deploys on every push to main. The whole deployment config is a few lines:
{
"name": "sametustaoglu-com",
"main": "worker/index.ts",
"assets": {
"directory": "./dist",
"binding": "ASSETS",
"run_worker_first": ["/api/*"]
},
"send_email": [{ "name": "CONTACT" }]
}
Static requests never touch the Worker. Only /api/* does, which keeps it well inside the free tier.
A contact form without a mail server
The form posts to /api/contact. The Worker validates the input, drops obvious bots with a honeypot field and a minimum fill time, and sends the message through Cloudflare Email Routing’s send_email binding to a verified inbox. The Reply-To header is set to the visitor’s address, so answering is just pressing Reply.
Content without touching code
All content is data-driven, so the page renders whatever the YAML and Markdown files contain. For editing in the browser I use Pages CMS: it reads a small .pages.yml schema, shows proper forms, and every Save becomes a Git commit — which triggers a deploy.
What it costs
| Item | Cost |
|---|---|
| Domain (.com, at cost) | ~$11 / year |
| Hosting, CDN, TLS | $0 |
| Contact form email | $0 |
Boring infrastructure is good infrastructure — even for a personal website.