Chapter 6 of 9 · For the coding-agent path
How do you host an app for free on your own domain?
23 September 2026 · by Nordva, who make Nordva Launch
The short answer
Put it on Cloudflare Workers. On the free plan, requests for your pages and files are free and unlimited, and your server code gets 100,000 requests a day (Cloudflare's pages, read 23 September 2026). Deploy from your computer with Wrangler or by connecting a GitHub repository, then add your own domain, which gets HTTPS automatically. The domain itself is the part you pay for.
On an AI builder? Lovable, Bolt, v0, Replit and the rest host your app for you: publishing is a button, and adding your own domain is in the builder’s settings. You can skip this chapter; chapter 2 covers what each path includes. This chapter is for the coding-agent path, where the app is a folder on your computer and you choose where it lives.
This guide uses Cloudflare for the whole stack, so the hosting is Cloudflare too. Every limit below is from Cloudflare’s own pages, read on 23 September 2026. Free tiers change, so check the linked pages before you rely on a number.
What the free plan covers
Your app has two kinds of files. Static assets are the pages, styles, scripts and images that go to the browser as they are. Server code (a Worker) runs on Cloudflare when a request needs it, for example to save a booking or check a login.
On the Workers Free plan:
- Requests to static assets are free and unlimited. A site that is only pages and files costs nothing to serve, however many people visit.
- Server code gets 100,000 requests a day, reset at midnight UTC. Past that, Cloudflare answers with its error 1027 (or skips the Worker, if you set it to “fail open”) until the reset.
- Each request gets 10 ms of CPU time. That is the time spent computing, not waiting for a database or another service.
- Up to 20,000 files per version, each at most 25 MiB.
- Building from GitHub: 3,000 build minutes a month, one build at a time, 20 minutes each.
When you outgrow it, Workers Paid has a minimum of $5 a month per account. You don’t need it to launch.
Workers or Pages?
Cloudflare has two products for this. Its own Pages overview now says: “Start new projects with Workers.” Pages still works and is on the free plan (500 builds a month, up to 20,000 files, 100 custom domains per project), and many older tutorials use it. If your AI suggests Pages, either is fine; for a new project, follow Cloudflare’s advice and use Workers. One trap if you do use Pages: a project created by uploading files from your computer (Direct Upload) cannot be switched to deploying from Git later. You would have to make a new project.
Step 1: deploy from your computer
If you started the project with Cloudflare’s starter in chapter 3, the configuration is already there. Sign in once; this opens your browser:
npx wrangler login
Then deploy. In a project made from a framework template, such as the React one:
npm run deploy
In a plain Worker project:
npx wrangler deploy
Your app is now live at an address ending in workers.dev. If you haven’t picked a workers.dev subdomain yet, Wrangler asks you to set one up during the deploy. Open the address on your phone as well as your computer before you tell anyone about it.
Step 2 (instead of step 1): deploy on every push to GitHub
Deploying by hand is fine at the start. Once your project is on GitHub (or GitLab), you can have Cloudflare build and deploy it every time you push:
- In the Cloudflare dashboard, go to Workers & Pages.
- Select Create application, then Get started next to Import a repository.
- Pick your Git account and the repository, and follow the prompts for the build settings.
For a Worker you already deployed, it is the Worker’s Settings, then Builds, then Connect. The Worker’s name in the dashboard must match the name in your Wrangler configuration file, or the build fails. A push to your production branch (usually main) goes live; a push to any other branch makes a preview with its own address, so you can check a change before it reaches visitors.
Step 3: your own domain, with HTTPS
A domain is the one thing here you have to buy. You can buy it anywhere. Cloudflare Registrar sells domains at cost: its docs say you pay only what registries and ICANN charge, with no markup.
To attach it to your Worker, the domain has to be an active zone on your Cloudflare account. If you bought it through Cloudflare, it already is; if you bought it elsewhere, add it to Cloudflare in the dashboard and change its nameservers at your registrar as the dashboard tells you. Then:
- Go to Workers & Pages and select your Worker.
- Open Settings, then Domains & Routes, then Add, then Custom Domain.
- Type the domain, for example
example.comorapp.example.com, and select Add Custom Domain.
Or ask your agent to put it in the Wrangler configuration, in the shape Cloudflare’s docs give:
{
"routes": [
{
"pattern": "shop.example.com",
"custom_domain": true
}
]
}
Cloudflare creates the DNS record and a certificate for you, so the site is on HTTPS without further setup. One catch from the docs: you can’t add a custom domain on a hostname that already has a CNAME record, so delete an old record for that name first.
Step 4: settings and secrets on the live site
Your app needs settings on the live site that you kept out of the code in chapter 3. Cloudflare keeps two kinds apart, and its docs say not to use plain variables for anything sensitive.
Plain variables (not secret, such as your site’s public address) go in the Wrangler configuration:
"vars": {
"API_HOST": "example.com"
}
Secrets (keys, passwords) are set from the terminal, one at a time, by name. The value is not part of the command, so it never ends up in your code:
npx wrangler secret put STRIPE_SECRET_KEY
This creates a new version of the Worker and deploys it straight away. After that, the value can’t be viewed in Wrangler or the dashboard; running the command again replaces it. You can also add both kinds in the dashboard: your Worker, Settings, Variables and Secrets, Add.
On your own computer the same values live in .dev.vars or .env, which stay out of git. Never ask your AI to paste a secret into the configuration file “to make it work”: that file is committed and shared.
Other free hosts, briefly
Cloudflare isn’t the only free option. Two others you will see recommended, with their own terms as read on 23 September 2026:
- Vercel Hobby is free, but Vercel’s fair use guidelines say: “Hobby teams are restricted to non-commercial personal use only.” Their examples of commercial use include “any method of requesting or processing payment from visitors of the site” and “advertising the sale of a product or service”, and commercial use needs a Pro or Enterprise plan. So an app you charge for, or even advertise for sale, does not fit Hobby. See the commercial usage section.
- Netlify Free gives 300 credits a month with a hard limit. Its pricing docs list 15 credits per production deploy, 20 credits per GB of bandwidth and 2 credits per 10,000 requests. When the credits run out, Netlify’s docs say the projects pause until the next billing cycle and visitors see “Site not available”; the free plan can’t buy more credits.
Both are good products; the difference is which limit you meet first. On Cloudflare’s free plan, as the limits above show, requests to static pages are not counted at all.
Before you share the link
- The site opens on your own domain with
https://, on a phone and on a computer. - Every secret is set with
wrangler secret put(or in the dashboard), and none is in the code. - A push to your main branch deploys, if you set that up, and you know where the build logs are.
Next: measure it, so you know where your first visitors come from.
- Cloudflare: Workers limits (Free plan: 100,000 requests a day, 10 ms CPU, error 1027, 20,000 files, 25 MiB) (read 23 September 2026)
- Cloudflare: Workers pricing (static asset requests free and unlimited, $5 minimum on Workers Paid) (read 23 September 2026)
- Cloudflare: Static assets billing and limitations (read 23 September 2026)
- Cloudflare: Pages overview (Start new projects with Workers) (read 23 September 2026)
- Cloudflare: Pages limits (500 builds a month, 20,000 files, 100 custom domains) (read 23 September 2026)
- Cloudflare: Pages Direct Upload (cannot switch to Git integration later) (read 23 September 2026)
- Cloudflare: Get started with Workers (npx wrangler deploy, workers.dev) (read 23 September 2026)
- Cloudflare: React on Workers (npm run deploy) (read 23 September 2026)
- Cloudflare: Wrangler commands (wrangler login) (read 23 September 2026)
- Cloudflare: Workers Builds (Import a repository, production and preview builds) (read 23 September 2026)
- Cloudflare: Workers Builds limits (3,000 build minutes a month on Free) (read 23 September 2026)
- Cloudflare: Custom Domains for Workers (read 23 September 2026)
- Cloudflare Registrar (domains at cost) (read 23 September 2026)
- Cloudflare: Environment variables (read 23 September 2026)
- Cloudflare: Secrets (wrangler secret put, .dev.vars) (read 23 September 2026)
- Vercel: Fair use guidelines, commercial usage (read 23 September 2026)
- Netlify: Credit-based pricing plans (Free: 300 credits a month, hard limit) (read 23 September 2026)
- Netlify: Resume paused projects (read 23 September 2026)
The whole guide as one PDF to keep, with every prompt in one place, worksheets, fixes for when something breaks and the launch checklist.
Get the PDF