About This Website

What this website is, how it is written and built with Quarto and Cloudflare Pages, and how you can build one like it on Windows.
Published

July 12, 2026

This website is a growing collection of free notes on machine learning, mathematics, statistics, deep learning, networking, and agentic AI. I write and maintain all of it myself. Every page is rewritten in my own words and aimed at beginners, so a curious high school student can follow along.

How These Notes Are Written

The words and the understanding here are my own. I spend most of my day studying these subjects, working through the courses, and rewriting each idea until it is clear and simple.

I also use AI tools while I work, mainly Claude by Anthropic. I treat them the way an author treats a good editor or a research assistant. They help me check phrasing, catch mistakes, format mathematics and diagrams, and take care of the slow and repetitive parts. What matters most stays with me. The choice of what to teach, the order of the ideas, the examples, and the final wording are my own, unless a source is explicitly referenced. When I build on a book, a course, or a paper, I credit its authors.

How This Website Is Built

The site is made with a few simple, free tools.

  • Quarto turns plain text files into web pages, with full support for mathematics and code.
  • The Flatly theme and a custom stylesheet give the site its look.
  • The pages are written in VSCode.
  • The source lives on GitHub, and the site is published by Cloudflare Pages.

There is no database and no complicated machinery. Each page is a plain text file, which keeps everything fast, portable, and easy to maintain.

Build a Website Like This One

If you would like your own website built the same way, you are welcome to start from the same template I use. It works on Windows, Linux, and macOS with the fewest possible steps, and you do not need to know how to program. You run only one small setup script for your kind of computer, and everything else is done with buttons.

Get the template on GitHub

What You Need First

Two free accounts and two free programs.

  • A GitHub account, which stores your files online.
  • A Cloudflare account, which puts your website on the internet.
  • VSCode, the program you write in, from code.visualstudio.com.
  • GitHub Desktop, which saves and publishes your work with buttons instead of typed commands, from desktop.github.com. It is available for Windows and Mac. There is no official Linux version, so on Linux you use the Source Control panel built into VSCode instead. It has the same Commit and Push buttons.

Step 1. Get Your Copy of the Website

Your website starts from the template above. The design and layout are already built for you. You just make your own copy of it.

  1. On the template page, click the green Use this template button, then Create a new repository.
  2. Give your copy a name, for example my-website, and click Create.
  3. Open GitHub Desktop and sign in with your GitHub account.
  4. Click Clone a repository, choose the copy you just made, and click Clone.

That last step downloads the website folder onto your computer.

Step 2. Install the Tools (the one script)

The template includes a small setup script for each kind of computer. It installs Quarto (the website builder), uv (the Python package tool), and the Python packages that pages with charts need. Find your computer below. This is the only step that differs between Windows, Linux, and Mac.

On Windows

Inside your website folder there is a file named setup-windows.ps1. This one file installs everything the website needs.

  1. Find setup-windows.ps1 in the folder.
  2. Right-click it and choose Run with PowerShell.
  3. If Windows shows a blue Yes / No box, click Yes.
  4. Wait for it to say All done, then close the window.

For reference, these are the commands that script runs for you. You do not need to type them.

winget install --id Posit.Quarto        # the website builder
winget install --id astral-sh.uv        # the Python package tool
uv venv                                  # a private space for packages
uv pip install -r requirements.txt       # the small set of packages
Note

If the script says uv is “not visible yet,” simply close the window and run the file one more time. This happens the first time because Windows needs a moment to notice the new tools.

If winget cannot find Quarto on your computer, install it once by hand from quarto.org, then run the script again for the rest.

On Linux

The setup script for Linux is named setup-linux.sh.

  1. Open a terminal in your website folder. In most file managers you can right-click inside the folder and choose Open Terminal Here.
  2. Type bash setup-linux.sh and press Enter.
  3. If it asks for your password, type it and press Enter. This happens once, to install Quarto.
  4. Wait for it to say All done.

The script is written for Ubuntu and Debian. On another distribution, install Quarto once by hand from quarto.org, then run the script again for the rest.

On macOS

