diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d8fdf579e1aeee93ec857ba808561f1bdd647645..edeceef723e824abba1634ff5043d29863b2b45d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,7 +22,8 @@ build_docs:
     paths:
       - _build
   script:
-      - apt-get -y install python3-recommonmark python3-sphinx
+      - apt-get -y install python3-pip python3-sphinx
+      - pip3 install recommonmark
       - ./doc/build.sh _build
 
 build_meson:
diff --git a/doc/build.sh b/doc/build.sh
index 3c6a8dc78ec697a2df04465b9edd525ad97661ed..b261cb268925d37465b792d8d776790677bbfbfb 100755
--- a/doc/build.sh
+++ b/doc/build.sh
@@ -12,6 +12,10 @@ TARGET_DIR="${1:-./}"
 
 SPHINX=sphinx-build
 
+if [ ! -d $DOCS_DIR/_static ]; then
+    mkdir -p $DOCS_DIR/_static
+fi
+
 if ! which sphinx-build ; then
     SPHINX=sphinx-build-3
 fi
diff --git a/doc/index.md b/doc/index.md
index 1d4efa62001e017ee54732468c6e263cfedcfcdb..065d7a0cb8dd2ebc2d67fff2b9cbde5d178b176d 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -9,12 +9,12 @@ Contents
 Introduction
 ------------
 
-Squeekboard is the on-screen keyobard for the Librem 5 phone. For more information, look at the [README](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md).
+Squeekboard is the on-screen keyboard for the Librem 5 phone. For more information, look at the [README](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md).
 
 Layouts
 -------
 
-Squeekboard allows user-provided keyboard layouts. They can be created without recompiling the keyboard code. The tutorial](/tutorial.md) explains the process in detail.
+Squeekboard allows user-provided keyboard layouts. They can be created without recompiling the keyboard code. The [tutorial](/tutorial.md) explains the process in detail.
 
 Layouts are created using a text-based format, based on YAML.
 
diff --git a/doc/tutorial.md b/doc/tutorial.md
index e493ab0062bacf5dd971df5f8cd9e6cba4bb8ac6..716b8ddaeb965e2ffd9f52cb82503711e930e15a 100644
--- a/doc/tutorial.md
+++ b/doc/tutorial.md
@@ -34,13 +34,15 @@ So at least I will try to start writing a short how-to here and edit this post a
 * Additionally take a look at https://source.puri.sm/Librem5/squeekboard/blob/master/HACKING.md#testing
 * You can either test it locally on your Linux system or use the [QEMU Librem 5 image ](https://developer.puri.sm/Librem5/Development_Environment/Boards/emulators.html)
 * To test squeekboard locally, you need phoc. Either compile that from the sources as well or use the CI repository ci.puri.sm for Debian based systems:
-`deb [arch=amd64] http://ci.puri.sm/ scratch librem5`
+  `deb [arch=amd64] http://ci.puri.sm/ scratch librem5`
+
 Squeekboard can be installed from there as a Debian package, too (that’s what I often do). But beware - there be dragons! You could bork your system with these packages and you should probably disable this repository again after installing what you need - these packages are not meant for production systems (or so I heard :wink: )
 
 **Creating the keyboard layout**
 
 * To be written: For the time being, take a look at [Using non-latin language on Librem 5 ](https://forums.puri.sm/t/using-non-latin-language-on-librem-5/7103/5)
 * The correct name of the .yaml file can be found with the command `gsettings get org.gnome.desktop.input-sources sources`
+
 The output should be something like this: `[('xkb', 'us'), ('xkb', 'de')]`
 So f.ex. “de.yaml” would be the correct name for the German keyboard layout.
 * The translations for the keyboard layout names in the different languages can be found at `data/langs/`