diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f5f5e6909186a4871e0a6c7028fed8b353bf6bcb..b09033a2010b06975527741674b45ffb8c4937b3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,7 @@
 include:
   - local: 'images/.utils/gitlab-ci.yaml'
   - local: 'charts/.utils/gitlab-ci.yaml'
+  - local: 'docs/gitlab-ci.yaml'
 stages:
   - lint
   - build
diff --git a/docs/.gitlab-ci.yaml b/docs/.gitlab-ci.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..077231145b1a9a851ab21272794a327ac493c726
--- /dev/null
+++ b/docs/.gitlab-ci.yaml
@@ -0,0 +1,34 @@
+stages:
+    - build
+
+pages:
+  stage: build
+  image: docker.io/library/rust
+  variables:
+    CARGO_HOME: $CI_PROJECT_DIR/cargo
+  before_script:
+    - export PATH="$PATH:$CARGO_HOME/bin"
+    - mdbook --version || cargo install mdbook
+  script:
+    - mdbook build -d public
+  rules:
+    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
+  artifacts:
+    expire_in: 1 week
+    paths:
+      - public
+  cache:
+    paths:
+      - $CARGO_HOME/bin
+
+upload:
+  stage: release
+  image:
+    name: docker.io/minio/mc
+    entrypoint: ['']
+  before_script:
+    - mc alias set minio $GITOPS_DOCS_MINIO_ENDPOINT $GITOPS_DOCS_MINIO_ACCESS_KEY $GITOPS_DOCS_MINIO_ACCESS_SECRET
+  script:
+    - mc cp public gitops-docs
+  rules:
+    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
\ No newline at end of file
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index d099dd4e6c3e69de2273e32b89bc144e7c3cc9b1..0000000000000000000000000000000000000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-
-include ../utils/help.mk
-
-.PHONY: serve
-serve: ## Render docs locally and provide them on localhost
-	cd ../ && koolbox mdbook serve docs
-
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
index b6188c563c89fee6a464761f415533ecb1748de9..d95e067328d943ac5c0d94eb651f108b3bfdb1b0 100644
--- a/docs/src/SUMMARY.md
+++ b/docs/src/SUMMARY.md
@@ -3,35 +3,30 @@
 # Infrastructure
 
 - [About](about.md)
-- [Hardware]()
+- [Hardware](hardware/README.md)
   - [Node](hardware/node.md)
   - [NAS](hardware/nas.md)
+  - [UPS](hardware/ups.md)
 - [Operating System](operating_system.md)
-- [Network]()
-- [Continuous Integration]()
-- [GitOps]()
+- [Concepts](concepts/README.md)
+  - [GitOps](concepts/gitops.md)
+  - [SRE](concepts/sre.md)
 - [Infrastructure Components](components/README.md)
   - [calico](components/calico.md)
   - [cert-manager](components/cert-manager.md)
-  - [flux]()
-  - [k8up](components/k8up.md)
+  - [flux](components/flux.md)
   - [longhorn](components/longhorn.md)
   - [metallb](components/metallb.md)
-  - [monitoring]()
+  - [monitoring](components/monitoring.md)
   - [nginx-system](components/nginx-system.md)
   - [node-features](components/node-features.md)
-  - [starboard](components/starboard.md)
   - [system-upgrades](components/system-upgrades.md)
-- [Apps]()
-  - [DNS]()
-  - [hcloud-dynfw]()
-  - [mail]()
-  - [Matrix]()
-  - [Nextcloud]()
-  - [Registry]()
 - [Helm Charts](charts/README.md)
+  - [HedgeDoc](charts/hedgedoc.md)
   - [Keycloak](charts/keycloak.md)
+  - [Mastodon](charts/mastodon.md)
   - [MoK](charts/mok.md)
+  - [nut-exporter](charts/nut-exporter.md)
 - [Images](images/README.md)
   - [Demo](images/demo.md)
   - [Dovecot](images/dovecot.md)
diff --git a/docs/src/about.md b/docs/src/about.md
index 9bd8809ef23199498ceb8c74be85ebe1c0c8eae0..8146bbe8ae9a47d6bfae5fa7039c7cbe19fa698e 100644
--- a/docs/src/about.md
+++ b/docs/src/about.md
@@ -1,3 +1,5 @@
 # About
 
