ADR: Cloudflare CDN as Reverse Proxy for GitHub Pages
Summary
Use Cloudflare (free tier) as a CDN reverse proxy in front of GitHub Pages
for chrisnewcomb.name rather than pointing DNS directly at GitHub's servers.
Status: Accepted Date: 2026-04-11
Context
The engineering journal is a static Docusaurus site hosted on GitHub Pages and
deployed via GitHub Actions. The site is served at a custom domain
(chrisnewcomb.name) registered through GoDaddy.
Without a CDN layer, the site is served directly from GitHub Pages with no edge caching, no DDoS protection, and no control over HTTPS enforcement or traffic routing.
Decision
Point DNS for chrisnewcomb.name to Cloudflare nameservers instead of
directly to GitHub Pages IPs. Cloudflare sits in front as a reverse proxy —
GitHub Pages continues to host the content, but all traffic flows through
Cloudflare's edge network first.
Nameservers:
eoin.ns.cloudflare.comemely.ns.cloudflare.com
DNS records managed in Cloudflare:
| Type | Name | Value | Proxied |
|---|---|---|---|
| A | @ | 185.199.108.153 | ✅ |
| A | @ | 185.199.109.153 | ✅ |
| A | @ | 185.199.110.153 | ✅ |
| A | @ | 185.199.111.153 | ✅ |
| CNAME | www | newcomb-labs.github.io | ✅ |
Additional configuration:
- SSL/TLS mode: Full
- HTTPS page rule:
http://chrisnewcomb.name/*→ Always Use HTTPS - Browser Cache TTL: 4 hours
- Auto Minify: JS, CSS, HTML enabled
- Brotli compression: enabled
Consequences
Benefits:
- Content served from Cloudflare edge nodes globally — faster load times
- Automatic DDoS protection
- Cloudflare manages SSL cert — no expiry issues
- Always Online serves cached version if GitHub Pages goes down
- Basic traffic analytics without cookies or tracking scripts
- HTTPS enforced at the edge via page rule
- Free tier covers all requirements for a personal knowledge base
Trade-offs:
- DNS is now managed in Cloudflare, not GoDaddy — an extra system to maintain
- Cloudflare is a dependency in the request path — if Cloudflare goes down, the site goes down (mitigated by Always Online)
- Custom domain must be set in GitHub Pages settings — can be cleared by deploy workflow if
website/static/CNAMEis not present in build output
Mitigations:
website/static/CNAMEadded to repo so Docusaurus includes it in every build artifact, preventing GitHub Pages from clearing the custom domain on deploy
Alternatives Considered
Direct GitHub Pages with custom domain (no CDN)
- Simpler — fewer moving parts
- No edge caching, no DDoS protection, no HTTPS enforcement control
- Rejected in favour of Cloudflare's free tier benefits
Cloudflare Pages (direct hosting)
- Would replace GitHub Pages entirely
- More complexity — separate deployment pipeline
- Not needed for a static personal KB
- Rejected — GitHub Pages + Cloudflare proxy achieves the same result with less complexity