McGarrah Technical Blog

Jekyll Website Optimization for GitHub Pages - Part 1

22 min read

After running this Jekyll-based website for a couple years (since July of 2023), I’ve learned valuable lessons about optimizing Jekyll sites for GitHub Pages. This blog initially started as a consolidation of several blog websites I’d published over the years. This is Part 1 of a two-part series covering the foundational optimizations that have made the biggest difference for my homelab blog.

The Journey So Far

This website started as a fork of the excellent Contrast theme by Niklas Buschmann. While the theme provided a solid foundation, running a technical blog with 100+ posts revealed areas for improvement in performance, SEO, and user experience.

Current Website Statistics

Performance Optimizations Implemented

1. Code Copy Buttons

One of the most requested features for technical blogs is the ability to copy code snippets easily. I implemented JavaScript-based copy buttons for all code blocks:

// Add copy buttons to all code blocks
document.querySelectorAll('pre code').forEach((block) => {
  const button = document.createElement('button');
  button.className = 'copy-button';
  button.textContent = 'Copy';
  button.addEventListener('click', () => {
    navigator.clipboard.writeText(block.textContent);
    button.textContent = 'Copied!';
    setTimeout(() => button.textContent = 'Copy', 2000);
  });
  block.parentNode.appendChild(button);
});

2. Reading Time Indicator

Readers appreciate knowing how long an article will take to read. I added a reading time calculator:




  12 minute read

3. Optimized Image Loading

For technical posts with many screenshots, image optimization is crucial:

[![Image Description](/assets/images/image.png){:width="50%" height="50%" style="display:block; margin-left:auto; margin-right:auto"}](/assets/images/image.png){:target="_blank"}

This approach:

SEO Enhancements

1. Structured Data and Meta Tags

Proper meta tags significantly improve search engine visibility:

<meta name="description" content="After running this Jekyll-based website for a couple years (since July of 2023), I’ve learned valuable lessons about optimizing Jekyll sites for GitHub Pages...">
<meta property="og:title" content="Jekyll Website Optimization for GitHub Pages - Part 1">
<meta property="og:description" content="After running this Jekyll-based website for a couple years (since July of 2023), I’ve learned valuable lessons about optimizing Jekyll sites for GitHub Pages...">
<meta property="og:type" content="article">
<meta property="og:url" content="https://mcgarrah.org/jekyll-website-optimization-part-1/">

2. Sitemap Generation

GitHub Pages automatically generates sitemaps, but custom optimization helps:

# _config.yml
plugins:
  - jekyll-sitemap
  - jekyll-feed
  - jekyll-seo-tag

url: "https://www.mcgarrah.org"
baseurl: ""

3. RSS Feed Optimization

The jekyll-feed plugin generates RSS feeds automatically, but customization improves subscriber experience:

---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>McGarrah Technical Blog</title>
    <description>Technical blog covering homelab infrastructure, Proxmox/Ceph, Dell Wyse 3040, Jekyll development, and networking. Deep dives into virtualization, storage clustering, and system administration.</description>
    <link>https://mcgarrah.org</link>
    
      <item>
        <title>Jekyll Website Optimization for GitHub Pages - Part 1</title>
        <description>After running this Jekyll-based website for a couple years (since July of 2023), I’ve learned valuable lessons about optimizing Jekyll sites for GitHub Pages. This blog initially started as a consolidation of several blog websites I’d published over the years. This is Part 1 of a two-part series covering the foundational optimizations that have made the biggest difference for my homelab blog.

</description>
        <link>https://mcgarrah.org/jekyll-website-optimization-part-1/</link>
        <pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Generate Git Timesheet from Commit Logs</title>
        <description>Generate Git Timesheet from Commit Logs

I hate time tracking. Seriously. Most time tracking tools require you to remember to start timers, categorize work, and generally interrupt your flow to feed some system that’s probably going to be wrong anyway. But when you’re freelancing or need to report hours on projects, you’re stuck with it.

So I built a Python tool that generates timesheets from git commit history - because your commits are already there, they’re timestamped, and they actually reflect when you were working on stuff.

</description>
        <link>https://mcgarrah.org/generate-git-timesheets-python-module/</link>
        <pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Enabling SMART Monitoring on Seagate USB Drives</title>
        <description>USB drives are notorious for hiding their SMART data behind finicky USB-to-SATA bridges. If you’ve ever tried to check the health of a Seagate USB drive and gotten frustrated with “unsupported field in scsi command” errors, you’re not alone.

