diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 566132879e173bfe2cdebd0ddcdfcd1571efa141..375686cf78ec7160894a5900c4d04dbe46c74260 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -30,6 +30,19 @@ deploy preview with prefix:
     - helm upgrade -i preview-prefix helm/core-ui-middleware -f tmp-values.yaml --wait --timeout=$ROLLOUT_TIMEOUT
   environment: null
 
+deploy preview with sentinel redis:
+  extends: .auto-deploy-preview-chart
+  script:
+    - !reference [.setup-k8s, script]
+    - !reference [.customize-k8s, script]
+    - !reference [.create-image-pull-secrets, script]
+    - envsubst < .gitlab/preview-sentinel/values-template.yaml > tmp-values.yaml
+    - !reference [.login-registry-ro, script]
+    - helm dep up helm/core-ui-middleware
+    - helm dep up .gitlab/preview-sentinel
+    - helm upgrade -i preview-sentinel .gitlab/preview-sentinel -f tmp-values.yaml --wait --timeout=$ROLLOUT_TIMEOUT
+  environment: null
+
 .smoketest-rules:
   rules:
     - if: $CI_COMMIT_REF_NAME =~ /^(\d+\.\d+\.\d+)$/
@@ -78,3 +91,22 @@ ui smoketests with prefix:
     - echo "LAUNCH_URL=$LAUNCH_URL"
   script:
     - yarn e2e-rerun @smoketest
