
I recently stumbled across a Reddit post that perfectly captures a frustration many developers face:
"I've been making complex web apps with React or Vue with all the magic abstracted for me... I was asked by an acquaintance to make them a website for their small business. I need to make a landing page with no dynamic content... What tools can I use that are a step-up from raw HTML, CSS, JS?"
Sound familiar?
This developer isn't alone. Somewhere between writing raw HTML files and spinning up a full React application lies a massive gap – and that's exactly where most small business websites live.
You know the type: local restaurants, consulting firms, plumbers, photographers, small agencies. They need a professional online presence, but they don't need a database, user authentication, or a shopping cart with real-time inventory.
Yet here's the surprising part: most developers and business owners don't know there's a better way. They either hand-code everything (tedious and error-prone) or reach for WordPress (overkill and expensive) or React (way overkill for static content).
There's a third option that's faster, cheaper, and honestly better for these use cases: Static Site Generators.
In this guide, I'll show you how to build a professional website using Hugo (a blazing-fast static site generator), GitHub (for version control), and Netlify (for free hosting). By the end, you'll have a site that:
Costs exactly $0 per month to host
Loads in under a second
Never goes down due to server issues
Requires zero maintenance for security updates
Looks completely professional
Can be updated by anyone on your team
Companies like Smashing Magazine, Let's Encrypt, and 1Password use Hugo for their websites. If it's good enough for them, it's definitely good enough for your small business site.
Let's dive in.
Here's a truth bomb: Most small business websites are massively overengineered.
Think about what a typical local business website actually does:
Displays information about services
Shows contact details and location
Maybe has a blog with occasional updates
Includes some nice photos
That's it. No user accounts. No real-time data. No complex interactions. Just information that changes maybe once a week, if that.
Yet I see developers building these sites with React, Next.js, or installing WordPress with 15 plugins. It's like using a chainsaw to slice bread – technically it works, but you're creating problems you didn't have before.
The average WordPress site weighs in at about 2.5MB and takes 3.5 seconds to load. That same content as a static site? Around 200KB and loads in under a second. We're talking about a site that's 12x smaller and 4x faster.
WordPress Route
Hosting: $120-$300/year (even "cheap" shared hosting)
Security plugin: $0-$100/year
Backup service: $0-$60/year
Premium theme: $0-$60 (one-time, but still)
Time spent on updates: 6-12 hours/year (your time has value!)
Total: $120-$520+ per year
Static Site Route
Hosting: $0/year (Netlify free tier)
Security: $0 (nothing to hack)
Backups: $0 (GitHub is your backup)
Theme: $0 (hundreds of free options)
Time spent on updates: 3-6 hours/year
Total: $0 per year
When you visit a WordPress site, here's what happens:
Your browser asks for a page
WordPress wakes up the database
It runs PHP code to fetch your content
It assembles everything into HTML
It sends that HTML to your browser
This happens every single time someone visits. It's like baking a fresh cake every time someone wants a slice!
A static site generator works differently:
You write your content in simple text files
You run the generator once
It creates all your HTML pages upfront
Those pages sit ready to serve
When someone visits, they get the pre-made HTML instantly
It's like baking all your cakes once, then just serving slices. Way faster, way simpler.
Hugo has some serious advantages:
1. Speed That'll Make You Do a Double-Take
Hugo builds 1,000 pages in less than 1 second. Jekyll takes 50+ seconds to do the same. When you're developing and want to see changes instantly, this matters. A lot.
2. It's a Single Binary
With Jekyll, you need Ruby and a bunch of gems. With Gatsby, you need Node.js and npm packages. With Hugo? You download one file. That's it. No dependency hell, no version conflicts, no "works on my machine" problems.
3. Battle-Tested and Trusted
Hugo has over 84,000 stars on GitHub and is used by Smashing Magazine, Let's Encrypt, 1Password, and Linode. If these companies trust it for their high-traffic sites, you can trust it for your business.
4. Theme Ecosystem
There are over 400 free Hugo themes covering every use case imaginable. Gethugothemes alone offers 70+ professionally designed themes.
5. SEO-Friendly Out of the Box
Hugo generates clean, semantic HTML that search engines love. It automatically creates sitemaps, RSS feeds, and proper heading hierarchies.
✅ Perfect for
Landing pages
Service-based businesses (consultants, agencies, plumbers, electricians, lawyers)
Local businesses (restaurants, clinics, shops, studios)
Personal portfolios (designers, photographers, writers, developers)
Company blogs
Documentation sites
Event websites
Non-profit sites
Basically, if your website is primarily about showing information rather than processing transactions or user data, Hugo is ideal.
❌ Not ideal for
E-commerce with complex checkout
Web applications (like Gmail, Facebook, or project management tools)
Sites with user accounts and login systems
Real-time dashboards
Heavy user-generated content
Our setup has three main components:
1. Hugo – Your Website Builder
Hugo takes your content (written in simple Markdown files) and your theme (the design) and combines them into a complete website made of HTML, CSS, and JavaScript files.
2. GitHub – Your Code Storage and Version Control
GitHub is where your website's source code lives. Here's why it's awesome:
It keeps every version of your site, so you can undo mistakes
You can work on changes without affecting the live site
Multiple people can work on the site without stepping on each other's toes
It's like a time machine for your website
3. Netlify – Your Free Hosting Platform
Netlify takes your website files and makes them available to the world:
It's free for small sites
It uses a CDN (Content Delivery Network), meaning your site loads fast worldwide
It automatically updates when you make changes to GitHub
It includes SSL certificates (the "https" lock icon) for free
Here's the beautiful workflow:
You write content or make changes
Those changes get saved to GitHub
GitHub notifies Netlify of a change
Netlify runs Hugo to rebuild your site
Your updated site is live in about 30-60 seconds
Performance
Your site is just HTML, CSS, and JavaScript files served from a CDN. There's no database to query, no server-side code to run. Most Hugo sites load in under a second and can handle 100,000 visitors in a day without breaking a sweat.
Security
You can't hack what isn't there. WordPress sites get hacked because they're running PHP code and connecting to databases. Your Hugo site? It's just files. There's no login page to attack, no database to inject SQL into. The attack surface is basically zero.
Scalability
Static files on a CDN can handle massive traffic spikes. Netlify's free tier includes 100GB of bandwidth per month. That's roughly 100,000 page views for a typical small business site. For free.
Cost
Free is pretty hard to beat. The only thing you'll pay for is your domain name, which costs about $12-15/year no matter what hosting you use.
Developer Experience
Making changes is fast and easy. Want to update your "About" page? Edit a text file or use a visual editor. Want to see how it looks? The preview is instant.
Here's what you need to get started:
An email address
30 minutes of uninterrupted time
That's literally it. You don't need coding knowledge. You don't need to install anything on your computer.
Step 1: Sign Up for Sitepins
Head over to Sitepins and create a free account. Sitepins is a visual interface for Hugo that handles all the technical stuff behind the scenes.
Their free plan includes:
3 sites
Visual content editor
Pre-configured Starter Templates
GitHub integration
Step 2: Choose Your Theme
Once you're logged in, click "Create New Site." Sitepins will show you a gallery of themes. These are professionally designed Hugo themes that cover different types of websites. Let's explore some options here:
For Business/Agency Sites
Bigspring Light Hugo – Modern, professional design with service showcases
Hugoplate – Versatile starter with clean layouts
For SaaS Marketing Sites
Andromeda Light Hugo – Purpose-built for SaaS products
Bigspring Light Hugo – Also works excellently for SaaS
For Blogs
Bookworm Light Hugo – Clean, reading-focused design
Liva Hugo – Elegant blog theme with great typography
For Portfolios
Northendlab Light Hugo – Stunning portfolio theme for creatives
For Documentation Sites
Dot Hugo – Specifically designed for documentation
My recommendation: Start with Hugoplate if you're unsure. It's versatile and modern.
Step 3: Connect GitHub
Sitepins will ask you to connect your GitHub account. If you don't have one, go to GitHub and create a free account—it takes 2 minutes.
Click "Connect GitHub" in Sitepins. A popup will appear asking for permissions. Sitepins is asking permission to:
Create a new repository in your GitHub account
Add your website files to that repository
Update those files when you make changes through Sitepins
Click "Authorize Sitepins." Behind the scenes, Sitepins is now creating a new GitHub repository with all your site's files.
Step 4: Deploy to Netlify
Sitepins will automatically prompt you: "Deploy to Netlify?" Click "Yes, Deploy Now."
You'll need to create a Netlify account if you don't have one. Use the same email you used for GitHub to keep things simple.
Authorize Netlify to access your GitHub repository. Netlify will now:
Grab your site files from GitHub
Run Hugo to build your website
Deploy it to their global CDN
Give you a URL to access it
When it's done, you'll see: "Your site is live!" Click the URL Netlify provides, and there it is – your website, live on the internet!
Step 5: Customize Your Site
Go back to Sitepins and click "Edit Site." You'll see a visual editor with your site's content.
Updating Text
Click on any text element
Type your new content
Click "Save"
Changing Images
Click on any image
Click "Replace Image"
Select an image from your computer
Click "Save"
Adjusting Colors and Fonts
Go to "Config" → "theme.json"
You'll see color pickers for primary color, body colors, and border color
Pick new colors
Click "Save"
Managing Content
Adding/Deleting Posts – Navigate to your blog section, click "New Post" to create articles
Adding/Deleting Pages – Create new pages for services, team members, or any content you need
Updating Menu Items – Easily add, remove, or reorder navigation items
Configuring Site Settings – Update your business name, contact information, social media links
Step 6: Connecting Your Custom Domain (Optional)
Right now, your site is at something like "your-site.netlify.app". To use your own domain like yourbusiness.com, see the "Connecting Your Custom Domain" section below.
If you're comfortable with the command line, this section is for you. This approach gives you more control and helps you understand exactly what's happening under the hood.
What you need:
Basic comfort with the command line
A text editor (we'll use VS Code, but any editor works)
Time: 1-2 hours for your first site
A computer (Windows, Mac, or Linux all work)
An internet connection
1-2 GB of free disk space
Installing Hugo
On Windows
Download Hugo from GitHub releases. Look for the file named hugo_extended_X.XX.X_windows-amd64.zip (get the "extended" version).
Extract the zip file
Move hugo.exe to C:\Hugo\bin
Add C:\Hugo\bin to your Windows PATH:
Search for "Environment Variables" in Windows
Click "Edit the system environment variables"
Click "Environment Variables"
Under "System variables," find and edit "Path"
Add C:\Hugo\bin
Click OK
Or if you have Chocolatey:
choco install hugo-extended
On Mac
If you have Homebrew:
brew install hugo
Don't have Homebrew? Install it first:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
On Linux
For Ubuntu/Debian:
sudo apt-get install hugo
For Arch:
sudo pacman -S hugo
Verify the installation
Open your terminal and run:
hugo version
You should see something like:
hugo v0.120.4-f11bca5fec2ebb3a02727fb2a5cfb08da96fd9df+extended darwin/arm64 BuildDate=2023-11-08T11:18:07Z
Installing Git
On Windows
Download Git from git-scm.com and run the installer. The default options are fine.
On Mac
Git should already be installed. To verify:
git --version
If it's not installed, Mac will prompt you to install command line tools. Say yes.
On Linux
sudo apt-get install git # Ubuntu/Debian
sudo pacman -S git # Arch
Verify
git --version
You should see: git version 2.x.x
Code Editor Setup
Download and install VS Code – it's free, fast, and has great Hugo support.
Once installed, add these recommended extensions:
Open VS Code
Click the Extensions icon (Ctrl+Shift+X / Cmd+Shift+X)
Search for and install:
"Hugo Language and Syntax Support"
"Front Matter CMS"
"Markdown All in One"
Open your terminal.
Step 1: Create New Site
Navigate to where you want your site folder:
cd ~/Documents
hugo new site my-business-site
cd my-business-site
Hugo creates a new folder with this structure:
my-business-site/
├── archetypes/ # Templates for new content
├── assets/ # Files that need processing
├── content/ # Your actual content (markdown files)
├── data/ # Data files (JSON, YAML)
├── layouts/ # HTML templates
├── static/ # Static files (images, fonts)
├── themes/ # Where themes live
└── hugo.toml # Main configuration file
Step 2: Choose and Install a Theme
Initialize Git in your project first:
git init
Install the Hugoplate theme as a Git submodule:
git submodule add https://github.com/zeon-studio/hugoplate.git themes/hugoplate
Copy the example configuration from the theme:
cp themes/hugoplate/exampleSite/hugo.toml hugo.toml
Step 3: Configure Your Site
Open hugo.toml in VS Code:
code hugo.toml
You'll see something like this:
baseURL = "https://example.com/"
languageCode = "en-us"
title = "My Business Site"
theme = "hugoplate"
[params]
description = "A description of your site"
author = "Your Name"
[[menu.main]]
name = "Home"
url = "/"
weight = 1
[[menu.main]]
name = "About"
url = "/about/"
weight = 2
Let's customize the important bits:
baseURL = "https://yourbusinesssite.com/"
languageCode = "en-us"
title = "Your Business Name"
theme = "hugoplate"
[params]
description = "We provide excellent services for your needs"
author = "Your Name"
twitter = "yourusername"
github = "yourusername"
email = "[email protected]"
Save the file.
Step 4: Create Your First Content
Let's create an "About" page:
hugo new about.md
Open the file:
code content/about.md
You'll see:
---
title: "About"
date: 2025-11-18T10:30:00+06:00
draft: true
---
Let's add some content:
---
title: "About Our Business"
date: 2025-11-18T10:30:00+06:00
draft: false
---
## Who We Are
We're a family-owned business serving the community since 2010. Our mission is to provide high-quality services with a personal touch.
## What We Do
We specialize in:
- Service one
- Service two
- Service three
## Why Choose Us
Our commitment to excellence and customer satisfaction sets us apart. We treat every project as if it were our own.
Notice I changed draft: false? That's important – Hugo won't show draft pages on the live site.
Markdown basics
# Heading 1 (biggest)
## Heading 2
### Heading 3
**bold text**
*italic text*
[link text](https://url.com)

- for bullet lists
1. for numbered lists
Step 5: Local Development
Run:
hugo server -D
The -D flag means "show draft content" during development.
Open your browser and go to http://localhost:1313/
There's your website! The cool part? Hugo is watching for changes. Edit content/about.md, save, and watch your browser update automatically.
Step 6: Customizing Your Theme
Most Hugo themes are designed to be customized without editing the theme files directly.
Changing Colors and Fonts
Check your theme's documentation. For Hugoplate, look in assets/data/theme.json.
Overriding Theme Files
Hugo looks in your project first, then falls back to the theme.
Want to customize the homepage? Copy themes/hugoplate/layouts/index.html to layouts/index.html and edit your copy.
Adding Custom CSS
Create assets/css/custom.css and add your styles.
Adding Images
Put images in static/images/. They'll be available at /images/yourphoto.jpg.
In markdown:

Pro tip: Optimize your images before adding them. Use TinyPNG.com. Aim for images under 500KB each.
Step 1: Prepare for Deployment
Update your baseURL in hugo.toml to your actual domain:
baseURL = "https://yourbusinesssite.com/"
Build your site:
hugo --gc --minify
This command:
hugo – Runs the build
--gc – Garbage collection (cleans up unused cache)
--minify – Makes your HTML, CSS, and JS smaller (faster loading)
Hugo creates a public/ folder with your complete website.
Step 2: Push to GitHub
Create a new repository on GitHub called my-business-site.
In your terminal:
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/yourusername/my-business-site.git
git push -u origin main
Important note: The public/ folder shouldn't be committed to Git. Create a .gitignore file in your project root.
echo "public/" > .gitignore
git add .gitignore
git commit -m "Add gitignore"
git push
Why? Netlify generates the public/ folder during build—no need to store it in Git.
Step 3: Deploy with Netlify
Visit netlify.com
Sign up using GitHub
Click "Add new site" → "Import an existing project"
Select your repository
Netlify Build Settings
Build command: hugo --gc --minify
Publish directory: public
Environment variable: HUGO_VERSION = 0.120.4
Netlify will:
Clone your repo
Install Hugo
Run your build
Deploy to their CDN
Result: A live URL like random-name-123.netlify.app
Step 4: Set Up Continuous Deployment
Now when you make changes:
Run: git add . && git commit -m "Update" && git push
Netlify rebuilds automatically
Site updates in 30–60 seconds
Recommended registrars:
Namecheap
Cloudflare
Porkbun
Google Domains
Avoid GoDaddy (upsells & expensive).
Netlify will provide DNS records:
A Record → Root domain
CNAME → www → Netlify URL
Option 1: Manually add DNS records
Add A + CNAME in your registrar's DNS settings.
Option 2: Use Netlify DNS (Recommended)
Replace nameservers with Netlify's.
DNS may take 1–48 hours to propagate. Netlify auto-creates SSL certificates.
Best Practices
JPG for photos
PNG for transparent images
SVG for logos
Max width: 2000px
Always include alt text
Popular options:
Plausible (recommended)
Fathom
Google Analytics
Meta descriptions
Hugo sitemap
Structured data via JSON-LD
Performance tests via PageSpeed Insights, GTmetrix, or WebPageTest
Organizing Content Structure
Create folders in your content/ directory to organize pages by type:
content/
├── blog/
│ ├── post-1.md
│ └── post-2.md
├── services/
│ ├── service-1.md
│ └── service-2.md
└── pages/
├── about.md
└── contact.md
Using Shortcodes
Hugo has built-in shortcodes for YouTube, tweets, figures, and more.
Creating Blog Posts
hugo new blog/my-first-post.md
Updating Hugo
brew upgrade hugo # Mac
choco upgrade hugo # Windows
Updating Themes
If using Git submodules:
git submodule update --remote themes/hugoplate
Backup Options
GitHub already stores your history. Extra backups are optional but recommended.
Tools to consider:
UptimeRobot
Freshping
Netlify monitoring
Broken link checkers
Mobile-friendly checks
Accessibility testing
Forms
Netlify Forms (simple & free)
FormSpree
Basin
Tally
Comments
Utterances
Remark42
Hyvor Talk
Simple E-commerce
Snipcart
Gumroad
Paddle
LemonSqueezy
API Integrations
Add dynamic content with JavaScript fetching APIs.
Built a Hugo site
Understood static site benefits
Deployed via Netlify
Set up continuous deployment
Learned optimization & maintenance
Option Cost
WordPress $1,140 – $3,240
Hugo + GitHub + Netlify Free $195 – $345
Hugo + Premium hosting $964 – $1,164
Documentation
Communities
Everything Hugo(Daily.dev Squad)
Themes
Learning
Hugo in Action
Mike Dane tutorials
Markdown Guide
Tools
PageSpeed
GTmetrix
WebPageTest
TinyPNG
Netlify Forms
Plausible
0
15
0