The setup script for Mac is named setup-mac.sh.

  1. Open Terminal in your website folder. In Finder, right-click the folder and choose New Terminal at Folder.
  2. Type bash setup-mac.sh and press Enter.
  3. Wait for it to say All done.

The script installs Quarto with Homebrew if you have it. If you do not, it asks you to install Quarto once by hand from quarto.org, and then you run the script again for the rest.

Step 3. Write and See Your Website

  1. Open the website folder in VSCode. When VSCode offers to install the Quarto extension, click Install.
  2. Open a page. Pages end in .qmd. The home page is index.qmd, and your writing lives in the notes folder.
  3. Click Preview at the top right. Your page opens in the browser and updates as you type.

To start a brand-new page, copy the example file notes/first-note.qmd, rename the copy, and change the words inside. It appears on your Notes page by itself.

Step 4. Publish to the Internet

Publishing takes two short steps once you are happy with a change.

  1. Rebuild the site.
    • On Windows, double-click render.bat. A small black window opens, rebuilds the site, and says Done. Close it.
    • On Linux or Mac, run bash render.sh in a terminal in the website folder.
    Either way, the script also turns on Python first, so any page that draws a chart is built correctly.
  2. Open GitHub Desktop (on Linux, the Source Control panel in VSCode). Type a short note in the Summary box, click Commit to main, then click Push origin.

Wait about one minute, then refresh your website address. Your change is live.

Tip

Always run the render script before you publish. If you forget, the website keeps the old content even after you push.

Connect Cloudflare (one time)

You connect Cloudflare to your website only once, at the very beginning. This is what tells the internet where to find your pages.

  1. Sign in at dash.cloudflare.com.
  2. In the menu on the left, click Workers & Pages.
  3. Click the blue Create application button at the top right.
  4. The next screen opens on Workers first, and the Pages choice is easy to miss. Look for the Pages tab near the top of that screen and click it.
  5. Click Connect to Git (it may also say Import an existing Git repository).
  6. The first time, a GitHub window opens and asks for permission. Click Install & Authorize and, if it asks, choose the account that holds your website copy.
  7. Back in Cloudflare, pick your website repository from the list and click Begin setup.
  8. Fill in the settings page as follows.
    • Project name. Pick a short name. It becomes part of your web address, so my-website gives you my-website.pages.dev.
    • Production branch. Choose main.
    • Framework preset. Choose None.
    • Build command. Leave it empty.
    • Build output directory. Type _site.
  9. Click Save and Deploy and wait a minute or two while Cloudflare publishes for the first time.
  10. When it finishes, Cloudflare shows your web address, something like https://my-website.pages.dev. Open it. That is your website, live on the internet.
Note

Why these settings? Your computer already builds the site when you run the render script, and the finished pages are stored in the _site folder. So Cloudflare does not need to build anything. It only needs to serve that folder, which is why the build command stays empty and the output directory is _site.

After this, you never touch Cloudflare again. Every time you push from GitHub Desktop, Cloudflare notices the change and updates your website by itself within about a minute. If you later want a personal web address such as yourname.com instead of the free .pages.dev one, you can buy a domain and attach it in Cloudflare under Custom domains, but that is entirely optional.

Day-to-Day Workflow

Once everything above is done, the setup part of your life is over. From then on, updating your website is the same short routine every time.

  1. Open the website folder in VSCode and edit a page. Click Preview (top right) to watch your changes live in the browser as you type.
  2. To add a new page, copy an example file in the notes folder, rename the copy, and change the words inside. It appears on your Notes page by itself. Copy first-note.qmd for a text page, or example-with-a-plot.qmd for a page with a Python chart.
  3. When you are happy, rebuild the site. On Windows, double-click render.bat. On Linux or Mac, run bash render.sh in a terminal.
  4. Publish with GitHub Desktop (on Linux, the Source Control panel in VSCode). Type a short note in the Summary box, click Commit to main, then Push origin.
  5. Wait about one minute and refresh your website address. Your change is live.
Note

After the render script runs, GitHub Desktop may show a long list of changed files. That is normal. Rebuilding the site refreshes many pages at once. Just commit them all.

That is the whole routine. Edit, render, commit, push.