diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8551b9eb54f6582ca867acb77486de5bc3d17aa7..6b888263bd83a9da2a3634686f5443d25fa5dab2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,9 +2,11 @@ variables:
   GIT_SUBMODULE_STRATEGY: recursive
 
 stages:
-- build
-- test
-- publish
+  - build
+  - test
+  - ragdoc_build
+  - ragdoc_view
+  - publish
 
 before_script:
   - export GRADLE_USER_HOME=`pwd`/.gradle
@@ -22,6 +24,7 @@ build:
   artifacts:
     paths:
       - "ragconnect.base/build/libs/ragconnect-*.jar"
+      - "src/gen"
     expire_in: 1 week
 
 test:
@@ -32,10 +35,6 @@ test:
       alias: "mqtt"
   script:
     - ./gradlew --console=plain --no-daemon allTests
-    - ls -lh
-    - ls -lh ragconnect.tests
-    - ls -lh ragconnect.tests/build/test-results/
-    - ls -lh ragconnect.tests/build/test-results/allTests
   artifacts:
     when: always
     reports:
@@ -50,6 +49,39 @@ publish:
   only:
     - master
 
+ragdoc_build:
+  image:
+    name: "git-st.inf.tu-dresden.de:4567/jastadd/ragdoc-builder"
+    entrypoint: [""]
+  stage: ragdoc_build
+  dependencies:
+    - build
+  script:
+    - JAVA_FILES=$(find src/ -name '*.java')
+    - /ragdoc-builder/start-builder.sh -excludeGenerated -d data/ $JAVA_FILES
+  artifacts:
+    paths:
+      - "data/"
+
+ragdoc_view:
+  image:
+    name: "git-st.inf.tu-dresden.de:4567/jastadd/ragdoc-view:relations"
+    entrypoint: [""]
+  stage: ragdoc_view
+  dependencies:
+    - ragdoc_build
+  script:
+    - DATA_DIR=$(pwd -P)/data
+    - mkdir -p pages/_static/ragdoc
+    - OUTPUT_DIR=$(pwd -P)/pages/_static/ragdoc
+    - cd /ragdoc-view
+    - ( cd src/ && rm -rf data && ln -s $DATA_DIR )
+    - /ragdoc-view/build-view.sh --output-path=$OUTPUT_DIR
+    - ls -lah $OUTPUT_DIR
+  artifacts:
+    paths:
+      - "pages/_static/ragdoc"
+
 pages:
   image: python:3.7-alpine
   stage: publish
@@ -59,5 +91,3 @@ pages:
   artifacts:
     paths:
     - public
-  only:
-  - master
diff --git a/pages/inner-workings.md b/pages/inner-workings.md
index 9a244b9e72debabc3cdb138c7654fb66ce217f53..4f467a8f316584aa92a13dd11cf7812155960e4e 100644
--- a/pages/inner-workings.md
+++ b/pages/inner-workings.md
@@ -1,5 +1,7 @@
 # Inner workings of `RagConnect`
 
+Please see [API documentation](_static/ragdoc/index.html) for more details.
+
 ![ros2rag-process](images/ros2rag-process.png)
 
 `RagConnect` uses the [relast-preprocessor](https://git-st.inf.tu-dresden.de/jastadd/relast-preprocessor) to parse `.relast` grammar files. This results in an ASTNode of type `Program`.