GitHub Pages-Starter Pack + Extended Resources
This content is open source. Help improve it.
I started collecting links in a text file, back when I first started to use GitHub pages. There were many resources available on how to use jekyll, but not so many on how to use GitHub pages.
Github makes it easy to get started web-publishing. With the click of a button, you can have a simple web-page live, requiring only markdown skills, that anyone can learn on the go.
I started out clicking on GitHub’s GUI, and each new feature I wanted to enable required a little more learning, and GitHub Pages is set up so that, if you decide to, you can gradually progress from content creator to web-developer.
If you don’t want to think about web-development, and simply want your markdown files to look beautiful once published, github pages can help you do that too.
The number of technical subjects I’ve begun to learn is incredible, thanks to GitHub and it’s dedicated community of open-source creators.
Getting Started
Before you start using Jekyll or any other static site generators, it’s helpful to understand how GitHub pages works.

In your repository settings you’ll find various options of where to publish your site from.

Whichever of those options you choose, you can drop an index.html in the root of whatever location you chose in the above settings, and that site will be published.
If you have other posts or pages, you can assign one of them the root permalink, in its frontmatter, and in this case you do not need index.html
Example: permalink: /
Repository Naming Conventions
The first repository for your web-page must be named like so: username.github.io. For example, the repository for my personal page is called infominer33.github.io. Simply create a new repository, and if your github username is @awesomesauce then you would create a new directory named awesomesauce.github.io.
Every other repository you own can also be made into its own web-page, that will published off of your user page, with the same name following your domain. So if you have a repository called, /Dynamite and you go into settings select pages to publish from the master branch, then that page will be found at https://awesomesauce.github.io/Dynamite.
So github.com/didecentral/didecentral.github.io is published at decentralized-id.com, because I have a custom domain. But it can still be found at, infominer33.github.io/DIDecentralized.
Following these steps, so far, is all without jekyll, just html, css, and javascript.
Classic Themes
You can install ‘classic themes’ simply by copying (or forking) their repository to a space you control, and change them by editing their files manually. These are just files and folders, with everything where you can see it.
- drjekyllthemes.github.io (classic ‘files and folders’)
- ChristopherA/simplest-github-page
- prose/starter
- kinlane/beforeeighteen (template for presentation style pages.)
Resources
- Github Pages Community Forum
- https://pages.github.com/versions/ - These plugins can be used via gh-pages.
- Configuring a Publishing Source for GitHub Pages
- help.github.com - User, Organization, and Project Pages
- Getting started with GitHub Pages: Part 4 – Customizing your Pages site
- Clearing Up Confusion around Baseurl
Jekyll
What separates ‘classic themes’ from jekyll themes is a configuration file called _config.yml. This lets jekyll know how to build your site, and it lets github know it can be built.

- Jekyll README
- Jekyll Configuration options
- Jekyll - Cheat Sheet
- Jekyll Community Forum
- Jekyll - Pagination Docs
- Jekyll - Navigation Tutorial
- Jekyll - Static Site Generator - Tutorial Youtube Playlist (2017)
- GitHub Pages and Jekyll - These videos teach you how to use GitHub Pages to create and manage websites, docs, and Jekyll blogs (2020)
- planetjekyll
Official GitHub Pages Themes
The simplest way to use jekyll\github-pages is to choose one of the official GitHub pages themes.

