A website, SPA or PWA
A marketing site or a front-end app.
My stack for this
- 01Cloudflare static hosting
Deploys from GitHub on every push. Static requests are free.
- 02Cloudflare R2
Heavy media and downloads with zero egress fees.
- 03Astro on Cloudflare Workers
When some pages must be rendered on request: content sites, docs, catalogs.
- 04Next.js on Cloudflare Workers (OpenNext)
When it's a Next.js app that needs server rendering, without moving to Vercel.
- 05Cloudflare Turnstile
Any form: Turnstile keeps the bots out, a Worker checks it and Resend sends the email.
Don't
- Amazon CloudFront
Not for a public site you can host anywhere. You'd assemble S3, origin access, a certificate and cache invalidations to get what Cloudflare gives you from a GitHub push, and pay-as-you-go egress can turn a viral page into a real bill where Cloudflare charges nothing. CloudFront stays right for all-AWS clients and private AWS origins.
Instead: Cloudflare static hosting
The picks, in brief
What each one is, my verdict, and what it costs. Every name opens the full entry: when to use it and when not, the gotchas with their fixes, provisioning and alternatives.
Every website I run. Static builds deployed from GitHub on every push to main. Easy, reliable, nearly free.
Pricing: Static asset requests are free and unlimited. Storing the files costs nothing. Only requests that run Worker code are billed, under Workers pricing (Workers Paid starts at $5 a month).
Zero egress fees. The answer for public files served at volume. Keep data lakes in S3.
Pricing: $0.015/GB-month, writes $4.50 per million, reads $0.36 per million, internet egress $0. Serving 20 TB a month from 2 TB stored: R2 ≈ $44 vs S3 + CloudFront ≈ $2,158 (or ≈ $228 on CloudFront's Business flat-rate plan). Free each month: 10 GB, 1M writes, 10M reads. Infrequent Access: $0.01/GB-month, $0.01/GB retrieved, 30-day minimum. Deletes are free.
The framework I'd pick for content sites that need server rendering. Static by default, server-rendered where a page needs it, and owned by Cloudflare, so Workers is its home.
Pricing: Free (MIT). You pay Workers pricing for the pages rendered on request; static pages are free on Cloudflare.
Server-rendered Next.js without Vercel. The OpenNext adapter runs a normal Next.js build on Workers: SSR, ISR, server actions, middleware and image optimisation.
Pricing: Workers pricing: Workers Paid is $5 a month with 10M requests and 30M CPU milliseconds included. ISR pages cache in R2.
Anti-bot for every form: a CAPTCHA replacement most visitors never notice, free and unlimited. With a Worker and Resend, it's a contact form with no form service at all.
Pricing: Free: unlimited challenges, up to 20 widgets per account, 10 hostnames per widget. Enterprise adds unlimited widgets and removes the branding.
Where they sit
The layers of the stack this job touches, with every tool named on this page.
Edge
Between your users and your backend.
Want this stack in your AWS account?
Cloudless Labs is a Sydney consultancy. We migrate on-premises systems to AWS, build serverless apps on this stack, and coach teams to ship with Claude Code and Codex.