After wrestling with several Seagate drives in my homelab, I finally figured out the magic incantations needed to get SMART data working. Here’s how to do it properly.

Note: The decision to not allow this in Linux as a default was done for a good reasons. You are playing with fire as some drives behave erratically. I have not experienced this with recently purchased USB Drives, but older ones did have quirks and issues. So buyer beware.

</description>
        <link>https://mcgarrah.org/usb-drive-smart/</link>
        <pubDate>Sun, 26 Oct 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Dell Wyse 3040 eMMC Storage Health Monitoring</title>
        <description>I found out awhile ago that eMMC storage is a different thing entirely when it comes to health monitoring. This is especially true when you’re booting from it like on the Dell Wyse 3040s of which I have several in my homelab. The goal is to get some status information on the eMMC storage health, but the usual SMART utilities don’t work on eMMC.

root@pve1:~# smartctl -H /dev/mmcblk0 -d auto
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.8.12-1-pve] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

/dev/mmcblk0: Unable to detect device type
Please specify device type with the -d option.


Turns out eMMC has its own health monitoring system that’s actually pretty useful once you know how to access it. I figured I would share my experience since it took some time to figure out. Maybe this will help someone else.

</description>
        <link>https://mcgarrah.org/dell-wyse-3040-emmc-monitoring/</link>
        <pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Optimizing Ceph Performance in Proxmox Homelab</title>
        <description>Performance tuning Ceph in a homelab environment presents unique challenges, especially when running on USB storage and constrained hardware. After dealing with performance issues during cluster rebalancing and OSD expansion, I’ve learned valuable lessons about mClock configuration, IOPS optimization, and the realities of USB 3.0 storage performance.



</description>
        <link>https://mcgarrah.org/proxmox-ceph-performance/</link>
        <pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Managing Ceph Nearfull Warnings in Proxmox Homelab</title>
        <description>When running Ceph in a homelab environment, especially on resource-constrained hardware like my Dell Wyse 3040 cluster, managing storage capacity becomes critical. Understanding Ceph’s Nearfull warnings and how to respond to them can prevent your cluster from going read-only unexpectedly.

</description>
        <link>https://mcgarrah.org/proxmox-ceph-nearfull/</link>
        <pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Proxmox 8 Lessons Learned in the Homelab</title>
        <description>I’ve been running Proxmox in my homelab since version 7.4, and the journey to Proxmox 8.2.2 was to say the least… educational. Let me share some hard-won lessons that might save you some headaches. These even apply to the Proxmox 9 upgrades as well which I have not scheduled in my cluster yet. I’m pretty sure I’ll have updates when I get to that upgrade to share.

</description>
        <link>https://mcgarrah.org/proxmox-8-lessons-learned/</link>
        <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Implementing GDPR Compliance for Jekyll Sites: A Real-World AdSense Integration Story</title>
        <description>A detailed walkthrough of implementing GDPR cookie consent for Jekyll sites with Google AdSense and Analytics, including debugging challenges and solutions.</description>
        <link>https://mcgarrah.org/implementing-gdpr-compliance-jekyll-adsense/</link>
        <pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Adding Ceph Dashboard to Your Proxmox Cluster</title>
        <description>The Ceph Dashboard is incredibly useful for monitoring your cluster’s health, but setting it up on Proxmox isn’t as straightforward as the documentation suggests. After wrestling with SSL certificates and password policies, here’s how to get it working properly.

Why You Want the Ceph Dashboard

The dashboard gives you a web interface to monitor your Ceph cluster without SSH’ing into nodes and running CLI commands. You can see OSD status, pool usage, performance metrics, and cluster health at a glance. It’s essential for any serious homelab running Ceph. Or if you are doing something unusual like use USB Drives for your storage media and want additional metrics for performance evaluation. I also have fast SSDs for my DB/WAL with the USB Drives for Data.

</description>
        <link>https://mcgarrah.org/proxmox-add-ceph-dashboard/</link>
        <pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Upcoming Articles Roadmap: September - December 2025</title>
        <description>I’ve got a pile of articles I want to get out before the end of 2025, and I’m trying to stick to at least one post per week. That’s roughly 16 more articles between now and December, which sounds doable if I don’t get distracted by shiny new projects.

