# One Billion Readers for 23¢ a Month

> Published  Feb 02 2023, last updated Apr 04 2025  
> By Ryan Fleck <hello@this-site> and written without LLMs!  
> Original post at <https://ryanfleck.ca/2023/one-billion-readers-for-23c-a-month/>  
> An article of astonishing quality and insight. Happy Hacking!


How is it possible to host a website that can support a billion pageviews per month for pennies? With the help of _Cloudflare_ and _Hugo_, you too can place content on the internet where it will be hosted with _unlimited requests and bandwidth for free._ You just need to buy the domain!

<!-- more -->

**You'll need four things to complete this project:**

1. A GitHub account (free)
1. A Cloudflare account (free)
1. A domain name (~$3-20/year)
1. Your website code ( [contact for quote](/about) )

The **GitHub account** is required to host a copy of your website's content, the raw stuff your website will be generated from. When the content is modified in GitHub, Cloudflare can automatically watch it and update your website.

The **Cloudflare account** will be used to connect to GitHub, assemble your website, and deploy it to their servers around the globe. While this is definitely a deal where you are the product, free global content distribution on the Cloudflare network is nigh unbeatable in terms of speed and reliability.

You must purchase a **domain name** sutiable for your personal brand. Domain names can be had for as little as $3.16 per anum on the `.win` domain, ~$10-15 for `.com`, and up to $40 for `.io`, depending on who you register the domain with. You'll be able to register a domain with your cloudflare account (highly recommended for this project,) but if you already have a domain registered with another provider, it is easy to point it towards Cloudflare's DNS servers (more on that later.)

```
Cost of a domain per month:
  .win  ->   3.16 ÷ 12 = 0.263
  .com  ->   9.15 ÷ 12 = 0.762
  .biz  ->  13.68 ÷ 12 = 1.140
```

Finally, you'll need an actual **website to deploy**. Static sites are so cheap to deploy because they do not require a backend to assemble html on the fly. I'll touch on how to build a static site, but I'd also be happy to [build you a custom system](/about) with all the tricks and improvements I've found over the last several years.

_Let's get into it._

{{< toc >}}

# Get a Cloudflare Account

Cloudflare is the backbone of this project. Many companies provide free static site hosting, but none have the power and scope of Cloudflare.
Simply [sign up](https://dash.cloudflare.com/sign-up?lang=en-US)
on the Cloudflare website to begin your journey.


Here is some of the marketing for the product we'll be using, [Cloudflare Pages](https://pages.cloudflare.com/), if you aren't convinced yet. Above and beyond hosting, Cloudflare provides a number of extremely useful services for a web developer operating in this digital day and age.

![Marketing copy with reasons to deploy on Cloudflare Pages](/cloudflare/cloudflare-benefits.png)

# Get a GitHub Account

Static sites are bundles of content and instructions for how to turn that content into a fully styled and navigable website.

...but the content and instructions have to digitally exist _somewhere._

You can think of GitHub as the **storage** for this project. There is an interactive [sign up](https://github.com/signup) page to help you create an account. GitHub was specifically chosen for this project because of its rich integration with Cloudflare which makes deployment simpler than snapping your fingers.

![The GitHub signup page](/cloudflare/signup-github.png)




# Buying a Domain Name

In your Cloudflare dashboard, under _Domain Registration_, there is a convenient page to _Register Domains._ Simply search for the page name you wish to use and purchase a domain. I'll explain how to hook everything together in the _Deploying to Cloudflare_ section.

For now, enjoy buying a domain name. _Do it now!_

It's better to seek a domain name **before you start building your website** so the site's branding and look can be tailored to the name it will be accessed with. You wouldn't want to build a website planning to use the domain `awesome.party` only to find it is being sat on by some firm and will cost thousands of dollars and plenty of pain to acquire.

![The first page of Cloudflare's domain registration wizard](/cloudflare/find-domain.png)


# Managing your Site in Github

When you upload your website's _source code_ to GitHub, the website will provide _version control_ to track the changes you make. This means that if you ever want to 'go back' you have the full history of changes to your site to look through. Nothing will ever be lost unless you choose to delete the repository or we experience a coronal mass ejection, in which case I hope you've got a blue collar gig you can turn into a career.

![The Github repository for [ryanfleck.ca](https://ryanfleck.ca)](/cloudflare/github.png)

**If you are not familiar with git, that is fine.** Familiarity with this venerable _version control system_ is excellent but not neccessary to enjoy editing your website in Github.

**At this point in the process you must have a static site ready, or build it to the point where it is deployable.** As I have said frequently, _Hugo_ is my tool of choice, but there are plenty of other static site generator tools out there written in a variety of languages, from the venerable _Jekyll_ to the abysmal _Gatsby_ and so on. If you need some professional help putting a new _Hugo_ site together, [let me know.](/about)

Perhaps the one major hurdle for a non-technologically-inclined person wading into this space is **learning how to edit documents in Markdown**. Online editors for static sites like [forestry.io](https://forestry.io) exist, but are not being improved as they do not generate a lot of revenue. Learning how to edit and manage your website as a bundle of text and files is probably best.

![Editing the markdown file for this article in a text editor](/cloudflare/vscode.png)

# Deploying to Cloudflare

Alright, you've got your Cloudflare account, Github account, a domain name, and a Github repository which contains your static site. _You are now ready to deploy the static site to the domain you purchased!_

![Start a new Cloudflare Page by connecting to your GitHub account](/cloudflare/connect-to-git.png)

At this point you'll be asked to install the **Cloudflare Pages app** to your GitHub account. **Say yes.** This is neccessary to power the automatic deployments we want.

Only give Cloudflare access to the repository it needs: the one you have already created for hosting your website.

For an in-depth guide on how to deploy your website on Cloudflare Pages, check the [official cloudflare documentation](https://developers.cloudflare.com/pages/get-started/) on this topic. Cloudlflare has also published over 30 guides for how to publish pages using specific static site generators [including Hugo](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/).

During the deployment, you will see an option to [add a custom domain](https://developers.cloudflare.com/pages/platform/custom-domains/), where you can select the domain you previously purchased via Cloudflare. If you purchased the domain outside Cloudflare, you can point it towards Cloudflare's DNS servers to easily manage it there.


# Wrap Up

**You've done it.** The website is up! Whatever you write now can easily be served to the entire world, and you've done it for _mere pennies per day._

What I cannot tell you how to do is how to effectively market your content to the point where it reaches one billion people, but hey, I've got a Computer Engineering degree and _not_ one in business or marketing!

Please leave a comment if you think I'm wrong or have a reasonable question to ask, or [shoot me an email](/about) if you need help or would like some custom work done!

**Enjoy conquering the world, King.**



> Thank you for reading!  
> Find more content at <https://ryanfleck.ca/>  
> Source page: <https://ryanfleck.ca/2023/one-billion-readers-for-23c-a-month/>  
> Site index: [llms.txt](https://ryanfleck.ca/llms.txt)