This site was made using Jekyll and was very easy to make. Minimal code, super functional, beautiful, and modern. I started using the Chirpy Starter repo, following this awesome YouTube walkthrough by creator Techno Tim. He gives pretty much all the instructions, but here are some idiosyncrasies that you might face along the way and some tips to help you get started.
Dependencies
As this site was generated using Jekyll, which is written in Ruby, there are a bunch of installations to do if you don’t typically use Ruby. In particular, make sure that the following are up-to-date (I use a Mac; so this advice is most useful for Mac users):
- Ruby
- Xcode (you might run into problems like
pkg-confignot being ablt to find compiler libraries likeopensslotherwise)
Out-of-the-box Functionalities
Right out of the box, this template supports all sorts of mark-down (including emojis 👾, which is written in hexadecimal), code blocks (which I conveniently demonstrate by showing the front matter of my posts to enable mathjax (latex)):
1
2
3
4
5
6
7
8
---
published: true
title: How Site Made
date: 2023-02-27 00:00:00 -500
categories: [hmm]
tags: [websitebuilder,jekyll]
math: true
---
light / dark mode supported theme, RSS, and search! It’s great; 💛 the Chirpy people (it’s open-source).
My Customizations
Because I wanted to change things like fonts and colors, I decided to self-host chirpy-static-assets. This entails following all the instructions on that page, with the difference of setting env to be EMPTY in _config.yml:
1
2
3
4
5
6
7
# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets
assets:
self_host:
enabled: true # boolean, keep empty means false
# specify the Jekyll environment, empty means both
# only works if `assets.self_host.enabled` is 'true'
env: # [development|production]
This allows me to edit css files (I found the alternatives too troublesome). It was fairly straightforward, following the instructions on the github repo. For example, I found that editing fonts in /Library/Ruby/Gems/2.6.0/jekyll-theme-chirpy-5.5.2/_sass/addon/commons.scss allowed me to change fonts. Adding the font files was as easy as plopping them into assets/lib/fonts/.
Deployment:
References
- Firebase Hosting Tutorial #1 (and #2): this is great for getting started with Firebase accounts and CLI.
- Getting started with Firebase Hosting (and GitHub Actions!): this is great for using the Firebase CLI to get your site actually hosted.
Steps I took to initialize Firebase in my repo:
Get Firebase CLI (command-line-interface)
Create a Firebase project on firebase.google.com.
Once done, in the control panel for the project, select “Hosting” to set up hosting.
Install Firebase tools by running
npm install -g firebase-tools. This requires NodeJS, which, if you don’t have (or have an outdated version), you may download / update by going to the NodeJS website, downloading the appropriate file, and installing it.
Initialize Firebase in your website directory
When we run
bundle exec jekyll s(to spin up a locally hosted version of the website) orJEKYLL_ENV=production bundle exec jekyll b(to compile a folder of production files that you can upload to Firebase (or S3, or whatever)), jekyll actually uses the config files to generate the_sitefolder for us. The_sitefolder contains all the static code and assets that the website needs to render properly, which is all the information that our hosting service needs to have. But this automatic generation by jekyll also means that any Firebase files placed in_siteare transient and will be overwritten upon everybundle exec jekyll scall. We hence just initialize firebase in our website’s root folder by runningfirebase loginandfirebase init hostingthere. Read the paragraph below (2) before you do this!In the initialization wizard, Firebase will ask ‘What do you want to use as your public directory?, with the default being
public. Because Jekyll puts everything in the_sitefolder, we want to use_siteas the public directory instead. This initialization process also helpfully generates aindex.jsand404.htmlfiles for us, but Chirpy already has those, so don’t override! Once done, you can test it by runningfirebase deploy --only hosting. It should output a temporary URL that looks something like:https://firebase-project-name.web.app, and it should render your website.[Optional: emulators] If you wish to use firebase emulators (local versions of the deployed projects to see if they work), you may also (also in the root folder) run
firebase init emulators, and runfirebase emulators:startto spin it up.[Optional: preview channels] If you wish to spin up a web (instead of local) version of a new version of the site (you made some big changes and want to see how it looks / send a public link to friends), you can deploy a preview channel by running
firebase hosting:channel:deploy some_preview_channel_name --expires 2d(2dmeans expires in 2 days, for example). It will generate a new URL that will live for 2 days, looking something like:https://firebase-project-name--preview-channel-name-RANDOM-STRING.web.app.[Optional: viewing / deleting channels] With potentially many channels, you may view all your channels by running
firebase hosting:channel:list, and delete by runningfirebase hosting:channel:delete some-preview-channel-name.
GitHub Actions
I did not spend time figuring this out, but because of Chirpy’s use of submodules, I found that it may be easiest to just purge the Git out of this entire Chirpy repo. This means that your repo will no longer be a Git repo, which means that you can’t git pull new updates that the Chirpy repo will receive from the open source community. If you were going to customize your own site and think that Chirpy as it is is a great starting point, this shouldn’t be a problem. Simply run rm -rf .git in the project root directory, and once more in lib/assets (the submodule).
New Posts
Writing new posts entails having new .md content files in the _posts folder. Once you’re ready to make your new post go live, just run JEKYLL_ENV=production bundle exec jekyll b, followed by firebase deploy --only hosting. You should see your new post go live almost immediately!