diff --git a/.docs/DEVELOPMENT.md b/.docs/dev-guide-app.md
similarity index 70%
rename from .docs/DEVELOPMENT.md
rename to .docs/dev-guide-app.md
index c5ab158886b974f710455783d4fb12c38ecaa4cd..6d20ae5065bf8bd52555dcb0869ad9c4096f9ebe 100644
--- a/.docs/DEVELOPMENT.md
+++ b/.docs/dev-guide-app.md
@@ -1,16 +1,17 @@
-# Development Guide
+# Application Developer Guide
 
 ## Dependencies
 
-Local development depends on the following packages:
+Local development depends on the following packages for Debian 12:
 
-* [Apache Maven](https://maven.apache.org/) 3+
-* [Java JDK](https://openjdk.org/) 17 (LTS)
-* [Docker Engine](https://docs.docker.com/engine/install/) 24+
+```shell
+apt install -y maven openjdk-17-jdk make
+```
 
-Optional but recommended:
+Required tools with their own installing guides:
 
-* [GNU Make](https://www.gnu.org/software/make/) 4+
+* [Docker Engine](https://docs.docker.com/engine/install/) 24+
+* [Minikube](https://minikube.sigs.k8s.io/docs/start/) 1.32.0
 
 ## Getting Started
 
@@ -25,11 +26,13 @@ mvn -f ./dbrepo-metadata-service/pom.xml clean install -DskipTests
 
 We practice test-driven development and require contributors to test their code with at least 90% code coverage.
 
-## Code Documentation
-
-Before creating a merge request, make sure you:
+```shell
+make test
+```
 
-- [x] Generate the [Swagger Docs](#swagger-docs) endpoint documentation
+The Java-based services have the coverage reports generated by `JaCoCo` in the `report/site/` subdirectory, the
+Python-based services have the coverage reports generated by `coverage` in the `.coverage` SQLite3 database
+and `coverage.txt` log file respectively.
 
 ### Swagger Docs
 
@@ -41,20 +44,20 @@ bash .swagger/swagger-generate.sh
 
 ### Branching Strategy
 
-<p align="center">
-<img src="../.gitlab/branching-strategy.png" alt="Branching strategy from the master-dev-feature branches and release branches." width="732" height="391" /><br/>
-<i><strong>Figure 1.</strong> Branching strategy of the source code development.</i>
-</p>
+<figure markdown>
+![Branching strategy from the master-dev-feature branches and release branches](images/branching-strategy.png)
+<figcaption>Figure 1: Branching strategy of the source code development.</figcaption>
+</figure>
 
 ### CI/CD
 
 We get compute resources in-kind from [dataLAB](https://www.it.tuwien.ac.at/en/services/network-and-servers/datalab)
 to run our pipeline:
 
-<p align="center">
-<img src="../.gitlab/gitlab-runner.png" alt="Gitlab runner configuration in the cluster" width="732" height="262" /><br/>
-<i><strong>Figure 2.</strong> Gitlab runner configuration in the cluster.</i>
-</p>
+<figure markdown>
+![Gitlab runner configuration in the cluster](images/gitlab-runner.png)
+<figcaption>Figure 2: Gitlab runner configuration in the cluster.</figcaption>
+</figure>
 
 Minikube cluster with 6vCPU and 28GB RAM. The CI pipeline is configured as follows in the `config.toml`:
 
@@ -90,12 +93,12 @@ For each job in the CI/CD pipeline, a pod with three containers is started:
 3. `svc-0` the Docker-in-Docker sidecar (rootless executed as user `rootless`/`1000`) exposing the Docker socket to the
    `build` container under `
 
-*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a 
-dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build` 
+*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a
+dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build`
 container you can freely configure how you want. We are aware this is not optimal as it exposes *root* privileges in the
 cluster.
 
-The full CI/CD pipeline Helm chart is documented in 
+The full CI/CD pipeline Helm chart is documented in
 the [`fda-deployment`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-deployment/-/tree/master/charts/dbrepo-devops)
 repository.
 
diff --git a/.docs/dev-guide-infra.md b/.docs/dev-guide-infra.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb01a76473d24e18a2bcbcbe444912be10890b02
--- /dev/null
+++ b/.docs/dev-guide-infra.md
@@ -0,0 +1,78 @@
+# Infrastructure Developer Guide
+
+## tl;dr
+
+```shell
+make cluster-start cluster-image-pull cluster-install
+```
+
+## Dependencies
+
+Local development depends on the following packages for Debian 12:
+
+```shell
+apt install -y make
+```
+
+Required tools with their own installing guides:
+
+* [Docker Engine](https://docs.docker.com/engine/install/) 24+
+* [Minikube](https://minikube.sigs.k8s.io/docs/start/) 1.32.0
+
+## Getting Started
+
+Start the local development cluster with the Docker driver (takes at least 8 vCPUs and 12GB RAM). It installs a Minikube
+single-node Kubernetes cluster with enabled Ingress and Dashboard
+
+```shell
+make cluster-start
+```
+
+Build the local images with `make build-docker` and copy them to the cluster image cache:
+
+```shell
+make cluster-image-pull
+```
+
+Build and install the Helm chart:
+
+```shell
+make cluster-install
+```
+
+## Debug
+
+Open the Minikube (Kubernetes) Dashboard:
+
+```shell
+make cluster-dashboard
+```
+
+<figure markdown>
+![Minikube Dashboard](images/screenshots/minikube-dashboard.png)
+<figcaption>Figure 1: Minikube Dashboard</figcaption>
+</figure>
+
+Optionally enable the Prometheus metrics addon with:
+
+```shell
+minikube addons enable metrics-server
+```
+
+## Test
+
+Test if the Helm chart raises errors on start (the script aborts after 5 minutes automatically if some pods are not
+starting or erroneous).
+
+```shell
+make cluster-test
+```
+
+## Uninstall
+
+To uninstall DBRepo from the local Minikube cluster, removing all data:
+
+```shell
+make cluster-uninstall
+```
+
diff --git a/.docs/dev-overview.md b/.docs/dev-overview.md
new file mode 100644
index 0000000000000000000000000000000000000000..2ffcbc6ef90bfd4f85cd7bc143afa737c4f9a6ad
--- /dev/null
+++ b/.docs/dev-overview.md
@@ -0,0 +1,21 @@
+# Overview
+
+## Guides
+
+* The [application developer guide](../dev-guide-app) guides you through the steps on how to build DBRepo from
+  scratch and customize the application.
+* The [infrastructure developer guide](../dev-guide-infra) guides you through the steps on how to build and customize
+  the operation environment.
+
+## Organization
+
+* Monthly sprints with patch-releases (i.e. `1.4.2` in February, `1.4.3` in March, ...).
+* Branching from `dev` for feature development, one release branch per patch (i.e. `release-1.4.2` for release version
+  `1.4.2`).
+
+## Roadmap
+
+- [x] Q1: Python library, versioning in every component, bumping frontend versions, i18n
+- [ ] Q2: Kubernetes deployment guidelines for OpenShift
+- [ ] Q3: TBD
+- [ ] Q4: Release of 2.0.0
\ No newline at end of file
diff --git a/.gitlab/branching-strategy.png b/.docs/images/branching-strategy.png
similarity index 100%
rename from .gitlab/branching-strategy.png
rename to .docs/images/branching-strategy.png
diff --git a/.gitlab/gitlab-runner.png b/.docs/images/gitlab-runner.png
similarity index 100%
rename from .gitlab/gitlab-runner.png
rename to .docs/images/gitlab-runner.png
diff --git a/.docs/images/screenshots/minikube-dashboard.png b/.docs/images/screenshots/minikube-dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..038540069fa854a52f241e4aba8a12e9923f5145
Binary files /dev/null and b/.docs/images/screenshots/minikube-dashboard.png differ
diff --git a/.gitignore b/.gitignore
index 2ae0c2d6d11336d2645da6a8d55eb4c8df68a907..716e25c58a793ef0a1470c3dc924baa6a2479c79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ schema.xsd
 final/
 build/
 swagger/
+*.tar
 
 # docs
 .docs/.swagger/dist/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 97de5ce07190f1af6780e80115c6799aa0660b25..c98213a954ffa2884500f2aff85a832b7041e51b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,9 +4,9 @@ variables:
   TRIVY_CACHE_DIR: ".trivycache/"
   DOCKER_HOST: "unix:///var/run/dind/docker.sock"
   TESTCONTAINERS_RYUK_DISABLED: "false"
-  DOC_VERSIONS: "latest,1.4.1,1.4.0,1.3.0"
-  APP_VERSION: "1.4.1"
-  CHART_VERSION: "1.4.1"
+  DOC_VERSIONS: "latest,1.4.2,1.4.1,1.4.0,1.3.0"
+  APP_VERSION: "1.4.2"
+  CHART_VERSION: "1.4.2"
 
 image: debian:12-slim
 
diff --git a/Makefile b/Makefile
index 8ad6b93fe3281a993d51d48b2f15038241297af8..9d1a6e890a0f45f3b61f0cd90830ff22315638d0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,8 @@
 .PHONY: all
 
 TAG ?= latest
+APP_VERSION ?= 1.4.2
+CHART_VERSION ?= 1.4.2
 REPOSITORY_1_URL ?= docker.io/dbrepo
 REPOSITORY_2_URL ?= s210.dl.hpc.tuwien.ac.at/dbrepo
 
@@ -231,5 +233,54 @@ teardown:
 build-api:
 	bash .docs/.swagger/swagger-generate.sh
 
+helm-build:
+	cp ./helm-charts/dbrepo/Chart.tpl.yaml ./helm-charts/dbrepo/Chart.yaml
+	sed -i -e "s/__CHART_VERSION__/\"${CHART_VERSION}\"/g" ./helm-charts/dbrepo/Chart.yaml
+	sed -i -e "s/__APP_VERSION__/\"${APP_VERSION}\"/g" ./helm-charts/dbrepo/Chart.yaml
+	#helm dependency update ./helm-charts/dbrepo
+	helm package ./helm-charts/dbrepo --destination ./build
+
+cluster-start:
+	minikube start --driver="docker" --memory="12g" --cpus="8" # 2 CPUs for Control Plane + 6
+	minikube addons disable metrics-server
+	minikube addons enable ingress && minikube addons enable dashboard
+	./helm-charts/dbrepo/hack/add-hosts.sh
+	#CERT_MANAGER_VERSION=1.14.4 ./helm-charts/dbrepo/hack/install-cert-manager.sh
+
+cluster-test: cluster-start cluster-image-pull cluster-install
+	bash ./helm-charts/dbrepo/test.sh
+	minikube stop
+
+cluster-stop:
+	minikube stop
+
+cluster-image-pull:
+	docker image save -o ui.tar dbrepo-ui:latest
+	docker image save -o data-service.tar dbrepo-data-service:latest
+	docker image save -o search-db-init.tar dbrepo-search-db-init:latest
+	docker image save -o search-service.tar dbrepo-search-service:latest
+	docker image save -o analyse-service.tar dbrepo-analyse-service:latest
+	docker image save -o data-db-sidecar.tar dbrepo-data-db-sidecar:latest
+	docker image save -o metadata-service.tar dbrepo-metadata-service:latest
+	echo "[INFO] Saved local images"
+	minikube image load ui.tar
+	minikube image load data-service.tar
+	minikube image load search-db-init.tar
+	minikube image load search-service.tar
+	minikube image load analyse-service.tar
+	minikube image load data-db-sidecar.tar
+	minikube image load metadata-service.tar
+	echo "[INFO] Imported local images"
+	rm -f ./ui.tar ./data-service.tar ./search-service.tar ./analyse-service.tar ./data-db-sidecar.tar ./metadata-service.tar
+
+cluster-install: helm-build
+	helm upgrade --install dbrepo -n dbrepo ./build/dbrepo-${CHART_VERSION}.tgz --create-namespace --cleanup-on-fail
+
+cluster-uninstall:
+	helm uninstall -n dbrepo dbrepo
+
+cluster-dashboard:
+	minikube dashboard
+
 docs:
 	bash ./build-docs.sh
diff --git a/helm-charts/dbrepo/.gitignore b/helm-charts/dbrepo/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e7b18ebe6d6b5e6ea7cba8a40b9ee60db844f169
--- /dev/null
+++ b/helm-charts/dbrepo/.gitignore
@@ -0,0 +1,5 @@
+# generated
+*.crt
+*.key
+*.srl
+*.csr
\ No newline at end of file
diff --git a/helm-charts/dbrepo/Chart.tpl.yaml b/helm-charts/dbrepo/Chart.tpl.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5ae1d128073c61b2efabc9abd62e9d95c514e103
--- /dev/null
+++ b/helm-charts/dbrepo/Chart.tpl.yaml
@@ -0,0 +1,52 @@
+apiVersion: v2
+name: dbrepo
+description: Helm Chart for installing DBRepo
+sources:
+  - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services
+type: application
+version: __CHART_VERSION__
+appVersion: __APP_VERSION__
+keywords:
+  - dbrepo
+maintainers:
+  - name: Martin Weise
+    email: martin.weise@tuwien.ac.at
+home: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/
+icon: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.docs/images/signet_white.png
+dependencies:
+  - name: opensearch
+    alias: searchdb
+    version: 2.15.0 # app version 2.10.0
+    repository: https://opensearch-project.github.io/helm-charts/
+  - name: opensearch-dashboards
+    alias: searchDbDashboard
+    version: 2.13.0 # app version 2.10.0
+    repository: https://opensearch-project.github.io/helm-charts/
+  - name: keycloak
+    alias: authService
+    version: 17.3.3
+    repository: https://charts.bitnami.com/bitnami
+  - name: mariadb-galera
+    alias: dataDb
+    version: 11.0.1
+    repository: https://charts.bitnami.com/bitnami
+  - name: mariadb-galera
+    alias: metadataDb
+    version: 11.0.1
+    repository: https://charts.bitnami.com/bitnami
+  - name: postgresql-ha
+    alias: authDb
+    version: 12.1.7
+    repository: https://charts.bitnami.com/bitnami
+  - name: rabbitmq
+    alias: brokerService
+    version: 12.5.1
+    repository: https://charts.bitnami.com/bitnami
+  - name: fluent-bit
+    alias: logservice
+    version: 0.40.0
+    repository: https://fluent.github.io/helm-charts
+  - name: seaweedfs
+    alias: storageservice
+    version: 3.59.4
+    repository: https://seaweedfs.github.io/seaweedfs/helm
diff --git a/helm-charts/dbrepo/Chart.yaml b/helm-charts/dbrepo/Chart.yaml
index 9f303fb8fd99e02d7a90445b26293d2340630495..46e734f95f5de7c65d9e4fc966c3f1e07e58588f 100644
--- a/helm-charts/dbrepo/Chart.yaml
+++ b/helm-charts/dbrepo/Chart.yaml
@@ -1,11 +1,10 @@
 apiVersion: v2
 name: dbrepo
 description: Helm Chart for installing DBRepo
-category: Database
 sources:
   - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services
 type: application
-version: "1.4.2-RC1"
+version: "1.4.2"
 appVersion: "1.4.2"
 keywords:
   - dbrepo
diff --git a/helm-charts/dbrepo/README.md b/helm-charts/dbrepo/README.md
index d7af72f404d5d894ce0965435be4ebbbef6c1138..1c672c2005c3a7e87b59c90b6c63de0fff56f3c8 100644
--- a/helm-charts/dbrepo/README.md
+++ b/helm-charts/dbrepo/README.md
@@ -17,9 +17,9 @@ helm install my-release "oci://s210.dl.hpc.tuwien.ac.at/dbrepo/helm/dbrepo" --va
 
 * Kubernetes 1.24+
 * Kubernetes 3.8.0+
-* PV provisioner support in the underlying infrastructure
-* Ingress support in the underlying infrastructure
-* TLS certificate provisioner support in the underlying infrastructure, e.g. [cert-manager](https://cert-manager.io/)
+* Optional PV provisioner support in the underlying infrastructure (for persistence).
+* Optional ingress support in the underlying infrastructure: e.g. [NGINX](https://docs.nginx.com/nginx-ingress-controller/) (for the UI).
+* Optional certificate provisioner support in the underlying infrastructure: e.g. [cert-manager](https://cert-manager.io/) (for production use).
 
 ## Installing the Chart
 
diff --git a/helm-charts/dbrepo/hack/add-hosts.sh b/helm-charts/dbrepo/hack/add-hosts.sh
new file mode 100755
index 0000000000000000000000000000000000000000..93d1bbcb52c80ce3d3c173b4d458fd76489fde21
--- /dev/null
+++ b/helm-charts/dbrepo/hack/add-hosts.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+cat /etc/hosts | grep "dbrepo.local"
+if [ "$?" -ne 0 ]; then
+  echo "$(minikube ip)  dbrepo.local" | sudo tee -a /etc/hosts
+fi
\ No newline at end of file
diff --git a/helm-charts/dbrepo/hack/generate-tls-cert.sh b/helm-charts/dbrepo/hack/generate-tls-cert.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cfe69dfdb0e59f7c2b0895b63f4bf039e074c9e4
--- /dev/null
+++ b/helm-charts/dbrepo/hack/generate-tls-cert.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+HOSTNAME="dbrepo.local"
+
+openssl genrsa -out ./tls/ca.key 2048
+openssl req -new -x509 -days 365 -key ./tls/ca.key -subj "/C=AT/O=Acme, Inc./CN=Acme Root CA" -out ./tls/ca.crt
+openssl req -newkey rsa:2048 -nodes -keyout ./tls/tls.key -subj "/C=AT/O=DBRepo/CN=${HOSTNAME}" -out ./tls/tls.csr
+openssl x509 -req -extfile <(printf "subjectAltName=DNS:${HOSTNAME},DNS:www.${HOSTNAME}") -days 365 -in ./tls/tls.csr \
+  -CA ./tls/ca.crt -CAkey ./tls/ca.key -CAcreateserial -out ./tls/tls.crt
\ No newline at end of file
diff --git a/helm-charts/dbrepo/hack/install-cert-manager.sh b/helm-charts/dbrepo/hack/install-cert-manager.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8b0569b733164132d0932e3e645e1fb025a3d84f
--- /dev/null
+++ b/helm-charts/dbrepo/hack/install-cert-manager.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v${CERT_MANAGER_VERSION}/cert-manager.yaml
+if [ $? -ne 0 ]; then
+  echo "ERROR: Failed to install cert-manager" > /dev/stderr
+else
+  echo "SUCCESS: Installed cert-manager"
+fi
+cat <<EOF | kubectl apply -f -
+apiVersion: cert-manager.io/v1
+kind: ClusterIssuer
+metadata:
+  name: selfsigned-cluster-issuer
+spec:
+  selfSigned: {}
+EOF
diff --git a/helm-charts/dbrepo/hack/tls/.gitkeep b/helm-charts/dbrepo/hack/tls/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/helm-charts/dbrepo/templates/NOTES.txt b/helm-charts/dbrepo/templates/NOTES.txt
index ce7c200186842631afb13f666f421a16677895b3..590f1eba5e3565e92495bb4efe598a2898c5a5ef 100644
--- a/helm-charts/dbrepo/templates/NOTES.txt
+++ b/helm-charts/dbrepo/templates/NOTES.txt
@@ -1,10 +1,6 @@
-1. Get the application URL by running these commands:
 {{- if .Values.ingress.enabled }}
-{{- range $ingress := .Values.ingress.data }}
-{{- range $host := $ingress.hosts }}
-  {{- range .paths }}
-  http{{ if $ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
-  {{- end }}
-{{- end }}
-{{- end }}
+1. Get the application URL by running these commands:
+  https://{{ .Values.hostname }}
+{{- else }}
+Enable ingress to access the UI with `ingress.enabled: true`.
 {{- end }}
diff --git a/helm-charts/dbrepo/templates/analyse-service/deployment.yaml b/helm-charts/dbrepo/templates/analyse-service/deployment.yaml
index e2591a9afec2af4d657b787d2d20eecaa533f753..c15d67377f40bea64840a75adece8f4499e9a800 100644
--- a/helm-charts/dbrepo/templates/analyse-service/deployment.yaml
+++ b/helm-charts/dbrepo/templates/analyse-service/deployment.yaml
@@ -4,14 +4,14 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: analyse-service
-  namespace: {{ $.Values.namespace }}
+  namespace: {{ .Values.namespace }}
   labels:
     app: analyse-service
     service: analyse-service
 spec:
   replicas: {{ .Values.analyseService.replicaCount }}
   strategy:
-    type: {{ $.Values.strategyType }}
+    type: {{ .Values.strategyType }}
   selector:
     matchLabels:
       app: analyse-service
@@ -29,7 +29,7 @@ spec:
         runAsGroup: 1000
       containers:
         - name: analyse-service
-          image: {{ printf "%s/%s:%s" .Values.analyseService.image.registry .Values.analyseService.image.repository .Values.analyseService.image.tag }}
+          image: {{ .Values.analyseService.image.name }}
           imagePullPolicy: {{ .Values.analyseService.image.pullPolicy | default "IfNotPresent" }}
           ports:
             - containerPort: 5000
diff --git a/helm-charts/dbrepo/templates/data-db/pvc.yaml b/helm-charts/dbrepo/templates/data-db/pvc.yaml
index 0d5c5c49af15f9603f2869a31387f94c174e8203..1eea5fa393717908dc189c1144d89d5a2107f14b 100644
--- a/helm-charts/dbrepo/templates/data-db/pvc.yaml
+++ b/helm-charts/dbrepo/templates/data-db/pvc.yaml
@@ -3,7 +3,6 @@ kind: PersistentVolumeClaim
 metadata:
   name: data-db-shared
 spec:
-  storageClassName: {{ .Values.dataDb.persistence.sharedStorageClass }}
   accessModes:
     - ReadWriteMany
   resources:
diff --git a/helm-charts/dbrepo/templates/data-service/deployment.yaml b/helm-charts/dbrepo/templates/data-service/deployment.yaml
index 429a4ccf93de64908b065812b179a6c1169e3aac..ed2317b5884d2fd1ef0ff1d6faf7283320a4492a 100644
--- a/helm-charts/dbrepo/templates/data-service/deployment.yaml
+++ b/helm-charts/dbrepo/templates/data-service/deployment.yaml
@@ -4,14 +4,14 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: data-service
-  namespace: {{ $.Values.namespace }}
+  namespace: {{ .Values.namespace }}
   labels:
     app: data-service
     service: data-service
 spec:
-  replicas: {{ .Values.metadataService.replicaCount }}
+  replicas: {{ .Values.dataService.replicaCount }}
   strategy:
-    type: {{ $.Values.strategyType }}
+    type: {{ .Values.strategyType }}
   selector:
     matchLabels:
       app: data-service
@@ -28,7 +28,7 @@ spec:
         runAsGroup: 1000
       containers:
         - name: data-service
-          image: {{ printf "%s/%s:%s" .Values.dataService.image.registry .Values.dataService.image.repository .Values.dataService.image.tag }}
+          image: {{ .Values.dataService.image.name }}
           imagePullPolicy: {{ .Values.dataService.image.pullPolicy | default "IfNotPresent" }}
           ports:
             - containerPort: 9093
diff --git a/helm-charts/dbrepo/templates/data-service/secret.yaml b/helm-charts/dbrepo/templates/data-service/secret.yaml
index 8bfa60c1eaa069e517b23670f6e400ded2639b03..2562817d781f835ae4d72e3dd6cc49143e6a3cef 100644
--- a/helm-charts/dbrepo/templates/data-service/secret.yaml
+++ b/helm-charts/dbrepo/templates/data-service/secret.yaml
@@ -1,4 +1,3 @@
-{{ $pidBase := printf "https://%s/pid/" .Values.hostname }}
 {{ $jwtIssuer := printf "https://%s/api/auth/realms/dbrepo" .Values.hostname }}
 ---
 apiVersion: v1
diff --git a/helm-charts/dbrepo/templates/ingress.yaml b/helm-charts/dbrepo/templates/ingress.yaml
index 20eeb071fa6e47a331609c7d4dae9ca6a93039a0..e4c19e8066c9e13ff76f52a469bcf4f3ad7fbdd5 100644
--- a/helm-charts/dbrepo/templates/ingress.yaml
+++ b/helm-charts/dbrepo/templates/ingress.yaml
@@ -1,39 +1,210 @@
-{{- if .Values.ingress.enabled }}
-{{- range .Values.ingress.data }}
 ---
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
-  name: dbrepo-{{ .name }}
-  {{- with .annotations }}
-  annotations:
-      {{- toYaml . | nindent 4 }}
+  name: dbrepo-ingress-basic
+  annotations: {{ toYaml .Values.ingress.annotations.basic | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /api/analyse
+            pathType: Prefix
+            backend:
+              service:
+                name: analyse-service
+                port:
+                  number: 80
+          - path: /api/search
+            pathType: Prefix
+            backend:
+              service:
+                name: search-service
+                port:
+                  number: 80
+          - path: /api
+            pathType: Prefix
+            backend:
+              service:
+                name: metadata-service
+                port:
+                  number: 80
+          - path: /
+            pathType: Prefix
+            backend:
+              service:
+                name: ui
+                port:
+                  number: 80
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-upload
+  annotations: {{ toYaml .Values.ingress.annotations.upload | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
   {{- end }}
-  namespace: {{ $.Values.namespace }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /api/upload
+            pathType: Prefix
+            backend:
+              service:
+                name: upload-service
+                port:
+                  number: 80
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-dashboard
+  annotations: {{ toYaml .Values.ingress.annotations.secure | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /admin/dashboard
+            pathType: Prefix
+            backend:
+              service:
+                name: search-db-dashboard
+                port:
+                  number: 5601
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-rewrite-api
+  annotations: {{ toYaml .Values.ingress.annotations.rewriteApi | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /api/broker/(.*)
+            pathType: ImplementationSpecific
+            backend:
+              service:
+                name: broker-service
+                port:
+                  number: 15672
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-rewrite-root
+  annotations: {{ toYaml .Values.ingress.annotations.rewriteRoot | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /admin/broker/(.*)
+            pathType: ImplementationSpecific
+            backend:
+              service:
+                name: broker-service
+                port:
+                  number: 15672
+          - path: /admin/storage
+            pathType: ImplementationSpecific
+            backend:
+              service:
+                name: storageservice-s3
+                port:
+                  number: 9000
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-rewrite-root-secure
+  annotations: {{ toYaml .Values.ingress.annotations.rewriteRoot | nindent 4 }}
+  namespace: {{ .Values.namespace }}
+spec:
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
+  tls:
+    - hosts:
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
+  {{- end }}
+  rules:
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /api/auth/(.*)
+            pathType: ImplementationSpecific
+            backend:
+              service:
+                name: auth-service
+                port:
+                  number: 443
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: dbrepo-ingress-pid
+  annotations: {{ toYaml .Values.ingress.annotations.rewritePid | nindent 4 }}
+  namespace: {{ .Values.namespace }}
 spec:
-  ingressClassName: nginx
-  {{- if .tls }}
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- if .Values.ingress.tls.enabled }}
   tls:
-    {{- range .tls }}
     - hosts:
-        - "{{ $.Values.hostname }}"
-      secretName: {{ .secretName }}
-    {{- end }}
+        - {{ .Values.hostname }}
+      secretName: {{ .Values.ingress.tls.secretName }}
   {{- end }}
   rules:
-  {{- range .hosts }}
-  - host: "{{ $.Values.hostname }}"
-    http:
-      paths:
-      {{- range .paths }}
-      - path: {{ .path }}
-        pathType: {{ .pathType }}
-        backend:
-          service:
-            name: {{ .serviceName }}
-            port:
-              number: {{ .portNumber }}
-      {{- end}}
-  {{- end}}
-{{- end}}
-{{- end}}
\ No newline at end of file
+    - host: {{ .Values.hostname }}
+      http:
+        paths:
+          - path: /pid/(.*)
+            pathType: ImplementationSpecific
+            backend:
+              service:
+                name: metadata-service
+                port:
+                  number: 80
\ No newline at end of file
diff --git a/helm-charts/dbrepo/templates/metadata-service/deployment.yaml b/helm-charts/dbrepo/templates/metadata-service/deployment.yaml
index a98e89cb6e89f17f2112aa93aab394b8aad6b35b..6dfab3ed21a13ac970b7423124f3555a17eb3dca 100644
--- a/helm-charts/dbrepo/templates/metadata-service/deployment.yaml
+++ b/helm-charts/dbrepo/templates/metadata-service/deployment.yaml
@@ -4,14 +4,14 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: metadata-service
-  namespace: {{ $.Values.namespace }}
+  namespace: {{ .Values.namespace }}
   labels:
     app: metadata-service
     service: metadata-service
 spec:
   replicas: {{ .Values.metadataService.replicaCount }}
   strategy:
-    type: {{ $.Values.strategyType }}
+    type: {{ .Values.strategyType }}
   selector:
     matchLabels:
       app: metadata-service
@@ -29,7 +29,7 @@ spec:
         runAsGroup: 1000
       containers:
         - name: metadata-service
-          image: {{ printf "%s/%s:%s" .Values.metadataService.image.registry .Values.metadataService.image.repository .Values.metadataService.image.tag }}
+          image: {{ .Values.metadataService.image.name }}
           imagePullPolicy: {{ .Values.metadataService.image.pullPolicy | default "IfNotPresent" }}
           securityContext:
             runAsUser: 1000
diff --git a/helm-charts/dbrepo/templates/search-db/certificate.yaml b/helm-charts/dbrepo/templates/search-db/certificate.yaml
deleted file mode 100644
index 0099f0afddaacddfe7fd45c7555c4a2b1cf22caa..0000000000000000000000000000000000000000
--- a/helm-charts/dbrepo/templates/search-db/certificate.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  name: search-db
-  namespace: {{ .Values.namespace }}
-spec:
-  isCA: false
-  duration: 2160h # 90d
-  renewBefore: 360h # 15d
-  commonName: search-db
-  secretName: search-db-cert
-  privateKey:
-    algorithm: RSA
-    encoding: PKCS8
-    size: 2048
-  usages:
-    - server auth
-    - client auth
-  issuerRef:
-    name: selfsigned-cluster-issuer
-    kind: ClusterIssuer
-    group: cert-manager.io
\ No newline at end of file
diff --git a/helm-charts/dbrepo/templates/search-db/secret.yaml b/helm-charts/dbrepo/templates/search-db/secret.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a7cd1d0d424a38fc491afa465ae0cde7b705cd91
--- /dev/null
+++ b/helm-charts/dbrepo/templates/search-db/secret.yaml
@@ -0,0 +1,79 @@
+---
+apiVersion: v1
+kind: Secret
+type: kubernetes.io/tls
+metadata:
+  name: search-db-cert
+  namespace: {{ .Values.namespace }}
+data:
+  tls.crt: |
+    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0akNDQWNxZ0F3SUJBZ0lSQVAvcFJoaFQ5
+    SFVWaUFzYitybmJjdkV3RFFZSktvWklodmNOQVFFTEJRQXcKRkRFU01CQUdBMVVFQXhNSmMyVmhj
+    bU5vTFdSaU1CNFhEVEkwTURRd056RTRORFEwT0ZvWERUSTBNRGN3TmpFNApORFEwT0Zvd0ZERVNN
+    QkFHQTFVRUF4TUpjMlZoY21Ob0xXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DCkFROEFN
+    SUlCQ2dLQ0FRRUFzb3lTWTduV3J0MTRVQjNST0kwOWRtMVNSU2lDZ2hQYVhwRlJTMjhjalpNSUFz
+    TUoKR2ZwREZ5VktOQ3pTV0VZN0J2M1JpOHlrRnlZNkpFb2p0S3oxdk9GNnNyQ2JYZnhsY1NiZDk3
+    UVYwdU9IYTZKRApsWGN2aUJEKzN2ZTB0K0MzRGFPSFVMY1liVWkzS2xOS3FwTDU1Q2ZNeTYzdU4z
+    a21zekRwTjVycWhOYnBlVTAxCnd2NFZNaldNZ3RlU1VpWDNqeU1EcUFOa1B3UXFiYnZHN0hBUm54
+    Q0QvMHJFeEVvRjNqRCtGV01XbEVjdXR1VGkKbFJ5QnN3L1FLTWd0aVJVSFJXYUJGK2ZES0wxSUoz
+    YVhmcDR5bmNhL2tCR3pxVGpqb3dJb2R0MEdOZjBFa1QyQgpTWG9hZGtwdVptT2JiVDF2UmN1T1BH
+    UEZjWVd5Qm1ucS9adEorUUlEQVFBQm95OHdMVEFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFR
+    WUlLd1lCQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FR
+    RUFlUU4vaUsvRzhHbGt5R0w1NjlrZnBiWEE2bE8vRHFObGlXRkgrY2ZIZ0NzYWxKMWVSSjliY1RZ
+    dgo0S3Y0MDlWUWpCbVg0WTRqMUt6R1ZnYkZaZkh1Ry9Nb0dzWVVnQ1VjTm94ZThtM0ZUcjRwYnZT
+    MXNUV0V4cGFNCkpSMURQQmNMV0o3MndTQzBkRFpISC9hVVNSMUs4UGpnMWtaMVRINTdvZDJoNWpJ
+    RUFhZkd1ZGhzejVpWlZQcVkKR1lrakZhRklVeXpjWkxUbjFBNXRwSlpTRmhxZHZGQmFndURUYkp4
+    NmROVWZVc0sxZXFuaThSQVN6L3dPbHQwcQpSckExbVdCTEI1NW9XRzh4ZXZicmtNNUNuSWVvL2hS
+    SG83cE1pUFQxWE5uT2cvNjhmZEc4T0lXMFFhNjdMVEZnCnU2dTkxQ1BmVk5KVHQ5bmlZWHJ4N1hl
+    SEJ2dW1iUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+  ca.crt: |
+    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0akNDQWNxZ0F3SUJBZ0lSQVAvcFJoaFQ5
+    SFVWaUFzYitybmJjdkV3RFFZSktvWklodmNOQVFFTEJRQXcKRkRFU01CQUdBMVVFQXhNSmMyVmhj
+    bU5vTFdSaU1CNFhEVEkwTURRd056RTRORFEwT0ZvWERUSTBNRGN3TmpFNApORFEwT0Zvd0ZERVNN
+    QkFHQTFVRUF4TUpjMlZoY21Ob0xXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DCkFROEFN
+    SUlCQ2dLQ0FRRUFzb3lTWTduV3J0MTRVQjNST0kwOWRtMVNSU2lDZ2hQYVhwRlJTMjhjalpNSUFz
+    TUoKR2ZwREZ5VktOQ3pTV0VZN0J2M1JpOHlrRnlZNkpFb2p0S3oxdk9GNnNyQ2JYZnhsY1NiZDk3
+    UVYwdU9IYTZKRApsWGN2aUJEKzN2ZTB0K0MzRGFPSFVMY1liVWkzS2xOS3FwTDU1Q2ZNeTYzdU4z
+    a21zekRwTjVycWhOYnBlVTAxCnd2NFZNaldNZ3RlU1VpWDNqeU1EcUFOa1B3UXFiYnZHN0hBUm54
+    Q0QvMHJFeEVvRjNqRCtGV01XbEVjdXR1VGkKbFJ5QnN3L1FLTWd0aVJVSFJXYUJGK2ZES0wxSUoz
+    YVhmcDR5bmNhL2tCR3pxVGpqb3dJb2R0MEdOZjBFa1QyQgpTWG9hZGtwdVptT2JiVDF2UmN1T1BH
+    UEZjWVd5Qm1ucS9adEorUUlEQVFBQm95OHdMVEFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFR
+    WUlLd1lCQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FR
+    RUFlUU4vaUsvRzhHbGt5R0w1NjlrZnBiWEE2bE8vRHFObGlXRkgrY2ZIZ0NzYWxKMWVSSjliY1RZ
+    dgo0S3Y0MDlWUWpCbVg0WTRqMUt6R1ZnYkZaZkh1Ry9Nb0dzWVVnQ1VjTm94ZThtM0ZUcjRwYnZT
+    MXNUV0V4cGFNCkpSMURQQmNMV0o3MndTQzBkRFpISC9hVVNSMUs4UGpnMWtaMVRINTdvZDJoNWpJ
+    RUFhZkd1ZGhzejVpWlZQcVkKR1lrakZhRklVeXpjWkxUbjFBNXRwSlpTRmhxZHZGQmFndURUYkp4
+    NmROVWZVc0sxZXFuaThSQVN6L3dPbHQwcQpSckExbVdCTEI1NW9XRzh4ZXZicmtNNUNuSWVvL2hS
+    SG83cE1pUFQxWE5uT2cvNjhmZEc4T0lXMFFhNjdMVEZnCnU2dTkxQ1BmVk5KVHQ5bmlZWHJ4N1hl
+    SEJ2dW1iUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+  tls.key: |
+    LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZB
+    QVNDQktjd2dnU2pBZ0VBQW9JQkFRQ3lqSkpqdWRhdTNYaFEKSGRFNGpUMTJiVkpGS0lLQ0U5cGVr
+    VkZMYnh5Tmt3Z0N3d2taK2tNWEpVbzBMTkpZUmpzRy9kR0x6S1FYSmpvawpTaU8wclBXODRYcXlz
+    SnRkL0dWeEp0MzN0QlhTNDRkcm9rT1ZkeStJRVA3ZTk3UzM0TGNObzRkUXR4aHRTTGNxClUwcXFr
+    dm5rSjh6THJlNDNlU2F6TU9rM211cUUxdWw1VFRYQy9oVXlOWXlDMTVKU0pmZVBJd09vQTJRL0JD
+    cHQKdThic2NCR2ZFSVAvU3NURVNnWGVNUDRWWXhhVVJ5NjI1T0tWSElHekQ5QW95QzJKRlFkRlpv
+    RVg1OE1vdlVnbgpkcGQrbmpLZHhyK1FFYk9wT09PakFpaDIzUVkxL1FTUlBZRkplaHAyU201bVk1
+    dHRQVzlGeTQ0OFk4VnhoYklHCmFlcjltMG41QWdNQkFBRUNnZ0VCQUtPZ3A5ZTB5OFhkT1JGVEFo
+    WXRlaEk2QlpkVGxLYll3dHEvbWh6amF1dGoKdjRlb2JZTGRFdmIzT1pXdkxlV3dGeEJGTS9CR1Rt
+    cllvWmY0U2RpZVdXWUx6WUpNejFYR3BNQ1p1Zm56azd4OAp2L0luOW4vWGhqdlFONExteHp0c09O
+    WEs4NHRKQUozR2NmWGI5eVZ6SklldTRjUVhWYVNJNXFwNVBJRzArdzlZCnk2NTFWZkZJQUd3SmRI
+    QlpId1lmQUdxbU5oVlo3MDc4TVUxQWU2Y2VkZjJ0RnlWYW5ScXBLUFZ1Z0tGQy9kRG8KVXJIMHRJ
+    ajFkU3RKRGxucHJ3YVYrMDRkUDBvZnlBc09ablp3VXRzZE8vM1ZMMWR4bCtIT1dGeUpvSjI1dkF2
+    eAp5ZW5qc0dzd1pJRW1oUzM0NVRVTlFNbTJzYnJtYklMS1dpWEp5SmlEeWdFQ2dZRUF4QUNEbWxG
+    ZmsxZDlkSmJTCi90NDRGTzFiUVQ2b1Z2VWJ2NGMwcnRLVVhwTnFlajNmbXl4bUJINm82SkhoYjNO
+    eXdWa3U0QW9YTXBFTkhISDAKNlN2TzBYM2U1MU8xOXppQ25hMGdoZExSS3JIS3ZqbzRNdmdiV3Ey
+    Z3NJNmpJQkxTcU0zNXNxTjhGRXRVZko4TQpKRUZIMThJTThTRjEyQ2hWYjVWaThTTDgvY2tDZ1lF
+    QTZUUmhVQi9nQVM1RmN5V1NHNGR4UWtHWG03R1lSamFrCjJVWUlOUUIyV2d2Qk9vN2tvV21nR1M0
+    eE9YanJsZ2NrMmhsTEhZSXAycnRoSWdNMUdBQUdqa2lYeXJPVE9kaGQKeUJ0RjBMS0kvVjlBZUxK
+    eExkRDBYalB0WThIYXdTcW8weGdxUml2RzlJUFBlSGZ6SmlraXV6enNOT3pjVlk1aApkZktqZy9J
+    eVFyRUNnWUJ1c0dlaDk4Q0ZBa3pNVWZ6NGlHQ2RtT29ITDY1NzVWSjFXSkx0QStsY2U5NFBDUEJG
+    CnZzNGlUYkZ3SGlwMCtYcmVMRkpubmVzNTJHYlNJSjBTTFhaUUlzaUdWV1VYSjZmRUNpaXF5c0xy
+    WEpyRjBUVTUKdTVvZkhKejUrS094RWxBN21vOGdUbWxkUUttRzgzODAzbFVIU1FSc0ROeHpaVnZT
+    ZDBmNExDMDUyUUtCZ0h0YQpzNmJZVlhzS2FMNFJ2NGxFU1lxTWU0OWxqM0NFY3dwaTJ2QitRQnc5
+    WDRhRUV6ZTJVWE5BVmRWYXV2THU4SFZWCkw4QjZHMzJSNUQxRGlSQWE0MXpiMVQ3cFloVVU5L1pq
+    UnJpdjEzcCtxZkd1SWVQa1JYNlc1UmtCYjU4QjI2OWQKZHU4TE5RQWR3TjZ1UkRXSlNNL1YxL1Bl
+    M21WN0hONXc3RUZkR1d6aEFvR0FiN29HOWhoTGxTL212bEhHVE11egp6SXhtSTBaTisyZGFqNEYy
+    MDZHRGJYaUkwYUtFTHlteVJkcEZYcStzaWpaTzFqdXU4WDhMS0FCOUVaeEtXRzRICjNnQWoxWGFF
+    QXFjNjFkaFkveHRHUDR2OXN3UElmVjR3NGtTUHBWYlFFd3ZIcko4K1V2NjhuOTZTU3dkK1BBNisK
+    OFFwUEVYSXlscXB4UlFyMnN5amhoOTQ9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
\ No newline at end of file
diff --git a/helm-charts/dbrepo/templates/search-service/deployment.yaml b/helm-charts/dbrepo/templates/search-service/deployment.yaml
index c4d24647fa79da0d6c8bd7f03460c29bb0305c34..30a0441b1540019c3875431e2d8d42ede696610f 100644
--- a/helm-charts/dbrepo/templates/search-service/deployment.yaml
+++ b/helm-charts/dbrepo/templates/search-service/deployment.yaml
@@ -4,14 +4,14 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: search-service
-  namespace: {{ $.Values.namespace }}
+  namespace: {{ .Values.namespace }}
   labels:
     app: search-service
     service: search-service
 spec:
-  replicas: {{ .Values.metadataService.replicaCount }}
+  replicas: {{ .Values.searchService.replicaCount }}
   strategy:
-    type: {{ $.Values.strategyType }}
+    type: {{ .Values.strategyType }}
   selector:
     matchLabels:
       app: search-service
@@ -29,7 +29,7 @@ spec:
         runAsGroup: 1000
       containers:
         - name: search-service
-          image: {{ printf "%s/%s:%s" .Values.searchService.image.registry .Values.searchService.image.repository .Values.searchService.image.tag }}
+          image: {{ .Values.searchService.image.name }}
           imagePullPolicy: {{ .Values.searchService.image.pullPolicy | default "IfNotPresent" }}
           ports:
             - containerPort: 4000
diff --git a/helm-charts/dbrepo/templates/secret.yaml b/helm-charts/dbrepo/templates/secret.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5761aaa774f7d7a702910dd9b7a809c7c694b171
--- /dev/null
+++ b/helm-charts/dbrepo/templates/secret.yaml
@@ -0,0 +1,80 @@
+---
+apiVersion: v1
+kind: Secret
+type: kubernetes.io/tls
+metadata:
+  name: ingress-cert
+  namespace: {{ .Values.namespace }}
+stringData:
+  tls.crt: |
+    -----BEGIN CERTIFICATE-----
+    MIIDaTCCAlGgAwIBAgIUYxgRGsKNKfiSV85hfTqO7Fe2EJIwDQYJKoZIhvcNAQEL
+    BQAwOTELMAkGA1UEBhMCQVQxEzARBgNVBAoMCkFjbWUsIEluYy4xFTATBgNVBAMM
+    DEFjbWUgUm9vdCBDQTAeFw0yNDA0MDgwODA5MDRaFw0yNTA0MDgwODA5MDRaMDUx
+    CzAJBgNVBAYTAkFUMQ8wDQYDVQQKDAZEQlJlcG8xFTATBgNVBAMMDGRicmVwby5s
+    b2NhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJheX3oMZ9VnAj0u
+    ta4mAQmoEDVu//N5jDZi3F2L1gItBXTZP46d37iaCNgAkKO6ct8KIO7zAm/Hdhtz
+    1DB/5UJqJSvikGQKBidjw0lenqE7aqt2qbWk45yXxIEQbmpMkdUrsyJVLLaKLAaA
+    Nx9m3bdb4Kaxtu6QKtrrifz8+dpUcJPmvzzDB+39kKHchj7HjtSNhIy+nG3EiLRM
+    nG6qpWMlVEnK2SU1YT1p2s3WaA9sl8djVy3L6MKg+I0lchXjV9udnGs8GzPmHKrz
+    KpTMpmkkNQZaULXyes9lZ0jPMvVrrGQzsZDjGtdpCBUhdeIoZ+EkdbZPtXtGM6oO
+    PFWHWvECAwEAAaNtMGswKQYDVR0RBCIwIIIMZGJyZXBvLmxvY2FsghB3d3cuZGJy
+    ZXBvLmxvY2FsMB0GA1UdDgQWBBR3+I9W+gtANK3PM7ex24aD2fKb9TAfBgNVHSME
+    GDAWgBR1+iIlDzeK4jVdxyDwzkY02tdXQDANBgkqhkiG9w0BAQsFAAOCAQEAGeI2
+    RaUqMuorjl6xeo5iB5jrr0w6ixPYYH7L7rbcJaUfYLo2oeUxU3hxOKxRktxKRtpa
+    Inv81K7HwtruGYH1w9u0d3Le73WdesrLrq0yJgagkkEyuX+o7NH25rMjZdcrhSOl
+    Rx3rbAARN4mt4CSPZY2+6HPi7YnTKO14QK/fnJazWJz1Y5ECYEabdhj/HTyZg2ea
+    ZsZFq2DkBbmm8yGUWPfISABvrkwb9ustY9ei7aCy3edgExyRNmDo0bVQYz+LM0CD
+    j2+OSsWAzsjPMIhp4cl4kFiPntVOUPo1nQmxhyGm2O24cuddUKQhMo1EWgye2+ag
+    TyOmunmGfT3NQbF5JQ==
+    -----END CERTIFICATE-----
+  ca.crt: |
+    -----BEGIN CERTIFICATE-----
+    MIIDUzCCAjugAwIBAgIUU7IwC5g71hQaIaYa7DoE0lMfCqcwDQYJKoZIhvcNAQEL
+    BQAwOTELMAkGA1UEBhMCQVQxEzARBgNVBAoMCkFjbWUsIEluYy4xFTATBgNVBAMM
+    DEFjbWUgUm9vdCBDQTAeFw0yNDA0MDgwODA5MDRaFw0yNTA0MDgwODA5MDRaMDkx
+    CzAJBgNVBAYTAkFUMRMwEQYDVQQKDApBY21lLCBJbmMuMRUwEwYDVQQDDAxBY21l
+    IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP39vc/O3l
+    DS37eTLGqEDROrJPC3ajNc3u/y/4XKsTwbTGC7pctkJ4juwmEMVKLDBIYgeEj+LU
+    FFAC/sz9SmocPLm+vgIFtimKquqDQQaXbxcU5R86nS+sWsATwU+W8pOGdHLlE1ff
+    e9yetOFrTX1bJvtAb6cF3wa56uvolTgXX2ivPu4Nen15740SqHy7Nt/ZEE6lKrwD
+    umAf5i8+aTAYidVjtg14ON1SLCy+WCp8z32q+rij5MCtRft6XFN222x3vZnrSSdL
+    JZ92l6+a8Lorz+ZHV59Rcbe8rQcjp5U50B8VMZzQwDp+M57TvdxIoeIzBzOE8h2G
+    LbiDYk8bHch1AgMBAAGjUzBRMB0GA1UdDgQWBBR1+iIlDzeK4jVdxyDwzkY02tdX
+    QDAfBgNVHSMEGDAWgBR1+iIlDzeK4jVdxyDwzkY02tdXQDAPBgNVHRMBAf8EBTAD
+    AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBvFMB9MKO8TNJ7zHuCupuYF7hgGXs/P/9x
+    PlfmDI+4r1GugRgW1lSpMCtoMJwQ7inVOv9qqxSQXwerfJxadkf3tMcZdD3DiYSP
+    kk+7TNvfmZB8GBGcvYkga8lGOqSAQyeZ+NVOeemjP4cHgnWvo+UqwQoyEZmlR7B5
+    M1J7JSftE/JAu9O0ECEDhP/xHqF4GEB81U+Lpsb/uqUscUYsFwU0O8hf3ZTEtoUF
+    FMf89u+xw2tPOjGZ2MTJmsPzMDfq0RNqLdVOZ/Gua+xZkkmG0B68YcD9XUM4Be+J
+    OJy2Rz6yROMLh+Lvj4pz3rRbmZdK16fCtvZymr+vDACSrfGnSFLW
+    -----END CERTIFICATE-----
+  tls.key: |
+    -----BEGIN PRIVATE KEY-----
+    MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYXl96DGfVZwI9
+    LrWuJgEJqBA1bv/zeYw2Ytxdi9YCLQV02T+Ond+4mgjYAJCjunLfCiDu8wJvx3Yb
+    c9Qwf+VCaiUr4pBkCgYnY8NJXp6hO2qrdqm1pOOcl8SBEG5qTJHVK7MiVSy2iiwG
+    gDcfZt23W+CmsbbukCra64n8/PnaVHCT5r88wwft/ZCh3IY+x47UjYSMvpxtxIi0
+    TJxuqqVjJVRJytklNWE9adrN1mgPbJfHY1cty+jCoPiNJXIV41fbnZxrPBsz5hyq
+    8yqUzKZpJDUGWlC18nrPZWdIzzL1a6xkM7GQ4xrXaQgVIXXiKGfhJHW2T7V7RjOq
+    DjxVh1rxAgMBAAECggEAQuMO07OVc1NkYrpaDAhn5TbPYr2HA3lkqU1Nwo0L1emw
+    nwJtiaxZVR7dagEZfZ5wJeQ639pyw+ISQWvgBqhmWnjhN3oee6QA3pLHXDJ6vXmp
+    UnrldjVbq9bd7vBpICXb0PH9kcFFPx65w+LOD+1mwELHhDW4gdJs1ayXZyUgg4xn
+    c6H6tfzba/cFqiJKBqE6Gy+xrVFb/2StMzYKLwxirb5iKs5GsEys1/msASxQ+E6z
+    Wcvsh+xtpWbfQUh2e1a+/tDTw/NtLeCsoH56162OJE/QjB84R4yrCFqQndOekQXr
+    aMixrS3Gh4/hl5Ht4mGqsekjPTINM87twPV5PcM2bwKBgQDH0vZEaqHiNPlo7/CX
+    qJqPuXc/jEIOAf50HaAC3MUWoI6yLE8ornyv17i2OOSUIek+w5qTtH/XFn5UhDGD
+    2rd0v+dHPJZ93LyfXNmQvCRQN6YcQxW8oOrR6ygbTkDpwCB7qrbukMAXZolVgTL4
+    4vWpyd5176GJ25H1cQ3UePTg+wKBgQDDNB2D+Rg22V75evB5IAtBpxFwYGobeYv6
+    YlB9bHuu+tD4rR/qp1IgErcOVmC0ONTRurRTX83Il5I3HkVyF7EcFWaEw3J/Qcxs
+    Bwqk9FdT+7hvcRk2oTJUszIN1Xl0uoKuSW4TTfLQWkprCS4VvPMnjrZn3ZdGpRKy
+    tiLzncyoAwKBgQC0FzyeMqBNl8LEwaLLfEg4ikWf/0+1AjUK/3wruD7kgrW4fNim
+    6IM1k61EhYf0vY9SYsXYow+okPwwPafGlwNKdH4DpOZY7u0Mj4kBuZ7csRrDU+6u
+    PzUDFfXijidQxDhCXHxcDBcjv+S8LCH9T8dqS6Z0EhE7hqlIVKjLOmwwqwKBgQCk
+    hxqRj7RvFovMb2icTvvt3CkAtOL6QVpQMelxrawZ8eGMmC8ckubPjbao6PkdLgGC
+    vIEc/NTvy4E739HctkdbSlZcdHfe9tCcBNtd6WxppvLvSz5bI0bOyTLZIiL61fEr
+    gUy8DKkqH9A1o0kqnVW887aemNDWhG/cHVQcTdafjQKBgFlrd+bDq1e+QVkkq6Lm
+    IbNQvs4Oab/gFduj4+YNEsh2h6tBOHOuLP5+V0RRci9u2leBMVNXjcx/r7q/HUQJ
+    DEDLIkO1m9mOf73e2sbWijQPr1yRi2JWwqTBOrsR1wrzXpNieCkhtTxI86WYOln/
+    vIZCvz34aOw/2/fApGuBVid1
+    -----END PRIVATE KEY-----
diff --git a/helm-charts/dbrepo/templates/ui/deployment.yaml b/helm-charts/dbrepo/templates/ui/deployment.yaml
index 4269189a18bffe8d9eff1a846f5866d8086bb5fe..47a0217ad501de5c2b6a5d2d511911f7cbece75b 100644
--- a/helm-charts/dbrepo/templates/ui/deployment.yaml
+++ b/helm-charts/dbrepo/templates/ui/deployment.yaml
@@ -11,7 +11,7 @@ metadata:
 spec:
   replicas: {{ .Values.ui.replicaCount }}
   strategy:
-    type: {{ $.Values.strategyType }}
+    type: {{ .Values.strategyType }}
   selector:
     matchLabels:
       app: ui
@@ -29,7 +29,7 @@ spec:
         runAsGroup: 1000
       containers:
         - name: ui
-          image: {{ printf "%s/%s:%s" .Values.ui.image.registry .Values.ui.image.repository .Values.ui.image.tag }}
+          image: {{ .Values.ui.image.name }}
           imagePullPolicy: {{ .Values.ui.image.pullPolicy | default "IfNotPresent" }}
           ports:
             - containerPort: 3000
diff --git a/helm-charts/dbrepo/templates/ui/secret.yaml b/helm-charts/dbrepo/templates/ui/secret.yaml
index f316a289b65c8fa120b9bff41e60da930f3a5377..2c9713d0cc20b9922f7f96529ef1c816024c7d97 100644
--- a/helm-charts/dbrepo/templates/ui/secret.yaml
+++ b/helm-charts/dbrepo/templates/ui/secret.yaml
@@ -1,3 +1,4 @@
+{{ $api := printf "https://%s" .Values.hostname }}
 ---
 apiVersion: v1
 kind: Secret
@@ -5,8 +6,8 @@ metadata:
   name: ui-secret
   namespace: {{ .Values.namespace }}
 stringData:
-  public-api-client: "{{ .Values.ui.public.api.client }}"
-  public-api-server: "{{ .Values.ui.public.api.server }}"
+  public-api-client: "{{ .Values.ui.public.api.client | default $api }}"
+  public-api-server: "{{ .Values.ui.public.api.server | default $api }}"
   public-title: "{{ .Values.ui.public.title }}"
   public-logo: "{{ .Values.ui.public.logo }}"
   public-icon: "{{ .Values.ui.public.icon }}"
diff --git a/helm-charts/dbrepo/templates/ui/service.yaml b/helm-charts/dbrepo/templates/ui/service.yaml
index 676c28992501fbb21fbdcd560ec2a9be7b47e98e..1abb5c65593b2550f4e739a3710bc8af3f33bbd7 100644
--- a/helm-charts/dbrepo/templates/ui/service.yaml
+++ b/helm-charts/dbrepo/templates/ui/service.yaml
@@ -10,7 +10,7 @@ metadata:
 spec:
   type: ClusterIP
   ports:
-    - name: "nuxt"
+    - name: ""
       port: 80
       targetPort: 3000
       protocol: TCP
diff --git a/helm-charts/dbrepo/test.sh b/helm-charts/dbrepo/test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6c4c5a61793e5f57612e390cc281614b1d114d7c
--- /dev/null
+++ b/helm-charts/dbrepo/test.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+NAMESPACE=dbrepo
+
+echo "Waiting for containers to start ..."
+SUCCESS=0
+for i in 0 1 2 3 4 5 6 7 8 9; do
+  RES=$(kubectl -n ${NAMESPACE} get pods | awk 'NR>1 {print $3}' | grep -qF "[^Running|^Completed]")
+  if [ "$?" -ne 0 ]; then
+    if [ $SUCCESS -eq 0 ]; then
+      echo "INFO: all pods started or completed: wait another iteration ..."
+      sleep 30
+      SUCCESS=1
+      continue
+    fi
+    echo "INFO: all pods started or completed"
+    exit 0
+  fi
+  echo "Waiting ..."
+  sleep 30
+done
+echo "ERROR: some pods did not successfully complete or are still running"
+exit 1
\ No newline at end of file
diff --git a/helm-charts/dbrepo/values.yaml b/helm-charts/dbrepo/values.yaml
index 0bdc219f286fb6e6d56335077bc6e4a36387ff2f..b1f1d0f68e182765cee53ad5eba50d03c30ce30f 100644
--- a/helm-charts/dbrepo/values.yaml
+++ b/helm-charts/dbrepo/values.yaml
@@ -1,6 +1,6 @@
-namespace: ""
+namespace: dbrepo
 
-hostname: ""
+hostname: dbrepo.local
 
 strategyType: RollingUpdate
 
@@ -30,10 +30,8 @@ metadataDb:
     loadBalancerIP: ""
     loadBalancerSourceRanges: [ ]
   persistence:
-    enabled: false
-    size: 10Gi
-    storageClass: default
-  replicaCount: 3 # uneven 3,5,7
+    enabled: true
+  replicaCount: 1 # uneven 3,5,7
 
 authService:
   fullnameOverride: auth-service
@@ -47,7 +45,7 @@ authService:
   extraStartupArgs: "--import-realm"
   tls:
     enabled: true
-    existingSecret: dbrepo-ingress-tls-cert
+    existingSecret: ingress-cert
     usePem: true
   metrics:
     enabled: true
@@ -69,7 +67,7 @@ authService:
   extraVolumeMounts:
     - name: config-map
       mountPath: /opt/bitnami/keycloak/data/import
-  replicaCount: 2
+  replicaCount: 1
 
 authDb:
   fullnameOverride: auth-db
@@ -81,6 +79,7 @@ authDb:
     password: metrics # implicit requirement for metrics container
     repmgrPassword: repmgr # implicit requirement for rolling updates
     database: keycloak
+    replicaCount: 1
   pgpool:
     adminUsername: admin
     adminPassword: admin
@@ -92,9 +91,8 @@ authDb:
     loadBalancerIP: ""
     loadBalancerSourceRanges: [ ]
   persistence:
-    enabled: false
+    enabled: true
     size: 10Gi
-    storageClass: default
 
 dataDb:
   fullnameOverride: data-db
@@ -112,8 +110,8 @@ dataDb:
       password: mariabackup
   sidecars:
     - name: sidecar
-      image: s210.dl.hpc.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.1
-      imagePullPolicy: Always
+      image: dbrepo-data-db-sidecar:latest
+      imagePullPolicy: Never
       securityContext:
         runAsUser: 1001
         runAsGroup: 1001
@@ -150,11 +148,9 @@ dataDb:
       persistentVolumeClaim:
         claimName: data-db-shared
   persistence:
-    enabled: false
+    enabled: true
     size: 10Gi
-    storageClass: default
-    sharedStorageClass: default
-  replicaCount: 3 # uneven
+  replicaCount: 1 # uneven
 
 searchdb:
   fullnameOverride: search-db
@@ -165,12 +161,13 @@ searchdb:
   password: admin
   clusterName: search-db
   masterService: search-db
+  replicas: 1
   image:
     debug: false
   sysctlInit:
     enabled: true
   persistence:
-    enabled: false
+    enabled: true
     size: 10Gi
   service:
     type: ClusterIP
@@ -237,8 +234,8 @@ searchDbDashboard:
   opensearchHosts: http://search-db:9200
   extraInitContainers:
     - name: init
-      image: s210.dl.hpc.tuwien.ac.at/dbrepo/search-db-init:1.4.1
-      imagePullPolicy: Always
+      image: dbrepo-search-db-init:latest
+      imagePullPolicy: Never
       env:
         - name: OPENSEARCH_HOST
           value: http://search-db:9200
@@ -253,11 +250,11 @@ searchDbDashboard:
   extraVolumes:
     - name: tls
       secret:
-        secretName: dbrepo-ingress-tls-cert
+        secretName: ingress-cert
     - name: config
       secret:
         secretName: search-db-dashboard-secret
-  replicaCount: 2
+  replicaCount: 1
 
 uploadService:
   enabled: true
@@ -265,7 +262,7 @@ uploadService:
     registry: docker.io
     repository: tusproject/tusd
     tag: v1.12
-  replicaCount: 2
+  replicaCount: 1
 
 brokerService:
   fullnameOverride: broker-service
@@ -284,7 +281,7 @@ brokerService:
       enabled: false
       sslOptionsVerify: true
       failIfNoPeerCert: true
-      existingSecret: dbrepo-ingress-tls-cert
+      existingSecret: ingress-cert
     username: broker
     password: broker
   extraConfiguration: |-
@@ -330,29 +327,24 @@ brokerService:
   persistence:
     enabled: false
     size: 5Gi
-    storageClass: default
   service:
     type: ClusterIP
     # loadBalancerIP:
-  replicaCount: 3
+  replicaCount: 1
 
 analyseService:
   enabled: true
   image:
-    registry: s210.dl.hpc.tuwien.ac.at
-    repository: dbrepo/analyse-service
-    tag: "1.4.1"
-    pullPolicy: Always
+    name: dbrepo-analyse-service:latest
+    pullPolicy: Never
     debug: false
-  replicaCount: 2
+  replicaCount: 1
 
 metadataService:
   enabled: true
   image:
-    registry: s210.dl.hpc.tuwien.ac.at
-    repository: dbrepo/metadata-service
-    tag: "1.4.1"
-    pullPolicy: Always
+    name: dbrepo-metadata-service:latest
+    pullPolicy: Never
     debug: false
   adminEmail: noreply@example.com
   authService:
@@ -370,39 +362,35 @@ metadataService:
     mirror: 60
     obtainMetadata: 60
     deleteStaleQueries: 60
-  replicaCount: 2
+  replicaCount: 1
 
 dataService:
   enabled: true
   image:
-    registry: s210.dl.hpc.tuwien.ac.at
-    repository: dbrepo/data-service
-    tag: "1.4.1"
-    pullPolicy: Always
+    name: dbrepo-data-service:latest
+    pullPolicy: Never
     debug: false
   jwt:
     pubkey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
   consumerConcurrentMin: 1
   consumerConcurrentMax: 5
   requeueRejected: false
-  replicaCount: 2
+  replicaCount: 1
 
 searchService:
   enabled: true
   image:
-    registry: s210.dl.hpc.tuwien.ac.at
-    repository: dbrepo/search-service
-    tag: "1.4.1"
-    pullPolicy: Always
+    name: dbrepo-search-service:latest
+    pullPolicy: Never
     debug: false
-  replicaCount: 2
+  replicaCount: 1
 
 storageservice:
   master:
     enabled: true
   filer:
     enabled: true
-    replicas: 2
+    replicas: 1
     enablePVC: false
     storage: 25Gi
     s3:
@@ -414,7 +402,7 @@ storageservice:
       existingConfigSecret: seaweedfs-s3-secret
   volume:
     enabled: true
-    replicas: 2
+    replicas: 1
   s3:
     enabled: true
     replicas: 2
@@ -463,14 +451,13 @@ logservice:
 ui:
   enabled: true
   image:
-    registry: s210.dl.hpc.tuwien.ac.at
-    repository: dbrepo/ui
-    tag: "1.4.1"
-    pullPolicy: Always
+    name: dbrepo-ui:latest
+    pullPolicy: Never
+    debug: false
   public:
     api:
-      client: http://example.com
-      server: http://example.com
+      client: {}
+      server: {}
     title: "Database Repository"
     logo: "/logo.svg"
     icon: "/favicon.ico"
@@ -489,7 +476,7 @@ ui:
     doi:
       enabled: false
       endpoint: https://doi.org
-  replicaCount: 2
+  replicaCount: 1
   extraVolumes: [ ]
   #  - name: images-map
   #    configMap:
@@ -500,115 +487,32 @@ ui:
   #    subPath: logo.svg
 
 ingress:
-  enabled: false
-  data:
-    - name: ingress
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-      hosts:
-        - paths:
-            - path: /api/analyse
-              pathType: Prefix
-              serviceName: analyse-service
-              portNumber: 80
-            - path: /api/search
-              pathType: Prefix
-              serviceName: search-service
-              portNumber: 80
-            - path: /api
-              pathType: Prefix
-              serviceName: metadata-service
-              portNumber: 80
-            - path: /
-              pathType: Prefix
-              serviceName: ui
-              portNumber: 80
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-upload
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/proxy-body-size: 2G
-      hosts:
-        - paths:
-            - path: /api/upload
-              pathType: Prefix
-              serviceName: upload-service
-              portNumber: 80
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-secure
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
-        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
-      hosts:
-        - paths:
-            - path: /admin/dashboard
-              pathType: Prefix
-              serviceName: search-db-dashboard
-              portNumber: 5601
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-api
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/use-regex: "true"
-        nginx.ingress.kubernetes.io/rewrite-target: /api/$1
-      hosts:
-        - paths:
-            - path: /api/broker/(.*)
-              pathType: ImplementationSpecific
-              serviceName: broker-service
-              portNumber: 15672
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-root
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/use-regex: "true"
-        nginx.ingress.kubernetes.io/rewrite-target: /$1
-      hosts:
-        - paths:
-            - path: /admin/broker/(.*)
-              pathType: ImplementationSpecific
-              serviceName: broker-service
-              portNumber: 15672
-            - path: /admin/storage
-              pathType: ImplementationSpecific
-              serviceName: storageservice-s3
-              portNumber: 9000
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-root-secure
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
-        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
-        nginx.ingress.kubernetes.io/use-regex: "true"
-        nginx.ingress.kubernetes.io/rewrite-target: /$1
-      hosts:
-        - paths:
-            - path: /api/auth/(.*)
-              pathType: ImplementationSpecific
-              serviceName: auth-service
-              portNumber: 443
-            - path: /retrieve/(.*)
-              pathType: ImplementationSpecific
-              serviceName: search-db
-              portNumber: 9200
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
-    - name: ingress-pid
-      annotations:
-        cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
-        nginx.ingress.kubernetes.io/use-regex: "true"
-        nginx.ingress.kubernetes.io/rewrite-target: /api/pid/$1
-      hosts:
-        - paths:
-            - path: /pid/(.*)
-              pathType: ImplementationSpecific
-              serviceName: metadata-service
-              portNumber: 80
-      tls:
-        - secretName: dbrepo-ingress-tls-cert
+  enabled: true
+  className: nginx
+  tls:
+    enabled: true
+    secretName: ingress-cert
+  annotations:
+    basic: {}
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+    secure:
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
+      nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
+    upload:
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+      nginx.ingress.kubernetes.io/proxy-body-size: 2G
+    rewriteApi:
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+      nginx.ingress.kubernetes.io/use-regex: "true"
+      nginx.ingress.kubernetes.io/rewrite-target: /api/$1
+    rewriteRoot:
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
+      nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
+      nginx.ingress.kubernetes.io/use-regex: "true"
+      nginx.ingress.kubernetes.io/rewrite-target: /$1
+    rewritePid:
+#      cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+      nginx.ingress.kubernetes.io/use-regex: "true"
+      nginx.ingress.kubernetes.io/rewrite-target: /api/pid/$1
diff --git a/lib/python/pyproject.toml b/lib/python/pyproject.toml
index 6dfae10925cfb7d47f9d0272d5ab59ddb884bcc1..0fa56b601c5987c5669bb7dda35e0fdf75be029e 100644
--- a/lib/python/pyproject.toml
+++ b/lib/python/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "dbrepo"
-version = "__APPVERSION__"
+version = "1.4.2rc5"
 description = "DBRepo Python Library"
 keywords = [
     "DBRepo",
diff --git a/lib/python/setup.py b/lib/python/setup.py
index 5f1c4834b46c22caf88fb61ba1169fc7c690d092..3f03bf8a3ae8e9f2a03307dfda64d5e855336648 100644
--- a/lib/python/setup.py
+++ b/lib/python/setup.py
@@ -2,7 +2,7 @@
 from distutils.core import setup
 
 setup(name="dbrepo",
-      version="__APPVERSION__",
+      version="1.4.2rc5",
       description="A library for communicating with DBRepo",
       url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo//",
       author="Martin Weise",
diff --git a/mkdocs.yml b/mkdocs.yml
index ae7381505ab5ae8f8d24f5a0baec68f02ff23f3b..d669b11c5447f015fc4bdb9aba369eeb35efe072 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -36,6 +36,10 @@ nav:
       - Authentication Service: usage-authentication.md
       - Storage Service: usage-storage.md
       - Upload Service: usage-upload.md
+  - Development:
+    - Overview: dev-overview.md
+    - Application Guide: dev-guide-app.md
+    - Infrastructure Guide: dev-guide-infra.md
   - publications.md
   - contact.md
 extra_css:
@@ -86,6 +90,8 @@ markdown_extensions:
   - admonition
   - pymdownx.details
   - pymdownx.superfences
+  - pymdownx.tasklist:
+      custom_checkbox: true
   - pymdownx.tabbed:
       alternate_style: true
   - toc:
diff --git a/mweise.pub b/mweise.pub
new file mode 100644
index 0000000000000000000000000000000000000000..2f5df75ff68baccd821674c4e5b0f58b0f2007b8
--- /dev/null
+++ b/mweise.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/X32mLb7EfwTKbpJmW2BN6ouGLYUZnzL+PY/9RpDZn60UMZ3awRzHQOIQj92KvH0vegkgfZvxCcDQN1vOQP4NbfN0hQFTHOBElGQMrl/Lwicw896js+OUOqPjKUMP35jlZSKvheLd6MPbmXyJpW4gXrEC7NOtswLTBjDDPV6ypyFngjA78vlVE4ZPjKN09eoBbhuvQunJSPaTBxnBexFF5LRfvPC8cITMzjjO/tBHsRUFJ7vy+TCPBTM5YsF257aZTMaG3RvDplmYKwJ8WLWr3eVbyO/LUelXaUjDfJ3z7B06m0dVbEXX/oHq3hZNXmJdovKefeOygZX8Rf62M9h2oCE2LxfyvA+R9rDu5oLqrzTLolWVGTM6AmEj5HtSbqO0WDhpy8a67z6qPR0HoCXVsIYtKrzNAqB/u7OWAsy285wfDpquouLGbEETUFUJmMOba9cTSYMbEmWksa/KckbCPnx4qRstL2lDENylT3WHuhbIx0zv4TVo4/gHJGuOYuE= mweise@medusa