diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f700e59f8849cd35bf340639f551c7ce9b260f8f..ad88fddcc04248d826ace407cf7a9f9eb876ced4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,7 +7,7 @@ stages:
 variables:
   PIP_CACHE_DIR: "$CI_PROJECT_DIR/pip-cache"
 
-lint:
+lint-black:
   stage: lint
   image: python:3.10
   before_script:
@@ -17,6 +17,16 @@ lint:
   script:
     - poetry run black --check --exclude pelican-plugins .
 
+lint-djlint:
+  stage: lint
+  image: python:3.10
+  before_script:
+    - apt-get update && apt-get install -y make git
+    - pip install poetry
+    - poetry install
+  script:
+    - poetry run djlint --check theme
+
 test_jsonld_ns:
   stage: test
   image: python:3
diff --git a/poetry.lock b/poetry.lock
index 459d9d81728eabf18d2ddd2abaa15cd4e8cb204c..a3b73ecc774ed467cb452005b6ecfa0a93175dbe 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -68,6 +68,27 @@ python-versions = "*"
 [package.extras]
 test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
 
+[[package]]
+name = "djlint"
+version = "0.7.6"
+description = "HTML Template Linter and Formatter"
+category = "dev"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+click = ">=8.0.1,<9.0.0"
+colorama = ">=0.4.4,<0.5.0"
+importlib-metadata = ">=4.11.0,<5.0.0"
+pathspec = ">=0.9.0,<0.10.0"
+PyYAML = ">=6.0,<7.0"
+regex = ">=2022.1.18,<2023.0.0"
+tomlkit = ">=0.9.2,<0.10.0"
+tqdm = ">=4.62.2,<5.0.0"
+
+[package.extras]
+test = ["coverage (>=6.3.1,<7.0.0)", "pytest (>=7.0.1,<8.0.0)", "pytest-cov (>=3.0.0,<4.0.0)"]
+
 [[package]]
 name = "docutils"
 version = "0.18.1"
@@ -98,6 +119,22 @@ python-versions = ">=3.6"
 [package.dependencies]
 sgmllib3k = "*"
 
+[[package]]
+name = "importlib-metadata"
+version = "4.11.3"
+description = "Read metadata from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+perf = ["ipython"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
 [[package]]
 name = "jinja2"
 version = "3.0.3"
@@ -209,6 +246,22 @@ category = "main"
 optional = false
 python-versions = "*"
 
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "regex"
+version = "2022.3.15"
+description = "Alternative regular expression module, to replace re."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
 [[package]]
 name = "rich"
 version = "11.2.0"
@@ -249,6 +302,30 @@ category = "dev"
 optional = false
 python-versions = ">=3.7"
 
+[[package]]
+name = "tomlkit"
+version = "0.9.2"
+description = "Style preserving TOML library"
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[[package]]
+name = "tqdm"
+version = "4.63.0"
+description = "Fast, Extensible Progress Meter"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+notebook = ["ipywidgets (>=6)"]
+telegram = ["requests"]
+
 [[package]]
 name = "unidecode"
 version = "1.3.2"
@@ -257,10 +334,22 @@ category = "main"
 optional = false
 python-versions = ">=3.5"
 