</description>
        <link>https://mcgarrah.org/upcoming-articles-roadmap/</link>
        <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Using Github Actions with pip-audit to audit pip library versions</title>
        <description>I’ve got several Python and TypeScript projects scattered around that need constant dependency babysitting. Dependabot does a decent job but keeps missing Python pip security issues that pip-audit catches. The problem is pip-audit wants everything pinned to exact versions, but I prefer flexible &gt;= constraints in my requirements files.

After getting tired of manually running security audits and then forgetting about them for months, I built this GitHub Actions workflow to handle it automatically. You can see it in action on my Shiny Quiz repository and Django demo application.

</description>
        <link>https://mcgarrah.org/github-actions-pip-audit-pr/</link>
        <pubDate>Tue, 09 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Windows Sandbox for Safe Testing</title>
        <description>I’ve been doing more experimental stuff on my Windows 11 laptops lately - testing sketchy PowerShell scripts, trying out random software, and generally doing things that could completely wreck my system. While I have disk images for recovery, that’s a nuclear option that would cost me a day or two of rebuilding.

Turns out Windows has had a built-in solution for this exact problem: Windows Sandbox. It’s basically a lightweight, disposable VM that resets itself every time you close it. Perfect for testing things without the paranoia.

</description>
        <link>https://mcgarrah.org/windows-sandbox/</link>
        <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Start the Windows screensaver with a Shortcut</title>
        <description>After my Windows 11 upgrade, I have a need for a quick way to start my screensaver but not lock my computer. So the Windows-L (lock) is not a desired options for this use-case. I want to quickly get back to my screen without logging back in.

I remember an old Windows NT tool and built-in MacOS feature called “Hot Corners” that let me do this by shoving my cursor to a corner of the screen. But I don’t want to load another tool for this. I’m using Power Toys “Mouse without Border” to link up a couple machines with virtual KVMs so the hot corners isn’t an option because of that.

So how do I solve this?

</description>
        <link>https://mcgarrah.org/screensaver-shortcut/</link>
        <pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Windows 11 Upgrade Challenges on ThinkPad T480</title>
        <description>Upgrading to Windows 11 on my ThinkPad T480 laptops turned into a performance nightmare with some unexpected solutions.

</description>
        <link>https://mcgarrah.org/win11-upgrade-challenges/</link>
        <pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>New Features: Copy Buttons, Comments, Tags, and More!</title>
        <description>I’m happy to announce a batch of new features that enhance the functionality and user experience of this blog. These improvements make the content more interactive, organized, and user-friendly. Hopefully, you like the changes.

</description>
        <link>https://mcgarrah.org/website-feature-enhancements/</link>
        <pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>ASR with PyTorch</title>
        <description>ASR with PyTorch: Exploring Phoneme Representations

I have a fascination with the sounds of languages (phonemes) and how they are processed. This came about from a project I did a few years ago in grad school. How ASR (automatic speech recognition) used to work did not include breaking down the sounds of the language and present them as pieces of the solution. You typically just got a final text representation.

I’m interested in seeing if the phonetic or phoneme representations can be pulled from the modern machine learning ASR pipelines. This is just an interest of mine with no defined goals beyond learning.

</description>
        <link>https://mcgarrah.org/pytorch-asr-example/</link>
        <pubDate>Thu, 29 May 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Introducing oneworldsync: A Python Module for 1WorldSync Content1 API Access</title>
        <description>Introducing oneworldsync

A Python Module for 1WorldSync Content1 API Access

I’m pleased to introduce a Python module I’ve developed from scratch called oneworldsync. For those who need to programmatically access product content data from the 1WorldSync Content1 API, finding a streamlined solution was challenging to say the least. The only path provided was a very simple Python example, some older PDF documentation and a reference Java SDK. I work primarily in the Machine Learning space so Python first was a priority. Those were my primary motivations behind creating oneworldsync as I stumbled towards building a library.

</description>
        <link>https://mcgarrah.org/oneworldsync-python-module/</link>
        <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Online Quiz Software for Certifications</title>
        <description>I have been studying for several technical certifications and recently an online MBA program with Exams that require studying. A goal in the back of my mind was to study for those using an application that replicates the certification and exam process. With that in mind, I started looking around for a simple test or quiz web application that lets me plugin a pile of questions in multiple-choice format with a timer as a baseline.

