5 steps to a live URL.

Pick one small thing. Follow these. In 20 minutes you have something deployed at your-thing.pages.dev. Then you've done it, and the rest is repetition.

Before you start

Pick one tiny thing.

The goal isn't to ship playground today. The goal is to walk through the whole pipeline once with something small and safe — so the next 50 deploys feel like nothing. Pick a single static HTML you already have: card-tracker.html, nootropic-tracker.html, or one of your proto-* files. We'll use card-tracker as the running example.

Pre-flight checklist

You already have all of these.

  • A Mac with git installed (verify: git --version)
  • The gh CLI, signed in as lovebuilt (verified earlier)
  • A Cloudflare account (the same one running your DNS for lovebuiltautomations.com)
  • One HTML file ready to shipcard-tracker.html from playground
01

Make the project a git repo.

~2 min · terminal

Open Terminal. Make a new folder for just this one thing, copy your HTML in, and turn it into a repo:

# 1. Make a clean folder for it mkdir ~/lab/projects/card-tracker cd ~/lab/projects/card-tracker # 2. Copy your existing HTML in, rename to index.html cp ~/lab/projects/playground/card-tracker.html ./index.html # 3. Make a tiny .gitignore (no node_modules here, but good habit) echo ".DS_Store\n.env" > .gitignore # 4. Initialize and make the first commit git init git add . git commit -m "first commit: card tracker as standalone"

That's it for step 1. You now have a real git repo locally. Hidden .git/ folder is there. git log shows your one commit.

02

Create the GitHub repo and push.

~1 min · terminal

gh does this in one command. It creates the repo on GitHub, wires it as the origin remote, and pushes your local commits up.

gh repo create lovebuilt/card-tracker --private --source=. --remote=origin --push # Output you'll see: ✓ Created repository lovebuilt/card-tracker on GitHub ✓ Added remote https://github.com/lovebuilt/card-tracker.git ✓ Pushed commits to https://github.com/lovebuilt/card-tracker.git
Flag decisions

--private = invisible to everyone but you (good default). Use --public only when you're ready for the world to see it.

--source=. = "the current directory is the repo." --push = "push my commits up immediately."

Verify it worked: gh repo view --web opens the new repo in your browser. You'll see index.html sitting there on GitHub.

03

Connect Cloudflare Pages to the repo.

~5 min · CF dashboard

This is the one part that lives in a web UI, not a terminal. Once it's set up, you'll never touch the dashboard for this project again.

  1. Go to dash.cloudflare.com. Sign in with the same account you use for lovebuiltautomations.com DNS.
  2. Left sidebar → Workers & Pages → top button Create.
  3. Choose Pages tab → Connect to Git.
  4. Authorize Cloudflare to read from your GitHub. (First time only. Grants access per-repo or to all repos — your call.)
  5. Pick the card-tracker repo from the list.
  6. Build settings screen: framework preset = None. Build command = empty. Build output directory = / (just a slash — means "the repo root").
  7. Click Save and Deploy. Watch the build log scroll for ~30 seconds.
Why "build output directory = /"

For a single-HTML-file site, there's no build step. The repo root IS the deployed folder. For more complex projects (React, etc.), this would be dist/ or build/ — wherever your build process emits its output files.

04

Visit your live URL.

~10 sec · just click

Once the build finishes, Cloudflare shows you a green ✓ and a URL. The pattern is:

card-tracker.pages.dev # your primary URL — main branch card-tracker-7gx.pages.dev # a per-deploy URL (each build gets one too)

Click it. Your index.html is now live, served from 330+ Cloudflare data centers worldwide. Free. Behind HTTPS. With DDoS protection. You did nothing extra for any of that.

Bonus — wire up a custom domain

In the Pages project settings → Custom domains → add a subdomain of lovebuiltautomations.com (e.g., cards.lovebuiltautomations.com). Cloudflare auto-creates the DNS record because they own your DNS too. ~30 seconds. Free.

05

Change something, push, watch it go live.

~1 min · the daily loop

This is the loop you'll live in for the rest of forever. Make sure it works.

# 1. Open index.html in your editor, change something small. # e.g. update the page title from "Card Tracker" to "Card Tracker v2" # 2. Save the file. Back in terminal: git status # confirms index.html is modified git add . git commit -m "update title to v2" git push # 3. Open card-tracker.pages.dev in your browser, hit refresh. # Within ~30 seconds, the new version is live.
The whole pipeline, in one sentence

Edit on Mac → git push → GitHub webhook fires → CF Pages rebuilds → new version live globally in 30 seconds. Forever.

Bonus — when you're ready for playground

The same five steps, scaled up.

Once you've done the above with one small thing, doing it for playground itself is the same flow with two adjustments:

Adjustments for playground

1. Playground has a Node server (server.js), so it can't be Pages-only. Deploy target = Coolify, not Pages. Same git workflow on your end; just a different webhook destination.

2. Playground is a monorepo with ~40 files — the .gitignore needs to include node_modules/ and any large data files (conversation-data.json, dashboard-data.json at 3MB each are git-trackable but a bit much for the first deploy).

# 1. Make playground a repo cd ~/lab/projects/playground echo "node_modules/\n.env\n.DS_Store\n*.log" > .gitignore git init git add . git commit -m "first commit: playground" # 2. Create the GitHub repo gh repo create lovebuilt/playground --private --source=. --remote=origin --push # 3. In Coolify (not CF Pages), create a new app from this repo. # Coolify auto-detects Node, sets up the build, exposes the port. # 4. Configure the custom domain in Coolify (playground.lovebuiltautomations.com) # Coolify generates the cert via Let's Encrypt. CF DNS already in your control. # 5. Edit-commit-push loop now goes Mac → GitHub → Coolify → live.
✦ Lesson 6 recap

The pipeline you now own…