A minimal blog setup where the entire build happens in GitHub Actions. No local Hugo install required. Write markdown, push to main, your site is live.
- Use this template (click "Use this template" on GitHub, or fork it)
- Enable GitHub Pages in your repo: Settings > Pages > Source: "GitHub Actions"
- Push to main and your site deploys automatically
That's it. Your blog is live at https://yourusername.github.io/hugo-github-pages-starter/ (or your custom domain).
Edit hugo.toml:
baseURL— your site URLtitle— site nameparams.author.name— your nameparams.home.profile— homepage title/subtitleparams.social— your GitHub/LinkedIn/Twitter handles
Create a file in content/posts/:
---
title: "My Post Title"
slug: "my-post-url"
date: 2026-05-15
draft: false
tags: ["topic1", "topic2"]
description: "Shows up in SEO and social cards."
---
Your content here. Standard markdown.Push to main. Done.
- Add a
CNAMEfile to your repo root containing your domain (e.g.,example.com) - At your DNS provider, add four A records pointing to GitHub's IPs:
185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 - Add a CNAME record:
www→yourusername.github.io - In repo Settings > Pages, set your custom domain and check "Enforce HTTPS"
- Hugo config with LoveIt theme (as git submodule)
- GitHub Actions workflow that builds and deploys on push
- All actions pinned to commit SHAs (supply chain security)
- Minimal permissions (read-only except pages deployment)
- Page animations disabled
- Theme toggle hidden (light mode only)
- Share buttons disabled
- Custom CSS override without modifying the theme
- Post archetype template with SEO fields
Most Hugo tutorials assume you'll install Hugo locally, run hugo server, preview, then push. That's fine, but it means your blog only works from machines where you've set up the toolchain.
This starter makes the build entirely server-side. If you can edit a markdown file and push a commit, you can publish. Works from any machine, any editor, or even the GitHub web UI.
The config includes a spot for GoatCounter (free, privacy-respecting, no cookies). Sign up, get your code, add it:
[params.analytics]
enable = true
[params.analytics.goatCounter]
code = "your-code"MIT. Use it however you want.