While, I did find a couple of promising projects, found in the Research section below, each had some downside or gaps that would require a good bit of rework to make them usable for what I wanted to accomplish. A secondary requirement is to have a somewhat modern web interface and to use a tech stack that I can use to refresh my full-stack programming skills with modern tools.

Another goal is to use this as something that is a break from studying. This little project might be the ticket by having a second thing that keeps my brain from imploding. I cannot use my proxmox clusters or ceph or even networking as those spiral out of control at every chance. This project has to be something infinitely interruptable.

</description>
        <link>https://mcgarrah.org/online-quiz-software/</link>
        <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Debian 12 SystemD nightly reboots on Dell Wyse 3040s</title>
        <description>My super lean Proxmox 8.3 testbed cluster running Ceph occasionally just decides to lockup a node based on it being incredibly limited on RAM and CPU. As much as I hate rebooting Linux/UNIX systems, this is a case where a nightly reboot of the nodes might help with reliability.

</description>
        <link>https://mcgarrah.org/dell-wyse-3040-reboot/</link>
        <pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate>
      </item>
    
      <item>
        <title>Backlog of Posts from 2024</title>
        <description>My past write up for a Backlog of Posts had all the things that I wanted to write about in mid-2024. It has been updated with links to the released posts that covered each as I finished up in 2024. I got a lot of them written but the backlog of drafts and things I wanted to write about also grew as I picked off drafts and added new posts.

</description>
        <link>https://mcgarrah.org/backlog-of-posts-2024/</link>
        <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      </item>
    
  </channel>
</rss>

Content Management Improvements

1. Tags and Categories System

Organizing technical content requires a robust tagging system:

# Front matter example
---
title: "Article Title"
layout: post
categories: [technical, homelab]
tags: [proxmox, ceph, networking, hardware]
published: true
---

2. Archive Pages