+
+ui smoketests with sentinel redis:
+  image: registry.gitlab.open-xchange.com/frontend/ui/e2e:latest
+  extends:
+    - .e2e-codeceptjs-preview
+    - .smoketest-rules
+  variables:
+    PROVISIONING_URL: https://appsuite-main.dev.oxui.de/
+  tags:
+    - e2e-hetzner
+  timeout: 15 minutes
+  before_script:
+    - !reference [.e2e-codeceptjs-preview, before_script]
+    - unset SUITE_SERVICE_URL
+    - export E2E_ADMIN_PW=$ADMIN_PW
+    - export LAUNCH_URL=https://$PREVIEW_APP_NAME-sentinel.dev.oxui.de/appsuite/
+    - echo "LAUNCH_URL=$LAUNCH_URL"
+  script:
+    - yarn e2e-rerun @smoketest
diff --git a/.gitlab/preview-sentinel/.helmignore b/.gitlab/preview-sentinel/.helmignore
new file mode 100644
index 0000000000000000000000000000000000000000..0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778
--- /dev/null
+++ b/.gitlab/preview-sentinel/.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-sentinel/Chart.lock b/.gitlab/preview-sentinel/Chart.lock
new file mode 100644
index 0000000000000000000000000000000000000000..3351b9072b8cdd98ef23f4eaf648b96eaf2e503b
--- /dev/null
+++ b/.gitlab/preview-sentinel/Chart.lock
@@ -0,0 +1,9 @@
+dependencies:
+- name: redis
+  repository: https://charts.bitnami.com/bitnami
+  version: 17.11.6
+- name: core-ui-middleware
+  repository: file://../../helm/core-ui-middleware
+  version: 2.0.1
+digest: sha256:01d9f06396158f95de70fca261605e362628029bb6c83777fd54053531354747
+generated: "2023-06-27T16:29:37.378205+02:00"
diff --git a/.gitlab/preview-sentinel/Chart.yaml b/.gitlab/preview-sentinel/Chart.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b37c9f21bcb5d6fc23531309c1656f9dec1029e9
--- /dev/null
+++ b/.gitlab/preview-sentinel/Chart.yaml
@@ -0,0 +1,33 @@
+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: redis
+    version: ~17.11.6
+    repository: "https://charts.bitnami.com/bitnami"
+  - name: core-ui-middleware
+    version: ">=1.0.0-0"
+    repository: "file://../../helm/core-ui-middleware"
+
diff --git a/.gitlab/preview-sentinel/templates/NOTES.txt b/.gitlab/preview-sentinel/templates/NOTES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f549c713d5cd44953be78347b3bda2022fd9070e
--- /dev/null
+++ b/.gitlab/preview-sentinel/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/preview-sentinel/templates/kubernetes-resources.yaml b/.gitlab/preview-sentinel/templates/kubernetes-resources.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a43a0d0cd5503ed91895161f772eaa23bae06a7c
--- /dev/null
+++ b/.gitlab/preview-sentinel/templates/kubernetes-resources.yaml
@@ -0,0 +1,171 @@
+apiVersion: networking.istio.io/v1beta1
+kind: VirtualService
+metadata:
+  name: preview-app-sentinel
+spec:
+  gateways:
+    - mesh
+    - istio-system/default-gateway
+  hosts:
+    - "{{ .Values.host }}"
+  http:
+    - match:
+        - uri:
+            prefix: /appsuite/help-documents
+      name: office-user-guide
+      rewrite:
+        uri: /help-documents
+      route:
+        - destination:
+            host: preview-app-office-user-guide
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /appsuite/help
+      name: user-guide
+      rewrite:
+        uri: /help
+      route:
+        - destination:
+            host: preview-app-core-user-guide
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /api/oxguard/
+      name: guard-routes
+      rewrite:
+        uri: /oxguard/
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /pks/
+      name: guard-pgp-routes
+      rewrite:
+        uri: /oxguard/pgp/
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /appsuite/api/
+      name: appsuite-api
+      rewrite:
+        uri: /api/
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /api
+      name: api-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /ajax/
+      name: ajax-routes
+      rewrite:
+        uri: /appsuite/api/
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /servlet/
+      name: servlet-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /realtime/
+      name: realtime-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /infostore/
+      name: infostore-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /socket.io/
+      name: socket-io-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /rt2/
+      name: rt2-routes
+      rewrite:
+        uri: /rt2/
+      route:
+        - destination:
+            host: main-core-mw-http-api
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /webservices/
+      name: soap-routes
+      route:
+        - destination:
+            host: main-core-mw-http-api
+    - match:
+        - uri:
+            prefix: /office
+      name: office-service
+      rewrite:
+        uri: /appsuite/
+      route:
+        - destination:
+            host: preview-sentinel-core-ui-middleware
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /appsuite/
+      name: ui-middleware
+      route:
+        - destination:
+            host: preview-sentinel-core-ui-middleware
+            port:
+              number: 80
+    - match:
+        - uri:
+            prefix: /
+      name: ui-middleware-root
+      rewrite:
+        uri: /appsuite
+      route:
+        - destination:
+            host: preview-sentinel-core-ui-middleware
+            port:
+              number: 80
diff --git a/.gitlab/preview-sentinel/values-template.yaml b/.gitlab/preview-sentinel/values-template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..280f7be7adbfba9f594e69ae2c9a0f66235a8ff1
--- /dev/null
+++ b/.gitlab/preview-sentinel/values-template.yaml
@@ -0,0 +1,26 @@
+core-ui-middleware:
+  podAnnotations:
+    commit-ref: "${CI_COMMIT_SHORT_SHA}"
+  deploymentAnnotations:
+    commit-ref: "${CI_COMMIT_SHORT_SHA}"
+  image:
+    repository: ${CI_REGISTRY_IMAGE}
+    tag: ${TAG_NAME}
+host: ${PREVIEW_APP_NAME}-sentinel.dev.oxui.de
+
+appsuite:
+  core-ui:
+    podAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+    deploymentAnnotations:
+      commit-ref: "${CI_COMMIT_SHORT_SHA}"
+  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-sentinel/values.yaml b/.gitlab/preview-sentinel/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..85abe938421cade6eee3afa8a37fb47b84d01ca0
--- /dev/null
+++ b/.gitlab/preview-sentinel/values.yaml
@@ -0,0 +1,55 @@
+redis:
+  enabled: true
+  commonLabels:
+    app: redis-sentinel
+    version: "17"
+  auth:
+    enabled: false
+  master:
+    persistence:
+      enabled: false
+  replica:
+    persistence:
+      enabled: false
+  sentinel:
+    enabled: true
+    replicas: 3
+    usePassword: false
+    persistence:
+      enabled: false
+    resources:
+      requests:
+        cpu: 100m
+        memory: 256Mi
+      limits:
+        cpu: 1
+        memory: 256Mi
+
+core-ui-middleware:
+  replicaCount: 3
+  redis:
+    mode: sentinel
+    hosts:
+      - preview-sentinel-redis:26379
+  existingConfigMap: preview-core-ui-middleware
+
+  defaultRegistry: ""
+
+  image:
+    registry: ""
+    pullPolicy: Always
+
+  imagePullSecrets:
+    - name: gitlab-registry-credentials
+
+  extras:
+    monitoring:
+      enabled: true
+
+  resources:
+    limits:
+      cpu: 1
+      memory: 384Mi
+    requests:
+      cpu: 100m
+      memory: 384Mi
diff --git a/helm/core-ui-middleware/Chart.lock b/helm/core-ui-middleware/Chart.lock
index 4889fa96f77eaa4924df4033fd1762f6657d81fb..6b6f75e9bb1c0b8d2e7119f20fef878fc797829f 100644
--- a/helm/core-ui-middleware/Chart.lock
+++ b/helm/core-ui-middleware/Chart.lock
@@ -1,6 +1,6 @@
 dependencies:
 - name: ox-common
   repository: oci://registry.open-xchange.com/appsuite-core-internal/charts
-  version: 1.0.33
-digest: sha256:25056384361feffb1aa6bc8876508390a39056bcad316edeeba2af4c217d57a7
-generated: "2023-04-12T14:21:43.9129+02:00"
+  version: 1.0.34
+digest: sha256:00d5f57a7498b424accd03e381225d679e3c09f67d98bfe50309cf2577b3b1aa
+generated: "2023-06-27T16:48:24.917469+02:00"