+[[package]]
+name = "zipp"
+version = "3.7.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.10"
-content-hash = "da6b8ab8e489f87ed86cad6f31be827b260e09e95e920be85320be6b52d5d98d"
+content-hash = "c83f946101a2ec22a7bed1bb849c1951cddc86a036eaa76bd7d670ebf3e9efd7"
 
 [metadata.files]
 babel = [
@@ -307,6 +396,10 @@ commonmark = [
     {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
     {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
 ]
+djlint = [
+    {file = "djlint-0.7.6-py3-none-any.whl", hash = "sha256:d14d25e1eeebc70ccfcf8dedbcf22e8dc791419ae736aeda9b12b5e7e61cfc04"},
+    {file = "djlint-0.7.6.tar.gz", hash = "sha256:7d36548d45b88835f5a20c50970eb41c01833fdaadabc07605407294252100bb"},
+]
 docutils = [
     {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"},
     {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"},
@@ -319,6 +412,10 @@ feedparser = [
     {file = "feedparser-6.0.8-py3-none-any.whl", hash = "sha256:1b7f57841d9cf85074deb316ed2c795091a238adb79846bc46dccdaf80f9c59a"},
     {file = "feedparser-6.0.8.tar.gz", hash = "sha256:5ce0410a05ab248c8c7cfca3a0ea2203968ee9ff4486067379af4827a59f9661"},
 ]
+importlib-metadata = [
+    {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+    {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
 jinja2 = [
     {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
     {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
@@ -426,6 +523,117 @@ pytz = [
     {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
     {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
 ]
+pyyaml = [
+    {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+    {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+    {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+    {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+    {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+    {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+    {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+    {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+    {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+    {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+    {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+    {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+    {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+    {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+    {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+    {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+regex = [
+    {file = "regex-2022.3.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:42eb13b93765c6698a5ab3bcd318d8c39bb42e5fa8a7fcf7d8d98923f3babdb1"},
+    {file = "regex-2022.3.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9beb03ff6fe509d6455971c2489dceb31687b38781206bcec8e68bdfcf5f1db2"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0a5a1fdc9f148a8827d55b05425801acebeeefc9e86065c7ac8b8cc740a91ff"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb374a2a4dba7c4be0b19dc7b1adc50e6c2c26c3369ac629f50f3c198f3743a4"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c33ce0c665dd325200209340a88438ba7a470bd5f09f7424e520e1a3ff835b52"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04c09b9651fa814eeeb38e029dc1ae83149203e4eeb94e52bb868fadf64852bc"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab5d89cfaf71807da93c131bb7a19c3e19eaefd613d14f3bce4e97de830b15df"},
+    {file = "regex-2022.3.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e2630ae470d6a9f8e4967388c1eda4762706f5750ecf387785e0df63a4cc5af"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:df037c01d68d1958dad3463e2881d3638a0d6693483f58ad41001aa53a83fcea"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:940570c1a305bac10e8b2bc934b85a7709c649317dd16520471e85660275083a"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7f63877c87552992894ea1444378b9c3a1d80819880ae226bb30b04789c0828c"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3e265b388cc80c7c9c01bb4f26c9e536c40b2c05b7231fbb347381a2e1c8bf43"},
+    {file = "regex-2022.3.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:058054c7a54428d5c3e3739ac1e363dc9347d15e64833817797dc4f01fb94bb8"},
+    {file = "regex-2022.3.15-cp310-cp310-win32.whl", hash = "sha256:76435a92e444e5b8f346aed76801db1c1e5176c4c7e17daba074fbb46cb8d783"},
+    {file = "regex-2022.3.15-cp310-cp310-win_amd64.whl", hash = "sha256:174d964bc683b1e8b0970e1325f75e6242786a92a22cedb2a6ec3e4ae25358bd"},
+    {file = "regex-2022.3.15-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e1d8ed9e61f37881c8db383a124829a6e8114a69bd3377a25aecaeb9b3538f8"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b52771f05cff7517f7067fef19ffe545b1f05959e440d42247a17cd9bddae11b"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:673f5a393d603c34477dbad70db30025ccd23996a2d0916e942aac91cc42b31a"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8923e1c5231549fee78ff9b2914fad25f2e3517572bb34bfaa3aea682a758683"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764e66a0e382829f6ad3bbce0987153080a511c19eb3d2f8ead3f766d14433ac"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd00859291658fe1fda48a99559fb34da891c50385b0bfb35b808f98956ef1e7"},
+    {file = "regex-2022.3.15-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa2ce79f3889720b46e0aaba338148a1069aea55fda2c29e0626b4db20d9fcb7"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:34bb30c095342797608727baf5c8aa122406aa5edfa12107b8e08eb432d4c5d7"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:25ecb1dffc5e409ca42f01a2b2437f93024ff1612c1e7983bad9ee191a5e8828"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:aa5eedfc2461c16a092a2fabc5895f159915f25731740c9152a1b00f4bcf629a"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:7d1a6e403ac8f1d91d8f51c441c3f99367488ed822bda2b40836690d5d0059f5"},
+    {file = "regex-2022.3.15-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:3e4d710ff6539026e49f15a3797c6b1053573c2b65210373ef0eec24480b900b"},
+    {file = "regex-2022.3.15-cp36-cp36m-win32.whl", hash = "sha256:0100f0ded953b6b17f18207907159ba9be3159649ad2d9b15535a74de70359d3"},
+    {file = "regex-2022.3.15-cp36-cp36m-win_amd64.whl", hash = "sha256:f320c070dea3f20c11213e56dbbd7294c05743417cde01392148964b7bc2d31a"},
+    {file = "regex-2022.3.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fc8c7958d14e8270171b3d72792b609c057ec0fa17d507729835b5cff6b7f69a"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ca6dcd17f537e9f3793cdde20ac6076af51b2bd8ad5fe69fa54373b17b48d3c"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0214ff6dff1b5a4b4740cfe6e47f2c4c92ba2938fca7abbea1359036305c132f"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a98ae493e4e80b3ded6503ff087a8492db058e9c68de371ac3df78e88360b374"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b1cc70e31aacc152a12b39245974c8fccf313187eead559ee5966d50e1b5817"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4829db3737480a9d5bfb1c0320c4ee13736f555f53a056aacc874f140e98f64"},
+    {file = "regex-2022.3.15-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:303b15a3d32bf5fe5a73288c316bac5807587f193ceee4eb6d96ee38663789fa"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:dc7b7c16a519d924c50876fb152af661a20749dcbf653c8759e715c1a7a95b18"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ce3057777a14a9a1399b81eca6a6bfc9612047811234398b84c54aeff6d536ea"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:48081b6bff550fe10bcc20c01cf6c83dbca2ccf74eeacbfac240264775fd7ecf"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dcbb7665a9db9f8d7642171152c45da60e16c4f706191d66a1dc47ec9f820aed"},
+    {file = "regex-2022.3.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c155a1a80c5e7a8fa1d9bb1bf3c8a953532b53ab1196092749bafb9d3a7cbb60"},
+    {file = "regex-2022.3.15-cp37-cp37m-win32.whl", hash = "sha256:04b5ee2b6d29b4a99d38a6469aa1db65bb79d283186e8460542c517da195a8f6"},
+    {file = "regex-2022.3.15-cp37-cp37m-win_amd64.whl", hash = "sha256:797437e6024dc1589163675ae82f303103063a0a580c6fd8d0b9a0a6708da29e"},
+    {file = "regex-2022.3.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8afcd1c2297bc989dceaa0379ba15a6df16da69493635e53431d2d0c30356086"},
+    {file = "regex-2022.3.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0066a6631c92774391f2ea0f90268f0d82fffe39cb946f0f9c6b382a1c61a5e5"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8248f19a878c72d8c0a785a2cd45d69432e443c9f10ab924c29adda77b324ae"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d1f3ea0d1924feb4cf6afb2699259f658a08ac6f8f3a4a806661c2dfcd66db1"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:794a6bc66c43db8ed06698fc32aaeaac5c4812d9f825e9589e56f311da7becd9"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d1445824944e642ffa54c4f512da17a953699c563a356d8b8cbdad26d3b7598"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f553a1190ae6cd26e553a79f6b6cfba7b8f304da2071052fa33469da075ea625"},
+    {file = "regex-2022.3.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:75a5e6ce18982f0713c4bac0704bf3f65eed9b277edd3fb9d2b0ff1815943327"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f16cf7e4e1bf88fecf7f41da4061f181a6170e179d956420f84e700fb8a3fd6b"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dad3991f0678facca1a0831ec1ddece2eb4d1dd0f5150acb9440f73a3b863907"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:491fc754428514750ab21c2d294486223ce7385446f2c2f5df87ddbed32979ae"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6504c22c173bb74075d7479852356bb7ca80e28c8e548d4d630a104f231e04fb"},
+    {file = "regex-2022.3.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01c913cf573d1da0b34c9001a94977273b5ee2fe4cb222a5d5b320f3a9d1a835"},
+    {file = "regex-2022.3.15-cp38-cp38-win32.whl", hash = "sha256:029e9e7e0d4d7c3446aa92474cbb07dafb0b2ef1d5ca8365f059998c010600e6"},
+    {file = "regex-2022.3.15-cp38-cp38-win_amd64.whl", hash = "sha256:947a8525c0a95ba8dc873191f9017d1b1e3024d4dc757f694e0af3026e34044a"},
+    {file = "regex-2022.3.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:591d4fba554f24bfa0421ba040cd199210a24301f923ed4b628e1e15a1001ff4"},
+    {file = "regex-2022.3.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9809404528a999cf02a400ee5677c81959bc5cb938fdc696b62eb40214e3632"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f08a7e4d62ea2a45557f561eea87c907222575ca2134180b6974f8ac81e24f06"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a86cac984da35377ca9ac5e2e0589bd11b3aebb61801204bd99c41fac516f0d"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:286908cbe86b1a0240a867aecfe26a439b16a1f585d2de133540549831f8e774"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b7494df3fdcc95a1f76cf134d00b54962dd83189520fd35b8fcd474c0aa616d"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b1ceede92400b3acfebc1425937454aaf2c62cd5261a3fabd560c61e74f6da3"},
+    {file = "regex-2022.3.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0317eb6331146c524751354ebef76a7a531853d7207a4d760dfb5f553137a2a4"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c144405220c5ad3f5deab4c77f3e80d52e83804a6b48b6bed3d81a9a0238e4c"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b2e24f3ae03af3d8e8e6d824c891fea0ca9035c5d06ac194a2700373861a15c"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f2c53f3af011393ab5ed9ab640fa0876757498aac188f782a0c620e33faa2a3d"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:060f9066d2177905203516c62c8ea0066c16c7342971d54204d4e51b13dfbe2e"},
+    {file = "regex-2022.3.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:530a3a16e57bd3ea0dff5ec2695c09632c9d6c549f5869d6cf639f5f7153fb9c"},
+    {file = "regex-2022.3.15-cp39-cp39-win32.whl", hash = "sha256:78ce90c50d0ec970bd0002462430e00d1ecfd1255218d52d08b3a143fe4bde18"},
+    {file = "regex-2022.3.15-cp39-cp39-win_amd64.whl", hash = "sha256:c5adc854764732dbd95a713f2e6c3e914e17f2ccdc331b9ecb777484c31f73b6"},
+    {file = "regex-2022.3.15.tar.gz", hash = "sha256:0a7b75cc7bb4cc0334380053e4671c560e31272c9d2d5a6c4b8e9ae2c9bd0f82"},
+]
 rich = [
     {file = "rich-11.2.0-py3-none-any.whl", hash = "sha256:d5f49ad91fb343efcae45a2b2df04a9755e863e50413623ab8c9e74f05aee52b"},
     {file = "rich-11.2.0.tar.gz", hash = "sha256:1a6266a5738115017bb64a66c59c717e7aa047b3ae49a011ede4abdeffc6536e"},
@@ -441,7 +649,19 @@ tomli = [
     {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
     {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
 ]
+tomlkit = [
+    {file = "tomlkit-0.9.2-py3-none-any.whl", hash = "sha256:daf4f9c5f2fbf6b861d6adfc51940b98dee36c13e1d88749a6dc9fb280fff304"},
+    {file = "tomlkit-0.9.2.tar.gz", hash = "sha256:ebd982d61446af95a1e082b103e250cb9e6d152eae2581d4a07d31a70b34ab0f"},
+]
+tqdm = [
+    {file = "tqdm-4.63.0-py2.py3-none-any.whl", hash = "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29"},
+    {file = "tqdm-4.63.0.tar.gz", hash = "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd"},
+]
 unidecode = [
     {file = "Unidecode-1.3.2-py3-none-any.whl", hash = "sha256:215fe33c9d1c889fa823ccb66df91b02524eb8cc8c9c80f9c5b8129754d27829"},
     {file = "Unidecode-1.3.2.tar.gz", hash = "sha256:669898c1528912bcf07f9819dc60df18d057f7528271e31f8ec28cc88ef27504"},
 ]
+zipp = [
+    {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"},
+    {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"},
+]
diff --git a/pyproject.toml b/pyproject.toml
index 445be6a8c8f6ddc0bb08952eb4bd4c14127cfe21..31522041710d90e80dcb5ae8d78ce28c28091ca1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,7 +12,11 @@ Babel = "^2.9.1"
 
 [tool.poetry.dev-dependencies]
 black = "^22.1.0"
+djlint = "^0.7.6"
 
 [build-system]
 requires = ["poetry-core>=1.0.0"]
 build-backend = "poetry.core.masonry.api"
+
+[tool.djlint]
+indent=2
diff --git a/theme/templates/base.html b/theme/templates/base.html
index 230b4dce834bc23b36a7e79e44d1dd3a397b1278..fefbd9cc3d63f121a31a3150a8c1dba3227806ba 100644
--- a/theme/templates/base.html
+++ b/theme/templates/base.html
@@ -4,16 +4,18 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <title>Funkwhale</title>
-    <link rel="stylesheet" href="https://ui.funkwhale.audio/v0.1.2/css/funkwhale.css">
-    <link rel="stylesheet" href="{{ main_siteurl }}/theme/css/fork-awesome.min.css">
-    <link rel="stylesheet" href="{{ main_siteurl
-	}}/theme/css/funkwhale.css">
-    <link rel="icon" type="image/x-icon" href="{{ main_siteurl }}/theme/favicon.ico">
+    <link rel="stylesheet"
+          href="https://ui.funkwhale.audio/v0.1.2/css/funkwhale.css">
+    <link rel="stylesheet"
+          href="{{ main_siteurl }}/theme/css/fork-awesome.min.css">
+    <link rel="stylesheet" href="{{ main_siteurl }}/theme/css/funkwhale.css">
+    <link rel="icon"
+          type="image/x-icon"
+          href="{{ main_siteurl }}/theme/favicon.ico">
     <script src="{{ main_siteurl }}/theme/js/navbar-burger.js"></script>
   </head>
   <body>
     {% include "inc/menu.html" %}
-
     {% block content %}{% endblock %}
   </body>
 </html>
diff --git a/theme/templates/inc/blogposts.html b/theme/templates/inc/blogposts.html
index 12fcb8673088507010d0c844ab0d5af4647137ea..fff496e32017cff7b4acf8b83091dd03c37d81a0 100644
--- a/theme/templates/inc/blogposts.html
+++ b/theme/templates/inc/blogposts.html
@@ -1,15 +1,14 @@
 <section class="section has-background-light">
-
   {% for article in BLOG_ARTICLES[:5] %}
-<article class="message">
-  <div class="message-header">
-    <p>
-    <span class="tag is-info is-light">{{ article.category }}</span>
-    <span class="ml-3">{{ article.title }}</span>
-    </p>
-    <a href="{{ article.link }}">Read more...</a>
-  </div>
-  <div class="message-body">{{ article.summary }}</div>
-</article>
-{% endfor %}
+    <article class="message">
+      <div class="message-header">
+        <p>
+          <span class="tag is-info is-light">{{ article.category }}</span>
+          <span class="ml-3">{{ article.title }}</span>
+        </p>
+        <a href="{{ article.link }}">Read more...</a>
+      </div>
+      <div class="message-body">{{ article.summary }}</div>
+    </article>
+  {% endfor %}
 </section>
diff --git a/theme/templates/inc/features.html b/theme/templates/inc/features.html
index 2f44732ae41f20ed8701cc26cb00def4572b9cb2..1a0333c777611db4bbed7867a7998471c495768b 100644
--- a/theme/templates/inc/features.html
+++ b/theme/templates/inc/features.html
@@ -2,28 +2,44 @@
   <h1 class="title">Funkwhale is based on open standards and free software and built...</h1>
   <div class="columns">
     <div class="column feature">
-      <h2 class="title"><i class="fa fa-music" aria-hidden="true"></i> For music lovers</h2>
-      <h3 class="subtitle">Listen to your music</h3>
-      <p>Upload your personal music collection and listen to it, any time and everywhere!</p>
-      <button class="button mt-4">Learn more...</button>
-    </div>
-    <div class="column feature">
-      <h2 class="title"><i class="fa fa-podcast" aria-hidden="true"></i> For podcast lovers</h2>
-      <h3 class="subtitle">Subscribe to any podcast</h3>
-      <p>Listen to your favorite podcasts and discover new podcasts from our network!</p>
-      <button class="button mt-4">Learn more...</button>
-    </div>
-    <div class="column feature">
-      <h2 class="title"><i class="fa fa-upload" aria-hidden="true"></i> For publishers</h2>
-      <h3 class="subtitle">Publish your music or podcast</h3>
-      <p>Make your audio content available to the hole Funkwhale network and beyond!</p>
-      <button class="button mt-4">Learn more...</button>
-    </div>
-    <div class="column feature">
-      <h2 class="title"><i class="fa fa-users" aria-hidden="true"></i> By a friendly community</h2>
-      <h3 class="subtitle">Take part in shaping our software</h3>
-      <p>Funkwhale belongs to the Community, become a member and participate in the development of an independend platform!</p>
-      <button class="button mt-4">Become a contributor</button>
-    </div>
+      <h2 class="title">
+        <i class="fa fa-music" aria-hidden="true"></i> For music lovers
+    </h2>
+    <h3 class="subtitle">Listen to your music</h3>
+    <p>
+      Upload your personal music collection and listen to it, any time and everywhere!
+    </p>
+    <button class="button mt-4">Learn more...</button>
   </div>
+  <div class="column feature">
+    <h2 class="title">
+      <i class="fa fa-podcast" aria-hidden="true"></i> For podcast lovers
+  </h2>
+  <h3 class="subtitle">Subscribe to any podcast</h3>
+  <p>
+    Listen to your favorite podcasts and discover new podcasts from our network!
+  </p>
+  <button class="button mt-4">Learn more...</button>
+</div>
+<div class="column feature">
+  <h2 class="title">
+    <i class="fa fa-upload" aria-hidden="true"></i> For publishers
+</h2>
+<h3 class="subtitle">Publish your music or podcast</h3>
+<p>
+  Make your audio content available to the hole Funkwhale network and beyond!
+</p>
+<button class="button mt-4">Learn more...</button>
+</div>
+<div class="column feature">
+  <h2 class="title">
+    <i class="fa fa-users" aria-hidden="true"></i> By a friendly community
+</h2>
+<h3 class="subtitle">Take part in shaping our software</h3>
+<p>
+  Funkwhale belongs to the Community, become a member and participate in the development of an independend platform!
+</p>
+<button class="button mt-4">Become a contributor</button>
+</div>
+</div>
 </section>
diff --git a/theme/templates/inc/hero.html b/theme/templates/inc/hero.html
index 07b8f261bb6b7a574d82157e2e92820e49a085ef..bbd83bf1505290dce7aba1597f41f1cb3c180733 100644
--- a/theme/templates/inc/hero.html
+++ b/theme/templates/inc/hero.html
@@ -1,20 +1,25 @@
 <section class="hero is-fullheight-with-navbar">
-	<div class="hero-body">
-		<div class="container">
-			<div class="columns is-8">
-				<div class="column">
-					<div id="hero-content" class="is-flex is-flex-direction-column
-						is-justify-content-space-between" style="height: 100%;">
-						<p class="title is-size-4-tablet is-size-3-desktop
-						is-size-2-widescreen is-size-1-fullhd has-text-weight-bold">{% trans %}A platform for all your audio{% endtrans %}</p>
-						<p class="subtitle has-text-weight-bold">{% trans %}Your music. Your podcasts.<br />
-						Enjoy anywhere, share with anyone.{% endtrans %}</p>
-						<button class="button is-primary is-fullwidth">Get started</button>
-					</div>
-				</div>
-				<div class="column">
-					<img src="{{ main_siteurl }}/theme/images/screenshot.jpg">
-				</div>
-			</div>
-		</div>
-</section>
+  <div class="hero-body">
+    <div class="container">
+      <div class="columns is-8">
+        <div class="column">
+          <div id="hero-content"
+               class="is-flex is-flex-direction-column is-justify-content-space-between"
+               style="height: 100%;">
+            <p class="title is-size-4-tablet is-size-3-desktop is-size-2-widescreen is-size-1-fullhd has-text-weight-bold">
+              {% trans %}A platform for all your audio{% endtrans %}
+            </p>
+            <p class="subtitle has-text-weight-bold">
+              {% trans %}Your music. Your podcasts.
+              <br />
+              Enjoy anywhere, share with anyone.{% endtrans %}
+            </p>
+            <button class="button is-primary is-fullwidth">Get started</button>
+          </div>
+        </div>
+        <div class="column">
+          <img src="{{ main_siteurl }}/theme/images/screenshot.jpg">
+        </div>
+      </div>
+    </div>
+  </section>
diff --git a/theme/templates/inc/instances.html b/theme/templates/inc/instances.html
index f3a3b78f9ed40ba33718ebeba7a55da60df3c590..f6a19609cd55d578cd45b943da906af1bd9b2dfa 100644
--- a/theme/templates/inc/instances.html
+++ b/theme/templates/inc/instances.html
@@ -1,52 +1,69 @@
 <section class="section">
   <div class="columns is-multiline">
     {% for instance in INSTANCES %}
-    <div class="column is-half">
-      <div class="card m-4">
-        <div class="card-content">
-          <div class="content">
-            <h1>{{ instance.node_name }}</h1>
-            <a href="https://{{ instance.name }}">{{ instance.name }}</a> | 
+      <div class="column is-half">
+        <div class="card m-4">
+          <div class="card-content">
+            <div class="content">
+              <h1>{{ instance.node_name }}</h1>
+              <a href="https://{{ instance.name }}">{{ instance.name }}</a> |
             <span class="content">
               Version: {{ instance.version }}
               {% if instance.version == LAST_RELEASE %}
-              <i class="fa fa-check-circle has-text-success" aria-hidden="true"> Up-to-date</i>
+                <i class="fa fa-check-circle has-text-success" aria-hidden="true"> Up-to-date</i>
               {% endif %}
             </span>
             <nav class="level mt-4">
               <div class="level-item has-text-centered">
                 <div>
-                  <p class="heading">Active users</p>
-                  <p class="title"><i class="fa fa-users" aria-hidden="true"></i> {{ instance.lastCheck.usage_users_active_month }}</p>
-                </div>
+                  <p class="heading">
+                    Active users
+                  </p>
+                  <p class="title">
+                    <i class="fa fa-users" aria-hidden="true"></i> {{ instance.lastCheck.usage_users_active_month }}
+                </p>
               </div>
-              <div class="level-item has-text-centered">
-                <div>
-                  <p class="heading">Hours of music</p>
-                  <p class="title"><i class="fa fa-clock-o" aria-hidden="true"></i> {{ instance.lastCheck.library_music_hours }}</p>
-                </div>
-              </div>
-              <div class="level-item has-text-centered">
-                <div>
-                  <p class="heading">Available tracks</p>
-                  <p class="title"><i class="fa fa-file-audio-o" aria-hidden="true"></i> {{ instance.lastCheck.library_tracks_total }}</p>
-                </div>
-              </div>
-              <div class="level-item has-text-centered">
-                <div>
-                  <p class="heading">Serving since</p>
-                  <p class="title"><i class="fa fa-calendar" aria-hidden="true"></i> {{ instance.first_seen_date|strftime('%d.%m.%Y') }}</p>
-                </div>
-              </div>
-            </nav>
+            </div>
+            <div class="level-item has-text-centered">
+              <div>
+                <p class="heading">
+                  Hours of music
+                </p>
+                <p class="title">
+                  <i class="fa fa-clock-o" aria-hidden="true"></i> {{ instance.lastCheck.library_music_hours }}
+              </p>
+            </div>
           </div>
+          <div class="level-item has-text-centered">
+            <div>
+              <p class="heading">
+                Available tracks
+              </p>
+              <p class="title">
+                <i class="fa fa-file-audio-o" aria-hidden="true"></i> {{ instance.lastCheck.library_tracks_total }}
+            </p>
+          </div>
+        </div>
+        <div class="level-item has-text-centered">
+          <div>
+            <p class="heading">
+              Serving since
+            </p>
+            <p class="title">
+              <i class="fa fa-calendar" aria-hidden="true"></i> {{ instance.first_seen_date|strftime('%d.%m.%Y') }}
+          </p>
         </div>
-        <footer class="card-footer">
-          <a href="https://{{ instance.name }}/about" class="card-footer-item">About this Pod</a>
-          <a href="https://{{ instance.name }}/signup" class="card-footer-item has-text-weight-bold has-text-white has-background-primary">Join</a>
-        </footer>
       </div>
-    </div>
-    {% endfor %}
+    </nav>
   </div>
+</div>
+<footer class="card-footer">
+  <a href="https://{{ instance.name }}/about" class="card-footer-item">About this Pod</a>
+  <a href="https://{{ instance.name }}/signup"
+     class="card-footer-item has-text-weight-bold has-text-white has-background-primary">Join</a>
+</footer>
+</div>
+</div>
+{% endfor %}
+</div>
 </section>
diff --git a/theme/templates/inc/menu.html b/theme/templates/inc/menu.html
index 6a2d42f800f63f0ee1f2210a6ca27e23898ea597..e4fbd3ccb7a50b824f13e3a9ef81f257c1e1eb33 100644
--- a/theme/templates/inc/menu.html
+++ b/theme/templates/inc/menu.html
@@ -1,62 +1,42 @@
-<nav class="navbar has-shadow" role="navigation" aria-label="main navigation">
+<nav class="navbar has-shadow"
+     role="navigation"
+     aria-label="main navigation">
   <div class="navbar-brand">
     <a class="navbar-item" href="{{ main_siteurl }}">
       <img src="{{ main_siteurl }}/theme/images/logo-white-bg.svg">
     </a>
-
-    <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
+    <a role="button"
+       class="navbar-burger"
+       aria-label="menu"
+       aria-expanded="false"
+       data-target="navbarBasicExample">
       <span aria-hidden="true"></span>
       <span aria-hidden="true"></span>
       <span aria-hidden="true"></span>
     </a>
   </div>
-
   <div id="navbarBasicExample" class="navbar-menu">
     <div class="navbar-start">
-      <a class="navbar-item">
-        Apps
-      </a>
-
-      <a class="navbar-item">
-        Community
-      </a>
-
-			<a href="{{ SITEURL }}/faqs" class="navbar-item">
-        FAQs
-      </a>
-
+      <a class="navbar-item">Apps</a>
+      <a class="navbar-item">Community</a>
+      <a href="{{ SITEURL }}/faqs" class="navbar-item">FAQs</a>
       <div class="navbar-item has-dropdown is-hoverable">
-        <a class="navbar-link">
-          Resources
-        </a>
-
+        <a class="navbar-link">Resources</a>
         <div class="navbar-dropdown">
-					<a href="{{ SITEURL }}/collective" class="navbar-item">
-            Collective and Statutes
-          </a>
-					<a href="{{ SITEURL }}/code-of-conduct" class="navbar-item">
-            Code of Conduct
-          </a>
-          <a class="navbar-item">
-            Forum
-          </a>
+          <a href="{{ SITEURL }}/collective" class="navbar-item">Collective and Statutes</a>
+          <a href="{{ SITEURL }}/code-of-conduct" class="navbar-item">Code of Conduct</a>
+          <a class="navbar-item">Forum</a>
           <hr class="navbar-divider">
-          <a class="navbar-item">
-            Documentation
-          </a>
+          <a class="navbar-item">Documentation</a>
         </div>
       </div>
     </div>
-
     <div class="navbar-end"></div>
     <div class="navbar-item has-dropdown is-hoverable">
-      <a class="navbar-link">
-        {% trans %}Language{% endtrans %}
-      </a>
-
+      <a class="navbar-link">{% trans %}Language{% endtrans %}</a>
       <div class="navbar-dropdown is-right">
         {% for lang, url in lang_siteurls.items() %}
-        <a class="navbar-item" href="{{ url }}/">{{ lang }}</a>
+          <a class="navbar-item" href="{{ url }}/">{{ lang }}</a>
         {% endfor %}
       </div>
     </div>
diff --git a/theme/templates/index.html b/theme/templates/index.html
index 6a9176e07aeb8dcd793ae054c0671cc8d5fcbff5..aa730fd49f6b4ad4aa7867a6aec856a4211ac7ef 100644
--- a/theme/templates/index.html
+++ b/theme/templates/index.html
@@ -1,59 +1,63 @@
 {% extends "base.html" %}
-
 {% block content %}
-    {% include "inc/hero.html" %}
-
-    {% include "inc/features.html" %}
-
-    <section class="section">
-
-      <div class="container is-max-desktop">
-        <div class="columns">
-          <div class="column is-three-fifths">
-            <div class="section">
-              <p class="subtitle is-3 is-spaced">
+  {% include "inc/hero.html" %}
+  {% include "inc/features.html" %}
+  <section class="section">
+    <div class="container is-max-desktop">
+      <div class="columns">
+        <div class="column is-three-fifths">
+          <div class="section">
+            <p class="subtitle is-3 is-spaced">
               Listen to your music, everywhere
-              </p>
-              <p class="title is-5">
-              Upload your personal library to your pod, share it with friends and family, and discover talented 
-              creators.</p>
-              <p>Funkwhale gives you access to your playlists, favorite tracks, and artists everywhere, from our
-              web interface or the wide range of compatible apps for every platform.</p>
-              <a class="button is-text mt-4 is-fullwidth">Get started!</a>
-            </div>
+            </p>
+            <p class="title is-5">
+              Upload your personal library to your pod, share it with friends and family, and discover talented
+              creators.
+            </p>
+            <p>
+              Funkwhale gives you access to your playlists, favorite tracks, and artists everywhere, from our
+              web interface or the wide range of compatible apps for every platform.
+            </p>
+            <a class="button is-text mt-4 is-fullwidth">Get started!</a>
           </div>
-          <div class="column">
-            <div class="block has-text-centered">
-              <figure class="image is-inline-block">
-                <img style="max-height: 440px" src="{{ main_siteurl }}/theme/images/mobile.jpg" \>
-              </figure>
-            </div>
+        </div>
+        <div class="column">
+          <div class="block has-text-centered">
+            <figure class="image is-inline-block">
+              <img style="max-height: 440px"
+                   src="{{ main_siteurl }}/theme/images/mobile.jpg">
+            </figure>
           </div>
         </div>
       </div>
-
-      <div class="container is-max-desktop">
-        <div class="columns">
-          <div class="column">
-            <div class="block has-text-centered">
-              <figure class="image is-inline-block">
-                <img style="max-height: 440px" src="{{ main_siteurl }}/theme/images/network.jpg" \>
-              </figure>
-            </div>
+    </div>
+    <div class="container is-max-desktop">
+      <div class="columns">
+        <div class="column">
+          <div class="block has-text-centered">
+            <figure class="image is-inline-block">
+              <img style="max-height: 440px"
+                   src="{{ main_siteurl }}/theme/images/network.jpg">
+            </figure>
           </div>
-          <div class="column is-three-fifths">
-            <div class="section">
-              <p class="subtitle is-3 is-spaced">A decentralized and open platform</p>
-              <p class="title is-5">Funkwhale consists of many independent pods which can communicate together.</p>
-              <p>This is based on open standards and free and open source technology. The network is not tied to any corporation or entity, which gives you independence and choice.</p>
-              <a class="button is-text mt-4 is-fullwidth">Find or start your pod</a>
-            </div>
+        </div>
+        <div class="column is-three-fifths">
+          <div class="section">
+            <p class="subtitle is-3 is-spaced">
+              A decentralized and open platform
+            </p>
+            <p class="title is-5">
+              Funkwhale consists of many independent pods which can communicate together.
+            </p>
+            <p>
+              This is based on open standards and free and open source technology. The network is not tied to any corporation or entity, which gives you independence and choice.
+            </p>
+            <a class="button is-text mt-4 is-fullwidth">Find or start your pod</a>
           </div>
         </div>
       </div>
-
-    </section>
-    {% include "inc/instances.html" %}
-    
-    {% include "inc/blogposts.html" %}
-    {% endblock %}
+    </div>
+  </section>
+  {% include "inc/instances.html" %}
+  {% include "inc/blogposts.html" %}
+{% endblock %}
diff --git a/theme/templates/page.html b/theme/templates/page.html
index 214c48a09b7518eac5e97c822068e9d0cd2a4388..2d966dd13d64d3d2c3dc3d5814a59b7f50e5aee6 100644
--- a/theme/templates/page.html
+++ b/theme/templates/page.html
@@ -1,12 +1,6 @@
 {% extends "base.html" %}
 {% block content %}
-
-    <section class="section">
-
-      <div class="container is-max-desktop content">
-        {{ page.content }}
-      </div>
-
-    </section>
-    
-    {% endblock %}
+  <section class="section">
+    <div class="container is-max-desktop content">{{ page.content }}</div>
+  </section>
+{% endblock %}