From Hashnode to Hugo: Notes From the Move

This blog has a new home. It used to live on Hashnode; it now runs on Hugo with the Hextra theme, builds on GitHub Actions, and serves for free from GitHub Pages — same domain, same URLs.
Why move
Hashnode was a great starting point, but in 2026 custom domains moved behind their new Pro plan, and that nudged me toward something I’d been meaning to do anyway: own the whole stack. Now every post is a Markdown file in a Git repo. No platform, no lock-in, no surprises.
The stack
The setup is small enough to describe in one breath: Hugo builds the site, Hextra makes it look good, a GitHub Actions workflow deploys on every push, and four DNS records point the domain at GitHub Pages. Keeping the old URL structure was one config line:
permalinks:
blog: /:slug/That single line is what preserves years of links and search rankings across the move.
What broke along the way
Almost nothing — except the time I copied a shortcode block from a rendered Markdown view and it silently injected blockquote markers into the file, breaking the build with the world’s most cryptic error. Lesson learned: always copy from the raw source.
What’s next
Migrating the full archive over from the Hashnode export, rehosting the images, and then getting back to actually writing. If you’re reading this on sauravjalui.com over HTTPS, every piece of the pipeline above did its job.
