Back to blog

I Built My Consulting Website for Free — No Database, No WordPress, No Hosting Fees

5 min readTools & Automation

I run a consulting business helping people build online courses. I needed a website. Not a course platform, not a membership site — a marketing site with a homepage, blog, and a way for people to book a call with me.

The obvious answer would have been WordPress. I've built dozens of WordPress sites over the years. Right now I run three training websites on WordPress — one with Sensei LMS, two with LearnDash — and I've hosted plenty more in the past. But for this, I wanted something different.

I wanted something I'd never have to maintain.

Why Not WordPress?

WordPress is the right tool for a lot of things. My notary education site uses it with Sensei LMS and handles thousands of courses and students. But for a simple marketing site, it felt like bringing a cannon to a knife fight.

  • Database to maintain. MySQL needs updates, backups, and occasional repair. WordPress saves everything, too. Every post revision, every draft you'll never use, every plugin setting. Over time that database bloats and slows down your site.
  • Security surface area. WordPress powers 43% of the web, which makes it target number one for exploits. Every plugin you install is another potential entry point.
  • Hosting costs. Decent WordPress hosting runs $20-50/month for a site that gets modest traffic. And that's before you add a CDN, which you'll want for performance.
  • Plugin updates. Stay on top of them or get hacked. Ignore them long enough and updating becomes its own project. Update the wrong one and something breaks. It's a constant maintenance treadmill.

I wanted to version control my content, deploy with a git push, and never think about server maintenance again. Like the site version of "set it and forget it."

The Stack

  • Next.js 16 — React framework with static site generation
  • MDX — Markdown files with JSX components for blog posts
  • Tailwind CSS v4 — Utility-first styling
  • Cloudflare Pages — Free hosting, global CDN, automatic deploys from GitHub

No database. No server. No PHP. Just static HTML files served from a CDN.

How Content Works

Every blog post is a markdown file with some frontmatter at the top:

---
title: "Why Most Online Courses Fail"
date: "2026-01-15"
category: "Course Creation"
tags: ["course-creation", "online-courses"]
excerpt: "Most courses fail because..."
---

The post content goes here in plain markdown.

No admin panel. No WYSIWYG editor. I write in whatever text editor I'm already using, commit to git, and the site rebuilds. If I want to embed a component in a post — a callout box, a code block, a custom layout — MDX lets me drop in JSX right in the markdown.

Static Means Pre-Built

Next.js generates every page as static HTML at build time. When someone visits a blog post, they're getting a pre-built HTML file from Cloudflare's CDN. No server processes their request. No database query runs.

Page loads are fast. The site can handle traffic spikes without breaking. Hosting costs are zero.

But What About Dynamic Stuff?

RSS feeds and sitemaps need to update when content changes. I handle that with build scripts that run before next build:

node scripts/generate-rss.mjs
node scripts/generate-sitemap.mjs
next build

The scripts read the markdown files, generate RSS and sitemap XML, and dump them into the public/ folder. They become static files like everything else.

SEO metadata? Each page exports a metadata object with OpenGraph tags, Twitter cards, canonical URLs, and JSON-LD structured data. All injected at build time.

Booking and contact? I use GoHighLevel for my CRM and appointment scheduling. The site embeds GHL's calendar directly through an iframe. I tested multiple iframe heights before settling on 950px — anything shorter and the user has to scroll inside the widget. Those details matter.

Deployment

The whole site lives in a GitHub repo. When I push to main, Cloudflare Pages:

  1. Detects the framework (Next.js)
  2. Runs the build command
  3. Deploys the static output to their CDN

Preview deploys on every pull request. Rollbacks in one click. I haven't touched a server since setting it up.

The Tradeoffs

Going static means giving up some things:

  • No server-side rendering. If I need user accounts or dynamic content, that's a separate service.
  • No admin panel. Editing content means editing markdown and pushing to git. Fine for me, but a non-technical client would struggle.
  • No server-side search. Site search needs a third-party tool or a JavaScript-based solution. For a site with under 50 posts, a tag-based archive works fine.

None of these matter for a consulting business site. If I need dynamic features later, I can add Cloudflare Workers or edge functions without touching the core site.

What It Actually Costs

  • Hosting: $0 (Cloudflare Pages free tier)
  • Domain: Whatever your registrar charges (I already owned course.coach)
  • Time to set up: Under a day, start to finish
  • Monthly maintenance: None

Compare that to a WordPress site: hosting, security plugins, backups, updates, performance optimization, a CDN to keep page loads reasonable, image compression to save server space, and scheduled database maintenance to keep things from slowing down. It adds up in both money and time.

Was It Worth It?

Absolutely. Sub-second page loads from a global CDN. Git-based workflow where I edit, commit, push, and it's live. No security patches, no database backups, no plugin compatibility issues. The best infrastructure is the infrastructure you don't have to think about.

The site I built is at course.coach. Same stack powers my personal site at ricsmo.com. Both have a homepage, blog, about page, and everything a consulting business needs — nothing it doesn't.

If you're building a marketing site for a small business — whether it's consulting, freelancing, or courses — static is worth a look. The tooling has gotten good enough that you don't need WordPress for everything anymore.

Share

More writing