Those basic github themes are mostly for developers who want a page to put up for a software project, or anyone who just wants a basic blog to get started learning. Using the theme chooser, you can get started writing blogs immediately, and begin learning the basics of how jekyll sites are configured.
Once installed, I cloned those repos locally so its easier to see how everything works. Then, if I want to configure a file that’s not in my repository, I have a copy nearby. You can grab the _layouts/default.html, put it in your repo, and get a feel for how configuring that template shapes your entire site. But then you configure individual pages, and parts of your site to display differently.
GitHub Pages has the following themes built in, you can begin learning with a few clicks:
After you’ve learned the ropes, it’s easy to bring any content you created to a new theme.
Create an index.md
Although pages will build an index.html from your readme.md, pages will not behave as expected if you try to do any configuration or additional optimization with only readme.md.
In that index.md you need to include front matter:
---
layout: default
---
There is a plugin that will builds index files from all the readme.md files of your repository.. but it has trouble creating an index.html from your repositories primary README.md.
Finding Jekyll Themes
There are tons of themes available for Jekyll… it’s just not neccessarily easy to figure out how to use them, when you’re first learning. Especially because they’ve all been built with\for different versions of Jekyll.
After I find a theme I like, I fork it and then go to settings and choose master, docs, or gh-pages, depending on how the site is designed, to make sure it’s working. I’ve spent a lot of time configuring themes I didn’t verify I could get running first. Don’t do that :)
- github.com/topics/jekyll-theme
- planetjekyll/awesome-jekyll-themes (gem-based)
- themes.jekyllrc.org
- Jekyll Theme Showcase
- techgaun.github.io/active-forks - Find active forks of your favorite GitHub repos.
Minimal Mistakes
When I was first looking for a jekyll theme, I couldn’t get away from this theme in google search results, and had a lot of trouble getting others to work. Minimal Mistakes is probably the most robust and reliable jekyll theme available.
Not only that, it has excellent documentation! You can find pretty much everything you need to run Minimal Mistakes in the Quickstart Guide, Sample Posts and Collections, along with their corresponding files on Github.
Minimal Mistakes is forkable to create a working site, and its a gem-based theme.
- minimal-mistakes/docs/quick-start-guide
- Sample Posts
- Sample Collections
- mmistakes/minimal-mistakes

- Minimal Mistakes remote theme starter
- mmistakes/minimal-mistakes-algolia-search - reference if you have problems enabling search.
- mmistakes/jekyll-theme-unit-test
- Minimal Mistakes Navigation Examples
- Minimal Mistakes - Post Archive with Feature Rows [source]
- minimal-mistakes/markup-syntax-highlighting/
I have my own demo site with lots of detailed instructions on how I set them up, you can check out here: web-work-tools.github.io/minimal-mistakes/
Other Jekyll Themes I Like
Here are some themes that have caught my eye, and I know they work.
- Type on Strap - Source
- Beautiful Jekyll - Source
- Feeling Responsive - Source
- Just the Docs
- Documentation Theme Jekyll
- projectpages.github.io/project-pages/
- bradleytaunt/lightspeed
- era.yayd.in/jekyll-bulma/
- https://ndrewtl.github.io/airspace-jekyll/
- github/personal-website
Code that’ll help you kickstart a personal website that showcases your work as a software developer.

- polyglot.untra.io - multi-lingual publishing.
- hydecorp/hydejack
Other @mmistakes Themes
Setup
Front Matter
Layouts
Layouts are preconfigured page templates. When I started, it was too much to think about layouts, and I would use “single” and “page”. Now that I am using blog posts.. (because they populate your RSS feed, and increases their portability) I’m also using the Home layout:

- https://jekyllrb.com/docs/step-by-step/04-layouts/
- documentation-theme-jekyll/tag_special_layouts.html
Collections
Plugins
- jekyllrb.com/docs/plugins/installation/
- planetjekyll/awesome-jekyll-plugins
- Jekyll-Target-Blank
- https://github.com/jekyll/jekyll-mentions/
- Github Flavored Emoji for Jekyll
- Adding Jekyll Plugins to a GitHub Pages Site - help.github.com
- Creating Custom 404 page
- Implemented the “Edit this page” feature. jekyll#3495
- Jekyll Redirect Plugin
Use redirect_from: internal/url to change the location you are publishing, but keep old links. Use redirect_to: https://external.url to send visitors somewhere else (perhaps you want it to live on another site, but not lose your valuable links :)
Domains
- Configuring a custom domain for your GitHub Pages site
- Using Custom Domain for Github Pages
- namecheap.com - How do I link my domain to GitHub Pages
Customizations
- Justin James - Jekyll Category
- Social Media Share Bar
- Validating Links and Images
- longqian.me/ -Metamask Donation Button.
- Simple Share buttons for Jekyll blog
- Embed files from a github repository onto your page.
- Redirecting GitHub Pages after a repository move
- Hacking a Routing Component in Jekyll
- Multiple Authors for the Same Post
- Setup GitHub Pages “gh-pages” branch and “master” branch as subfolders of a parent project folder (“grandmaster”).
- 13 Steps to a Faster Jekyll Website
- benbalter/jekyll-style-guide
Comments
- Static Site Comments: A Jamstack How-To
- Github Issues for Blog Comments
- A repo you can use to work-around GH issue comment request limmits.
- Various ways you can add comments to your static site
- Add comments to your jekyll powered blog
- Setting up Staticman Server
- new feature! added comments to this static website
- Going static part 2: static comments
Search
- Elasticsearch for Jekyll
- Adding Custom Google Search
- github.com/algolia/jekyll-algolia
- community.algolia.com/jekyll-algolia/blog.html
- https://www.algolia.com/doc/
SEO
Jekyll-SEO-Tag
- Search Engine Optimization for Github Pages - help.github.com
- jekyll/jekyll-seo-tag
- pmarsceill/jekyll-seo-gem
- Override default jekyll-seo-tag template
- Tips to Optimize Jekyll SEO
- 10 Must do Jekyll SEO optimizations
Open Graph, Twitter Cards, Favicons and More
- Open Graph Tags, Twitter Cards, Rich Pins
- A basic tutorial on “How to get the most out of embeds?” for a discord-friendly website! (supports og values)
- Check how other apps see your site - Debug your URLs against oEmbed, Twitter Cards, Open Graph and Iframely specs
- realfavicongenerator.net
The strict minimum for the master picture is 70x70. Your picture is 225x225, which is ok. However, it is recommended to use a picture of at least 260x260. If you still want to use your picture, some of the derivated favicons will not be generated, such as the high resolution tile for Windows 8 / IE 11.
- ogp.me - Open Graph Webpage (really good resource for Facebook and beyond. (great links at bottom.)
- developers.google.com - Breadcrumbs

- Googles guide to enhancing your site’s metadata
- Twitter Card Validator
- About Cards - developer.twitter.com
- https://github.com/jekyll/jekyll-mentions/
Gem Based Themes
Gem files are ruby packages that contain all of the files necessary for building your site, allowing you to keep your repository un-cluttered, and keeps your site up to date, when the gems developer makes updates.
If you want to change a file that’s in the gem, you just create the directory and put the file where it goes, to configure as you wish.
Until GitHub Actions were introduced, you needed to Install jekyll and build them locally, to the docs directory, which you may have noticed as an option in your repository settings.
For user or organization pages, you can only publish from the master directory. So, this will only work for projects other than your homepage, or your organizations homepage.
Although that’s consistant with everything I’ve read, in practice I’ve found that after forking minimal mistakes, and setting up the gemfile, it will build the site for me. I think the idea is that once the site is completely built, with a gemfile and a gemfile.lock, then GitHub Pages uses jekyll to build any updates when you change it’s content\html\css\includes\layouts.
(see decentralized-id/decentralized-id.github.io’s: ‘_config.yml’) and gemfile for reference)
There’s also using the gh-pages branch, but that’s getting a little more technical.
Until you’ve set up a few different sites, and figure out the ins and outs, each new site takes some tinkering to get working.
Build with Jekyll Locally
You will find that GitHub error messages are not very descriptive. Buidling your site locally is the best way to figure out why GitHub Pages can’t build your site.
_config.yml
You can set the destination in your _config.yml, otherwise jekyll will build to the _site directory, which is usually added to your .gitignore file.
destination: docs
If you’re publishing from the docs directory, be sure and don’t add that to your .gitignore, since you want your website uploaded to GitHub to be published..
Gemfile
Then add the gem and its source, also add any plugins you are using:
source 'https://rubygems.org'
gem "minimal-mistakes-jekyll"
gem "jekyll-paginate"
gem "jekyll-sitemap"
gem "jekyll-gist"
gem "jekyll-feed"
gem "jemoji"
gem "jekyll-include-cache"
Install and Build the Site
Hopefully you have installed git, by now. You’ll need that to push any local changes to GitHub.
Then use bundler to install the theme
bundle update
bundle install
Build gives an error message if the build fails
bundle exec jekyll build
Serve builds and “serves” a local browsable copy
bundle exec jekyll serve
Trace gives details on errors (but won’t always show your problem)
bundle exec jekyll build --trace
Verbose… you get the idea.
bundle exec jekyll build --verbose
Resources
- bundler.io
- Setting up You GitHub Pages Site Locally with Jekyll
- Adding a Gem to your Gemfile - help.github.com
- Run a Specific Version of Bundler
- Can get older themes to work if you use the right verion of bundler (found in gemfile.lock).
- gjtorikian/html-proofer - you got broken links bruh
Remote Themes
This makes it simpler to keep your source files up to date. However, it is much slower than using gems to build locally (which only really matters if your site has a lot of content).
plugins:
- jekyll-remote-theme
remote_theme: benbalter/retlab
Essentially, if you’re just editing files on github, you should just add those lines to your _config.yml along w an index file and Jekyll should build your site.
Technical
Liquid