Created dynamic archive pages for better content discovery:


  
  
  
    <h2>2025</h2>
  
  
    <h3>November</h3>
  
  <article>
    <a href="/jekyll-website-optimization-part-1/">Jekyll Website Optimization for GitHub Pages - Part 1</a>
    <time>November 09, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/generate-git-timesheets-python-module/">Generate Git Timesheet from Commit Logs</a>
    <time>November 02, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>October</h3>
  
  <article>
    <a href="/usb-drive-smart/">Enabling SMART Monitoring on Seagate USB Drives</a>
    <time>October 26, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dell-wyse-3040-emmc-monitoring/">Dell Wyse 3040 eMMC Storage Health Monitoring</a>
    <time>October 19, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-ceph-performance/">Optimizing Ceph Performance in Proxmox Homelab</a>
    <time>October 12, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>September</h3>
  
  <article>
    <a href="/proxmox-ceph-nearfull/">Managing Ceph Nearfull Warnings in Proxmox Homelab</a>
    <time>September 28, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-8-lessons-learned/">Proxmox 8 Lessons Learned in the Homelab</a>
    <time>September 21, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/implementing-gdpr-compliance-jekyll-adsense/">Implementing GDPR Compliance for Jekyll Sites: A Real-World AdSense Integration Story</a>
    <time>September 17, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-add-ceph-dashboard/">Adding Ceph Dashboard to Your Proxmox Cluster</a>
    <time>September 14, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/upcoming-articles-roadmap/">Upcoming Articles Roadmap: September - December 2025</a>
    <time>September 12, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/github-actions-pip-audit-pr/">Using Github Actions with pip-audit to audit pip library versions</a>
    <time>September 09, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/windows-sandbox/">Windows Sandbox for Safe Testing</a>
    <time>September 08, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>July</h3>
  
  <article>
    <a href="/screensaver-shortcut/">Start the Windows screensaver with a Shortcut</a>
    <time>July 15, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/win11-upgrade-challenges/">Windows 11 Upgrade Challenges on ThinkPad T480</a>
    <time>July 01, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>May</h3>
  
  <article>
    <a href="/website-feature-enhancements/">New Features: Copy Buttons, Comments, Tags, and More!</a>
    <time>May 31, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/pytorch-asr-example/">ASR with PyTorch</a>
    <time>May 29, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/oneworldsync-python-module/">Introducing oneworldsync: A Python Module for 1WorldSync Content1 API Access</a>
    <time>May 28, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>March</h3>
  
  <article>
    <a href="/online-quiz-software/">Online Quiz Software for Certifications</a>
    <time>March 28, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dell-wyse-3040-reboot/">Debian 12 SystemD nightly reboots on Dell Wyse 3040s</a>
    <time>March 24, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>February</h3>
  
  <article>
    <a href="/backlog-of-posts-2024/">Backlog of Posts from 2024</a>
    <time>February 17, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/power-supplies-for-gpu/">Power Supply upgrade for GPUs in the Homelab</a>
    <time>February 16, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-remove-ceph-completely/">Ceph Cluster Complete Removal on Proxmox for the Homelabs</a>
    <time>February 15, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/linux-disk-io-quick-tests/">Linux Disk I/O Performance in the Homelab</a>
    <time>February 14, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/google-wifi-with-openwrt/">Google Wifi running OpenWRT</a>
    <time>February 01, 2025</time>
  </article>
  
  

  
  
  
  
    <h3>January</h3>
  
  <article>
    <a href="/macos-outlook-copy-events/">MacOS Outlook Calendar Copy Events</a>
    <time>January 30, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/jekyll-gdpr-plugin-development/">Building a Jekyll GDPR Plugin: From Custom Implementation to Community Solution</a>
    <time>January 18, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/jekyll-pandoc-exports-plugin/">Building a Jekyll Plugin for Automated Document Exports - Part 2: Technical Implementation</a>
    <time>January 15, 2025</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/ruby-gem-release-automation/">Ruby Gem Release Automation: From Manual Hell to One-Command Publishing</a>
    <time>January 14, 2025</time>
  </article>
  
  

  
  
  
    <h2>2024</h2>
  
  
    <h3>December</h3>
  
  <article>
    <a href="/fixing-microwave/">Diagnosing a broken microwave</a>
    <time>December 10, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/java-jnlp-webui/">HP ProCurve Switch Java WebUI</a>
    <time>December 09, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>November</h3>
  
  <article>
    <a href="/isc2-cybersecurity-certification/">ISC2 Cybersecurity Certification</a>
    <time>November 18, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>October</h3>
  
  <article>
    <a href="/powerline-networking/">Powerline Networking for the Homelabs</a>
    <time>October 11, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>September</h3>
  
  <article>
    <a href="/proxmox-upgrade-issues/">Proxmox VE 8.1 to 8.2 upgrade issues in the Homelabs</a>
    <time>September 21, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>August</h3>
  
  <article>
    <a href="/proxmox-8-dell-wyse-3040-upgrade/">ProxMox 8.2.4 Upgrade on Dell Wyse 3040s</a>
    <time>August 26, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/google-doc-copy-image/">Google Documents - copy an image</a>
    <time>August 11, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dell-wyse-3040-tailscale/">Tailscale on Dell Wyse 3040 with Debian 12</a>
    <time>August 10, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/macos-sudo-touchid/">MacOS Touch ID for Sudo with TMUX and DisplayLink</a>
    <time>August 09, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-ceph-homelab-settings/">Proxmox Ceph settings for the Homelab</a>
    <time>August 08, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>July</h3>
  
  <article>
    <a href="/proxmox-8-dell-wyse-3040/">ProxMox 8.2.2 Cluster on Dell Wyse 3040s</a>
    <time>July 23, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dell-wyse-3040-debian12/">Debian 12 on Dell Wyse 3040s</a>
    <time>July 22, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dell-wyse-3040-cmos-battery/">Dell Wyse 3040 CMOS CR2032 Battery Replacement</a>
    <time>July 15, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>June</h3>
  
  <article>
    <a href="/wsl2-shared-filesystems/">Sharing file systems between WSLv2 instances</a>
    <time>June 19, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/hard-drive-costs/">Hard Drives for the Homelabs</a>
    <time>June 10, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/backlog-of-posts/">Backlog of Posts</a>
    <time>June 04, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/proxmox-8-homelab/">ProxMox 8.2 for the Homelabs</a>
    <time>June 03, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>April</h3>
  
  <article>
    <a href="/thinkpad-t480-wwan-sdd/">Thinkpad T480 WWAN SSD</a>
    <time>April 04, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>March</h3>
  
  <article>
    <a href="/life-enhancing-home-office/">Life Enhancing Home Office Items</a>
    <time>March 11, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/github-pages-jekyll-locally/">Running Github Pages locally</a>
    <time>March 10, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/procurve-2800-switches/">HP ProCurve 2800 initial setup</a>
    <time>March 09, 2024</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/ceph-rebalance/">Ceph Cluster rebalance issue</a>
    <time>March 04, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>February</h3>
  
  <article>
    <a href="/LAG-LACP-and-other-network-terms/">Aggregated Network Connections with LAG/LACP</a>
    <time>February 06, 2024</time>
  </article>
  
  

  
  
  
  
    <h3>January</h3>
  
  <article>
    <a href="/new-laptop-update/">New Laptop update</a>
    <time>January 26, 2024</time>
  </article>
  
  

  
  
  
    <h2>2023</h2>
  
  
    <h3>October</h3>
  
  <article>
    <a href="/new-but-old-laptop/">A new to me but old laptop</a>
    <time>October 27, 2023</time>
  </article>
  
  

  
  
  
  
    <h3>August</h3>
  
  <article>
    <a href="/homelab-sfp-plus-networking/">Buying a 10Gbps or higher network on a homelab budget</a>
    <time>August 22, 2023</time>
  </article>
  
  

  
  
  
  
    <h3>June</h3>
  
  <article>
    <a href="/consolidated-articles/">Along time between posts</a>
    <time>June 29, 2023</time>
  </article>
  
  

  
  
  
    <h2>2016</h2>
  
  
    <h3>April</h3>
  
  <article>
    <a href="/photosync-export-visualizer/">PhotoSynth Export and Visualizer</a>
    <time>April 25, 2016</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/letsencrypt-certificates-go-live/">LetsEncrypt Certificates go live</a>
    <time>April 25, 2016</time>
  </article>
  
  

  
  
  
    <h2>2015</h2>
  
  
    <h3>December</h3>
  
  <article>
    <a href="/ai-robotics/">Artificial Intelligence for Robotics (CS8803-001)</a>
    <time>December 21, 2015</time>
  </article>
  
  

  
  
  
  
    <h3>October</h3>
  
  <article>
    <a href="/raspberry-pi-2-builtin-led/">Raspberry Pi 2 built-in LED</a>
    <time>October 24, 2015</time>
  </article>
  
  

  
  
  
  
    <h3>March</h3>
  
  <article>
    <a href="/python-timedate-functions/">Python TimeDate functions</a>
    <time>March 19, 2015</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/rackspace-cloud-load_balancer/">Rackspace Cloud Load Balancer with Windows 2012 IIS</a>
    <time>March 11, 2015</time>
  </article>
  
  

  
  
  
  
    <h3>February</h3>
  
  <article>
    <a href="/wildcard-ssl-certificates/">Wildcard SSL Certificates</a>
    <time>February 27, 2015</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/skype-7-0-upgrade-ui-annoyance/">Skype 7.0 Upgrade UI Annoyance</a>
    <time>February 27, 2015</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/doctor-of-applied-psuedoscience/">Doctor of Applied Psuedoscience</a>
    <time>February 27, 2015</time>
  </article>
  
  

  
  
  
    <h2>2014</h2>
  
  
    <h3>August</h3>
  
  <article>
    <a href="/mininet-network-simulator/">Mininet network simulator</a>
    <time>August 25, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/meme-and-humour/">Meme and humour</a>
    <time>August 25, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/downgrade-esxi-vm/">Downgrading VMware ESXi 5.5 virtual machine hardware</a>
    <time>August 20, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/home-reno-grad-school/">Home Renovation & Graduate school</a>
    <time>August 03, 2014</time>
  </article>
  
  

  
  
  
  
    <h3>July</h3>
  
  <article>
    <a href="/more-wordpress-plugins/">More WordPress plugins</a>
    <time>July 07, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/vmware-esxi-toolchain-build/">VMware ESXi toolchain build</a>
    <time>July 06, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/wordpress-plugins/">WordPress Plugins</a>
    <time>July 01, 2014</time>
  </article>
  
  

  
  
  
  
    <h3>June</h3>
  
  <article>
    <a href="/first-post/">First Post</a>
    <time>June 22, 2014</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/certifications/">Certifications</a>
    <time>June 22, 2014</time>
  </article>
  
  

  
  
  
    <h2>2013</h2>
  
  
    <h3>July</h3>
  
  <article>
    <a href="/dlna-sony/">DLNA with Sony</a>
    <time>July 05, 2013</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/amazon-web-services/">Amazon Web Services</a>
    <time>July 05, 2013</time>
  </article>
  
  

  
  
  
    <h2>2012</h2>
  
  
    <h3>September</h3>
  
  <article>
    <a href="/cygwin-ports-binary-files/">Cygwin Ports by way of binary files</a>
    <time>September 25, 2012</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/eucalyptus/">Eucalyptus (AWS private Cloud Computing)</a>
    <time>September 04, 2012</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/aws-local-services/">AWS - Running Services Locally (a quick survey of products)</a>
    <time>September 04, 2012</time>
  </article>
  
  

  
  
  
  
    <h3>April</h3>
  
  <article>
    <a href="/nothing-to-see-here/">Nothing to see here</a>
    <time>April 27, 2012</time>
  </article>
  
  

  
  
  
  
    <h3>February</h3>
  
  <article>
    <a href="/debian-blackarmor-nas-110/">Debian on BA NAS 110</a>
    <time>February 22, 2012</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/miniDLNA/">miniDLNA</a>
    <time>February 18, 2012</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/dlna-blackarmor-nas/">DLNA server for BlackArmor NAS</a>
    <time>February 04, 2012</time>
  </article>
  
  

  
  
  
  
    <h3>January</h3>
  
  <article>
    <a href="/hardware-cleanup/">Junking Hardware / Cleaning Office</a>
    <time>January 28, 2012</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/ups-print-server/">UPS and Print Server</a>
    <time>January 26, 2012</time>
  </article>
  
  

  
  
  
    <h2>2011</h2>
  
  
    <h3>December</h3>
  
  <article>
    <a href="/serial-port-blackarmor/">Serial Port on BlackArmor NAS</a>
    <time>December 28, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/blackarmor-updates/">Seagate Black Armor NAS</a>
    <time>December 22, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/newlib-error/">Newlib error during compile</a>
    <time>December 04, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/compilation-failures/">Compilation failures</a>
    <time>December 03, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/toolchain-compiled/">Toolchains compiled</a>
    <time>December 01, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/cross-compiler-toolchain-arm/">Cross-compiler toolchain update</a>
    <time>December 01, 2011</time>
  </article>
  
  

  
  
  
  
    <h3>November</h3>
  
  <article>
    <a href="/making-sea-salt/">Making Sea Salt</a>
    <time>November 28, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/gnu-arm-toolchain-part-2/">Building the GNU ARM Toolchain: Part 2</a>
    <time>November 14, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/gnu-arm-toolchain-part-1/">Building the GNU ARM Toolchain: Part 1</a>
    <time>November 14, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/sun-java-se-embedded/">Sun Java SE for Embedded Systems (Jazelle DBX)</a>
    <time>November 08, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/reading-on-arm-arch/">Black Armor Reading on ARM Architecture</a>
    <time>November 06, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/blackarmor-status/">Black Armor status</a>
    <time>November 02, 2011</time>
  </article>
  
  

  
  
  
  
    <h3>October</h3>
  
  <article>
    <a href="/blackarmor-usb-ports/">Black Armor USB Ports on NAS</a>
    <time>October 25, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/blackarmor-todo-upa-dlna/">Black Armor: A ToDo List - UPS and DLNA</a>
    <time>October 22, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/blackarmor-nas-sysinfo/">Black Armor NAS Information</a>
    <time>October 19, 2011</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/rsync-blackarmor-nas-110/">Rsync on Black Armor NAS 110</a>
    <time>October 18, 2011</time>
  </article>
  
  

  
  
  
  
    <h3>September</h3>
  
  <article>
    <a href="/seagate-blackarmor-110-nas/">Seagate Black Armor 110 NAS</a>
    <time>September 25, 2011</time>
  </article>
  
  

  
  
  
    <h2>2010</h2>
  
  
    <h3>December</h3>
  
  <article>
    <a href="/capstone-project/">NetApp iSER Performance Evaluation Project Continuation</a>
    <time>December 01, 2010</time>
  </article>
  
  

  
  
  
  
    <h3>June</h3>
  
  <article>
    <a href="/visiting-dc/">Visiting DC</a>
    <time>June 07, 2010</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/droid-stutter-gps/">Droid stuttering GPS</a>
    <time>June 04, 2010</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/new-phones/">New phones</a>
    <time>June 01, 2010</time>
  </article>
  
  

  
  
  
    <h2>2008</h2>
  
  
    <h3>January</h3>
  
  <article>
    <a href="/music/">Music</a>
    <time>January 01, 2008</time>
  </article>
  
  

  
  
  
    <h2>2007</h2>
  
  
    <h3>February</h3>
  
  <article>
    <a href="/new-cell-phones/">New cell phones</a>
    <time>February 19, 2007</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/welcome-to-blog/">Welcome to the blog</a>
    <time>February 18, 2007</time>
  </article>
  
  

  
  
  
    <h2>2005</h2>
  
  
    <h3>July</h3>
  
  <article>
    <a href="/travel-updates/">Travel updates</a>
    <time>July 01, 2005</time>
  </article>
  
  

  
  
  
  
    <h3>June</h3>
  
  <article>
    <a href="/welcome-back/">Welcome back</a>
    <time>June 15, 2005</time>
  </article>
  
  

  
  
  
    <h2>2004</h2>
  
  
    <h3>December</h3>
  
  <article>
    <a href="/another-update/">Another update</a>
    <time>December 13, 2004</time>
  </article>
  
  

  
  
  
  
    <h3>November</h3>
  
  <article>
    <a href="/more-plans/">More Plans</a>
    <time>November 21, 2004</time>
  </article>
  
  

  
  
  
  
  <article>
    <a href="/professional-plans/">Professional Plans</a>
    <time>November 04, 2004</time>
  </article>
  
  

  
  
  
    <h2>2001</h2>
  
  
  <article>
    <a href="/devstudio/">Microsoft Developer Studio 6.0 Patches</a>
    <time>November 06, 2001</time>
  </article>
  
  

