🚀 From Zero to Live: Setting Up My Jekyll Blog with GitHub Pages and AWS Route 53
How I built and deployed a pro-grade Jekyll blog in 48 hours with GitHub Pages and AWS Route 53.
In 48 hours I went from zero to a fully deployed, professional blog at datainsidedata.com.
This wasn’t just a “hello world” experiment. I wanted a lean, pro-grade stack for my LLC using:
✔ Jekyll (static site generator)
✔ GitHub Pages (free hosting)
✔ AWS Route 53 (custom domain + DNS)
This post + video will show you exactly how I did it, what I learned, and how you can replicate (or improve) the setup for your business, nonprofit, or personal brand.
🎥 Watch it here: [Embed your video link]
🛠️ My Stack
Tool | Purpose |
---|---|
Jekyll | Static site generator |
GitHub Pages | Free hosting for site |
AWS Route 53 | DNS + custom domain |
VS Code | Local development |
datainsidedata.com | My custom domain |
💡 Why Jekyll Instead of Just HTML/CSS/JS?
When I started this, I asked myself: “Why not just code a static site by hand?”
Here’s why I chose Jekyll:
🚀 1. Built for Blogs
Jekyll was literally designed for blogs. It supports:
- Markdown posts
- Categories & tags out of the box
- Auto-generated archive & pagination
- Clean permalinks like
/2025/07/12/why-jekyll.html
With pure HTML/CSS/JS, I’d have to hand-code all of that.
💎 2. Minimalist and Professional
Jekyll doesn’t need a heavy backend (no PHP, no databases).
It’s just static files—fast, secure, and deploys beautifully on GitHub Pages.
🧰 3. Gems and Themes = Less Reinventing the Wheel
- The Minimal Mistakes theme gave me a professional design instantly.
- Gems like
jekyll-feed
andjekyll-seo-tag
handle RSS feeds & SEO for me.
Pure HTML/CSS/JS? I’d be reinventing:
✔ Sitemap.xml
✔ RSS feed
✔ SEO metadata
✔ Responsive layouts
💨 4. One Command → Whole Site Built
Jekyll lets me run:
bundle exec jekyll build
…and it renders all posts, layouts, and assets into the _site
folder, ready for deployment.
In a pure static setup, I’d manually copy/paste and keep track of every link. 😬
📦 Initial Setup: Jekyll + Minimal Mistakes Theme
1️⃣ Install Ruby, Bundler, and Jekyll
gem install bundler jekyll
2️⃣ Create a new Jekyll site
jekyll new datainsidedata-website
cd datainsidedata-website
bundle install
3️⃣ Add the Minimal Mistakes theme for a clean, professional look
4️⃣ Configure _config.yml
- Set site title, description, author info
- Enable pagination & pretty permalinks
- Set up categories & tags
📂 Project Structure (before build):
_data/
_includes/
_layouts/
_pages/
_posts/
_site/ (auto-generated by Jekyll build)
🌐 Custom Domain with GitHub Pages + AWS Route 53
🗂 Private + Public Repo Workflow
Since GitHub Pages doesn’t serve from private repos unless you pay for Pro:
- Private repo:
did-site-private
(holds full Jekyll source) - Public repo:
did-site-public
(hosts built site for Pages)
👨🏾💻 Local workflow:
# Build site
bundle exec jekyll build
# Push to public repo
cd _site
git init
git remote add origin https://github.com/dataeden/did-site-public.git
git add .
git commit -m "Deploy"
git push -u origin main
🏷️ AWS Route 53 DNS Setup
✅ Add A records:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
✅ Add a CNAME file in the public repo:
datainsidedata.com
✅ Verify domain with GitHub:
Add a TXT record in Route 53 like:
_github-pages-challenge.datainsidedata.com TXT "abc123xyz456"
✅ Enable HTTPS in GitHub Pages after TLS cert provision.
⚡ Sneak Peek: Automating with GitHub Actions (No More _site Pushes!)
Here’s the workflow I’m planning:
📂 .github/workflows/deploy.yml
name: Build and Deploy Jekyll Site
on:
push:
branches:
- main # Watch for changes in private repo
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout private repo
uses: actions/checkout@v3
- name: Setup Ruby + Jekyll
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
- name: Install dependencies
run: bundle install
- name: Build site
run: bundle exec jekyll build
- name: Deploy to public repo
uses: peaceiris/actions-gh-pages@v3
with:
github_token: $
publish_dir: ./_site
publish_branch: main
destination_repo: dataeden/did-site-public
🎯 With this in place:
- Push to
did-site-private
- GitHub Actions auto-builds & deploys to
did-site-public
- No more manual
_site
pushes 🚀
🚨 Lessons Learned
💥 _pages folder pain: Jekyll didn’t respect links until I restructured pages.
🔥 Custom nav bar: Built my own in bash _includes/header.html + _includes/nav.html.
🕒 DNS propagation: Patience and coffee are dev tools too.
🎯 The Result
✅ Live at datainsidedata.com
✅ Clean navigation, custom logo, HTTPS-secured
✅ Learned Jekyll + DNS at a pro level
📝 What’s Next?
✔ Publish more posts (like this one!)
✔ Add Google Analytics
✔ Fully automate deploys with GitHub Actions
✔ Share more dev journey content
❤️ About the Author
🔥 I’m Fari, founder of Data Inside Data LLC.
Here I share tools, insights, and lessons from building cool things in tech & data.
📺 Watch the full video walkthrough → [Embed link here]