- Shopify - Liquid
- Jekyll Variables and Liquid Template Tags-Cheatsheet
- Introduction to Liquid for Jekyll
- How to use Liquid Syntax in Jekyll?
Data
- Data Files - jekyllrb
- Working with Jekyll data example site - BillRaymond/jekyll-data-example
- Accessing static files in Jekyll
- ashmaroli/jekyll-data
- How to easily use Airtable Data in Jekyll
- mnyrop/pagemaster
- WAX - Reuse
Wax is inspired by FAIR data principles, and as such strives to make its collections findable, accessible, interoperable and reusable.
The demo site comes with a specific _include called interactive_metadata_table to help you make pages like this one complete with interactive DataTables and downloadable CSVs of collection metadata.
- Display Jupyter Notebooks with Jekyll
- Managing data with Jekyll
- 18F/jekyll-get
- HOW I CREATED A SIMPLE DBMS USING GITHUB, JEKYLL, PROSE AND HEROKU
- Google Sheet To Github Website Lesson
JSON
- A JSON content feed for Jekyll
- Counting and JSON output in Jekyll
- Jekyll — Convert Full YAML Front-matter to XML/JSON
- Inlining JSON in a Jekyll Liquid Template
- Jekyll JSON API
- JSON Feed Viewer
API Evangelist
- WHAT IS OPENAPI? - OpenAPI is a YAML / JSON specification for describing the surface area of web APIs.
- Simple APIs With Jekyll and Github With Data Managed via Google Spreadsheets
- Providing YAML driven XML, JSON, and Atom using Jekyll And Github
- Google Spreadsheet To YAML On Jekyll
- Using Github Repos And Jekyll As A Data Store
- My Github Micro Tool Base
- OpenApi Toolbox Api Evangelist - Docs
- kinlane/OpenAPI-Specification
Automation
You can use GitHub actions or other CI to build your site automatically when you push to the repository and\or on a schedule. There are many other possibilities for creating content automatically based on web-events, and using staticman for forms that do more than just comments.
- Alternatives to Heroku
- benbalter/jekyllbot - Listens for GitHub post-recieve service hooks messages, runs jekyll, and pushes the results back to GitHub.
- automate-github-pages-ifttt-glitch.html
- GH Pages Actions
- Huginn - Create agents that monitor and act on your behalf. Your agents are standing by!
- Staticman
- eduardoboucas/staticman
Indieweb
This is beyond the scope of a GitHub pages post, but I can’t help but adding a few links to indieweb. If you are publishing a personal blog, independent from an enterprise, then you are part of the indieweb.
web-work-tools.github.io/indieweb/
- indieweb.org
- Micropub
- IndieAuth
- miklb/jekyll-indieweb
- Static Site Generators & the IndieWeb
- Jekyll and the Indieweb
- Implementing the Indieweb on a static website - Sending and receiving Webmentions and Micropub on a static site
- voxpelli/webpage-micropub-to-github/
