How I Built This Site for $0/Month Using Claude Code, Ghost, and Oracle Cloud

You can host a full website for $0/month using Claude Code, Ghost CMS, and Oracle Cloud Always Free tier. This build log walks through every step — from spinning up the server to deploying a custom theme and configuring email — all without paying a monthly hosting bill.

How I Built This Site for $0/Month Using Claude Code, Ghost, and Oracle Cloud

You're looking at claudecodepirates.ai right now. This site runs on Ghost CMS, hosted on Oracle Cloud's Always Free tier. The monthly hosting cost is $0. The only thing I paid for is the domain name.

I built the entire thing using Claude Code — the theme, the deployment, the server configuration, everything. I'm not a developer. I have a history degree and I work in HR. If I can stand this up, you can too.

This post is a build log. I'm going to tell you exactly what we used, why, what worked, what didn't, and how you can replicate this for yourself.

What the site runs on

Ghost CMS is an open-source publishing platform. Think of it as WordPress's cleaner, faster cousin — built for content, memberships, and newsletters. It handles:

  • Blog posts and pages
  • Email newsletter signups and sending
  • Member management (free and paid tiers)
  • Stripe integration for payments
  • A full admin panel for writing and managing content
  • Custom themes (Handlebars templates)
  • A Content API for headless use if you want it later

Ghost is free to self-host. The company behind it (Ghost Foundation, a non-profit) makes money from their managed hosting service, Ghost(Pro). But the open-source version has every feature — nothing is gated.

Oracle Cloud Always Free tier gives you a virtual machine that runs 24/7, forever, at no cost. You sign up with a credit card for verification, but you're never charged for Always Free resources. What I got:

  • 1 vCPU, 1 GB RAM (VM.Standard.E2.1.Micro)
  • 46 GB boot volume
  • Ubuntu 24.04
  • A public IP address
  • Ports 22 (SSH), 80 (HTTP), and 443 (HTTPS) open

Caddy is the web server sitting in front of Ghost. It handles HTTPS automatically — provisions and renews Let's Encrypt certificates without any configuration beyond two lines in a config file. No Nginx, no Certbot, no cron jobs for renewals.

Brevo (formerly Sendinblue) is the email relay. Ghost needs an SMTP service to send newsletters, password resets, and member emails. Brevo's free tier gives you 300 emails per day, forever, no credit card required. Setup is 5 minutes — sign up, copy your SMTP credentials, paste them into Ghost's config file, restart.

The domain — claudecodepirates.ai — I bought through Squarespace for about CA$117/year. The .ai TLD is expensive. You don't need it. A .com, .net, or .co domain costs $10-25/year and works exactly the same way.

How I built it

I sat down with Claude Code and said "I want to build a Ghost CMS website for Claude Code Pirates." From there, it was a conversation.

The theme. Claude Code forked Ghost's built-in Source theme into a custom "ccp" theme. It wrote the CSS (navy and gold color scheme), built custom page templates for the homepage, about page, cohort sales page, and FAQ — all in Handlebars. It copied my pirate mascot image into the theme assets. The whole theme was built locally on my Mac, tested on localhost, and then uploaded to the server.

The server. Claude Code SSH'd into the Oracle VM and ran the install commands: Node.js, Caddy, Ghost CLI, Ghost itself. It configured the Caddyfile for reverse proxying, opened the firewall ports, set up a 2 GB swap file (because 1 GB RAM is tight), and activated the theme.

The DNS. Claude Code drove Playwright (browser automation) to log into my Squarespace domain settings and point the A records at the Oracle VM's IP address.

The email. Claude Code navigated Brevo's signup flow via Playwright, grabbed the SMTP credentials, and configured Ghost's production config file over SSH. Newsletter sending worked on the first try.

The entire process — from "I want a site" to "it's live on the internet with HTTPS and email" — happened in one Claude Code session.

What it cost

ItemCost
Domain (claudecodepirates.ai, 1 year)~CA$117
Oracle Cloud VM$0/month (Always Free)
Ghost CMS$0 (open source)
Caddy web server$0 (open source)
HTTPS certificate$0 (Let's Encrypt via Caddy)
Brevo email relay$0 (300/day free tier)
Theme development$0 (Claude Code built it)
Total monthly cost$0

The only recurring cost is the domain renewal. If you pick a .com instead of .ai, that's $10-15/year.

The limitations (honest version)

1 GB RAM is tight. Ghost runs, but it's snug. I added a 2 GB swap file, which handles memory spikes (image processing, admin panel, etc.) by using disk as overflow memory. It's slower than real RAM but it works. For a site with a few hundred visitors a day and a small email list, this is fine. If it ever isn't, I'll migrate to a bigger server.

Oracle's ARM instances were sold out. The Always Free tier includes a much beefier ARM-based VM (up to 4 CPUs, 24 GB RAM), but Montreal's availability domain was out of capacity when I tried. I fell back to the smaller x86 instance. If ARM capacity opens up later, I can spin one up and migrate Ghost over in about 20 minutes.

Oracle's web console is painful. The VM creation wizard fought us at every step — toggles that wouldn't toggle, public IP options grayed out, iptables rules in the wrong order. Claude Code and I spent a solid chunk of time wrestling with Oracle's UI through Playwright. The free tier is genuinely free, but Oracle makes you earn it.

How you can replicate this

Here's the short version. If you have Claude Code, you can hand it this list and it'll walk you through each step:

  1. Sign up for Oracle Cloud (cloud.oracle.com). Pick a region, create a VM (Ubuntu 24.04, VM.Standard.E2.1.Micro or A1.Flex if available). Download or paste your SSH key.
  2. Buy a domain anywhere (Squarespace, Namecheap, Cloudflare, Google Domains). Point the A record at your Oracle VM's public IP.
  3. SSH into the VM and install: Node.js, Caddy, Ghost CLI, then Ghost itself. Add a swap file if you're on the 1 GB instance.
  4. Configure Caddy — two lines in /etc/caddy/Caddyfile that point your domain at Ghost's port. Caddy handles HTTPS automatically.
  5. Open firewall ports — Oracle's Ubuntu image blocks ports 80 and 443 by default. You need to add iptables rules AND open them in the Oracle security list.
  6. Set up Brevo for email — sign up at brevo.com, copy your SMTP credentials, update Ghost's config.production.json, restart Ghost.
  7. Build your theme locally with Claude Code, zip it, upload it to the server, activate it.
  8. Create your admin account at yourdomain.com/ghost/ and start publishing.

That's it. A full-service website with blog, newsletter, email sending, memberships, payments, and custom design — for the price of a domain name.

The philosophy

I'm tired of paying for SaaS tools where I use 20% of the product and pay 100% of the subscription. Ghost gives me a blog, a newsletter, a members system, and a payment gateway — all in one open-source package that I own and control.

Oracle gives me a server to run it on for free. Caddy gives me HTTPS for free. Brevo sends my emails for free. Claude Code built the whole thing in one session.

This is what Claude Code Pirates is about: building real tools instead of renting them. If you want a site like this, grab Claude Code and start building. The classrooms on Skool will teach you how, or the cohort will fast-track you.

Either way — stop paying subscriptions for things you can build yourself.