diff --git a/.gitlab/autodeploy/values.yaml b/.gitlab/autodeploy/values.yaml
deleted file mode 100644
index 75218058570439c625c6bc9d962427e6235f2ee8..0000000000000000000000000000000000000000
--- a/.gitlab/autodeploy/values.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-replicaCount: 1
-
-containerPort: 8080
-
-baseUrls:
-  - http://main-core-ui.main-e2e-stack.svc.cluster.local
-
-redis:
-  enabled: true
-  host: main-redis-master.main-e2e-stack.svc.cluster.local
-  prefix: ${CI_COMMIT_REF_SLUG}-${OX_COMPONENT}
-
-ingress:
-  enabled: false
-
-defaultRegistry: ""
-
-image:
-  registry: ""
-  repository: ${CI_REGISTRY_IMAGE}
-  pullPolicy: Always
-  tag: ${TAG_NAME}
-
-imagePullSecrets:
-  - name: gitlab-registry-credentials
-
-extras:
-  monitoring:
-    enabled: true
-
-resources:
-  limits:
-    cpu: 1
-    memory: 196Mi
-  requests:
-    cpu: 100m
-    memory: 196Mi
diff --git a/.gitlab/preview/.helmignore b/.gitlab/preview/.helmignore
new file mode 100644
index 0000000000000000000000000000000000000000..0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778
--- /dev/null
+++ b/.gitlab/preview/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/.gitlab/preview/Chart.lock b/.gitlab/preview/Chart.lock
new file mode 100644
index 0000000000000000000000000000000000000000..54f20f79b5290e6b6a819e3056d036d74e306bae
--- /dev/null
+++ b/.gitlab/preview/Chart.lock
@@ -0,0 +1,9 @@
+dependencies:
+- name: appsuite
+  repository: oci://registry.open-xchange.com/appsuite-core-internal/charts
+  version: 8.13.203
+- name: core-ui
+  repository: file://../../helm/core-ui
+  version: 2.12.1
+digest: sha256:5bfe47d7c20c9570fa20f61941f0a5c162bbb4c5da666f7c1d3e178d5fe15e29
+generated: "2023-03-22T14:19:50.405478+01:00"
diff --git a/.gitlab/preview/Chart.yaml b/.gitlab/preview/Chart.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..286a2206b77fbf5870d7a1cd096a4b5a0a6a1b5e
--- /dev/null
+++ b/.gitlab/preview/Chart.yaml
@@ -0,0 +1,36 @@
+apiVersion: v2
+name: preview
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
+
+dependencies:
+  - name: appsuite
+    version: ~8.13.0
+    repository: "oci://registry.open-xchange.com/appsuite-core-internal/charts"
+  - name: core-ui-middleware
+    version: ">=1.0.0-0"
+    repository: "file://../../helm/core-ui-middleware"
+  - name: redis
+    version: ^17.9.0
+    repository: https://charts.bitnami.com/bitnami
+    condition: redis.enabled, global.redis.enabled
diff --git a/.gitlab/preview/templates/NOTES.txt b/.gitlab/preview/templates/NOTES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f549c713d5cd44953be78347b3bda2022fd9070e
--- /dev/null
+++ b/.gitlab/preview/templates/NOTES.txt
@@ -0,0 +1,7 @@
+Thank you for trävelling with CI Building Blocks!
+
++=========================================={{ regexReplaceAll "." .Values.host "=" }}=+
+|                                          {{ regexReplaceAll "." .Values.host " " }} |
+| Your preview app is now ready at https://{{ .Values.host }} |
+|                                  ~~~~~~~~­{{ regexReplaceAll "." .Values.host "~" }} |
++=========================================={{ regexReplaceAll "." .Values.host "=" }}=+
diff --git a/.gitlab/autodeploy/kubernetes-resources.yaml b/.gitlab/preview/templates/kubernetes-resources.yaml
similarity index 82%
rename from .gitlab/autodeploy/kubernetes-resources.yaml
rename to .gitlab/preview/templates/kubernetes-resources.yaml
index 74f8ea41aee46708fa40230a718d1e8188dfd369..503ebd29e620ee631b7a1aeff0a41db6db6211ca 100644
--- a/.gitlab/autodeploy/kubernetes-resources.yaml
+++ b/.gitlab/preview/templates/kubernetes-resources.yaml
@@ -18,8 +18,26 @@ spec:
     - mesh
     - istio-system/default-gateway
   hosts:
-    - "${PREVIEW_APP_NAME}.dev.oxui.de"
+    - "{{ .Values.host }}"
   http:
+    - match:
+        - uri:
+            prefix: /help-documents
+      name: office-user-guide
+      route:
+        - destination:
+            host: preview-app-office-user-guide
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /help
+      name: user-guide
+      route:
+        - destination:
+            host: preview-app-core-user-guide
+            port:
+              number: 80
     - match:
         - uri:
             prefix: /api/oxguard/
@@ -135,7 +153,7 @@ spec:
         uri: /
       route:
         - destination:
-            host: ${OX_COMPONENT}
+            host: preview-app-core-ui-middleware
             port:
               number: 80
     - match:
@@ -144,10 +162,20 @@ spec:
       name: ui-middleware
       route:
         - destination:
-            host: ${OX_COMPONENT}
+            host: preview-app-core-ui-middleware
             port:
               number: 80
 ---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: preview-core-ui-middleware
