I’ve imagined this tutorial as a series of posts, to share my experience in building a static website based on Jekyll. I hope this will be helpful to help you getting started in building your own website based on Jekyll.

In the first post I will cover the following content:

  1. Brief Summary of what is Jekyll and what are the advantages of using it
  2. Requirements and folder structure
  3. Preliminary configuration of the config.yml file
  4. Summary and next post

Disclaimer and requirements

This guide is based on MacOS.

What is Jekyll and what are the advantages of using it

Jekyll is a useful way to generate static websites that can then be served by webservers such as GitHub Pages.

Jekyll allow to generate beautiful websites without any prior coding knowledge. However, if someone is so inclined it is possible to extend its functionality with front-end frameworks and additional plugins to track, for instance, web views.

Requirements and folder structure

Ok, here we go!

Use the following commands to to move around folders, create a folder and generate a file:

$ cd [directory/folder]
$ mkdir [folder_name]
$ touch [file_name.ext]

We will need Ruby gems and Git. To test wether we have them installed we can run the following commands from Terminal:

$ git

and

$ gem

If everything works as expected, you should see the following responses from Terminal:

Git installed responseThis is part of the response when git is installed

Gem installed responseThis is part of the response when git is installed

Once everything’s in place, we can start installing the basic jekyll build. To do so, run the following:

$ gem install jekyll bundler
$ bundle install
$ jekyll new 'website_name'

For the last command, you want to change the name to the folder that will contain the files to build the website. I recommend having the following strucure:

  1. User/
    1. website_name
      1. website_name (this will be our working_folder)

Once the command has finished to run, we can see how the website looks like by running the following command:

$ bundle exec jekyll serve

This will create a local environment in your browser that allow us to see the changes we make to our website! Open a page in Chrome (or your favourite browser) at the address http://localhost:4000/ to see the starting version of the website.

I know, it looks pretty bare bone and hugly but don’t worry! Will make it much more professional.

Let’s start playing around with our config.yml

For context, the config.yml file that you find in the newly created folder is a very important file and it handles the configurations of our websites. For example, the file specifies which plugins we want to have in order to add additional functionalities to our website.

I would recommend to use a text editor from now on. My preferred editor is Visual Studio Code, but you can also use Atom or any editor you like. Ok, let’s dive into our config file.

Open the file config.yml and modify the following lines:

title: "name of your website"
email: "add your personal/work email"
description: "Add the description for your website"
baseurl: "/your_website_folder"
url: "add the future url of your website"

For some context, the url can be populated with a temporary place holder, if you don’t have your url hosted yet, as we won’t need the website to be live to design it.

Now, to remove the current theme, delete the line

theme: minima

This is the default theme that comes with jekyll installation. We will use our own theme.

In the gems section add jekyll plugin autoprefixer:

- jekyll-autoprefixer

We are going to use Sass to add CSS functionalities to our website. Let’s add a section at the end of the config.yml

sass:
  sass_dir: _sass

At this point, is also useful to add some prettification for future use. Have you ever notice that professional website show structured url like https://my_website/about ? We are going to prettify our website as well by hiding the file extension on the website page.

In the section “Build settings” add the following line:

permalink: pretty

Before moving to the next step, we want to start creating some custom variables, that will be useful while building the website. We can add the following variables before the “Build settings” section:

# these variable can be accessed using the format 
twitter_path: https://twitter.com/my_twitter
facebook_path: https://facebook.com/my_facebook
instagram_path: https://instagram.com/my_instagram
youtube_path: https://youtube.com/channel/my_youtube
github_path: https://github.com/my_github

These variables will allow us to easily add links to our social media pages and maintain them easily by changing only the variables if needed. The changes will be propagated.

Modify the Gemfile to reflect our config.yml modifications

Now that we modified the config.yml file extensively, we want to make sure that these modifications can work properly. We need to modify our Gemfile to match the modifications we just made.

Remove the line

gem "minima", "~> #.#"

Add the line

gem "jekyll-autoprefixer"

Save the Gemfile.

Last thing before having our balnk canvas…

If we now try to reload the website in our local host you notice that nothing has changed. This is because every time we change the config.yml, we need to restart the local service to see the changes rendered.

Before doing so, we want to delete the file in the _posts folder today's date-welcome-to-jekyll.markdown. If we don’t do that and try to restart the local host, we will get an error caused by the fact that we deleted the theme and thus, we won’t be able to render the post page generated by default.

Let’s change the index.md to index.html and add the following lines to the file:

<h1>
  My Website Title
  <h1 />
</h1>

Let’s restart the local server and Congrats! You already have your static Home that is ready to be designed!

Our Home MVP!Congrats! This is your first website Home page!