I did this with a domain from a blog I killed. You don't need a domain at all — that part is optional and marked as such.
What you end up with
A one-page site with your links on it, that you own, on hosting that is free forever. No monthly fee, no "upgrade to remove branding", no company changing its pricing on you.
What you need
- A free GitHub account → github.com (this is the free hosting)
- A free Claude account → claude.ai (this writes the page)
- Optional: a domain you already own
No credit card anywhere in this guide.
1 — Have Claude build the page
Open claude.ai and paste this. Fill in the brackets with your own stuff.
Build me a link-in-bio page as ONE self-contained HTML file. About me: [one sentence — who you are and what you make] Links, in this order: 1. [Label] — [URL] — [one line describing it] 2. [Label] — [URL] — [one line describing it] 3. [Label] — [URL] — [one line describing it] Style: [the vibe — e.g. dark, bold condensed headings, one accent color] Mobile-first — almost everyone opens this on a phone. Rules: - Everything inline. No external fonts, scripts, images or CDN links. - Big tap targets, high contrast, no horizontal scrolling. - Include a <title> and a meta description. Output only the HTML.
Claude gives you a wall of code. Don't read it.
Don't like how it looks? Don't rewrite the prompt — just say what's wrong: make the cards bigger · darker background · the heading font is too thin · add my email at the bottom. Three rounds of that beats one perfect prompt.
Save it as a file
- Click the copy button at the top of the code block
- Open Notepad (Windows) or TextEdit (Mac), paste it
- Save it as
index.html— the name matters, don't rename it- TextEdit on Mac: Format → Make Plain Text first, or it saves wrong
- Double-click the file to preview it in your browser
Looks right? That file is your whole website.
2 — Put it online, free
No terminal needed. All of this is in the browser.
Create the place it lives
- Go to github.com/new
- Repository name:
links - Choose Public — Pages only works on public repos with a free account
- Leave every checkbox unticked (no README, no .gitignore, no license)
- Create repository
Upload your file
- On the empty repo page, click uploading an existing file
- Drag in your
index.html - Commit changes
Turn on the hosting
- In the repo → Settings
- Sidebar → Pages
- Source: Deploy from a branch
- Branch main, folder / (root) → Save
Wait about a minute, refresh, and GitHub shows your live address: https://YOURNAME.github.io/links
3 — Optional: your own domain
Skip this if you don't own one.
Tell GitHub the domain
Repo → Settings → Pages → Custom domain → type it → Save. GitHub adds a file called CNAME to your repo. That's supposed to happen.
Point the domain at GitHub
Go to wherever you bought the domain, find the DNS records screen, and add these five:
| Type | Host | Value |
|---|---|---|
| A | @ | 185.199.108.153 |
| A | @ | 185.199.109.153 |
| A | @ | 185.199.110.153 |
| A | @ | 185.199.111.153 |
| CNAME | www | YOURNAME.github.io. |
Delete any existing A record or parking/redirect record for @ first, or they'll fight each other. Then wait — ten minutes is normal, a few hours happens.
Force HTTPS
Back in Settings → Pages, tick Enforce HTTPS. Greyed out? The certificate isn't ready. Come back in an hour — it appears on its own.
When it goes wrong
The most common one, and almost never a real problem. Your router cached the domain's old address, so you're still landing on the previous server — whose certificate doesn't cover your domain. The rest of the world already sees the new site.
Check it on mobile data with Wi-Fi off. If it loads there, you're fine. ipconfig /flushdns usually won't help — the stale copy is in the router, not your PC. Restart the router or wait.
The file has to be named exactly index.html and sit at the top level of the repo, not inside a folder.
GitHub rebuilds in about a minute, then your browser caches it. Hard refresh: Ctrl+Shift+R (Cmd+Shift+R on Mac).
DNS isn't pointing at GitHub yet. Finish the DNS step, wait, then set it again.
Why bother
Rented link pages take a cut of your attention: their branding on your page, their upsell to your visitors, their pricing decisions on your budget.
The page you came from runs on a domain from a blog that failed — Google rejected it, the hosting lapsed, I killed the project. The domain had ten months left on it. Now it's the front door of everything I make.
If it can go wrong, it will. Sometimes it leaves you a part you can use.