From Publish to Reader: The Content Distribution Pipeline Behind This Blog
Writing a blog post is half the work. The other half is making sure it reaches people — through RSS feeds, sitemaps, search engines, newsletters, and social sharing. Here's the full distribution pipeline for a Jekyll blog, from git push to a reader's screen.
Rebuilding My Resume Site From the Ground Up
I gutted a 2017 Bootstrap template and rebuilt my resume site with modern CSS, four purpose-built views, a Jinja2/XeLaTeX PDF pipeline, company logos, and machine-readable structured data. Here is what I kept, what I dropped, and why.
Visual Indicators for Draft and Future Posts in Jekyll
When previewing a Jekyll site locally with --drafts and --future, it's hard to tell which posts are live and which are still unpublished. I added Font Awesome icons and italic styling to the archive and home pages so drafts get a pencil and future posts get a robot — visible only during local development.
Jekyll Run Plugin: Local Development Settings That Actually Work
The Jekyll Run VS Code extension is convenient for local development, but its settings live in four different places and the defaults won't show your future-dated posts. Here's how to configure it properly, where the settings actually come from, and the _config.yml trap that silently overrides your CLI flags.
Upgrading from a Basic Favicon to a Modern Device Set in Jekyll
A single favicon.ico is no longer enough. Here is how I upgraded my Jekyll site to support high-resolution Apple Touch icons, Android manifests, and modern browser standards using ImageMagick and a few lines of HTML.
The CI/CD Pipeline Behind This Jekyll Blog
Three GitHub Actions workflows, Dependabot, and a Lighthouse config — here's the full CI/CD pipeline that builds, deploys, secures, and monitors this Jekyll blog. Including the bugs I shipped along the way.
Adding Comments to a Static Site: Why I Chose Giscus for Jekyll
Jekyll has no database. So where do comments live? I evaluated six approaches — from hosted services to custom Lambda functions — before landing on Giscus. Here's the decision process and the implementation.
Building a Custom Tag and Category Generator Plugin for Jekyll
GitHub Pages doesn't support tag or category pages out of the box. Here's how I built a custom Jekyll generator plugin that creates them automatically — and the SEO lessons learned along the way.
Jekyll's Invisible Bug: When Code Fences Don't Protect Your Liquid Examples
If you write Jekyll posts about Jekyll, your Liquid code examples will silently vanish — or crash the build. Markdown code fences don't protect Liquid tags from execution. Here's how to find every affected post, why it sneaks up on you, and the fix that actually works.
The Small Things: Polish Features That Make a Jekyll Blog Feel Professional
Dark mode, print stylesheets, haiku error pages, author bios, and the archive page — none of these are glamorous features. Each one took less than a day. Together they're the difference between a blog that looks like a default template and one that feels like someone cares about it.
Jekyll Content Plumbing: Permalinks, Reading Time, Excerpts, and Redirects
The invisible infrastructure behind a Jekyll blog — how permalink structure, reading time estimates, custom excerpt separators, pagination, and redirect handling all work together. These aren't glamorous features, but getting them wrong breaks SEO, confuses readers, and creates maintenance headaches.
Upgrading Jekyll: Two Years of Cascading Breakage
Every Jekyll upgrade broke something downstream. Ruby 3.0 dropped webrick. Jekyll 4.3 broke SASS imports. Dart Sass 3.0 deprecated color functions. Node.js 24 forced all GitHub Actions to update. Here's the full upgrade timeline and what each one taught me.
How the Sausage Is Made: Every Feature Powering This Jekyll Blog
After 130+ posts and two years of Jekyll customization, here's the complete feature set behind this blog — from Mermaid diagrams and KaTeX math to GDPR compliance, Pandoc exports, and the SEO pipeline. A look behind the curtain at what it takes to run a technical blog on GitHub Pages.
Building This Blog: Jekyll on GitHub Pages from Zero to 130+ Posts
I've been writing about technology since 2004. This blog has lived on WordPress, Blogger, and now Jekyll on GitHub Pages. Here's how I set it up, what I added along the way, and what I'd do differently if I started over.
Merging Two Jekyll Websites: Architectural Analysis and Integration Strategies
Analyzing the feasibility of merging a technical blog and resume site into a unified Jekyll website, exploring architectural challenges and integration strategies.
Managing Multiple Jekyll Sites Under One Domain: Sitemap Challenges
How to handle sitemap.xml generation when running multiple Jekyll sites under a single custom domain on GitHub Pages — and why it matters for AdSense approval.
Your Jekyll Theme Is Probably Missing head and body Tags
Many Jekyll themes — especially minimal forks — ship without proper head and body tags. Browsers don't care. Bots do. Here's how to check and fix it in five minutes.
Your Jekyll Sitemap Is 60% Garbage
I audited my Jekyll sitemap and found that 262 of 434 URLs were auto-generated tag pages, category pages, and pagination — most with a single post. Here's how to clean it up without losing anything.
Fixing AdSense Verification Without Breaking GDPR: The Script Loading Mistake
My GDPR implementation was too aggressive — it hid the AdSense script from Google's verification bot. Here's how I separated verification from ad serving while keeping GDPR compliance intact.
Improving E-E-A-T Signals for Google AdSense Approval on Jekyll
After another AdSense rejection, I shifted focus from technical fixes to E-E-A-T — Experience, Expertise, Authoritativeness, and Trustworthiness. Here's what I changed and why.
Google AdSense Approval Failure: Debugging the 'Site Isn't Ready' Rejection
Another AdSense rejection with no specific details. Documenting the debugging process, fixes implemented, and the frustration of opaque rejection messages.
Advanced Jekyll SEO Health Checks: Comprehensive Automation and Monitoring
Building a comprehensive SEO health check system for Jekyll sites with GitHub Actions, Lighthouse CI, and automated link validation - Part 2 of the Jekyll SEO series.
Jekyll SEO: Fixing Canonical URLs and Google Search Console Issues
How to resolve Google Search Console redirect warnings and canonical URL conflicts in Jekyll sites hosted on GitHub Pages.
Jekyll Mermaid Diagram Rendering: Why Client-Side Beats Plugins
How Jekyll 4.4's Rouge syntax highlighter interferes with Mermaid diagram rendering and why client-side rendering with Mermaid 11 is better than plugins.
SASS Circular Dependency Nightmare: Lessons from Jekyll Architecture
How a simple print stylesheet addition turned into a deep dive into SASS module architecture and the perils of circular dependencies.
Adding Google Custom Search to Jekyll Website
How to implement Google Custom Search Engine (CSE) on a Jekyll website hosted on GitHub Pages for better content discoverability.
Jekyll Website Optimization for GitHub Pages - Part 2
Advanced analytics, Core Web Vitals tracking, and the lessons learned from running a 100+ post technical blog — plus the remaining optimization roadmap.
Jekyll Website Optimization for GitHub Pages - Part 1
Foundational optimizations for a Jekyll blog on GitHub Pages — the changes that made the biggest difference across 100+ posts over two years.
Implementing GDPR Compliance for Jekyll Sites: A Real-World AdSense Integration Story
A detailed walkthrough of implementing GDPR cookie consent for Jekyll sites with Google AdSense and Analytics, including debugging challenges and solutions.
New Features: Copy Buttons, Comments, Tags, and More!
A batch of new features for the blog: clipboard copy buttons on code blocks, Giscus GitHub Discussions comments, a full tags and categories system, reading time estimates, and a round of security and SASS modernization fixes.
Running Github Pages locally
Getting Jekyll and GitHub Pages running locally in WSL2 Ubuntu, including the missing webrick fix for Ruby 3.0+ and using VS Code for markdown editing.
A long time between posts
Resurrecting a technical blog after seven years away — migrating old WordPress archives, Google Blogger posts, and 1990s DarkMagic.org content into a new Jekyll site on GitHub Pages.