Deploy

The Hugo site lives at the repo root and is published from GitHub via Cloudflare Pages. The dataset (data/c2db.json + data/whois/) is committed to the repo, so the build is fully offline โ€” no API keys, no registry access at build time.

Repository

Cloudflare Pages settings

Create the project at dash.cloudflare.com โ†’ Workers & Pages โ†’ Create application โ†’ Pages โ†’ Connect to Git, and authorize the Cloudflare Pages GitHub App โ€” grant it access to only this repository. (Revoke or adjust later at github.com โ†’ Settings โ†’ Applications.)

Setting Value
Production branch main
Framework preset Hugo
Root directory (repo root โ€” leave empty)
Build command python3 tools/gen_content.py && hugo --gc --minify
Build output directory public
Environment variable HUGO_VERSION = 0.167.0

HUGO_VERSION is required โ€” Cloudflare’s default Hugo is ancient and the build fails without it. Keep it in sync with the local hugo version (currently v0.167.0).

baseURL in hugo.toml points at the *.pages.dev domain; after adding a custom domain (Pages โ†’ Custom domains), update baseURL and redeploy. HTTPS is automatic on Cloudflare.

Local preview

The Hugo project is at the repo root:

serve.bat                          # Windows: regenerate content + hugo server
# or manually:
python tools/gen_content.py        # rebuild docs/indicator/cert pages + search index
hugo server                        # http://localhost:1313

How updates flow

  1. Locally (or a GitHub Actions cron later): python -m tracker refresh updates whois/DNS and commits refreshed data/.
  2. Push to main (GitHub Desktop works fine).
  3. Cloudflare Pages sees the push, runs the build command, publishes.

The build command regenerates all data-driven content from the committed dataset on every deploy โ€” never edit files under content/docs, content/i, content/certs, or static/index by hand.