-This documentation provides some insight into the Sivering-Isles GitOps Infrastructure. Into concepts, useful information and a general overview over all the different parts of the overall project.
+The Shivering-Isles (SI) Infrastructure is the home infrastructure of Sheogorath. It's a production infrastructure that runs various services including Instant Messenging, E-Mail but also multi-media services and hosting various websites.
+
+This documentation provides some insight into the Shivering-Isles Infrastructure. Like every documentation of a living system, it's incomplete and out-of-date.
\ No newline at end of file
diff --git a/docs/src/charts/hedgedoc.md b/docs/src/charts/hedgedoc.md
new file mode 120000
index 0000000000000000000000000000000000000000..c33a6b815bfb69d8d882ad6d5546c80303c98260
--- /dev/null
+++ b/docs/src/charts/hedgedoc.md
@@ -0,0 +1 @@
+../../../charts/hedgedoc/README.md
\ No newline at end of file
diff --git a/docs/src/charts/mastodon.md b/docs/src/charts/mastodon.md
new file mode 120000
index 0000000000000000000000000000000000000000..aa4ff349752b36def84450e2091e2bfd3b919dfd
--- /dev/null
+++ b/docs/src/charts/mastodon.md
@@ -0,0 +1 @@
+../../../charts/mastodon/README.md
\ No newline at end of file
diff --git a/docs/src/charts/nut-exporter.md b/docs/src/charts/nut-exporter.md
new file mode 120000
index 0000000000000000000000000000000000000000..f6e19d3b81803dfd6ed1ebca8ca3a6e91c83535a
--- /dev/null
+++ b/docs/src/charts/nut-exporter.md
@@ -0,0 +1 @@
+../../../charts/nut-exporter/README.md
\ No newline at end of file
diff --git a/docs/src/components/flux.md b/docs/src/components/flux.md
new file mode 100644
index 0000000000000000000000000000000000000000..63c524b71bd289630fc8cc0f81b12a44d14eb2fe
--- /dev/null
+++ b/docs/src/components/flux.md
@@ -0,0 +1,12 @@
+# FluxCD
+
+FluxCD is a GitOps controller. It synchronizes the content of a Git repository with a Kubernetes Cluster and makes sure the configurations are applied.
+
+The main advantage over a push based approach such as a CI pipeline, is that a GitOps operator continously reconciles the state and and runs on fully standardised operations. This avoids temporary and custom state in that is common in CI pipelines that might become hard to reproduce once the pipeline is gone.
+
+Links
+---
+
+- [Docs](https://fluxcd.io/flux/)
+- [Source Code](https://github.com/fluxcd/flux2)
+- [Help Forum](https://github.com/fluxcd/flux2/discussions)
diff --git a/docs/src/components/k8up.md b/docs/src/components/k8up.md
deleted file mode 120000
index da5bac019050c4c57b26e71509b5a2ff82525cd5..0000000000000000000000000000000000000000
--- a/docs/src/components/k8up.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../infrastructure/k8up/README.md
\ No newline at end of file
diff --git a/docs/src/components/monitoring.md b/docs/src/components/monitoring.md
new file mode 120000
index 0000000000000000000000000000000000000000..839d379a0f18914f8ef0268891f765faca0d28d5
--- /dev/null
+++ b/docs/src/components/monitoring.md
@@ -0,0 +1 @@
+../../../infrastructure/monitoring/README.md
\ No newline at end of file
diff --git a/docs/src/concepts/README.md b/docs/src/concepts/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..74d42e13cdfa301e509e7d989dfc0fcd708fa5b7
--- /dev/null
+++ b/docs/src/concepts/README.md
@@ -0,0 +1 @@
+# Concepts
diff --git a/docs/src/concepts/gitops.md b/docs/src/concepts/gitops.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3a47f8e0838e414dc0e3505a8bd69313c665ef0
--- /dev/null
+++ b/docs/src/concepts/gitops.md
@@ -0,0 +1,5 @@
+# GitOps
+
+The Shivering-Isles Infrastructure uses GitOps as central concept to maintain the Kubernetes cluster and deploy changes to production. Centralising around git as Single Source of Truth without dynmaic state provides an easier way to verify changes. It also reduces the amount of trust put into the CI system by enforcing signed commits on the GitOps operator side.
+
+The current tool of choice to implement GitOps in the Shivering-Isles Infrastructure is [FluxCD](https://fluxcd.io/) in combination with a monorepo.
\ No newline at end of file
diff --git a/docs/src/concepts/sre.md b/docs/src/concepts/sre.md
new file mode 100644
index 0000000000000000000000000000000000000000..672b1d7ed7b9266b20763457a92322d8564422e6
--- /dev/null
+++ b/docs/src/concepts/sre.md
@@ -0,0 +1,19 @@
+# Site reliability engineering
+
+> Site reliability engineering (SRE) is a set of principles and practices that  applies aspects of software engineering to IT infrastructure and operations.
+>
+> — [Wikipedia](https://en.wikipedia.org/w/index.php?title=Site_reliability_engineering&oldid=1191456683)
+
+In the Shivering-Isles Infrastructure various apps have an own set of SLOs to validate for service degration on changes. It's also a good pratice for SRE in other environments.
+
+Besides maintaining reasonable SLOs, other SRE practices are implemented, such as post mortems and especially the practice of reducing toil. All components of the infrastructure have a maintence budget, if it's depleted, it's time to fix the apps or get rid of it.
+
+Learing about SRE
+---
+
+A good start is this small video Series by Google:
+
+<iframe width="100%" height="480" src="https://www.youtube-nocookie.com/embed/?listType=playlist&list=PLIivdWyY5sqJrKl7D2u-gmis8h9K66qoj" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
+
+
+Further there is the [Google SRE book](https://sre.google/sre-book/introduction/), which I can highly recommend.
\ No newline at end of file
diff --git a/docs/src/hardware/README.md b/docs/src/hardware/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..133032340eb6064347062583994628cb82ea77c1
--- /dev/null
+++ b/docs/src/hardware/README.md
@@ -0,0 +1,5 @@
+# Hardware
+
+This is an overview of the hardware currently deployed.
+
+The main goal of this section is to make it easy to refer to the currently used hardware without the need to repeat all the details over and over again.
\ No newline at end of file
diff --git a/docs/src/hardware/nas.md b/docs/src/hardware/nas.md
index 1689697567ae61e42d05cb3c245a8707a441304e..f49beaad6e7a4c1f819ba20faaea2796653d4bd6 100644
--- a/docs/src/hardware/nas.md
+++ b/docs/src/hardware/nas.md
@@ -8,9 +8,9 @@ In this case the NAS exists to provide bulk storage, as well as a local backup l
 
 |Part | Type | Reasoning |
 |-----|------|-----------|
-|["Terra-master F4-423"](https://www.terra-master.com/us/products/smallmedium-businesses-nas/f4-423.html)| board, processor, chassis and power supply | It's provides some nice hardware, with x86_64 processor in it, which allows to install an OS like Truenas on it.|
+|["Terra-master F4-423"](https://www.terra-master.com/us/products/smallmedium-businesses-nas/f4-423.html)| board, processor, chassis and power supply | It's provides some nice hardware, with x86_64 processor in it, which allows to install an OS like TrueNAS on it.|
 |[16GB of 2666MHz DDR4 RAM](https://www.crucial.com/memory/ddr4/ct2k8g4sfra266)|RAM|By default, the Terramaster only ships with 4GB, which is way to little for TrueNAS. 16GB because that's the max supported by the processor [according to Intel](https://www.intel.com/content/www/us/en/products/sku/212322/intel-celeron-processor-n5095-4m-cache-up-to-2-90-ghz/specifications.html).|
-|2x [Crucial P2 250GB NVMe](https://www.crucial.com/ssd/p2/CT250P2SSD8)| NVMe | The original intend was to put TIL and L2ARC on this drive, but currently 1 drive is hosting the OS, the other is used as L2ARC, this might needs some optimisation.|
+|2x [Crucial P2 250GB NVMe](https://www.crucial.com/ssd/p2/CT250P2SSD8)| NVMe | The original intend was to put ZIL and L2ARC on this drive, but currently the drives just host the TrueNAS OS.|
 |4x [6TB WD Red Plus drives](https://www.westerndigital.com/products/internal-drives/wd-red-plus-sata-3-5-hdd#WD60EFZX) | HDD | These drives provide the bulk storage for the NAS and are rated as NAS drives [without SMR](https://en.wikipedia.org/w/index.php?title=Shingled_magnetic_recording&oldid=1088076284#History).|
 
 ## Setup
diff --git a/docs/src/hardware/ups.md b/docs/src/hardware/ups.md
new file mode 100644
index 0000000000000000000000000000000000000000..62fae8e62fb997dd2d5ef827fc94a90a0aff5118
--- /dev/null
+++ b/docs/src/hardware/ups.md
@@ -0,0 +1,30 @@
+# UPS
+
+The Uninterruptible Power Supply (UPS) is a battery buffered power plug. It help to cover short energy outages as well as providing over current protection to devices behind it. As a bonus, it also provides some metrics, which can be used to measure the overall power draw of devices attached.
+
+## Parts
+
+|Part | Type | Reasoning |
+|-----|------|-----------|
+| ["APC Back-UPS 850VA"](https://www.apc.com/de/de/product/BE850G2-GR/apc-backups-850va-230v-usb-typc-und-a-ladeanschl%C3%BCsse-batterie-12v-9-0ah/?parent-subcategory-id=88975) | UPS | It's a relatively cheap and simple UPS. Does its job and provides enough capacity to keep everything running for roughly 20 minutes. |
+
+## Setup
+
+The UPS provides 8 sockets in total, 6 of them are battery buffered and provide overcurrent protection, the remaining two only have overcurrent protection.
+
+The current layout with the UPS' power cord leaving at the bottom.
+
+| Left | Right |
+|------|-------|
+| empty | NAS |
+| empty | infra power socket (Nodes, network, …) |
+| empty | empty |
+| empty | Office tools (Notebook, Monitors, …) |
+
+There went no further thought in the arrangement beyond: Laptops have their own battery and when the monitors turn of, it won't hurt. Everything else should continue to operate.
+
+The UPS itself is connected using a USB to serial cable to the USB-Port of the NAS, which distributes the state of the UPS over using ["Network UPS Tools"](https://networkupstools.org/) (NUT) and is monitored using [nut-exporter](https://github.com/DRuggeri/nut_exporter), which is running in the Kubernetes cluster.
+
+## Power usage
+
+The is currently no measurement for the power usage of the UPS itself. Device that are battery buffered are currently using between 100 and 120 watts of power according to stats collected with nut-exporter.
diff --git a/docs/src/images/demo.md b/docs/src/images/demo.md
deleted file mode 120000
index e4dd80b16e5333a40bc7327d294430fe481eb18a..0000000000000000000000000000000000000000
--- a/docs/src/images/demo.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../images/demo/README.md
\ No newline at end of file
diff --git a/docs/src/images/demo.md b/docs/src/images/demo.md
new file mode 100644
index 0000000000000000000000000000000000000000..0805455a24b6c68fbc38d0fa5d121f735984285d
--- /dev/null
+++ b/docs/src/images/demo.md
@@ -0,0 +1 @@
+# Demo
diff --git a/docs/src/operating_system.md b/docs/src/operating_system.md
index 237e9e46bb326872d97a336865e28e7e1f209666..06611946ee19e6dcf797e9613134819c2de1ca83 100644
--- a/docs/src/operating_system.md
+++ b/docs/src/operating_system.md
@@ -19,21 +19,18 @@ The OS requirements to run the current setup are:
 
 Currently the following script is used for set up:
 
-```
+```bash
 #!/bin/bash
 
 # System upgrade
 dnf upgrade -y
 
-# Prepare Kubernetes
-dnf copr enable -y "sheogorath/kubernetes-1.22"
-dnf install -y kubernetes kubernetes-kubeadm
-
-# Install Crio as container engine
-dnf module enable -y cri-o:1.22
-dnf install -y cri-o cri-tools
+# Install cri-o and kubernetes
+dnf copr enable -y "sheogorath/kubernetes-1.28"
+dnf install -y cri-o cri-tools kubernetes kubernetes-kubeadm
 systemctl enable --now crio
 
+
 # Load kernel modules for Kubernetes and Calico
 modprobe br_netfilter
 modprobe wireguard
@@ -74,9 +71,6 @@ dnf install -y clevis-dracut
 clevis luks bind -d /dev/nvme0n1p3 tpm2 '{}'
 dracut -f
 
-# Install management interface
-dnf install -y cockpit cockpit-pcp
-
 reboot
 ```
 
diff --git a/images/postfix/README.md b/images/postfix/README.md
index 0c9660584f4fd90923941dc213573977a61c8994..293d9c460321d9bf393a23fd87c6ed2bf17b671d 100644
--- a/images/postfix/README.md
+++ b/images/postfix/README.md
@@ -3,7 +3,7 @@ Postfix
 
 Postfix container image intended for use in Kubernetes with plain text user backend.
 
-The goal of this postfix image is to be preconfigured to utilse Kubernetes configmaps and secrets to become useful. It doesn't come with external database backend.
+This container image is kept minimal and all configs are supplied as part of the MoK Helm chart.
 
 Expectations
 ---
diff --git a/infrastructure/monitoring/README.md b/infrastructure/monitoring/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..49b498282541904d6a97fc22bb841b1567223438
--- /dev/null
+++ b/infrastructure/monitoring/README.md
@@ -0,0 +1,16 @@
+Monitoring
+===
+
+The monitoring is built around the `kube-prometheus-stack`. The standard monitoring stack in the Kubernetes space. It's based on the prometheus-operator, that manages Prometheus and Alertmanager and integtrates them with the Kubernetes API, and Grafana, which is used to provide dashboards and visualisation.
+
+Additionally it deploys Sloth, as SLO solution. It provides an SLO CRD to allow apps to define their own SLOs which can provide lazier alerting based on error budgets.
+
+Links
+---
+
+- [prometheus-operator Docs](https://prometheus-operator.dev/)
+- [kube-prometheus-stack Helm Chart](https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack)
+- [kube-prometheus-stack Source Code](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)
+- [Sloth Docs](https://sloth.dev/)
+- [Sloth Helm Chart](https://artifacthub.io/packages/helm/sloth/sloth)
+- [Sloth Source Code](https://github.com/slok/sloth/)
\ No newline at end of file