Jekyll Learning Notes

6 minute read

Let us be honest. Building a personal academic website is essential, yet nightmare-ful for a non-cs major. This post summarizes all the experience/suffering that I have.

Good old days with jemdoc

jemdoc is a light text-based markup language designed for creating websites, developed by Jacob Mattingley. It is popular among researchers, for example, Stephen P. Boyd.

Setting up jemdoc

Following the official site can fail even if you are the superuser! Instead, follow here.

Hosting your websites

After you build your badass website, you will want to publish and show off (isn’t that all that matters?). If you are a student/faculty/staff in college, contact your Information Technology Services for hosting. Otherwise, try out Github Pages.

jemdoc + Mathjax

As a math major, typing $\LaTeX$ equation becomes a necessity. The original jemdoc loads LATEX equations as PNG image that is pixelated! Then I found Mathjax, which is a JavaScript display engine for mathematics that works in all browsers!

Wonseok Shin made this possible. The usage is quite simple, just change your mysite.conf and do

../jemdoc -c mysite.conf *.jemdoc

when you compile. Check details here.

Writing blog with jupyter notebook

Since is a python file, I intuitively created a python project with Pycharm editor. Later I found it is not necessary but I am happy with my choice, since it comes with Terminal feature and you can just jemdoc in there. Besides you can call jupyter notebook, which is an amazing markdown tool as it

  • supports LATEX display
  • exports to .html easily

Migrating to Jekyll

Yes, if you are satisfied with the jemdoc site, then you can close this post right away (save you huge time I guarantee!). Yet I wanted to make my website a little bit fancier. Let me cut to the chase, after going to hell and back, I found my treasure - Jekyll.

Just like jemdoc, Jekyll is also a static site generator. It has the following pros

  • Blog-aware
  • Free hosting with GitHub Pages
  • Good community with rich choice of theme templates

Nonetheless, it has the following cons

  • It is heavy in coding and I know nothing about it!

Jekyll is a Ruby Gem that can be installed on most systems. If you are on macOS like me, you probably have it pre-installed. Without knowing anything about Ruby, all you have to do now is to install the jekyll and bundler gems.

gem install jekyll bundler

Life saver: Minimal Mistakes

Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building personal sites, blogs, and portfolios.

I didn’t install the theme following the guide, instead, I forked the repository and rename it as And then I git clone my own repository to remove the unnecessary as suggested. Whenever you have made changes to your local repository, you have to stage, commit and push.

git add
git commit -a
git push origin master

Do not remove minimal-mistakes-jekyll.gemspec if you are not planing to mess up with Ruby like me! I accidentally deleted it so I have to cd into your local repository and run

touch minimal-mistakes-jekyll.gemspec
vim minimal-mistakes-jekyll.gemspec

First time building…

To build the website locally, cd into your local repository and run

bundle install
bundle exec jekyll serve

Here bundle install will download the necessary gem packages and create a Gemfile.lock file and bundle exec will stick your gem packages version to Gemfile.lock. And jekyll serve will build your website locally. You can now check out your local website from your local server (check your terminal message).

Alternatively, I use Atom instead of terminal directly. Atom is an amazing editor built with HTML, JavaScript, CSS, and Node.js integration. Therefore you can easily bulid your jekyll website by installing the Atom jekyll package. Furthermore, Atom can be configured with your Github account and repo, allows you to git without command line!

Editing _config.yml

To make the website looks like yours, start with editing _config.yml to the site author with your information.

To add your avator, create a folder named images in assets folder. Put your avator picture inside.

To edit the links, find your font awesome icons here. I did not find the brand icon for Google Scholar so I used fas fa-fw fa-graduation-cap.

You also want to edit the site settings. If you intend to write blog and enable comments. Follow the instruction for how to use disqus.

One additional thing I did is to add Google Analytics. See how to sign up for an Analytics account and Find your Analytics tracking ID at here. In your _config.yml, you need to choose the provider as provider: google-gtag and put down your tracking_id.

Adding favicons

Go to custom.html located in /_includes/head. Follow the instruction to add your favicons.

Adding Mathjax supports

Go to scripts.html located in /_includes. Add this snippet at the end

<script type="text/javascript" async

<script type="text/x-mathjax-config">
     extensions: ["tex2jax.js"],
     jax: ["input/TeX", "output/HTML-CSS"],
     tex2jax: {
       inlineMath: [ ['$','$'], ["\\(","\\)"] ],
       displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
       processEscapes: true
     "HTML-CSS": { availableFonts: ["TeX"] }

Enable MathJax in _config.yml by adding mathjax: true to the page defaults

# Defaults
  # _posts
  - scope:
      path: ""
      type: posts
      layout: single
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
      mathjax: true

Editing home layout

The default homepage layout shows your recent posts, which is good if your website is just a blog. However, if you intend to display your website as a personal academic site like me, you will want the homepage to include basic information and disable the recent posts.

I have not found a perfect way, so I go to home.html located in /_layouts and delete the snippet after

<h3 class="archive__subtitle">Recent posts</h3>

Now go ahead to index.html and change the name to, which enables you to write in markdown mode. If your website is hosted by Github Pages this is fine. Otherwise, you need to exports your .md file to .html file.


ClustrMaps is a fancy widget that can track your website visitors from all over the world and visualize it using a real-time map. Follow the instruction from the official site to create your widget.

Go to home.html located in /_layouts and paste your Javascript at the end. Now you will see the change.

Creating pages

Pages are aside from homepage. For a academic site, I need at least Publication page and Blog page.

Firstly, go to navigation.yml located in /_data to state your pages, mine looks like

# main links
  # - title: "Quick-Start Guide"
  #   url:
  - title: "Publications"
    url: /publications/
  - title: "Projects"
    url: /projects/
  - title: "Teaching"
    url: /teaching/
  - title: "Blog"
    url: /blog/

Next, create a folder _pages together with page files according the navigation.yml. Specify layout: archive and specify the permalink in each page corresponding to navigation.yml.

Using paginate

Since we have created /blog/ url. So create a folder also named blog. Put index.html in this folder and paste the code original from home.html layout to here.

In the _config.yml, specify the output

paginate_path: /blog/page:num

Creating posts

Firstly, create a folder named _posts and then put all your posts in here.

To name your post, use as the post name. It will tell jekyll the date and title. Set your layout as layout: single and enable comments: true if you added comment provider in your _config.yml.

Happy blogging!


To upload a Jekyll site to a web host using FTP, run the command

bundle exec jekyll build

and copy the contents of the generated _site folder to the root folder of your hosting account.

If you are using Github Pages, this is no need, and if you do so you do not have to commit or push since _site is in .gitignore.

Check out academicpages

Yet, I found this amazing repository after I built everything (yah!).

Basically this template has everything you need, you just need to fill in your info.



Leave a comment