+data:
+  config.yaml: |
+    baseUrls:
+      - http://preview-app-core-ui
+      - http://preview-app-office-web
+---
 apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
diff --git a/.gitlab/preview/values-template.yaml b/.gitlab/preview/values-template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..673e3693c234841908b059baccb285892e7d812f
--- /dev/null
+++ b/.gitlab/preview/values-template.yaml
@@ -0,0 +1,28 @@
+core-ui-middleware:
+  image:
+    repository: ${CI_REGISTRY_IMAGE}
+    tag: ${TAG_NAME}
+  redis:
+    enabled: true
+    host: preview-app-redis-master.${PREVIEW_APP_NAME}.svc.cluster.local
+    prefix: ${CI_COMMIT_REF_SLUG}-${OX_COMPONENT}
+host: ${PREVIEW_APP_NAME}.dev.oxui.de
+
+appsuite:
+  core-ui:
+    podAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+    deploymentAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+    redis:
+      prefix: ${CI_COMMIT_REF_SLUG}-${OX_COMPONENT}
+  core-guidedtours:
+    podAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+    deploymentAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+  office-web:
+    podAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+    deploymentAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
diff --git a/.gitlab/preview/values.yaml b/.gitlab/preview/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..628d8ec007454f0da91e26def91c54911335a3de
--- /dev/null
+++ b/.gitlab/preview/values.yaml
@@ -0,0 +1,161 @@
+global:
+  appsuite:
+    appRoot: "/"
+
+core-ui-middleware:
+  replicaCount: 1
+  existingConfigMap: preview-core-ui-middleware
+  containerPort: 8080
+
+  ingress:
+    enabled: false
+
+  defaultRegistry: ""
+
+  image:
+    registry: ""
+    pullPolicy: Always
+
+  imagePullSecrets:
+    - name: gitlab-registry-credentials
+
+  extras:
+    monitoring:
+      enabled: true
+
+  resources:
+    limits:
+      cpu: 1
+      memory: 196Mi
+    requests:
+      cpu: 100m
+      memory: 196Mi
+
+redis:
+  enabled: true
+  architecture: standalone
+  auth:
+    enabled: false
+  master:
+    persistence:
+      enabled: false
+  replica:
+    persistence:
+      enabled: false
+  metrics:
+    enabled: true
+  resources:
+    requests:
+      memory: 128Mi
+      cpu: 100m
+    limits:
+      memory: 256Mi
+      cpu: 250m
+
+appsuite:
+  core-ui-middleware:
+    enabled: false
+  core-ui:
+    image:
+      registry: registry.gitlab.open-xchange.com
+      repository: frontend/ui
+      tag: latest
+      pullPolicy: Always
+  core-user-guide:
+    image:
+        registry: registry.gitlab.open-xchange.com
+        repository: frontend/user-guide
+        tag: latest
+        pullPolicy: Always
+
+    ingress:
+      enabled: false
+    podAnnotations:
+      sidecar.istio.io/inject: "false"
+      sidecar.istio.io/proxyCPU: "100m"
+      sidecar.istio.io/proxyCPULimit: "200m"
+      sidecar.istio.io/proxyMemory: "128Mi"
+      sidecar.istio.io/proxyMemoryLimit: "128Mi"
+    resources:
+      requests:
+        cpu: "5m"
+        memory: "32Mi"
+      limits:
+        memory: "32Mi"
+
+  office-web:
+    enabled: true
+    image:
+      registry: registry.dev.oxui.de
+      repository: appsuite-core/office-web
+      tag: latest
+      pullPolicy: Always
+    ingress:
+      enabled: false
+    podAnnotations:
+      sidecar.istio.io/inject: "false"
+      sidecar.istio.io/proxyCPU: "100m"
+      sidecar.istio.io/proxyCPULimit: "200m"
+      sidecar.istio.io/proxyMemory: "128Mi"
+      sidecar.istio.io/proxyMemoryLimit: "128Mi"
+    resources:
+      requests:
+        cpu: "5m"
+        memory: "32Mi"
+      limits:
+        memory: "32Mi"
+
+  office-user-guide:
+    enabled: true
+    image:
+      registry: registry.gitlab.open-xchange.com
+      repository: documents/user-guide
+      tag: latest
+      pullPolicy: Always
+    ingress:
+      enabled: false
+    podAnnotations:
+      sidecar.istio.io/inject: "false"
+      sidecar.istio.io/proxyCPU: "100m"
+      sidecar.istio.io/proxyCPULimit: "200m"
+      sidecar.istio.io/proxyMemory: "128Mi"
+      sidecar.istio.io/proxyMemoryLimit: "128Mi"
+    resources:
+      requests:
+        cpu: "5m"
+        memory: "32Mi"
+      limits:
+        memory: "32Mi"
+
+  core-guidedtours:
+    enabled: false
+
+  guard-ui:
+    enabled: false
+
+  core-documents-collaboration:
+    enabled: false
+
+  core-documentconverter:
+    enabled: false
+
+  core-imageconverter:
+    enabled: false
+
+  core-spellcheck:
+    enabled: false
+
+  core-mw:
+    enabled: false
+
+  plugins-ui:
+    enabled: false
+
+  cloud-plugins-ui:
+    enabled: false
+
+  core-drive-help:
+    enabled: false
+
+  drive-client-windows-ox:
+    enabled: false