A quick guide on how to set up a blog just like this one on GitHub Pages.

How to: GitHub Pages Jekyll-based Blog

The original idea for this blog came from a problem. I had just spent an entire morning trying to figure out how to deploy Autodesk 2026 products to Intune with proper (un)install commands. The solution I had come up with was simple enough once I had put in the hard work to find the proper ODIS flags, UUIDs, etc but hard to get to that point. During this process I thought to myself, “Surely I can’t be the only one who thinks this is too complicated?” As it turns out, I was. I could not find a guide anywhere and no mentions of people running into the same issues I was. So when I figured it out, I decided I needed to document it for the world. That post is coming soon.

I thought it would be easy. After all, it just needed to be a simple text-based static website so AI bots could crawl it on behalf of sysadmins around the world (does anyone even go to websites themselves anymore? /s). I was right, it is super easy. Really, you can do it in 5 minutes. Better yet, it costs nothing and there is no need for you to manage any infrastructure. It looks clean and is nice and snappy, just take a look around at this very site.

This guide will show you how I set up my site, including themes and pages. The joy of this setup is that you are free to do with it what you please so if you don’t like how I’ve done it, simply change it up. Anyway, enough yapping, here is how to deploy your own simple blog on GitHub pages:

The Guide:

Prerequisites:

  • A GitHub account
  • A text editor or IDE
  • Git installed

Step 1:

  • Create a repository named “your-github-username.github.io”
  • Clone your repo

Step 2:

  • Create the basic files and folder structure:
    • _config.yml:

      # Site settings
      title: My Blog
      email: myemail@mydomain.com
      description: >-
        A collection of things.
      baseurl: ""
      url: "https://my-user-name.github.io"
      
      # Build settings
      theme: minima
      markdown: kramdown
      
      # Plugins
      plugins:
        - jekyll-feed
        - jekyll-seo-tag
      
      # Display settings
      show_excerpts: true
      # Social links (optional - remove if not needed)
      github_username: my-user-name
      
      # Navigation order - Make sure to update if new pages are added
      header_pages:
        - index.md
        - posts.md
        - about.md
      
      # Default front matter
      defaults:
        - scope:
            path: ""
            type: "posts"
          values:
            layout: "post"
            author: "My Name"
      
      # Exclude files from processing (I like to exclude Claude)
      exclude:
        - CLAUDE.md
      
    • about.md:

      ---
      layout: page
      title: About
      permalink: /about/
      ---
      
      # About This Blog
      
      This blog is my blog
      
      Put some stuff here. Talk about yourself.
      
      No I am not writing more.
      
      ## This Site
      
      Built with Jekyll and hosted on GitHub Pages.
      
      ---
    • index.md:

      ---
      layout: default
      title: Home
      ---
      
      # Welcome to Blog
      
      This is the front page! So make sure it is nice and pretty! And remember: This is all markdown based so you can do *whatever* you _want_.
      ## Headers
      
      And **more**!
      
      ## Recent Posts
      
      <ul>
        {% for post in site.posts %}
          <li>
            <span class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</span>
            <h3>
              <a class="post-link" href="{{ post.url | relative_url }}">
                {{ post.title | escape }}
              </a>
            </h3>
            {% if post.excerpt %}
              {{ post.excerpt }}
            {% endif %}
          </li>
        {% endfor %}
      </ul>
      
    • posts.md:

      ---
      layout: page
      title: All Posts
      permalink: /posts/
      ---
      
      {% assign postsByYear = site.posts | group_by_exp: "post", "post.date | date: '%Y'" %}
      
      {% for year in postsByYear %}
      ## {{ year.name }}
      
      {% assign postsByMonth = year.items | group_by_exp: "post", "post.date | date: '%B'" %}
      {% for month in postsByMonth %}
      ### {{ month.name }}
      
      <ul>
      {% for post in month.items %}
        <li>
          <span class="post-meta">{{ post.date | date: "%b %-d" }}</span> -
          <a href="{{ post.url | relative_url }}">{{ post.title | escape }}</a>
        </li>
      {% endfor %}
      </ul>
      
      {% endfor %}
      {% endfor %}
      
      
    • Create _posts folder and put a YYYY-MM-DD-example-post.md file in it.

    • At the end your folder should look similar to this:

      .
      ├── about.md
      ├── _config.yml
      ├── index.md
      ├── _posts
      │   └── 2025-10-09-example-post.md
      ├── posts.md
      

Optional: Step 3: Local Testing

  • Add Gemfile to project root:
    • Disclaimer: The following Gemfile was generated by AI. I have tested on both Arch Linux and Windows. I don’t know much about ruby (yet), so AI was the next best choice

      source "https://rubygems.org"
      
      # GitHub Pages gem includes Jekyll and plugins
      gem "github-pages", group: :jekyll_plugins
      
      # Ruby 3.4+ compatibility
      gem "erb"
      
      # Optional: Windows and JRuby support
      gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
      gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin]
      
  • Then run bundle install to install dependencies
  • Finally run, bundle exec jekyll serve to start. If you get an error about future posts append --future to the end. Also double check the date, time, and timezone at the top of the post.
  • Visit http://localhost:4000
  • Changes will occur automatically, simply refresh.
  • I also suggest adding a .gitignore to keep dev stuff out of the production repo:
    • _site/
      .sass-cache/
      .jekyll-cache/
      .jekyll-metadata
      vendor/
      .bundle/
      Gemfile.lock
      *.gem
      .DS_Store
      
      # Claude Code
      .claude/
      

Step 4:

  • Push to GitHub (git add . && git commit -m "commit message" && git push origin main)
  • Your site will be accessible at https://your-user-name.github.io in a few minutes.
  • If after a few mins it still has not loaded, double check your Pages settings under Settings in your repo.

Step 5:

Enjoy! Your site is up and running! Check out the GitHub Pages and Jekyll docs for more info.