Implemented related posts based on tags and categories:



  <section class="related-posts">
    <h3>Related Articles</h3>
    
      <article>
        <a href="/generate-git-timesheets-python-module/">Generate Git Timesheet from Commit Logs</a>
        <p>Generate Git Timesheet from Commit Logs

I hate time tracking. Seriously. Most time tracking tool...</p>
      </article>
    
      <article>
        <a href="/usb-drive-smart/">Enabling SMART Monitoring on Seagate USB Drives</a>
        <p>USB drives are notorious for hiding their SMART data behind finicky USB-to-SATA bridges. If you’v...</p>
      </article>
    
      <article>
        <a href="/dell-wyse-3040-emmc-monitoring/">Dell Wyse 3040 eMMC Storage Health Monitoring</a>
        <p>I found out awhile ago that eMMC storage is a different thing entirely when it comes to health mo...</p>
      </article>
    
  </section>

GitHub Actions Workflow

Automated builds ensure consistent deployment:

name: Deploy Jekyll site to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["main"]
  # Runs at 05:00 UTC (01:00 AM EST) every day
  schedule:
    - cron: '5 0 * * *'  
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build-and-deploy:
  ...

Details for this build can be found in my repository under .github\workflows\jekyll.yml for expanded details.

This above Github Actions automation facilitates future dated articles being published since I also setup my _config.yml to not post future articles.

# _config.yml

# Future posts disabled for scheduled releases via GHA scheduled job
future: false

This combination of settings allows me to bank up several articles to post at future dates once checked into the repository.

Comment System Integration

Replaced traditional comment systems with GitHub Discussions via Giscus:

<script src="https://giscus.app/client.js"
        data-repo="mcgarrah/mcgarrah.github.io"
        data-repo-id="R_kgDOKBKIdw"
        data-category="General"
        data-category-id="DIC_kwDOKBKId84Cq3DK"
        data-mapping="pathname"
        data-strict="0"
        data-reactions-enabled="1"
        data-emit-metadata="0"
        data-input-position="bottom"
        data-theme="preferred_color_scheme"
        data-lang="en"
        crossorigin="anonymous"
        async>
</script>

Benefits:

What’s Next

This covers the foundational optimizations that every Jekyll site should implement. In Part 2 of this series, I’ll dive into:

Conclusion

These foundational optimizations provide immediate value to readers and establish a solid base for further improvements. The combination of performance enhancements, SEO basics, and content organization creates a much better user experience.

Key takeaways from Part 1:

Stay tuned for Part 2, where we’ll explore advanced optimizations and dive deeper into performance metrics and future enhancements.

References

Categories: web-development, technical