diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 03c016d8ed8627f9df1ba1d0ea6beadde4b2f298..1ca81acf95e0e7ade693b0b2431b7962eedba884 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,8 +3,7 @@ variables:
 
 stages:
   - test
-  - compliance
-  - build
+  - documentation
 
 before_script:
   - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
diff --git a/build/ci/.documentation-ci.yml b/build/ci/.documentation-ci.yml
index 084f3f76bcbb1e81aee772f0b85ca9c1beb22c72..b663512a610b51190eab2712d4727e9388cdef3a 100644
--- a/build/ci/.documentation-ci.yml
+++ b/build/ci/.documentation-ci.yml
@@ -1,11 +1,11 @@
-Documentation:
+documentation:pdf:
   before_script:
     - pwd
   image:
     name: pandoc/latex
     entrypoint:
     - ''
-  stage: build
+  stage: documentation
   rules:
     - changes:
       - documentation/design/*.md
@@ -16,3 +16,31 @@ Documentation:
   artifacts:
     paths:
     - documentation/design/documentation.pdf
+
+.mdbook_common: &rust
+  before_script:
+      - cargo install mdbook
+  image:
+    name: rustdocker/rust:stable
+  stage: documentation
+  script:
+  - pwd
+  - ls
+  - mdbook build documentation --dest-dir public
+  cache:
+    paths:
+    - /root/.cargo/
+
+documentation:static:
+  rules:
+    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
+  artifacts:
+    paths:
+      - public
+    expire_in: 1 week
+  <<: *rust
+
+documentation:test:
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
+  <<: *rust
diff --git a/build/ci/.golangci-config/.runlint.sh b/build/ci/.golangci-config/.runlint.sh
index 224a4061c57de8f914c3fce374ce49f68b3b9062..7b0012a32e7d08ffa9de118104d51f8d129c6aee 100755
--- a/build/ci/.golangci-config/.runlint.sh
+++ b/build/ci/.golangci-config/.runlint.sh
@@ -1,4 +1,4 @@
 golangci-lint run\
   --config .ci/.golangci-master.yml\
   --out-format code-climate |\
-  jq -r '.[] | "\(.location.path):\(.location.lines.begin) \(.description)"'
\ No newline at end of file
+  jq -r '.[] | "\(.location.path):\(.location.lines.begin) \(.description)"'
diff --git a/build/ci/.security-and-compliance-ci.yml b/build/ci/.security-and-compliance-ci.yml
index 119583ea0c3683930959cfb0ce43f284caa4cf8e..3e98b739e62763538a6e6fe0d5bcf9259b91fbbd 100644
--- a/build/ci/.security-and-compliance-ci.yml
+++ b/build/ci/.security-and-compliance-ci.yml
@@ -3,13 +3,6 @@ sast:
     SAST_ANALYZER_IMAGE_TAG: '2'
     SAST_EXCLUDED_PATHS: spec, test, tests, tmp
     SEARCH_MAX_DEPTH: '4'
-  stage: compliance
-
-license_scanning:
-  stage: compliance
-
-gemnasium-dependency_scanning:
-  stage: compliance
 
 include:
   - template: Security/SAST.gitlab-ci.yml
diff --git a/documentation/SUMMARY.md b/documentation/SUMMARY.md
new file mode 100644
index 0000000000000000000000000000000000000000..b528cff5f125ce637633ddfc2de3d8179241c91e
--- /dev/null
+++ b/documentation/SUMMARY.md
@@ -0,0 +1,7 @@
+# goSDN Documentation
+
+- [Introduction](design/01-introduction.md)
+- [Related Work](design/02-related-work.md)
+- [Theoretical Background](design/03-theoretical-background.md)
+- [Conceptual Design](design/04-conceptual-design.md)
+- [Implementation](design/05-implementation.md)
\ No newline at end of file
diff --git a/documentation/book.toml b/documentation/book.toml
new file mode 100644
index 0000000000000000000000000000000000000000..e59652fea44b560a604d19abe5faf38b06f2a612
--- /dev/null
+++ b/documentation/book.toml
@@ -0,0 +1,5 @@
+[book]
+authors = []
+language = "en"
+multilingual = false
+src = "."