diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4f107b738b85ac57da82e59876f568b89d0846b2..ec235603223aabf19cf519deee1348af8dd68cd6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -53,11 +53,11 @@ include:
       - flux2/**/*
       - install/**/*
       - test/**/*
-      - openappstack/**/*
+      - stackspin/**/*
       - requirements.txt
     - if: '$TRIGGER_JOBS =~ /enable-.*/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 # app rules
 #
@@ -85,11 +85,12 @@ include:
         - flux2/infrastructure/sources/grafana.yaml
         - flux2/infrastructure/sources/wikimedia.yaml
         - flux2/infrastructure/sources/prometheus-community.yaml
+        - flux2/config/monitoring/*.yaml
         - install/install-app.sh
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-monitoring/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-monitoring/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 .eventrouter_rules:
   extends:
@@ -117,7 +118,7 @@ include:
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-nextcloud/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-nextcloud/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 .cert_manager_rules:
   extends:
@@ -136,18 +137,18 @@ include:
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-rocketchat/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-rocketchat/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 .single_sign_on_rules:
   rules:
     - changes:
         - flux2/core/base/$RESOURCE/*.yaml
         - flux2/infrastructure/sources/single-sign-on.yaml
-        - install/install-openappstack.sh
+        - install/install-stackspin.sh
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-single-sign-on/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-single-sign-on/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 .wekan_rules:
   rules:
@@ -159,7 +160,7 @@ include:
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-wekan/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-wekan/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 .wordpress_rules:
   rules:
@@ -171,7 +172,7 @@ include:
         - test/taiko/*
     - if: '$TRIGGER_JOBS =~ /enable-wordpress/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-wordpress/'
-    - if: '$CI_COMMIT_BRANCH == "master"'
+    - if: '$CI_COMMIT_BRANCH == "main"'
 
 
 # Global declarations
@@ -194,7 +195,7 @@ variables:
   SSH_KEY_ID: "411"
   HOSTNAME: "${CI_COMMIT_REF_SLUG}"
   ANSIBLE_HOST_KEY_CHECKING: "False"
-  KANIKO_BUILD_IMAGENAME: "openappstack-ci"
+  KANIKO_BUILD_IMAGENAME: "stackspin-ci"
   CLUSTER_DIR: "clusters/${CI_COMMIT_REF_SLUG}"
 
 default:
@@ -225,7 +226,7 @@ ci-test-image-build:
         .ci.env
   environment:
     name: image/$CI_COMMIT_REF_SLUG
-    url: https://open.greenhost.net:4567/openappstack/openappstack/openappstack-ci:${CI_COMMIT_REF_SLUG}
+    url: https://open.greenhost.net:4567/stackspin/stackspin/stackspin-ci:${CI_COMMIT_REF_SLUG}
     auto_stop_in: 3 weeks
   rules:
     # Automatically rebuild the container image if this file, the Dockerfile,
@@ -249,10 +250,10 @@ report-ci-image-tag:
     - *debug_information
   script:
     - |
-      TAG_INFORMATION=$(curl https://open.greenhost.net/api/v4/projects/openappstack%2Fopenappstack/registry/repositories/2/tags/${CI_COMMIT_REF_SLUG});
+      TAG_INFORMATION=$(curl https://open.greenhost.net/api/v4/projects/stackspin%2Fstackspin/registry/repositories/73/tags/${CI_COMMIT_REF_SLUG});
       echo "Tag information: ${TAG_INFORMATION}"
       if [ "$TAG_INFORMATION" == '{"message":"404 Tag Not Found"}' ]; then
-        echo "CI_CONTAINER_TAG=master" > .ci.env
+        echo "CI_CONTAINER_TAG=main" > .ci.env
       else
         echo "CI_CONTAINER_TAG=${CI_COMMIT_REF_SLUG}" > .ci.env
       fi
@@ -288,7 +289,7 @@ create-vps:
   stage: create-vps
   variables:
     SUBDOMAIN: "${CI_COMMIT_REF_SLUG}.ci"
-    DOMAIN: "openappstack.net"
+    DOMAIN: "stackspin.net"
   script:
     - *debug_information
     # Creates a VPS based on a custom CI image for which the ansible playbook
@@ -311,7 +312,7 @@ create-vps:
 # Stage: setup-cluster
 # ====================
 #
-# Installs OAS
+# Installs Stackspin
 
 test-dns:
   stage: setup-cluster
@@ -325,7 +326,7 @@ test-dns:
     - .general_rules
   interruptible: true
 
-setup-openappstack:
+setup-stackspin:
   stage: setup-cluster
   script:
     - *debug_information
@@ -333,14 +334,14 @@ setup-openappstack:
     - chmod 700 ansible
     - cp ${CLUSTER_DIR}/inventory.yml ansible/
     # Set up cluster
-    - python3 -m openappstack $HOSTNAME install
+    - python3 -m stackspin $HOSTNAME install
     # Customize env file, remove all comments and empty lines
     - sed "s/1.2.3.4/$IP_ADDRESS/; s/example.org/$FQDN/; s/acme_staging=false/acme_staging=true/; s/acme-v02/acme-staging-v02/; /^\s*#.*$/d; /^\s*$/d" install/.flux.env.example >> ${CLUSTER_DIR}/.flux.env
-    # Deploy secret/oas-cluster-variables
+    # Deploy secret/stackspin-cluster-variables
     - cp install/kustomization.yaml ${CLUSTER_DIR}
     - kubectl create namespace flux-system
     - kubectl apply -k ${CLUSTER_DIR}
-    - bash ./install/install-openappstack.sh
+    - bash ./install/install-stackspin.sh
   extends:
     - .ssh_setup
     - .report_artifacts
@@ -355,7 +356,7 @@ setup-openappstack:
 .kustomization-ready:
   stage: kustomization
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: test-dns
   script:
     - *debug_information
@@ -379,9 +380,9 @@ infrastructure-kustomizations-ready:
   extends:
     - .kustomization-ready
 
-openappstack-kustomizations-ready:
+stackspin-kustomizations-ready:
   variables:
-    RESOURCE: "openappstack"
+    RESOURCE: "stackspin"
   extends:
     - .kustomization-ready
 
@@ -395,7 +396,7 @@ openappstack-kustomizations-ready:
   script:
     - *debug_information
     # Add optional override values we need for the CI pipeline only
-    - '[ -f ./install/overrides/oas-${RESOURCE}-override.yaml ] && kubectl apply -n oas-apps -f ./install/overrides/oas-${RESOURCE}-override.yaml'
+    - '[ -f ./install/overrides/stackspin-${RESOURCE}-override.yaml ] && kubectl apply -n stackspin-apps -f ./install/overrides/stackspin-${RESOURCE}-override.yaml'
     - bash ./install/install-app.sh ${RESOURCE}
   extends:
     - .ssh_setup
@@ -448,7 +449,7 @@ enable-wordpress:
 
 monitoring-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-monitoring
   variables:
     RESOURCE: "monitoring"
@@ -458,7 +459,7 @@ monitoring-kustomization-ready:
 
 nextcloud-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-nextcloud
   variables:
     RESOURCE: "nextcloud"
@@ -468,7 +469,7 @@ nextcloud-kustomization-ready:
 
 rocketchat-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-rocketchat
   variables:
     RESOURCE: "rocketchat"
@@ -478,7 +479,7 @@ rocketchat-kustomization-ready:
 
 wekan-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-wekan
   variables:
     RESOURCE: "wekan"
@@ -488,7 +489,7 @@ wekan-kustomization-ready:
 
 wordpress-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-wordpress
   variables:
     RESOURCE: "wordpress"
@@ -516,7 +517,7 @@ nextcloud-cert:
     RESOURCE: "nextcloud"
   needs:
     - job: enable-nextcloud
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .nextcloud_rules
@@ -526,7 +527,7 @@ kube-prometheus-stack-cert:
     RESOURCE: "kube-prometheus-stack"
   needs:
     - job: enable-monitoring
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .kube_prometheus_stack_rules
@@ -536,7 +537,7 @@ rocketchat-cert:
     RESOURCE: "rocketchat"
   needs:
     - job: enable-rocketchat
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .rocketchat_rules
@@ -546,7 +547,7 @@ single-sign-on-cert:
     RESOURCE: "single-sign-on"
   needs:
     - job: core-kustomizations-ready
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .single_sign_on_rules
@@ -556,7 +557,7 @@ wekan-cert:
     RESOURCE: "wekan"
   needs:
     - job: enable-wekan
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .wekan_rules
@@ -566,7 +567,7 @@ wordpress-cert:
     RESOURCE: "wordpress"
   needs:
     - job: enable-wordpress
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .wordpress_rules
@@ -598,7 +599,7 @@ kube-prometheus-stack-alerts:
     REQUESTS_CA_BUNDLE: "/etc/ssl/certs/ca-certificates.crt"
   script:
     - *debug_information
-    - export BASIC_AUTH_PW=$(python3 -m openappstack $HOSTNAME secrets | grep oas-prometheus-basic-auth | cut -d'=' -f2)
+    - export BASIC_AUTH_PW=$(python3 -m stackspin $HOSTNAME secrets | grep stackspin-prometheus-basic-auth | cut -d'=' -f2)
     - cd test/
     - bash ../.gitlab/ci_scripts/retry_cmd_until_success.sh 30 10 pytest -s -m 'prometheus' --connection=ansible --ansible-inventory=../${CLUSTER_DIR}/inventory.yml --hosts='ansible://*'
   extends:
@@ -619,7 +620,7 @@ kube-prometheus-stack-alerts:
   script:
     # Retry taiko tests 60 times until they succeed,
     # with a sleep interval of 10s in between tests
-    - bash ./.gitlab/ci_scripts/retry_cmd_until_success.sh 60 10 unbuffer python3 -m openappstack $HOSTNAME test --apps $RESOURCE | ts -i | ts
+    - bash ./.gitlab/ci_scripts/retry_cmd_until_success.sh 60 10 unbuffer python3 -m stackspin $HOSTNAME test --apps $RESOURCE | ts -i | ts
   artifacts:
     paths:
       - test/taiko/Screenshot*
@@ -631,7 +632,7 @@ dashboard-taiko:
   variables:
     RESOURCE: "dashboard"
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: core-kustomizations-ready
   extends:
     - .taiko
@@ -642,7 +643,7 @@ grafana-taiko:
     RESOURCE: "grafana"
   needs:
     - job: kube-prometheus-stack-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: monitoring-kustomization-ready
   extends:
     - .taiko
@@ -653,7 +654,7 @@ nextcloud-taiko:
     RESOURCE: "nextcloud"
   needs:
     - job: nextcloud-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: nextcloud-kustomization-ready
   extends:
     - .taiko
@@ -664,7 +665,7 @@ rocketchat-taiko:
     RESOURCE: "rocketchat"
   needs:
     - job: rocketchat-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: rocketchat-kustomization-ready
   extends:
     - .taiko
@@ -675,7 +676,7 @@ wekan-taiko:
     RESOURCE: "wekan"
   needs:
     - job: wekan-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: wekan-kustomization-ready
   extends:
     - .taiko
@@ -686,7 +687,7 @@ wordpress-taiko:
     RESOURCE: "wordpress"
   needs:
     - job: wordpress-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: wordpress-kustomization-ready
   extends:
     - .taiko
@@ -711,7 +712,7 @@ terminate-droplet:
     # Delete droplet
     - python3 -c "import greenhost_cloud; greenhost_cloud.terminate_droplets_by_name(\"^${CI_COMMIT_REF_SLUG}\")"
     # Delete container image if one was created
-    - "if [ \"$CI_CONTAINER_TAG\" != \"master\" ]; then curl --request DELETE --header \"PRIVATE-TOKEN: ${CLEANER_TOKEN}\" https://open.greenhost.net/api/v4/projects/openappstack%2Fopenappstack/registry/repositories/2/tags/${CI_CONTAINER_TAG}; fi"
+    - "if [ \"$CI_CONTAINER_TAG\" != \"main\" ]; then curl --request DELETE --header \"PRIVATE-TOKEN: ${CLEANER_TOKEN}\" https://open.greenhost.net/api/v4/projects/stackspin%2Fstackspin/registry/repositories/73/tags/${CI_CONTAINER_TAG}; fi"
   environment:
     name: $CI_COMMIT_REF_SLUG
     action: stop
diff --git a/.gitlab/ci_scripts/create_vps.sh b/.gitlab/ci_scripts/create_vps.sh
index 01d612ac3071c41a4f63dc7d88ff258bc3a6b4a2..10e3e674bc0e70d1d8da8f6ddbcd824e7bee6787 100644
--- a/.gitlab/ci_scripts/create_vps.sh
+++ b/.gitlab/ci_scripts/create_vps.sh
@@ -3,7 +3,7 @@
 
 set -ve
 
-# shellcheck disable=SC2039
+# shellcheck disable=SC2039,SC3028
 VPS_HOSTNAME="$HOSTNAME"
 
 # Delete old machine if it still exists
@@ -13,7 +13,7 @@ greenhost_cloud.terminate_droplets_by_name(\"^${VPS_HOSTNAME}$\")"
 echo "Creating new machine"
 # Uses a custom disk image built with 1f2bee2 on 2021-10-19. See
 # CONTRIBUTING.md#ci-pipeline-image for more info.
-python3 -m openappstack "$VPS_HOSTNAME" create \
+python3 -m stackspin "$VPS_HOSTNAME" create \
   --create-droplet "$DOMAIN" \
   --create-hostname "$VPS_HOSTNAME" \
   --ssh-key-id "$SSH_KEY_ID" \
diff --git a/.gitlab/issue_templates/bug.md b/.gitlab/issue_templates/bug.md
index 1eeb4285dfa3e6da3e68b3ce7b095cf50d672d04..555403532233393465a0732d8c890e085621a82d 100644
--- a/.gitlab/issue_templates/bug.md
+++ b/.gitlab/issue_templates/bug.md
@@ -1,6 +1,6 @@
 The output of these commands is helpful to debug deployment errors:
 
-    oas-version-info.sh
+    stackspin-version-info.sh
     kubectl get pods -A
 
 Please include this output if possible.
diff --git a/.gitlab/issue_templates/feedback.md b/.gitlab/issue_templates/feedback.md
index 9ec51ace6d732861bdae3ece85c66620960a1163..8822a479650d21e151f99d4170715353fda117ed 100644
--- a/.gitlab/issue_templates/feedback.md
+++ b/.gitlab/issue_templates/feedback.md
@@ -1,10 +1,10 @@
-This feedback template can be used to provide feedback based on the [OAS testing instructions](https://docs.openappstack.net/en/latest/testing_instructions.html).
+This feedback template can be used to provide feedback based on the [Stackspin testing instructions](https://docs.stackspin.net/en/latest/testing_instructions.html).
 
 # Installation
 
 > What problems did you encounter during installation? (If these problems prevent you from continuing with the testing process please provide some details what went wrong so we may try to help you get unstuck!)
 
-> We know that the installation process as it is right now is too technical, especially given that we want OpenAppStack to be easy to use for people that are only moderately computer-savvy.
+> We know that the installation process as it is right now is too technical, especially given that we want Stackspin to be easy to use for people that are only moderately computer-savvy.
 > We plan to make the installation process easier in the future, probably using some kind of web-based installer.
 > Even so, what do you think could be improved about the installation process or tutorial ? Did anything bother you, was something extra hard to do, or unclear?
 
@@ -34,6 +34,6 @@ This feedback template can be used to provide feedback based on the [OAS testing
 
 # Closing questions
 
-> What's missing? Now that you have gotten an idea of OpenAppStack's initial offering (Nextcloud and OnlyOffice), think of what the next thing is your organisation would need to collaborate more efficiently. Or think of a tool that you or your organisation use a lot that is also "centralised" (e.g., something exclusively provided by Google, Microsoft or a different company)
+> What's missing? Now that you have gotten an idea of Stackspin's initial offering (Nextcloud and OnlyOffice), think of what the next thing is your organisation would need to collaborate more efficiently. Or think of a tool that you or your organisation use a lot that is also "centralised" (e.g., something exclusively provided by Google, Microsoft or a different company)
 
 > Do you have any other questions, comments, remarks, suggestions?
diff --git a/.gitlab/issue_templates/new_app.md b/.gitlab/issue_templates/new_app.md
index ec7b3df755eac697e2adca4494f7b3196420e9d5..3d05b9148564d95df5619ad17fade49f21c191f4 100644
--- a/.gitlab/issue_templates/new_app.md
+++ b/.gitlab/issue_templates/new_app.md
@@ -5,17 +5,20 @@
 
 * [ ] Create new source if needed in `flux2/infrastructure/sources/APP.yaml`
 * [ ] Include `APP.yaml` in `flux2/infrastructure/sources/kustomization.yaml`
-* [ ] Add app secret: `charts/oas-secrets/templates/oas-APP-variables.yaml`
+* [ ] Add app secret: `charts/stackspin-secrets/templates/stackspin-APP-variables.yaml`
 * Add kustomizations:
    * [ ] `flux2/cluster/optional/APP/APP.yaml`
    * [ ] `flux2/apps/APP/kustomization.yaml`
    * [ ] If needed, add PVCs in `flux2/apps/APP/pvc.yaml`
    * [ ] Add helmrelease in `flux2/apps/APP/release.yaml`
+     * Mem resource requests/limits: See https://open.greenhost.net/stackspin/stackspin/-/issues/1027
+      * [ ] mem request: the median weekly memory usage of an app
+      * [ ] mem limit: 150% of the weekly max memory usage
 
 ### Single sign-on
 
 * Integrate the new app into the single sign-on system
-  * Add OAuth client secret to `charts/oas-secrets/templates/oas-oauth-variables.yaml`
+  * Add OAuth client secret to `charts/stackspin-secrets/templates/stackspin-oauth-variables.yaml`
   * In `flux2/core/base/single-sign-on/release.yaml`:
     * [ ] Add app `userbackend.applications`
     * [ ] Add app to `oAuthClients`
@@ -60,7 +63,7 @@ Add app to following stages in `.gitlab-ci.yml`:
       git clone https://github.com/k8s-at-home/renovate-helm-releases /tmp/renovate-helm-releases
       /tmp/renovate.py --cluster-path flux2
       ```
-* [ ] Make sure that latest [renovate pipeline](https://open.greenhost.net/openappstack/renovate/-/pipelines)
+* [ ] Make sure that latest [renovate pipeline](https://open.greenhost.net/stackspin/renovate/-/pipelines)
       checks for app updates **after the new app is merged into the main branch**
 
 ## Documentation
diff --git a/.gitlab/issue_templates/release.md b/.gitlab/issue_templates/release.md
index 1fe331ce925ea015170074aa3fc1f83571ed46b1..685be4d7e8d547951e82aedcc11d16246ec5f368 100644
--- a/.gitlab/issue_templates/release.md
+++ b/.gitlab/issue_templates/release.md
@@ -2,7 +2,7 @@
 
 ## Before finalizing release
 
-Make these changes in the master branch before releasing:
+Make these changes in the main branch before releasing:
 
 * [ ] Ensure all applications/dependencies/charts are at their latest versions
       see `.gitlab/issue_templates/update_all_components.md`
@@ -11,8 +11,8 @@ Make these changes in the master branch before releasing:
   * [ ] Document how to upgrade in `docs/upgrade.md`
 * [ ] Update dependencies in `requirements.txt` by following the
       instructions in `requirements.in`
-* [ ] Do a manual upgrade test from last release version to `master`
-* [ ] Create a release merge request for the master branch
+* [ ] Do a manual upgrade test from last release version to `main`
+* [ ] Create a release merge request for the main branch
 
 ## In the release merge request
 
@@ -21,12 +21,12 @@ Make these changes in the master branch before releasing:
 * [ ] Update the version number in the `VERSION` file
 * [ ] Commit (signed)
 * [ ] Push to MR
-* [ ] Make sure master pipeline is successful before merging MR !
-* [ ] Wait for MR to get merged into master
+* [ ] Make sure main pipeline is successful before merging MR !
+* [ ] Wait for MR to get merged into main
 
 ## Push a signed tag
 
-* [ ] Make sure the master pipeline succeeds for the last commit before tagging. This
+* [ ] Make sure the main pipeline succeeds for the last commit before tagging. This
       is important because tags should not get retagged !
 * [ ] Create and push signed tag (`git tag -s 0.7.0 -m 'Release 0.7.0'; git push --tags`)
 
@@ -44,7 +44,7 @@ Create a MR for the new branch with the following changes:
 ## After release
 
 * [ ] Log into https://readthedocs.org and update documentation for tagged versions
-* [ ] Cherry-pick all changes from the release branch into master which
+* [ ] Cherry-pick all changes from the release branch into main which
       shouldn't be only in the 0.4.0 branch (i.e. not the commit locking the
       dependencies)
 * [ ] Create issue for creating a release blog post
diff --git a/.gitlab/issue_templates/update_all_components.md b/.gitlab/issue_templates/update_all_components.md
index f1c1f8ac97edd9dc66f6a8847cf5e7f689ac8099..03df28802216ebb482b418654b2be215d65cf248 100644
--- a/.gitlab/issue_templates/update_all_components.md
+++ b/.gitlab/issue_templates/update_all_components.md
@@ -3,24 +3,24 @@ To update all applications, check the following files:
 * `Dockerfile`:
   * [ ] All apk app versions
   * [ ] All non-apk app versions in `Dockerfile`, especially:
-    * [ ] flux (Make sure the version is the same as in `ansible/group_vars/all/oas.yml`, `docs/installation/install_oas.rst` and `install/flux-version-check.sh`)
+    * [ ] flux (Make sure the version is the same as in `ansible/group_vars/all/stackspin.yml`, `docs/installation/install_stackspin.rst` and `install/flux-version-check.sh`)
 * [ ] Mitogen version in `ansible/plugins` (https://github.com/mitogen-hq/mitogen/releases)
 
-In `ansible/group_vars/all/oas.yml`:
+In `ansible/group_vars/all/stackspin.yml`:
 
 * [ ] k3s
 
 Our custom charts:
 
 We get dependeny updates via renovate for our custom helm charts.
-However, we still don't get [automated version bumps](https://open.greenhost.net/openappstack/openappstack/-/issues/1001)
+However, we still don't get [automated version bumps](https://open.greenhost.net/stackspin/stackspin/-/issues/1001)
 with it, so make sure to bump the version if needed for:
 
-* [ ] [dashboard-frontend](https://open.greenhost.net/openappstack/admin-frontend)
-* [ ] [nextcloud](https://open.greenhost.net/openappstack/nextcloud)
-* [ ] [single-sign-on](https://open.greenhost.net/openappstack/single-sign-on)
-* [ ] [wordpress](https://open.greenhost.net/openappstack/wordpress-helm)
+* [ ] [dashboard-frontend](https://open.greenhost.net/stackspin/admin-frontend)
+* [ ] [nextcloud](https://open.greenhost.net/stackspin/nextcloud)
+* [ ] [single-sign-on](https://open.greenhost.net/stackspin/single-sign-on)
+* [ ] [wordpress](https://open.greenhost.net/stackspin/wordpress-helm)
 
 Pull in upstream changes to:
 
-* [ ] [local-path-provisioner](https://open.greenhost.net/openappstack/local-path-provisioner)
+* [ ] [local-path-provisioner](https://open.greenhost.net/stackspin/local-path-provisioner)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 80d49132d46b0a2575c3035fd7c628ab07b71d0e..21366c08015344a4d137f4e95ed17e97109d59f4 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -22,7 +22,7 @@ repos:
   - repo: https://github.com/hadolint/hadolint
     rev: v1.23.0
     hooks:
-      - id: hadolint
+      - id: hadolint-docker
   - repo: https://github.com/timothycrosley/isort
     # Sorts import statements for you
     rev: 5.0.9
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3b75e62c902bee2734bd6b2281e7df70f160e0e2..c7f10f523cabc89a694cdf5e4ba42d4f06234c19 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -81,28 +81,28 @@ use it. This is a manual process for now. Follow these steps:
    export HOST_NAME=baseimage$(date +'%Y%m%d')
    # Make sure you use your private ssh key id, 411 is the ssh key used in CI
    export SSH_ID=411
-   python -m openappstack ${HOST_NAME} create --create-droplet --create-hostname ${HOST_NAME}.openappstack.net --ssh-key-id $SSH_ID --create-domain-records --subdomain ${HOST_NAME} openappstack.net
+   python -m stackspin ${HOST_NAME} create --create-droplet --create-hostname ${HOST_NAME}.stackspin.net --ssh-key-id $SSH_ID --create-domain-records --subdomain ${HOST_NAME} stackspin.net
    ```
 
 2. Accept ssh host key
    ```
-   ssh root@${HOST_NAME}.openappstack.net
+   ssh root@${HOST_NAME}.stackspin.net
    ```
 
 3. Run the following to install *only kubernetes* on the VPS:
    ```
-   python3 -m openappstack ${HOST_NAME} install
+   python3 -m stackspin ${HOST_NAME} install
    ```
 4. Log into your machine and clean up the k3s server, then delete the cluster
    data:
    ```
-   ssh root@${HOST_NAME}.openappstack.net
+   ssh root@${HOST_NAME}.stackspin.net
      # Clean up running containers and firewall
      /usr/local/bin/k3s-killall.sh
      # Remove k3s state
      rm -rf /var/lib/rancher/k3s
    ```
-5. Log into Cosmos with the OpenAppStack account
+5. Log into Cosmos with the Stackspin account
 6. Go to VPS Cloud -> VPS and shut down your VPS
 7. Go to VPS Cloud -> Disk Images and click `Manage` for your VPSs disk image
    1. Change the Disk Label to something like `k3s-template-DATE`
diff --git a/Dockerfile b/Dockerfile
index a335ff0dae4b03dfa8b9fcb715f5822cc6298642..415f484eccfc01b5e530b5d35f2052c1dc3640df 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,8 @@
 # https://hub.docker.com/_/alpine?tab=tags
 FROM alpine:3.14
 
-LABEL name="OpenAppStack management"
-LABEL version="4.4"
+LABEL name="Stackspin management"
+LABEL version="4.5"
 LABEL vendor1="Greenhost"
 
 ENV TAIKO_SKIP_CHROMIUM_DOWNLOAD=true
@@ -10,11 +10,12 @@ ENV TAIKO_BROWSER_PATH=/usr/bin/chromium-browser
 ENV TAIKO_BROWSER_ARGS=--no-sandbox,--start-maximized,--disable-dev-shm-usage,--ignore-certificate-errors
 
 ADD https://github.com/fluxcd/flux2/releases/download/v0.20.1/flux_0.20.1_linux_amd64.tar.gz /tmp/
-# Download kubectl until it's packaged in alpine > 3.14
-ADD https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl /usr/local/bin/
 COPY ./test/pytest/le-staging-bundle.pem /usr/local/share/ca-certificates/le-staging-bundle.pem
 COPY ./requirements.txt /requirements.txt
 RUN \
+  # Install kubectl from alpine edge until 3.15 is released
+  apk --no-cache add kubectl=~1.22.3-r0 \
+    --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing && \
   apk --no-cache add \
     bash=~5.1.4-r0 \
     cargo=~1.52.1-r1 \
@@ -39,7 +40,6 @@ RUN \
     yq=4.6.3-r2 && \
   rm -rf /var/cache/* && \
   mkdir /var/cache/apk && \
-  chmod a+x /usr/local/bin/* && \
   update-ca-certificates && \
   pip install --no-cache-dir --ignore-installed six -r /requirements.txt && \
   ln -s /usr/bin/python3 /usr/bin/python && \
diff --git a/LICENSE b/LICENSE
index 2295af0e5e660ec185eabaed2a841eb3edb29c94..dbba251fe08b49c7dc35a769641d3a0e567fa1ae 100644
--- a/LICENSE
+++ b/LICENSE
@@ -630,7 +630,7 @@ state the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     bootstrap
-    Copyright (C) 2019  OpenAppStack
+    Copyright (C) 2019  Stackspin
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU Affero General Public License as published
diff --git a/Makefile b/Makefile
index 686bb6cca8937686cef46ab50f0646a3a87196ec..46a257bfcadc570e324460767ff2a9c2ee8258cd 100644
--- a/Makefile
+++ b/Makefile
@@ -5,5 +5,5 @@ help:
 
 freeze:
 	# pip wrongly adds `pkg-resources==0.0.0` which will break some systems, see
-	# https://open.greenhost.net/openappstack/openappstack/issues/498#note_15057
+	# https://open.greenhost.net/stackspin/stackspin/issues/498#note_15057
 	pip3 freeze | grep -v "pkg-resources" > requirements-stable.txt
diff --git a/README.md b/README.md
index 42f751a771eb218fbfec277be28def8516eadf16..f54335b36fca34bd46d659bc9159e6fee130a3c2 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
-# OpenAppStack
+# Stackspin
 
-OpenAppStack allows you to easily set up a new OpenAppStack instance, based on
+Stackspin allows you to easily set up a new Stackspin instance, based on
 a single-node kubernetes cluster.
 
 > **WARNING: The installation process will make substantial changes to the
-> server’s configuration, so please ONLY install OAS on a dedicated, clean
+> server’s configuration, so please ONLY install Stackspin on a dedicated, clean
 > server.**
 
-Please refer to https://docs.openappstack.net for further details,
+Please refer to https://docs.stackspin.net for further details,
 and to [the installation tutorial](docs/installation_instructions.md) for a step
 by step installation tutorial how to install your cluster.
diff --git a/ansible/conftest.py b/ansible/conftest.py
deleted file mode 120000
index 49669d439711c3e848915b194994835bb52cac85..0000000000000000000000000000000000000000
--- a/ansible/conftest.py
+++ /dev/null
@@ -1 +0,0 @@
-../test/conftest.py
\ No newline at end of file
diff --git a/ansible/conftest.py b/ansible/conftest.py
new file mode 100644
index 0000000000000000000000000000000000000000..e21517b9d85f14ccbb35f781d419afd2949b897e
--- /dev/null
+++ b/ansible/conftest.py
@@ -0,0 +1,30 @@
+import pytest
+
+
+def pytest_addoption(parser):
+    """Add pytest options:
+       --resource: Select specific resource to test
+       --namespace: Use specific namespace to look for resource
+
+    See https://docs.pytest.org/en/stable/example/simple.html#pass-different-values-to-a-test-function-depending-on-command-line-options
+    """
+    parser.addoption(
+        "--resource", action="store", default="all",
+        help="Name of the resource to test, default: all"
+    )
+
+    parser.addoption(
+        "--namespace", action="store", default="",
+        help="Namespace of the resource to test, default: <empty>"
+    )
+
+
+@pytest.fixture
+def resource(request):
+    """Process new cli option."""
+    return request.config.getoption("--resource")
+
+@pytest.fixture
+def namespace(request):
+    """Process new cli option."""
+    return request.config.getoption("--namespace")
diff --git a/ansible/group_vars/all/oas.yml b/ansible/group_vars/all/stackspin.yml
similarity index 62%
rename from ansible/group_vars/all/oas.yml
rename to ansible/group_vars/all/stackspin.yml
index efd5e0abaf8e80013009353ec66133c8862d8d57..db0c81d3c68f70228c2ebfc40e9fad5b7b280bef 100644
--- a/ansible/group_vars/all/oas.yml
+++ b/ansible/group_vars/all/stackspin.yml
@@ -1,6 +1,6 @@
 ---
 # Directory to store generated configuration and cluster state.
-data_directory: "/var/lib/OpenAppStack"
+data_directory: "/var/lib/Stackspin"
 ip_address: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
 
 # Use python3 on cluster nodes for ansible
@@ -20,18 +20,5 @@ k3s:
   # https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/
   server_args: "--disable traefik --disable local-storage --disable servicelb --kube-apiserver-arg=event-ttl=48h0m0s --tls-san {{ ip_address }}"
 
-helm:
-  # helm snap 2.15.0 and 2.15.1 broke for us
-  # (https://open.greenhost.net/openappstack/openappstack/issues/338), so we
-  # use a pinned version for now.
-  # We use the official helm install script for now which has no checksum.
-  # https://github.com/helm/helm/releases
-  version: 'v3.2.1'
-
-krew:
-  # https://github.com/kubernetes-sigs/krew/releases
-  version: 'v0.3.4'
-  checksum: 'sha256:6629b1d7ad215322361f8dd270396fd1a23555fdbde8dcc1ba4ad860978b319a'
-
 docker_mirror:
   enabled: false
diff --git a/ansible/inventory.yml.example b/ansible/inventory.yml.example
index 0b5e042271f74c087dd7f775118449aec20e678e..a3dbb67d5add79704392b67366a84cc22cd1f223 100644
--- a/ansible/inventory.yml.example
+++ b/ansible/inventory.yml.example
@@ -1,6 +1,6 @@
 all:
   hosts:
-    oas-dev:
+    stackspin-dev:
       # Node to deploy to; can be a name or address.
       ansible_host: "203.0.113.6"
       # Ssh user to log in as.
@@ -8,7 +8,7 @@ all:
   children:
     master:
       hosts:
-        oas-dev
+        stackspin-dev
     worker:
       hosts:
-        oas-dev
+        stackspin-dev
diff --git a/ansible/roles/compatibility-checks/tasks/main.yml b/ansible/roles/compatibility-checks/tasks/main.yml
index 1ca666a49663202d1856020e01ef0b3db157221c..2f06ad7f636ee5b2c58696617b110f153d3dbcfb 100644
--- a/ansible/roles/compatibility-checks/tasks/main.yml
+++ b/ansible/roles/compatibility-checks/tasks/main.yml
@@ -4,7 +4,7 @@
     that:
       - "ansible_version.full is version_compare('2.7', '>=')"
     msg: >
-      "Please use Ansible 2.7 or higher to install OpenAppStack."
+      "Please use Ansible 2.7 or higher to install Stackspin."
 
 - name: cluster_dir variable is needed
   assert:
diff --git a/ansible/roles/configure/files/README.md b/ansible/roles/configure/files/README.md
index 7ca34cbbfc303d8fb9c77ff207004cb103e174e3..bdec50c845862ab2244b2838e40759115eee3a12 100644
--- a/ansible/roles/configure/files/README.md
+++ b/ansible/roles/configure/files/README.md
@@ -1,14 +1,14 @@
-This directory contains information about the OpenAppStack instance running on
-this machine. For general information, see [https://openappstack.net].
+This directory contains information about the Stackspin instance running on
+this machine. For general information, see [https://stackspin.net].
 
 ## Flux
 
 We use [Flux](https://fluxcd.io/) for keeping the applications that form
-OpenAppstack up to date. Flux runs inside your cluster, regularly reads
-available updates from the central OpenAppStack repository, and upgrades your
+Stackspin up to date. Flux runs inside your cluster, regularly reads
+available updates from the central Stackspin repository, and upgrades your
 applications accordingly, taking into account local configuration.
 
 ### Cluster-local configuration
 
 Settings and secrets that are specific to your cluster (as opposed to other
-OpenAppStack instances) are stored in Kubernetes secrets.
+Stackspin instances) are stored in Kubernetes secrets.
diff --git a/ansible/roles/configure/files/bashrc_oas b/ansible/roles/configure/files/bashrc_stackspin
similarity index 71%
rename from ansible/roles/configure/files/bashrc_oas
rename to ansible/roles/configure/files/bashrc_stackspin
index 39fa934019d1c7de5e08f9c7b4e9f3a70a94db0e..71552b02768fc2983f7a5cce1488d51d99db612e 100644
--- a/ansible/roles/configure/files/bashrc_oas
+++ b/ansible/roles/configure/files/bashrc_stackspin
@@ -1,4 +1,4 @@
-# Bashrc additions for Openappstack
+# Bashrc additions for Stackspin
 # This file is sourced from .bashrc
 
 # enable programmable completion features (you don't need to enable
@@ -7,6 +7,3 @@
 if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
     . /etc/bash_completion
 fi
-
-# Enable krew plugin manager for kubectl
-export PATH="$HOME/.krew/bin:$PATH"
diff --git a/ansible/roles/configure/files/oas-version-info.sh b/ansible/roles/configure/files/stackspin-version-info.sh
similarity index 52%
rename from ansible/roles/configure/files/oas-version-info.sh
rename to ansible/roles/configure/files/stackspin-version-info.sh
index 2203959e0947c18b5a803f90c08c7d5e62951219..29b4edcea7ff387c5c02f0342c9d8d38f6d67d5f 100755
--- a/ansible/roles/configure/files/oas-version-info.sh
+++ b/ansible/roles/configure/files/stackspin-version-info.sh
@@ -1,11 +1,12 @@
 #!/bin/bash -x
 
-cat /var/lib/OpenAppStack/version.txt
+cat /var/lib/Stackspin/version.txt
+
 kubectl version
-kubectl krew version
-kubectl krew list
-helm version
-helm plugin list
+kubectl plugin list
+
 k3s --version
 
+helm version
+helm plugin list
 helm ls
diff --git a/ansible/roles/configure/tasks/main.yml b/ansible/roles/configure/tasks/main.yml
index ad94bc81193bd6a552c56914182da2cf9e2efc0a..39cee9d033cfe2dcd5d7f42285d74157eb9d9f89 100644
--- a/ansible/roles/configure/tasks/main.yml
+++ b/ansible/roles/configure/tasks/main.yml
@@ -42,15 +42,14 @@
   args:
     creates: /etc/bash_completion.d/helm
 
-- name: Deploy /root/.bashrc_oas
+- name: Deploy /root/.bashrc_stackspin
   tags:
     - bash
-    - krew
   copy:
-    dest: /root/.bashrc_oas
-    src: bashrc_oas
+    dest: /root/.bashrc_stackspin
+    src: bashrc_stackspin
 
-- name: Source /root/.bashrc_oas from /root/.bashrc
+- name: Source /root/.bashrc_stackspin from /root/.bashrc
   tags:
     - bash
   blockinfile:
@@ -58,10 +57,10 @@
     state: present
     create: true
     block: |
-      # Source Openappstack addtions from .bashrc_oas
-      . /root/.bashrc_oas
+      # Source Stackspin addtions from .bashrc_stackspin
+      . /root/.bashrc_stackspin
 
-- name: Record OpenAppStack version info
+- name: Record Stackspin version info
   tags:
     - version
   shell: "{{ item }}"
@@ -70,10 +69,10 @@
     - git log --pretty=format:"%H" -n 1
     - git tag -l $(<../VERSION) '--format=%(*objectname)'
   delegate_to: localhost
-  register: openappstack_version
+  register: stackspin_version
   changed_when: false
 
-- name: Create OpenAppStack version file
+- name: Create Stackspin version file
   tags:
     - version
   template:
@@ -82,13 +81,13 @@
     mode: "0444"
   become: true
 
-- name: Install oas-version-info.sh script
+- name: Install stackspin-version-info.sh script
   tags:
     - debug
     - scripts
     - version
   copy:
     dest: /usr/local/bin/
-    src: oas-version-info.sh
+    src: stackspin-version-info.sh
     mode: '0755'
   become: true
diff --git a/ansible/roles/configure/templates/version.txt b/ansible/roles/configure/templates/version.txt
index 7d1aabd9a7891351f24b80d46c2a32a6b379bdb6..6150d733147eb56b92d06bf425a1d52ba0479b77 100644
--- a/ansible/roles/configure/templates/version.txt
+++ b/ansible/roles/configure/templates/version.txt
@@ -1,11 +1,11 @@
-{% set version = openappstack_version.results[0].stdout %}
-{% set hash = openappstack_version.results[1].stdout %}
-{% set taghash = openappstack_version.results[2].stdout %}
+{% set version = stackspin_version.results[0].stdout %}
+{% set hash = stackspin_version.results[1].stdout %}
+{% set taghash = stackspin_version.results[2].stdout %}
 VERSION: {{ version }}
 {% if hash == taghash %}
 git hash: {{ hash }}
-https://open.greenhost.net/openappstack/openappstack/commit/{{ hash }}
+https://open.greenhost.net/stackspin/stackspin/commit/{{ hash }}
 {% else %}
 modified up to: {{ hash }}
-https://open.greenhost.net/openappstack/openappstack/commit/{{ hash }}
+https://open.greenhost.net/stackspin/stackspin/commit/{{ hash }}
 {% endif %}
diff --git a/ansible/roles/pre-configure/tasks/main.yml b/ansible/roles/pre-configure/tasks/main.yml
index 18191f3acfb1dbf15daa6545dd3c1d7186be6cc5..9546ac2174f84226548bdde93e3f641c8309a62d 100644
--- a/ansible/roles/pre-configure/tasks/main.yml
+++ b/ansible/roles/pre-configure/tasks/main.yml
@@ -32,7 +32,7 @@
   with_items:
     # In order to save disk space we remove traditional syslog packages
     # and only rely on systemd journald
-    # see https://open.greenhost.net/openappstack/openappstack/-/issues/575
+    # see https://open.greenhost.net/stackspin/stackspin/-/issues/575
     - rsyslog
     - syslog-ng
 
@@ -44,81 +44,28 @@
   with_items:
     - python3-pip
 
-# We work around a Debian Bullseye issue with installing snaps on Xen nodes:
-# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=983357 (Debian link)
-# https://code.greenhost.net/greenhost/sysops/-/issues/915#note_108038 (GH # internal link)
-# Once the debian issue is solved and Greenhost has patched the kernel, these
-# three workaround commands can be removed.
-- name: Workaround debian bug 1/3
-  shell: "journalctl -k | awk '/input: Xen Virtual Keyboard/ {print $11}'"
-  args:
-    # Only run this if kubectl snap has not been installed yet
-    creates: /snap/bin/kubectl
-  register: kbd_device
-  failed_when: false
-  changed_when: false
-
-- name: Workaround debian bug 2/3
-  # kubectl needs to get installed as "classic" snap
-  mount:
-    opts: bind
-    src: /dev/zero
-    path: /sys/{{ kbd_device.stdout }}/uevent
-    fstype: none
-    state: mounted
-  when: kbd_device.stdout != "" and kbd_device.stdout != "skipped, since /snap/bin/kubectl exists"
-
-- name: Install kubectl snap
-  # kubectl needs to get installed as "classic" snap
-  command: snap install --classic kubectl
-  args:
-    creates: /snap/bin/kubectl
-
-- name: Workaround debian bug 3/3
-  # kubectl needs to get installed as "classic" snap
-  mount:
-    path: /sys/{{ kbd_device.stdout }}/uevent
-    state: unmounted
-  when: kbd_device.stdout != "" and kbd_device.stdout != "skipped, since /snap/bin/kubectl exists"
-
-- name: Create kubectl symlink to /usr/local/bin
-  file:
-    state: link
-    src: /snap/bin/kubectl
-    dest: /usr/local/bin/kubectl
-
-- name: Get current helm version
-  tags:
-    - helm
-  # {{ '{{' }} escapes the curly braces needed by the `--template` argument
-  shell: "helm version --template \"{{ '{{' }} .Version {{ '}}' }}\""
-  failed_when: false
-  register: helm_version
-  changed_when: false
-
-- name: Show current helm version
-  tags:
-    - helm
-    - debug
-  debug:
-    msg: 'Current helm version is: {{ helm_version.stdout }}'
-
-- name: Download helm install script
+- name: Install kubectl and helm snap
   tags:
+    - snap
+  # kubectl and helm both need to get installed as "classic" snap
+  command: "snap install --classic {{ item }}"
+  args:
+    creates: "/snap/bin/{{ item }}"
+  with_items:
     - helm
-  get_url:
-    url: https://raw.githubusercontent.com/helm/helm/master/scripts/get
-    dest: /usr/local/bin/get-helm
-    force: yes
-    mode: '0755'
-  become: true
-  when: helm_version.stdout != helm.version
+    - kubectl
 
-- name: Install helm
+- name: Create kubectl and helm symlinks to /usr/local/bin
   tags:
+    - snap
+  file:
+    state: link
+    src: "/snap/bin/{{ item }}"
+    dest: "/usr/local/bin/{{ item }}"
+    force: true
+  with_items:
     - helm
-  command: /usr/local/bin/get-helm --version {{ helm.version }}
-  when: helm_version.stdout != helm.version
+    - kubectl
 
 - name: Configure firewall
   import_tasks: firewall.yml
diff --git a/ansible/roles/pre-configure/templates/registries.yaml b/ansible/roles/pre-configure/templates/registries.yaml
index c5bb1520b6a126e31f171832028daca6b9594893..87a9463c15c005b0e975d2f987d4d0dbc96e2274 100644
--- a/ansible/roles/pre-configure/templates/registries.yaml
+++ b/ansible/roles/pre-configure/templates/registries.yaml
@@ -5,7 +5,7 @@ mirrors:
       - "{{ docker_mirror.server }}"
     rewrite:
       # We need to remove the `server` part from the `endpoint` part, so what we
-      # end up with is a path like ""/openappstack/dependency_proxy/containers/$1"
+      # end up with is a path like ""/stackspin/dependency_proxy/containers/$1"
       "^(.*)$": "{{ docker_mirror.endpoint | regex_replace(docker_mirror.server, '') }}/$1"
 configs:
   "{{ docker_mirror.server }}":
diff --git a/ansible/roles/setup-kubernetes/tasks/krew.yml b/ansible/roles/setup-kubernetes/tasks/krew.yml
deleted file mode 100644
index 4b0f2fe694424981a9777c3f28c9253a10dffa6a..0000000000000000000000000000000000000000
--- a/ansible/roles/setup-kubernetes/tasks/krew.yml
+++ /dev/null
@@ -1,58 +0,0 @@
----
-- name: Get current krew version (plugin manager for kubectl)
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  shell: kubectl krew version | grep GitTag | awk {'print $2'}
-  failed_when: false
-  register: krew_version
-  changed_when: false
-
-- name: Show current krew version
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  debug:
-    msg: 'Show current krew version is: {{ krew_version.stdout }}'
-
-- name: Download krew archive
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  get_url:
-    url: 'https://github.com/kubernetes-sigs/krew/releases/download/{{ krew.version }}/krew.tar.gz'
-    dest: '/tmp/krew.{{ krew.version }}.tar.gz'
-    checksum: '{{ krew.checksum }}'
-  when: krew_version.stdout != krew.version
-
-- name: Download krew resource yaml
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  get_url:
-    url: 'https://github.com/kubernetes-sigs/krew/releases/download/{{ krew.version }}/krew.yaml'
-    dest: '/tmp/krew.{{ krew.version }}.yaml'
-  when: krew_version.stdout != krew.version
-
-- name: Unarchive downloaded krew archive
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  unarchive:
-    src: '/tmp/krew.{{ krew.version }}.tar.gz'
-    dest: /tmp
-    remote_src: yes
-  when: krew_version.stdout != krew.version
-
-- name: Instal krew plugin manager for kubectl
-  tags:
-    - kubectl
-    - plugin
-    - krew
-  command: "/tmp/krew-linux_amd64 install --manifest=/tmp/krew.{{ krew.version }}.yaml"
-  when: krew_version.stdout != krew.version
diff --git a/ansible/roles/setup-kubernetes/tasks/main.yml b/ansible/roles/setup-kubernetes/tasks/main.yml
index 563e90aa4a01e9039f55c29dd8d42dbfad92b390..48bbcacf83d23a3af31fd91e110cde1199b63071 100644
--- a/ansible/roles/setup-kubernetes/tasks/main.yml
+++ b/ansible/roles/setup-kubernetes/tasks/main.yml
@@ -1,4 +1,3 @@
 ---
 - import_tasks: k3s.yml
-- import_tasks: krew.yml
 - import_tasks: flux.yml
diff --git a/docs/README.md b/docs/README.md
index 2da7953151155eafd4eb14f12e137d48542198a4..9513698911ce73af869761d22def493e63ec490a 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,7 +1,7 @@
 ## Documentation
 
 This folder contains the documentation. You can find the documentation at
-https://openappstack.readthedocs.io/. It is also possible to build the
+https://stackspin.readthedocs.io/. It is also possible to build the
 documentation, using Sphinx:
 
     pip install -r ./requirements.txt
diff --git a/docs/comparable_projects.md b/docs/comparable_projects.md
index 8bfff5d707742a308d1ec79f30968b343a9e2a16..81f9cf551e5abc28409c8c83161e074ae8714198 100644
--- a/docs/comparable_projects.md
+++ b/docs/comparable_projects.md
@@ -1,11 +1,11 @@
 # Comparable projects
 
-Other open source projects similar to OpenAppStack exist. Each of the platforms
-listed here, like OpenAppStack, provide a suite of open source cloud
-applications. Each of the platforms, like OpenAppStack, include their own user
+Other open source projects similar to Stackspin exist. Each of the platforms
+listed here, like Stackspin, provide a suite of open source cloud
+applications. Each of the platforms, like Stackspin, include their own user
 management dashboard and all of them offer single sign-on (SSO) features.
 
-However there are changes in implementation that make OpenAppStack different
+However there are changes in implementation that make Stackspin different
 from these alternatives. As far as we found, none of the projects listed
 below will automatically update your applications without you having to push a
 button, for example.
@@ -21,19 +21,19 @@ With many users, this approach can run into limits.
 management and user management system. As a result, Yunohost is relatively lightweight.
 However, another result of this is that it is likely that if one of
 the applications on your Yunohost contain a security hole, the data of the other
-applications is compromised as well. This is less likely in OpenAppStack because
+applications is compromised as well. This is less likely in Stackspin because
 it separates the environments of applications from each other to seal them off.
 
 **[Cloudron](https://cloudron.io)** offers a similar application suite. In
-contrast to OpenAppStack, Cloudron [requires a paid
+contrast to Stackspin, Cloudron [requires a paid
 account](https://cloudron.io/pricing.html) if you want to use more than two
 applications or more than five users.
 
 All mentioned platforms require applications running on it to be changed in some
-way, for example to make use of the authentication system. OpenAppStack tries to
+way, for example to make use of the authentication system. Stackspin tries to
 steer clear of changing the applications it includes. As long as they support
 OpenID Connect, so you can sign into it, we can usually run the application
-as-is. In most cases, OpenAppStack will only need one intervention before an
+as-is. In most cases, Stackspin will only need one intervention before an
 update can be pushed to users: it needs to be tested. We want to make sure that
 an application works together with the platform and other applications before we
 let you use it. We work towards a fully automated test suite, so even this would
diff --git a/docs/conf.py b/docs/conf.py
index 519ad5ae2e60b9adeab3f445b7ae2da4f8de3e8f..85ff4759ee5feef79897fd5c767ad47695656380 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -17,7 +17,7 @@
 
 # -- Project information -----------------------------------------------------
 
-project = 'OpenAppStack'
+project = 'Stackspin'
 copyright = '2020, Greenhost'
 author = 'Greenhost'
 
diff --git a/docs/customizing.rst b/docs/customizing.rst
index b389c49a728fb4a10ccd0561614668039537b039..b01c24c49d356af04d10c1cb9ba6c7247a997cf6 100644
--- a/docs/customizing.rst
+++ b/docs/customizing.rst
@@ -4,26 +4,26 @@ Customizing
 
 In this guide we show how to customize your cluster installation, i.e. if you
 want to install additional applications, or change the configuration of extisting
-apps installed by OAS this is the right place. Customizing other parts of your
+apps installed by Stackspin this is the right place. Customizing other parts of your
 cluster is possible but not yet covered by this guide.
 This guide is written for users with advanced knowledge of the tools behind
-Openappstack, most importantly: Kubernetes, Helm, Ansible and Flux 2.
+Stackspin, most importantly: Kubernetes, Helm, Ansible and Flux 2.
 
 .. warning::
 
-  Customizing your OAS cluster could break your cluster in a way that it's not
+  Customizing your Stackspin cluster could break your cluster in a way that it's not
   easy to recover. Please be aware of the potential risk when proceeding.
 
 Prerequisites
 =============
 
-* A functional OAS cluster installed following the
-  `Openappstack installation instructions <installation_instructions.html>`__
+* A functional Stackspin cluster installed following the
+  `Stackspin installation instructions <installation_instructions.html>`__
 
-Customize OAS applications
-==========================
+Customize Stackspin applications
+================================
 
-Apps deployed by OAS are configured using helm values from templates in
+Apps deployed by Stackspin are configured using helm values from templates in
 ``flux2/apps/<application>/release.yaml``. It is possible to override values
 from the helmrelease by adding a custom ``ConfigMap`` or ``Secret`` to the
 cluster. The secret or configmap name is specified in the ``valuesFrom`` section
@@ -35,7 +35,7 @@ Example: Customize Nextcloud to work with staging certificates
 
 Our CI pipeline works with staging certificates from Let's Encrypt, for that
 reason we need to allow insecure connections for the integration with
-ONLYOFFICE. You can find the file at ``install/overrides/oas-nextcloud-override.yaml``.
+ONLYOFFICE. You can find the file at ``install/overrides/stackspin-nextcloud-override.yaml``.
 
 To apply it, run the following commands:
 
@@ -43,25 +43,25 @@ To apply it, run the following commands:
 
    # If you want to run this on your provisioning machine, tell kubectl to use
    # your cluster:
-   export KUBECONFIG=$PWD/clusters/oas.example.org/kube_config_cluster.yml
+   export KUBECONFIG=$PWD/clusters/stackspin.example.org/kube_config_cluster.yml
    # Check the current state of the helmrelease you want to modify:
    flux get helmrelease -A
    # If all is OK, make sure to apply your override configmap or secret in the
    # same namespace as your helmrelease with the '-n' argument
    kubectl apply \
-     -n oas-apps \
-     -f ./install/overrides/oas-nextcloud-override.yaml
+     -n stackspin-apps \
+     -f ./install/overrides/stackspin-nextcloud-override.yaml
 
 Adding custom apps to the cluster
 =================================
 
-OpenAppStack uses Flux 2 to install and auto-update applications. If you want to
+Stackspin uses Flux 2 to install and auto-update applications. If you want to
 install extra applications or other things into the Kubernetes cluster, our
 advice would be to set up your own GitRepository and add it to the Flux system.
 
 When you do this, you are fully responsible for keeping those applications
 secure and updated. If any of those applications is insecure, that can also
-invalidate the security of your OpenAppStack applications, because they are part
+invalidate the security of your Stackspin applications, because they are part
 of the same cluster and VPS.
 
 Refer to the `Flux 2 documentation <https://fluxcd.io/docs>`__ for more
diff --git a/docs/design.md b/docs/design.md
index 8cb378693b30eb69424a1f9ac4a0f002fb20d679..9d5739043005db6e99108261b275fcb9e22ca7c2 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -1,12 +1,12 @@
-OpenAppStack Design
+Stackspin Design
 ===================
 
-This article covers the basic design of OpenAppStack.
+This article covers the basic design of Stackspin.
 
 ## Application build pipeline
 
 The following diagram explains the process to go from an application's source
-code to a deployment on OpenAppStack.
+code to a deployment on Stackspin.
 
 ![Application build process](_static/diagrams/application-build-process.png)
 
@@ -59,14 +59,14 @@ overrides of the default application, as well as variables like the hostname
 that the application will run on and listen to and the title of the web
 interface.
 
-OpenAppStack will use Helm charts to provide the external configuration for the
+Stackspin will use Helm charts to provide the external configuration for the
 "Deploy" step. Helm charts can contain configuration file templates with
 default values that can be overridden during the installation or upgrade of a
 helm chart.
 
 ## Application containers
 
-For inclusion in OpenAppStack, it is required that the application developers
+For inclusion in Stackspin, it is required that the application developers
 provide Docker containers for their applications. There are several reasons for
 this:
 
@@ -80,52 +80,52 @@ this:
 ### Container updates
 
 When an application update is available, these updates need to be rolled out to
-OpenAppStack instances. This will be done according the following steps:
+Stackspin instances. This will be done according the following steps:
 
 1. Application container is built with new application source and tagged for
    testing.
 4. Helm chart for application is updated to provide new container.
-3. Helm chart is deployed to an OpenAppStack test cluster following the steps in
+3. Helm chart is deployed to an Stackspin test cluster following the steps in
    the diagram above.
 2. Application is tested with automated tests
 3. If tests succeed, new container is tagged for release.
-4. OpenAppStack automated update job fetches new Helm chart and upgrades current
+4. Stackspin automated update job fetches new Helm chart and upgrades current
    instance using Helm.
 
 Most of these steps can be developed by configuring a CI system and configuring
 Kubernetes and Helm correctly. The automated update job that will run on
-OpenAppStack clusters will be developed by us.
+Stackspin clusters will be developed by us.
 
 ## Persistent data
 
 Containerised applications are normally "stateless" (meaning no data is saved
 inside the containers). However, it is possible to mount persistent volumes to
 specific directories in the container, basically adding a persistent layer on
-top of the containerised application. To provide this in OAS's simple setup, we
+top of the containerised application. To provide this in Stackspin's simple setup, we
 use a [local storage
-provisioner](https://open.greenhost.net/openappstack/local-path-provisioner)
-that automatically provides persistent data on the VPS running OAS to an
+provisioner](https://open.greenhost.net/stackspin/local-path-provisioner)
+that automatically provides persistent data on the VPS running Stackspin to an
 application that requests it.
 
 ## Automatic updates
 
-OpenAppStack has an auto-update mechanism that performs unattended upgrades to
+Stackspin has an auto-update mechanism that performs unattended upgrades to
 applications. [Flux 2](https://fluxcd.io/) is the system running in the cluster
 that is responsible for these updates.
 
-Flux 2 tracks all the files in the `flux2` directory of the [OpenAppStack code
-repository](https://open.greenhost.net/openappstack/openappstack). Once changes
+Flux 2 tracks all the files in the `flux2` directory of the [Stackspin code
+repository](https://open.greenhost.net/stackspin/stackspin). Once changes
 are pushd the branch that Flux tracks, the changes are applied to the cluster.
 
-We use Flux 2 in "read only" mode, which means that your OpenAppStack cluster
+We use Flux 2 in "read only" mode, which means that your Stackspin cluster
 does not push changes to our Git repository. You can read more about Flux 2 and
 its components in the [flux 2 documentation](https://fluxcd.io/docs).
 
 ## APIs
 
-OpenAppStack includes several APIs that are available for some pieces of the
+Stackspin includes several APIs that are available for some pieces of the
 software to talk to. Specifically the [Dashboard
-application](https://open.greenhost.net/openappstack/admin-frontend) uses most
+application](https://open.greenhost.net/stackspin/admin-frontend) uses most
 of these APIs.
 
 <!-- Edit URL:
diff --git a/docs/index.rst b/docs/index.rst
index 309c7d1d109357fb14368826ffb893da6dbdd4c2..fe6d38116522326477fd536737b7293f85148c17 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,26 +1,26 @@
-.. OpenAppStack documentation master file, created by
+.. Stackspin documentation master file, created by
    sphinx-quickstart on Wed Jul 31 15:18:33 2019.
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
-Welcome to OpenAppStack's documentation!
+Welcome to Stackspin's documentation!
 ========================================
 
-OpenAppStack (OAS) is a platform that will offer self-managed, click-and-play
+Stackspin (Stackspin) is a platform that will offer self-managed, click-and-play
 provisioning of online applications for Civil Society Organisations (CSOs).
-Users will be able to easily set up a self-hosted instance of OpenAppStack, so
+Users will be able to easily set up a self-hosted instance of Stackspin, so
 they can keep control over the data that gets entered into these applications.
 
-OpenAppStack is:
+Stackspin is:
 
 - Open Source
 - Self updating
 - Easy to deploy
 - Integrated
 
-For more information, go to `the OpenAppStack website`_.
+For more information, go to `the Stackspin website`_.
 
-.. _the OpenAppStack website: https://openappstack.net
+.. _the Stackspin website: https://stackspin.net
 
 .. toctree::
    :maxdepth: 2
@@ -28,7 +28,7 @@ For more information, go to `the OpenAppStack website`_.
 
    installation/overview
    installation/create_cluster
-   installation/install_oas
+   installation/install_stackspin
 
 .. toctree::
    :maxdepth: 2
diff --git a/docs/installation/create_cluster.rst b/docs/installation/create_cluster.rst
index e3646b69bd708be8ba26399701c82291d1d59079..58b5195b5d6fd4fb61e2d55e172f0b7d606e7a9f 100644
--- a/docs/installation/create_cluster.rst
+++ b/docs/installation/create_cluster.rst
@@ -4,11 +4,11 @@
 Create a kubernetes cluster
 ===========================
 
-This document describes how you can use OpenAppStack to install
+This document describes how you can use Stackspin to install
 `k3s`_, a lightweight Kubernetes distribution on a virtual
 private server.
 
-For OpenAppStack we will set up a "single-node" kubernetes cluster. This means
+For Stackspin we will set up a "single-node" kubernetes cluster. This means
 everything runs on the same VPS. Support for "multi-node" clusters (a
 Kubernetes cluster on more than one VPS) will come in the future.
 
@@ -29,7 +29,7 @@ bare metal server ready. The server should meet these requirements:
 - ``ssh-agent`` to give you access to your VPS
 
 In this guide, we will create a cluster with IP address ``1.2.3.4`` on domain
-``oas.example.org``. Substitute these two variables with your IP address and
+``stackspin.example.org``. Substitute these two variables with your IP address and
 your domain.
 
 .. _create_config:
@@ -38,41 +38,41 @@ Step 1: Create cluster configuration
 ====================================
 
 To create a config for your cluster, use the ``create`` subcommand of the
-OpenAppStack CLI. First, choose a name (we chose ``oas.example.org``) for
+Stackspin CLI. First, choose a name (we chose ``stackspin.example.org``) for
 your cluster. Then run the following command to get information about
 the ``create`` subcommand:
 
 ::
 
-    $ python -m openappstack oas.example.org create --help
+    $ python -m stackspin stackspin.example.org create --help
 
 If you want the installation script to automatically create a VPS for you, check
 :ref:`setup-with-greenhost-api`.
 Otherwise, continue here.
 
-If you want to install OpenAppStack on a non-Greenhost VPS, we assume
+If you want to install Stackspin on a non-Greenhost VPS, we assume
 you already have a machine with a world-facing IP address. Make sure
 that your VPS meets our `prerequisites <#prerequisites>`__. You'll need
 its *hostname* and its *IP address*.
 
-Create the initial OpenAppStack configuration for your VPS by running the
+Create the initial Stackspin configuration for your VPS by running the
 following command:
 
 ::
 
-    $ python -m openappstack oas.example.org create \
-      oas.example.org \
+    $ python -m stackspin stackspin.example.org create \
+      stackspin.example.org \
       --ip-address 1.2.3.4
 
 This configures your cluster under the fully qualified domain name (FQDN)
-``oas.example.org``, To break down the command:
+``stackspin.example.org``, To break down the command:
 
-- the first, positional argument ``oas.example.org`` tells the cluster the domain
+- the first, positional argument ``stackspin.example.org`` tells the cluster the domain
   it will be hosted on. This should be a (subdomain of a) domain you own.
 - ``--ip-address 1.2.3.4`` tells the script the IP address of your VPS. This
   will be used to find the VPS during the installation procedure.
 
-The configuration has now been written to the ``clusters/oas.example.org`` on
+The configuration has now been written to the ``clusters/stackspin.example.org`` on
 your provisioning machine.
 
 .. _configure_dns:
@@ -83,11 +83,11 @@ Step 2: Configure DNS
 Next, make sure that you have two DNS records that point to your
 cluster. Create these two DNS records:
 
--  An ``A`` record ``oas.example.org`` pointing to the VPS's IP address,
--  A ``CNAME`` record ``*.oas.example.org`` pointing to ``oas.example.org``.
+-  An ``A`` record ``stackspin.example.org`` pointing to the VPS's IP address,
+-  A ``CNAME`` record ``*.stackspin.example.org`` pointing to ``stackspin.example.org``.
 
 .. Note::
-   It is also possible to host OpenAppStack on a domain (with
+   It is also possible to host Stackspin on a domain (with
    no dedicated subdomain). That does imply that the included WordPress site
    will be hosted on your root domain ``example.org``. In that case, make these
    DNS records instead:
@@ -95,7 +95,7 @@ cluster. Create these two DNS records:
    - An ``A`` record ``example.org`` pointing to the VPS's IP address,
    - A ``CNAME`` record ``*.example.org`` pointing to ``example.org``.
 
-OpenAppStack will fetch https certificates with `Let's
+Stackspin will fetch https certificates with `Let's
 Encrypt <https://letsencrypt.org>`__ by default. In order to do this DNS
 entries need to be created.
 
@@ -104,23 +104,23 @@ entries need to be created.
 Step 3: Create cluster
 ======================
 
-You're almost ready to start the OpenAppStack installation script.
+You're almost ready to start the Stackspin installation script.
 First, make sure your DNS configuration is propagated. To do so, make
 sure 'ping' shows your VPS's IP address:
 
 ::
 
-    $ ping oas.example.org
+    $ ping stackspin.example.org
 
 The ``install`` command will try to log into your machine as the ``root``\ user
 using SSH.
 
 Run the ``install`` command with the CLI to completely configure your VPS for
-OpenAppStack.
+Stackspin.
 
 ::
 
-    $ python -m openappstack oas.example.org install
+    $ python -m stackspin stackspin.example.org install
 
 
 This will take a few minutes. It installs `k3s`_, a lightweight
@@ -139,7 +139,7 @@ Kubernetes and useful tools like `kubectl`_ (Kubernetes cli tool), `krew`_
    installation script. This usually updates k3s and can have other benefits.
 
 Now you have a single-node k3s/Kuberetes cluster running and can continue with
-:ref:`install_oas`.
+:ref:`install_stackspin`.
 
 Advanced installation
 =====================
@@ -198,41 +198,41 @@ Cluster creation with the Greenhost API
 - In both cases you need to provide the ``DOMAIN_NAME`` positional
   argument.
 
-  If you use a subdomain (e.g. ``oas.yourdomain.com``), use the
+  If you use a subdomain (e.g. ``stackspin.yourdomain.com``), use the
   ``--subdomain`` command as follows:
 
   ::
 
-    $ python -m openappstack oas.example.org create --subdomain oas example.org
+    $ python -m stackspin stackspin.example.org create --subdomain stackspin example.org
 
 - Here is an example of a complete creation command:
 
   ::
 
-    $ python -m openappstack oas.example.org create \
+    $ python -m stackspin stackspin.example.org create \
       --create-droplet \
-      --create-hostname oas.example.org \
+      --create-hostname stackspin.example.org \
       --ssh-key-id 112 \
       --create-domain-records \
-      --subdomain oas \
+      --subdomain stackspin \
       example.org
 
   Let's break down the arguments:
 
   - ``--create-droplet``: Use the Greenhost API to create a new VPS
-  - ``--create-hostname oas.example.org``: Create a VPS with hostname ``oas.example.org``
+  - ``--create-hostname stackspin.example.org``: Create a VPS with hostname ``stackspin.example.org``
   - ``--ssh-key-id 112``: Use SSH key ID 112 (you can find your SSH key ID in
     the `Cosmos Service Centre <https://service.greenhost.net>`__ under *VPS Cloud* -> *Installation SSH Keys*. Hover over a button there to see the ID in the URL it uses.
   - ``--create-domain-records``: Use the Greenhost API to create DNS records
     If you do this, you can skip :ref:`configure_dns`. The following records are
     created:
 
-    - An ``A`` record ``oas.example.org`` pointing to the VPSs IP address
-    - A ``CNAME`` record ``*.oas.example.org`` pointing to ``oas.example.org``.
+    - An ``A`` record ``stackspin.example.org`` pointing to the VPSs IP address
+    - A ``CNAME`` record ``*.stackspin.example.org`` pointing to ``stackspin.example.org``.
 
-  - ``--subdomain oas``: Only needed when you use ``--create-domain-records`` so
+  - ``--subdomain stackspin``: Only needed when you use ``--create-domain-records`` so
     the Greenhost API can find your domain. Instead of using positional argument
-    ``oas.example.org`` you need to provide
+    ``stackspin.example.org`` you need to provide
 
 You can now continue to :ref:`configure_dns`, or :ref:`create_cluster` if you used the API to
 create the DNS records.
diff --git a/docs/installation/install_oas.rst b/docs/installation/install_stackspin.rst
similarity index 80%
rename from docs/installation/install_oas.rst
rename to docs/installation/install_stackspin.rst
index 82e7742e9e56b15310fe3cb4d2df9fe3404b40c4..57fd71eafb98524d946310bbb3b31f3546b0ded7 100644
--- a/docs/installation/install_oas.rst
+++ b/docs/installation/install_stackspin.rst
@@ -1,20 +1,20 @@
-.. _install_oas:
+.. _install_stackspin:
 
 ====================
-Install OpenAppStack
+Install Stackspin
 ====================
 
-This guide explains how to install OpenAppStack either on an existing Kubernetes
+This guide explains how to install Stackspin either on an existing Kubernetes
 cluster that you have setup entirely yourself, or on a cluster you created
-following the OpenAppStack :ref:`create_kubernetes_cluster` guide.
+following the Stackspin :ref:`create_kubernetes_cluster` guide.
 Please choose one of the below options:
 
 .. tab-set::
 
-    .. tab-item:: A. Install on cluster created with OpenAppStack cli
+    .. tab-item:: A. Install on cluster created with Stackspin cli
 
         If you followed the :ref:`create_kubernetes_cluster` guide to setup a
-        Kubernetes cluster using the OpenAppStack CLI tool you're all set and
+        Kubernetes cluster using the Stackspin CLI tool you're all set and
         can continue by following the steps below.
 
     .. tab-item:: B. Install on existing cluster
@@ -30,15 +30,15 @@ Please choose one of the below options:
         - A single-node Kubernetes cluster
         - A ``kube_config.yml`` file for API access
 
-        **Configure DNS**: Please follow :ref:`configure_dns` how to setup the DNS records for OpenAppStack.
+        **Configure DNS**: Please follow :ref:`configure_dns` how to setup the DNS records for Stackspin.
 
         **Setup**:
 
         - Create a directory containing your cluster configuration, i.e.
-          ``mkdir -p clusters/oas.example.org``
+          ``mkdir -p clusters/stackspin.example.org``
         - Copy your ``kube_config.yml`` file inside your cluster config directory
           and rename it to ``kube_config_cluster.yml``:
-          ``cp kube_config.yml clusters/oas.example.org/kube_config_cluster.yml``
+          ``cp kube_config.yml clusters/stackspin.example.org/kube_config_cluster.yml``
 
         Continue by following the steps below.
 
@@ -56,7 +56,7 @@ Prerequisites
 - ``flux version 0.20.1`` `Download flux_0.20.1_linux_amd64.tar.gz <https://github.com/fluxcd/flux2/releases/download/v0.20.1/flux_0.20.1_linux_amd64.tar.gz>`_
 
 Copy the file ``install/.flux.env.example`` to your cluster dir
-``clusters/oas.example.org/.flux.env``. This file contains the last bit of
+``clusters/stackspin.example.org/.flux.env``. This file contains the last bit of
 information you need to configure. You **have to** configure the following
 values. The rest are optional.
 
@@ -75,12 +75,12 @@ If you want apps like Nextcloud, RocketChat and Prometheus to be able to send
 email notifications, you need to provide an email account.
 
 .. Note::
-    OpenAppStack does not set up an email server for you. In order to enable
+    Stackspin does not set up an email server for you. In order to enable
     outgoing emails you need to provide an already existing email account.
 
-OpenAppStack uses SMTP to send emails. Search your email provider's helpdesk
+Stackspin uses SMTP to send emails. Search your email provider's helpdesk
 for SMTP configuration details and enter them in the
-``clusters/oas.example.org/.flux.env`` file as follows:
+``clusters/stackspin.example.org/.flux.env`` file as follows:
 
 .. code::
 
@@ -125,10 +125,10 @@ upload it to the S3 storage you configure. This includes:
   consider not valuable enough to back up.
 
 It does not include anything on the VPS that you may have set up but is not
-part of OpenAppStack, like programs installed via ``apt``, or data added to the
-VPS disk not through OpenAppStack.
+part of Stackspin, like programs installed via ``apt``, or data added to the
+VPS disk not through Stackspin.
 
-To configure Velero, edit the file ``clusters/oas.example.org/.flux.env``,
+To configure Velero, edit the file ``clusters/stackspin.example.org/.flux.env``,
 and configure the settings with the ``backup_s3_`` prefix.
 
 Then continue with the installation procedure as described below. At the end of
@@ -141,11 +141,11 @@ Step 1: Install core applications
 
 Before you can start, you need to execute a few commands from the installation
 directory **on your provisioning machine**. Don't forget to replace
-``oas.example.org`` with your domain.
+``stackspin.example.org`` with your domain.
 
 .. code:: bash
 
-   export CLUSTER_DIR=clusters/oas.example.org
+   export CLUSTER_DIR=clusters/stackspin.example.org
 
    # Copy the installation kustomization to your cluster directory
    cp install/kustomization.yaml $CLUSTER_DIR/
@@ -163,17 +163,17 @@ After you have executed that code, your terminal should show:
 
 .. code:: bash
 
-   secret/oas-cluster-variables created
+   secret/stackspin-cluster-variables created
 
 Next, run:
 
 .. code::
 
-   ./install/install-openappstack.sh
+   ./install/install-stackspin.sh
 
-This installs the *core* of OpenAppStack into your cluster. To see what's
+This installs the *core* of Stackspin into your cluster. To see what's
 included, check the ``flux2/infrastructure`` and the ``flux2/core`` folders in
-the `git repository <https://open.greenhost.net/openappstack/openappstack>`__.
+the `git repository <https://open.greenhost.net/stackspin/stackspin>`__.
 
 .. _install_additional_apps:
 
@@ -193,7 +193,7 @@ to install:
   :ref:`backups-with-velero`).
 
 When the installation scripts complete, the application installation may still
-be running on the OpenAppStack cluster. You can monitor the progress by running
+be running on the Stackspin cluster. You can monitor the progress by running
 ``flux get kustomizations`` (use ``watch flux get kustomizations`` to get
 updates). If all kustomizations have been applied correctly, you can monitor
 specific application releases by running ``watch flux get helmreleases
@@ -204,7 +204,7 @@ specific application releases by running ``watch flux get helmreleases
 Step 3: Validate setup
 ======================
 
-Because OpenAppStack is still under development, we would like you to
+Because Stackspin is still under development, we would like you to
 follow our `testing instructions <testing.html>`__ to make sure
 that the setup process went well.
 
@@ -213,10 +213,10 @@ that the setup process went well.
 Step 4: Let us know!
 ====================
 
-We would love to hear about your experience installing OpenAppStack.  If you
+We would love to hear about your experience installing Stackspin.  If you
 encountered any problems, please create an issue in our `issue tracker
-<https://open.greenhost.net/groups/openappstack/-/issues>`__. If you didn't
+<https://open.greenhost.net/groups/stackspin/-/issues>`__. If you didn't
 please still reach out as described on our `contact page
-<https://openappstack.net/contact.html>`__ and tell us how you like OpenAppStack
+<https://stackspin.net/contact.html>`__ and tell us how you like Stackspin
 so far. We want to be in communication with our users, and we want to help you
 if you run into problems.
diff --git a/docs/installation/overview.rst b/docs/installation/overview.rst
index 22ef63c2da99c1579cc5490d91bc058a78c1734b..969558b50aeae3104957128551742a8a4d770aef 100644
--- a/docs/installation/overview.rst
+++ b/docs/installation/overview.rst
@@ -5,12 +5,12 @@ Installation overview
 =====================
 
 .. warning::
-   - OpenAppStack is still under heavy development and is not ready for
+   - Stackspin is still under heavy development and is not ready for
      production use! We anticipate major changes and do not guarantee a
      data-preserving upgrade path from current installations. However, we
-     encourage you to try OpenAppStack and ask you to `report all issues
-     you encounter <https://openappstack.net/contact.html>`__.
-   - When you install OpenAppStack on a server, the installation process
+     encourage you to try Stackspin and ask you to `report all issues
+     you encounter <https://stackspin.net/contact.html>`__.
+   - When you install Stackspin on a server, the installation process
      will make some substantial changes to the server's configuration, so
      please do not use a server that functions as anything other than a
      testing ground.
@@ -20,7 +20,7 @@ Installation overview
    laptop. We call this the ``provisioning machine``.
    All commands in these installation instructions need to be
    run this provisioning machine that is *not* the server that will run
-   OpenAppStack, unless specified otherwise.
+   Stackspin, unless specified otherwise.
 
 Setup
 =====
@@ -29,7 +29,7 @@ Common prerequisites
 --------------------
 
 Wether you want to create a kubernetes cluster first or want to install
-OpenAppStack on an existing cluster, these are the common prerequisites:
+Stackspin on an existing cluster, these are the common prerequisites:
 
 - You need Python 3 with its development files, Pip and Git installed
   (``apt install python3-pip python3-dev git`` on Debian)
@@ -38,16 +38,16 @@ OpenAppStack on an existing cluster, these are the common prerequisites:
   sure we do not change any of your other projects. Install virtualenv
   by running ``pip3 install --user venv`` or ``apt install python3-venv``.
 
-Clone the OpenAppStack git repository
+Clone the Stackspin git repository
 -------------------------------------
 
-On your **provisioning machine**, clone the OpenAppStack git repository
+On your **provisioning machine**, clone the Stackspin git repository
 and checkout the latest release branch (currently ``v0.7``):
 
 ::
 
-    $ git clone -b v0.7 https://open.greenhost.net/openappstack/openappstack.git
-    $ cd openappstack
+    $ git clone -b v0.7 https://open.greenhost.net/stackspin/stackspin.git
+    $ cd stackspin
 
 Create a python virtual environment
 -----------------------------------
@@ -69,30 +69,30 @@ second command "activates" the virtualenv.
 Install requirements
 --------------------
 
-Next, install the OpenAppStack CLI client by running the following
+Next, install the Stackspin CLI client by running the following
 commands:
 
 ::
 
     $ pip3 install -r requirements.txt
 
-OpenAppStack CLI client usage
+Stackspin CLI client usage
 -----------------------------
 
-Now you can run the OpenAppStack CLI as follows:
+Now you can run the Stackspin CLI as follows:
 
 ::
 
-    $ python -m openappstack CLUSTER_NAME <command>
+    $ python -m stackspin CLUSTER_NAME <command>
 
 The CLI *always* needs a ``CLUSTER_NAME`` argument. Even for getting
 subcommand help messages. Be sure to run this command in the root
 directory of the git repository. In this tutorial, we're using
-``oas.example.org`` as the cluster name. Try it out by running
+``stackspin.example.org`` as the cluster name. Try it out by running
 
 ::
 
-    $ python -m openappstack oas.example.org --help
+    $ python -m stackspin stackspin.example.org --help
 
 
 Installation options
@@ -100,6 +100,6 @@ Installation options
 
 1. If you want to create a Kubernetes cluster from scratch on a dedicated server
    or virtual machine please start with :ref:`create_kubernetes_cluster` and
-   then continue with :ref:`install_oas`.
-#. If you want to install Openappstack on an existing Kubernetes cluster you can
-   skip the above instructions and start with :ref:`install_oas`.
+   then continue with :ref:`install_stackspin`.
+#. If you want to install Stackspin on an existing Kubernetes cluster you can
+   skip the above instructions and start with :ref:`install_stackspin`.
diff --git a/docs/maintenance.rst b/docs/maintenance.rst
index d6a1c0d5af176dc3b54b1d924527a67f4bb30f51..ef7bc7a32ef819ecbc6c54235d2e99c4af9515b9 100644
--- a/docs/maintenance.rst
+++ b/docs/maintenance.rst
@@ -20,7 +20,7 @@ works, and the `Using Loki in Grafana`_ gets you started with querying
 your cluster logs with Grafana.
 
 You will find the Loki Grafana integration on your cluster at
-https://grafana.oas.example.org/explore together with some generic query
+https://grafana.stackspin.example.org/explore together with some generic query
 examples.
 
 LogQL query examples
@@ -54,7 +54,7 @@ Flux
 controllers:
 
 -  ``source-controller`` that tracks Helm and Git repositories like
-   https://open.greenhost.net/openappstack/openappstack for updates.
+   https://open.greenhost.net/stackspin/stackspin for updates.
 -  ``kustomize-controller`` to deploy ``kustomizations`` that often
    install ``helmreleases``.
 -  ``helm-controller`` to deploy the ``helmreleases``.
@@ -136,16 +136,16 @@ On your provisioning machine
 
 During the installation process, a cluster config directory is created
 on your provisioning machine, located in the top-level sub-directory
-``clusters`` in your clone of the openappstack git repository. Although
-these files are not essential for your OpenAppStack cluster to continue
+``clusters`` in your clone of the stackspin git repository. Although
+these files are not essential for your Stackspin cluster to continue
 functioning, you may want to back this folder up because it allows easy
 access to your cluster.
 
 On your cluster
 ~~~~~~~~~~~~~~~
 
-OpenAppStack supports using the program Velero to make backups of your
-OpenAppStack instance to external storage via the S3 API. See
+Stackspin supports using the program Velero to make backups of your
+Stackspin instance to external storage via the S3 API. See
 :ref:`backups-with-velero` in the installation instructions for setup details.
 By default this will make nightly backups of the entire cluster (minus
 Prometheus data). To make a manual backup, run
@@ -159,7 +159,7 @@ documentation`_ for more information.
 
 Note: in case you want to make an (additional) backup of application
 data via alternate means, all persistent volume data of the cluster are
-stored in directories under ``/var/lib/OpenAppStack/local-storage``.
+stored in directories under ``/var/lib/Stackspin/local-storage``.
 
 Restore
 -------
@@ -173,7 +173,7 @@ Change the IP of your cluster
 In case your cluster needs to migrate to another IP, make sure to update
 the IP address in ``/etc/rancher/k3s/k3s.yaml`` and, if applicable, your
 local kube config and inventory.yml in the cluster directory
-``clusters/oas.example.org``.
+``clusters/stackspin.example.org``.
 
 Delete evicted pods
 -------------------
@@ -213,6 +213,6 @@ following command that will apply the changes to all installed kustomizations:
 .. _LogQL documentation: https://grafana.com/docs/loki/latest/logql
 .. _Flux: https://fluxcd.io/
 .. _Velero’s documentation: https://velero.io/docs/v1.4/
-.. _reach out to us: https://openappstack.net/contact.html
+.. _reach out to us: https://stackspin.net/contact.html
 .. _taints: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
 .. _out of resource handling with kubelet: https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/
diff --git a/docs/reference.md b/docs/reference.md
index 7bf4d95c6ef2afc6aef7742f4ca4fed1a7955766..a7db0fc1aaa933df9640ee037f188a92096e0b47 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -5,11 +5,9 @@
 During the installation process, the following files and directories are
 created:
 
-- `/var/lib/OpenAppStack/local-storage`: all application data (e.g., Nextcloud
+- `/var/lib/Stackspin/local-storage`: all application data (e.g., Nextcloud
   files) are stored here.
 
 - `/var/lib/rancher/k3s`: this contains the files related to your "Kubernetes"
   cluster.
   - The kubectl configuration file is located at `/etc/rancher/k3s/k3s.yaml`
-
-
diff --git a/docs/requirements.in b/docs/requirements.in
index 30b09c8574547ae5bcf7de82d520c79f3c1fb1ec..16f51618fa5d19bc02c2bb909ac79eebaca227f4 100644
--- a/docs/requirements.in
+++ b/docs/requirements.in
@@ -3,7 +3,7 @@
 # to update requirements.txt
 #
 # Please add developer dependencies which are not needed to install
-# OpenAppStack to requirements-dev.txt!
+# Stackspin to requirements-dev.txt!
 #
 sphinx
 sphinx-design
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 49891065d827ccb9d0b13c70ff80ed2ebe52df56..3a0f214684c8fb723a7235957e3bae85f91c4fa9 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -14,24 +14,24 @@ charset-normalizer==2.0.7
     # via requests
 commonmark==0.9.1
     # via recommonmark
-docutils==0.18
+docutils==0.17.1
     # via
     #   recommonmark
     #   sphinx
     #   sphinx-rtd-theme
 idna==3.3
     # via requests
-imagesize==1.2.0
+imagesize==1.3.0
     # via sphinx
-jinja2==3.0.2
+jinja2==3.0.3
     # via sphinx
 markupsafe==2.0.1
     # via jinja2
-packaging==21.0
+packaging==21.2
     # via sphinx
 pygments==2.10.0
     # via sphinx
-pyparsing==3.0.4
+pyparsing==2.4.7
     # via packaging
 pytz==2021.3
     # via babel
@@ -41,7 +41,7 @@ requests==2.26.0
     # via sphinx
 snowballstemmer==2.1.0
     # via sphinx
-sphinx==4.2.0
+sphinx==4.3.0
     # via
     #   -r requirements.in
     #   recommonmark
diff --git a/docs/security.rst b/docs/security.rst
index 099bfa76ad0e4009aa24648f188c285eb7f32ba0..5b1222dc8766493de094f080f7b25a64248fccf5 100644
--- a/docs/security.rst
+++ b/docs/security.rst
@@ -5,16 +5,16 @@ Security
 Access control
 ==============
 
-By default, the applications on your OAS cluster will be exposed to the whole
+By default, the applications on your Stackspin cluster will be exposed to the whole
 internet (although they are password protected).
 
 If you like to limit who can access your cluster resources you can configure
-the OAS ingress (`ingress-nginx <https://kubernetes.github.io/ingress-nginx>`__)
+the Stackspin ingress (`ingress-nginx <https://kubernetes.github.io/ingress-nginx>`__)
 to only accept connections from a certain IP address or range.
 
-Follow the :ref:`customizing:Customize OAS applications` instructions, but use the following
-secret as ``install/overrides/oas-nginx-override.yml`` and apply the secret in
-the ``oas`` namespace instead of ``oas-apps``. Replace the source range with the
+Follow the :ref:`customizing:Customize Stackspin applications` instructions, but use the following
+secret as ``install/overrides/stackspin-nginx-override.yml`` and apply the secret in
+the ``stackspin`` namespace instead of ``stackspin-apps``. Replace the source range with the
 IP address ranges you want to allow.
 
 .. code-block:: yaml
@@ -23,7 +23,7 @@ IP address ranges you want to allow.
    apiVersion: v1
    kind: secret
    metadata:
-     name: oas-nginx-override
+     name: stackspin-nginx-override
    data:
      values.yaml: |
        controller:
diff --git a/docs/testing.rst b/docs/testing.rst
index 2328a3e4377ffc4a261b33bcb23975bb23749566..6d98d81d77fbebf2e4897c0abaf49ee9c20ee1fa 100644
--- a/docs/testing.rst
+++ b/docs/testing.rst
@@ -1,23 +1,23 @@
 Testing guide
 =============
 
-Great that you want to take OpenAppStack for a test drive !
+Great that you want to take Stackspin for a test drive !
 This guide contains instructions to get you going, some pointers on what we think
 would be useful to test, and guesses at what results of those tests
 would be useful to write down. At any point please feel invited to test
 whatever functionality you come across, and reporting whatever you think
 is interesting. Our contact details are listed
-`here <https://openappstack.net/contact.html>`__, and we’ll descibe how
+`here <https://stackspin.net/contact.html>`__, and we’ll descibe how
 to give feedback via our issue tracker at the `end of these
 instructions <#providing-feedback>`__.
 
 During these instructions, please replace *example.org* with your own
 domain name.
 
-OAS installation
-----------------
+Stackspin installation
+----------------------
 
-First we’d like you to setup an OpenAppStack cluster by yourself,
+First we’d like you to setup an Stackspin cluster by yourself,
 following the :ref:`installation_overview` and :ref:`usage:Usage` documentation and make sure
 you complete all steps.
 
@@ -36,7 +36,7 @@ Please login using single sign-on as ``admin`` and see if you have admin
 rights granted (usually there’s an app specific admin panel available or
 admin functionality like configuring users). Afterwards logout and login
 again as the non-admin single-sign-on user you created earlier in the
-OAS admin panel. You should *not* have any admin privileges now.
+Stackspin admin panel. You should *not* have any admin privileges now.
 
 Testing Instructions for specific apps
 --------------------------------------
@@ -46,7 +46,7 @@ Nextcloud
 
 Please browse to Nextcloud using the link from your user dashboard app
 list and try to log in using single sign-on. Use the button labeled
-``Login with OpenAppStack``. Please try logging in with your admin
+``Login with Stackspin``. Please try logging in with your admin
 account and configure the email settings as shown in the Usage doc.
 After that please login with the user you created in the user panel.
 
@@ -115,8 +115,8 @@ Providing feedback
 If you have not done so already, please create an account on
 https://open.greenhost.net (or login with your existing github account)
 and `create a new
-issue <https://open.greenhost.net/openappstack/openappstack/issues/new>`__
+issue <https://open.greenhost.net/stackspin/stackspin/issues/new>`__
 using the ``Feedback`` template.
 
 Thanks a lot for your testing work! We’ll use your input to try to
-improve OpenAppStack.
+improve Stackspin.
diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst
index 650f482bc0486561a4000f895a806a168bef836e..135a989d56e07f34cfbfc0626bae24ff31465a31 100644
--- a/docs/troubleshooting.rst
+++ b/docs/troubleshooting.rst
@@ -6,12 +6,12 @@ problem. This document describes what you can do.
 
 .. note::
    ``cluster$`` indicates that the commands should be run as root on your
-   OAS machine.
+   Stackspin machine.
 
 **We would love to hear from you!** If you have problems, please create an issue
 in our `issue tracker
-<https://open.greenhost.net/groups/openappstack/-/issues>`__ or reach out as
-described on our `contact page <https://openappstack.net/contact.html>`__. We
+<https://open.greenhost.net/groups/stackspin/-/issues>`__ or reach out as
+described on our `contact page <https://stackspin.net/contact.html>`__. We
 want to be in communication with our users, and we want to help you if you run
 into problems.
 
@@ -19,7 +19,7 @@ Known issues
 ------------
 
 If you run into a problem, please check our `issue
-tracker <https://open.greenhost.net/groups/openappstack/-/issues>`__ to see if
+tracker <https://open.greenhost.net/groups/stackspin/-/issues>`__ to see if
 others have run into the same problem. We might have suggested a workaround or
 temporary solution in one of our issues. If your problems is not described in an
 issue, please open a new one so we can solve the problems you encounter.
@@ -38,9 +38,9 @@ Testinfra tests
 
 Testinfra tests are split into two groups, lets call them *blackbox* and
 *clearbox* tests.  The blackbox tests run on your provisioning machine and test
-the OAS cluster from the outside. For example, the certificate check will check
-if the OAS returns valid certificates for the provided services.
-The clearbox tests run on the OAS host and check i.e. if docker is installed
+the Stackspin cluster from the outside. For example, the certificate check will check
+if the Stackspin returns valid certificates for the provided services.
+The clearbox tests run on the Stackspin host and check i.e. if docker is installed
 in the right version etc. Our testinfra tests are a combination of blackbox and
 clearbox tests.
 
@@ -53,11 +53,11 @@ machine**.
 
 To run the test against your cluster, first export the ``CLUSTER_DIR``
 environment variable with the location of your cluster config directory (replace
-``oas.example.org`` with your cluster name):
+``stackspin.example.org`` with your cluster name):
 
 .. code:: bash
 
-   export CLUSTER_DIR="../clusters/oas.example.org"
+   export CLUSTER_DIR="../clusters/stackspin.example.org"
 
 Run all tests
 '''''''''''''
@@ -105,7 +105,7 @@ Taiko tests
 
 Taiko tests run in a browser and test if all the interfaces are up
 and running and correctly connected to each other. They are integrated in the
-`openappstack` CLI command suite.
+`stackspin` CLI command suite.
 
 Prerequisites
 '''''''''''''
@@ -123,19 +123,19 @@ To run all Taiko tests, run the following command in this repository:
 
 .. code:: bash
 
-   python -m openappstack CLUSTERNAME test
+   python -m stackspin CLUSTERNAME test
 
 To learn more about the `test` subcommand, run:
 
 .. code:: bash
 
-   python -m openappstack CLUSTERNAME test --help
+   python -m stackspin CLUSTERNAME test --help
 
 You can also only run a Taiko test for a specific application, i.e.:
 
 .. code:: bash
 
-   python -m openappstack CLUSTERNAME test --taiko-tags nextcloud
+   python -m stackspin CLUSTERNAME test --taiko-tags nextcloud
 
 Advanced usage
 ~~~~~~~~~~~~~~
@@ -147,7 +147,7 @@ Specify host manually:
 
 .. code:: bash
 
-   py.test -s --hosts='ssh://root@example.openappstack.net'
+   py.test -s --hosts='ssh://root@example.stackspin.net'
 
 Run only tests tagged with `prometheus`:
 
@@ -166,13 +166,13 @@ ansible inventory file, either by using pytest:
 
 .. code:: bash
 
-   FQDN='example.openappstack.net' py.test -sv -m 'certs'
+   FQDN='example.stackspin.net' py.test -sv -m 'certs'
 
 or directly:
 
 .. code:: bash
 
-   FQDN='example.openappstack.net' pytest/test_certs.py
+   FQDN='example.stackspin.net' pytest/test_certs.py
 
 Running Testinfra tests with local gitlab-runner docker executor
 
@@ -180,8 +180,8 @@ Export the following environment variables like this:
 
 .. code:: bash
 
-    export CI_REGISTRY_IMAGE='open.greenhost.net:4567/openappstack/openappstack'
-    export SSH_PRIVATE_KEY="$(cat ~/.ssh/id_ed25519_oas_ci)"
+    export CI_REGISTRY_IMAGE='open.greenhost.net:4567/stackspin/stackspin'
+    export SSH_PRIVATE_KEY="$(cat ~/.ssh/id_ed25519_stackspin_ci)"
     export COSMOS_API_TOKEN='…'
 
 then:
@@ -193,14 +193,14 @@ then:
 Taiko tests
 '''''''''''
 
-If you want to use Taiko without invoking the openappstack CLI, go to the
+If you want to use Taiko without invoking the stackspin CLI, go to the
 ``test/taiko`` directory and run:
 
 For nextcloud & onlyoffice tests:
 
 .. code:: bash
 
-    export DOMAIN='oas.example.net'
+    export DOMAIN='stackspin.example.net'
     export SSO_USERNAME='user1'
     export SSO_USER_PW='...'
     export TAIKO_TESTS='nextcloud'
@@ -229,18 +229,18 @@ Using kubectl to debug your cluster
 
 You can use ``kubectl``, the Kubernetes control program, to find and manipulate
 your Kubernetes cluster. Once you have installed ``kubectl``, to get access to
-your cluster with the OAS CLI:
+your cluster with the Stackspin CLI:
 
 .. code:: bash
 
-    $ python -m openappstack oas.example.org info
+    $ python -m stackspin stackspin.example.org info
 
 Look for these lines:
 
 .. code::
 
    To use kubectl with this cluster, copy-paste this in your terminal:
-   export KUBECONFIG=/home/you/projects/openappstack/clusters/oas.example.org/kube_config_cluster.yml
+   export KUBECONFIG=/home/you/projects/stackspin/clusters/stackspin.example.org/kube_config_cluster.yml
 
 Copy the whole ``export`` line into your terminal. In *the same terminal
 window*, ``kubectl`` will connect to your cluster.
@@ -248,16 +248,16 @@ window*, ``kubectl`` will connect to your cluster.
 HTTPS Certificates
 ------------------
 
-OAS uses `cert-manager <https://docs.cert-manager.io/en/latest/>`__ to
+Stackspin uses `cert-manager <https://docs.cert-manager.io/en/latest/>`__ to
 automatically fetch `Let's Encrypt <https://letsencrypt.org/>`__ certificates
 for all deployed services. If you experience invalid SSL certificates, i.e. your
-browser warns you when visiting Rocketchat (https://chat.oas.example.org),
+browser warns you when visiting Rocketchat (https://chat.stackspin.example.org),
 a useful resource for troubleshooting is the official cert-manager
 `Troubleshooting Issuing ACME Certificates
 <https://cert-manager.io/docs/faq/acme/>`__ documentation. First, try this:
 
 In this example we fix a failed certificate request for
-*https://chat.oas.example.org*.  We will start by checking if ``cert-manager``
+*https://chat.stackspin.example.org*.  We will start by checking if ``cert-manager``
 is set up correctly.
 
 Is your cluster using the live ACME server?
@@ -269,7 +269,7 @@ Is your cluster using the live ACME server?
 Should return ``server: https://acme-v02.api.letsencrypt.org/directory`` and not
 something with the word *staging* in it.
 
-Are all cert-manager pods in the `oas` namespace in the `READY` state ?
+Are all cert-manager pods in the `stackspin` namespace in the `READY` state ?
 
 .. code:: bash
 
@@ -285,13 +285,13 @@ command includes example output of healthy certificates.
 
    $ kubectl get certificates -A
    NAMESPACE   NAME                           READY   SECRET                         AGE
-   oas         hydra-public.tls               True    hydra-public.tls               14d
-   oas         single-sign-on-userpanel.tls   True    single-sign-on-userpanel.tls   14d
-   oas-apps    oas-nextcloud-files            True    oas-nextcloud-files            14d
-   oas-apps    oas-nextcloud-office           True    oas-nextcloud-office           14d
-   oas         grafana-tls                    True    grafana-tls                    13d
-   oas         alertmanager-tls               True    alertmanager-tls               13d
-   oas         prometheus-tls                 True    prometheus-tls                 13d
+   stackspin         hydra-public.tls               True    hydra-public.tls               14d
+   stackspin         single-sign-on-userpanel.tls   True    single-sign-on-userpanel.tls   14d
+   stackspin-apps    stackspin-nextcloud-files            True    stackspin-nextcloud-files            14d
+   stackspin-apps    stackspin-nextcloud-office           True    stackspin-nextcloud-office           14d
+   stackspin         grafana-tls                    True    grafana-tls                    13d
+   stackspin         alertmanager-tls               True    alertmanager-tls               13d
+   stackspin         prometheus-tls                 True    prometheus-tls                 13d
 
 If there are problems, you can check for the specific ``certificaterequests``:
 
@@ -302,7 +302,7 @@ If there are problems, you can check for the specific ``certificaterequests``:
 If you still need more information, you can dig into the logs of the
 ``cert-manager`` pod:
 
-    $ kubectl -n oas logs -l "app.kubernetes.io/name=cert-manager"
+    $ kubectl -n stackspin logs -l "app.kubernetes.io/name=cert-manager"
 
 You can `grep` for your cluster domain or for any specific subdomain to narrow
 down results.
@@ -315,10 +315,10 @@ Query for failed certificates, -requests, challenges or orders:
 .. code:: bash
 
     $ kubectl get --all-namespaces certificate,certificaterequest,challenge,order | grep -iE '(false|pending)'
-    oas-apps    certificate.cert-manager.io/oas-rocketchat                 False   oas-rocketchat                 15h
-    oas-apps    certificaterequest.cert-manager.io/oas-rocketchat-2045852889                 False   15h
-    oas-apps    challenge.acme.cert-manager.io/oas-rocketchat-2045852889-1775447563-837515681   pending   chat.oas.example.org   15h
-    oas-apps    order.acme.cert-manager.io/oas-rocketchat-2045852889-1775447563                 pending   15h
+    stackspin-apps    certificate.cert-manager.io/stackspin-rocketchat                 False   stackspin-rocketchat                 15h
+    stackspin-apps    certificaterequest.cert-manager.io/stackspin-rocketchat-2045852889                 False   15h
+    stackspin-apps    challenge.acme.cert-manager.io/stackspin-rocketchat-2045852889-1775447563-837515681   pending   chat.stackspin.example.org   15h
+    stackspin-apps    order.acme.cert-manager.io/stackspin-rocketchat-2045852889-1775447563                 pending   15h
 
 We see that the Rocketchat certificate resources are in a bad state since 15h.
 
@@ -326,28 +326,28 @@ Show certificate resource status message:
 
 .. code:: bash
 
-    $ kubectl -n oas-apps get certificate oas-rocketchat -o jsonpath="{.status.conditions[*]['message']}"
-    Waiting for CertificateRequest "oas-rocketchat-2045852889" to complete
+    $ kubectl -n stackspin-apps get certificate stackspin-rocketchat -o jsonpath="{.status.conditions[*]['message']}"
+    Waiting for CertificateRequest "stackspin-rocketchat-2045852889" to complete
 
 We see that the `certificate` is waiting for the `certificaterequest`, lets
 query its status message:
 
 .. code:: bash
 
-    $ kubectl -n oas-apps get certificaterequest oas-rocketchat-2045852889 -o jsonpath="{.status.conditions[*]['message']}"
-    Waiting on certificate issuance from order oas-apps/oas-rocketchat-2045852889-1775447563: "pending"
+    $ kubectl -n stackspin-apps get certificaterequest stackspin-rocketchat-2045852889 -o jsonpath="{.status.conditions[*]['message']}"
+    Waiting on certificate issuance from order stackspin-apps/stackspin-rocketchat-2045852889-1775447563: "pending"
 
 Show the related order resource and look at the status and events:
 
 .. code:: bash
 
-    $ kubectl -n oas-apps describe order oas-rocketchat-2045852889-1775447563
+    $ kubectl -n stackspin-apps describe order stackspin-rocketchat-2045852889-1775447563
 
 Show the failed challenge resource reason:
 
 .. code:: bash
 
-    $ kubectl -n oas-apps get challenge oas-rocketchat-2045852889-1775447563-837515681 -o jsonpath='{.status.reason}'
+    $ kubectl -n stackspin-apps get challenge stackspin-rocketchat-2045852889-1775447563-837515681 -o jsonpath='{.status.reason}'
     Waiting for http-01 challenge propagation: wrong status code '503', expected '200'
 
 In this example, deleting the challenge fixed the issue and a proper certificate
@@ -355,7 +355,7 @@ could get fetched:
 
 .. code:: bash
 
-    $ kubectl -n oas-apps delete challenges.acme.cert-manager.io oas-rocketchat-2045852889-1775447563-837515681
+    $ kubectl -n stackspin-apps delete challenges.acme.cert-manager.io stackspin-rocketchat-2045852889-1775447563-837515681
 
 Application installation or upgrade failures
 --------------------------------------------
@@ -392,7 +392,7 @@ by telling Flux to *reconcile* them:
    cluster$ flux reconcile helmrelease nextcloud
 
 Will make sure that the Nextcloud ``helmrelease`` gets brought into a state that
-our OpenAppStack wants it to be in.
+our Stackspin wants it to be in.
 
 
 Common installation failures
@@ -422,22 +422,22 @@ running ``flux reconcile kustomization kube-prometheus-stack`` (replace
 ``kube-prometheus-stack`` with the kustomization is mentioned in the error
 message).
 
-Purge OAS and install from scratch
-----------------------------------
+Purge Stackspin and install from scratch
+----------------------------------------
 
 If ever things fail beyond possible recovery, here's how to completely purge an
-OAS installation in order to start from scratch:
+Stackspin installation in order to start from scratch:
 
 .. warning::
 
-   **You will lose all your data!** This completely destroys OpenAppStack and
+   **You will lose all your data!** This completely destroys Stackspin and
    takes everything offline. If you chose to do this, you will need to
-   re-install OpenAppStack and make sure that your data is stored somewhere
-   other than the VPS that runs OpenAppStack.
+   re-install Stackspin and make sure that your data is stored somewhere
+   other than the VPS that runs Stackspin.
 
 .. code:: bash
 
     cluster$ /usr/local/bin/k3s-killall.sh
     cluster$ systemctl disable k3s
-    cluster$ rm -rf  /var/lib/{rancher,OpenAppStack,kubelet} /etc/rancher /var/log/{OpenAppStack,containers,pods} /tmp/k3s /etc/systemd/system/k3s.service
+    cluster$ rm -rf  /var/lib/{rancher,Stackspin,kubelet} /etc/rancher /var/log/{Stackspin,containers,pods} /tmp/k3s /etc/systemd/system/k3s.service
     cluster$ systemctl reboot
diff --git a/docs/upgrading.rst b/docs/upgrading.rst
index e53f51b4f29d1970ff9f55e74f3bf178204c4cbc..1c3e99bfdfa4fc8469fee8ffcfa62bb424404ad5 100644
--- a/docs/upgrading.rst
+++ b/docs/upgrading.rst
@@ -4,31 +4,128 @@ Upgrading
 Upgrading to 0.8.0 (not released yet)
 -------------------------------------
 
-When upgrading to version 0.8.0 you'll get the newest versions of several
-database helm charts that have changed significantly. Because they have, you'll
-have to manually remove the following statefulsets (note: as long as you haven't
-overwritten any of the `persistence:` variables for those charts, you can do
-this without risk. If you have, make sure to back up your PVCs).
-
-```
-kubectl delete statefulset -n oas-apps nc-mariadb nc-redis-master nc-rabbitmq nc-postgresql
-```
-
-If your Nextcloud helmrelease gets stuck in a non-ready state, you can run this
-to force re-reconciliation:
-
-```
-flux suspend helmrelease nextcloud -n oas-apps
-flux resume helmrelease nextcloud -n oas-apps
-```
-
-If aftewards your ``nc-nextcloud-xxxxxxxxxx-xxxxx`` pod is stuck in the
-``Initializing`` phase, you can delete it to make sure its replacement connects
-to the new databases:
-
-```
-kubectl delete pod -n oas-apps nc-nextcloud-xxxxxxxxxx-xxxxx
-```
+When upgrading to version 0.8.0 OpenAppStack will be renamed to its final name:
+*Stackspin*. This comes with many changes, some of which need to be applied
+manually.
+
+We have written a script to automate a lot of the preparations for the upgrade.
+However, afterwards you might need to get your hands dirty to get all your
+applications to work again. **Read this whole upgrade guide carefully, before
+you get started!**
+
+.. code:: bash
+
+   # Log into your Stackspin server
+   ssh <server>
+   # Download our upgrade script
+   wget https://open.greenhost.net/stackspin/stackspin/-/raw/main/upgrade-scripts/to-0.8.0/rename-to-stackspin.sh
+   chmod +x rename-to-stackspin.sh
+
+First of all, if you have any ``-override`` configmaps or secrets, you'll want
+to move them from the ``oas`` namespace to the ``stackspin`` namespace, and from
+``oas-apps`` to ``stackspin-apps`` (you also need to make these namespaces
+first). You also need to rename them from ``oas-X`` to ``stackspin-X``. You can
+use a command like this to rename the cm and move it to the right namespace.
+
+.. code:: bash
+
+   kubectl get cm -n oas-apps oas-$APP-override -o json | jq '.metadata.name="stackspin-$APP-override"' | jq '.metadata.namespace="stackspin-apps"' | kubectl apply -f -
+
+**This script will cause serious down time and it will not do everything for
+you**. Rather, it will prepare your cluster for the upgrade.
+
+The script does the following:
+
+
+#. Install ``jq``
+#. Shut down the cluster, make a back-up of the data, and bring the cluster back
+   up
+#. Copy all relevant ``oas-*`` secrets to ``stackspin-*``
+#. Move all PersistentVolumeClaims to the ``stackspin`` and ``stackspin-apps``
+   namespaces and sets the PersistentVolumes ReclaimPolicy to "Retain" so your
+   data is not accidentally deleted.
+#. Delete all OAS ``flux`` kustomizations
+#. Delete the ``oas`` and ``oas-apps`` namespace
+#. Create the new ``stackspin`` source and kustomization
+
+Because there are not many Stackspin users yet, the script can need some manual
+adjustments. It was written for clusters on which all applications are
+installed. If you have *not* installed some of the applications, please remove
+these applications form the script manually.
+
+.. code:: bash
+
+   # Execute the upgrade preparation script
+   ./rename-to-stackspin.sh
+
+After this, you need to manually re-install the applications by running
+``install/install-app.sh <app>`` from the Stackspin repository. See the
+application specific upgrade guides below.
+
+**After all your applications work again**, you can clean up the old secrets and
+reset the Persistent Volume ReclaimPolicy to ``Delete``
+
+.. code:: bash
+
+   wget https://open.greenhost.net/stackspin/stackspin/-/raw/main/upgrade-scripts/to-0.8.0/cleanup.sh
+   chmod +x cleanup.sh
+   ./cleanup.sh
+
+Nextcloud
+~~~~~~~~~
+
+Your SSO users will have new usernames, because the OIDC provider has been
+renamed from ``oas`` to ``stackspin``. You can choose from these options:
+
+1. Manually re-upload and re-share your files after logging into your new user
+   for the first time.
+2. It is possible to transfer files from your previous user to the new user. To
+   do so:
+
+   .. code:: bash
+
+      # Exec into the Nextcloud container
+      kubectl exec -n stackspin-apps nc-nextcloud-xxx-xxx -it -- /bin/bash
+      # Change to the www-data user
+      su www-data -s /bin/bash
+      # Repeat this command for each username
+      php occ files:transfer-ownership oas-<username> stackspin-<username>
+      # Note: the files are tranferred to a subfolder in the new user's
+      # directory
+
+Rocket.Chat
+~~~~~~~~~~~
+
+It is possible to back-up and restore Rocket.Chat, but you have to do it
+manually. Before you run the ``rename-to-stackspin.sh`` script, you need to run
+a ``mongodump`` of the database inside the pod. After everything is done and
+you have re-installed Rocket.Chat, you need to restore the mongodump with
+``mongorestore``:
+
+
+.. code:: bash
+
+   # These commands need to be run *inside* the rocketchat-mongodb pod:
+   # To dump:
+   mongodump --db rocketchat  <backup_dir> -u root --authenticationDatabase admin
+   # To restore:
+   mongorestore --db rocketchat  <backup_dir>/backup/rocketchat/rocketchat -u root --authenticationDatabase admin
+
+Monitoring
+~~~~~~~~~~
+
+The monitoring stack will work after the upgrade, but monitoring data from the
+previous version will not be available.
+
+Wekan
+~~~~~
+
+In our testing we didn't need to change anything for Wekan to work.
+
+WordPress
+~~~~~~~~~
+
+In our testing we didn't need to change anything for WordPress to work.
 
 Upgrading to 0.7.0
 ------------------
diff --git a/docs/usage.rst b/docs/usage.rst
index a32cc6bb4922734b3c8a19e1f8e110fa010c115c..79e57d5a94d52497a27bdbf030e9e546c736bdd2 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -1,25 +1,25 @@
 Usage
 =====
 
-OAS User panel
---------------
+Stackspin User panel
+--------------------
 
 After all the applications are installed, the first thing to do is log into
-`https://admin.oas.example.org <https://admin.oas.example.org>`__.
+`https://admin.stackspin.example.org <https://admin.stackspin.example.org>`__.
 This is the "user panel" , a place where you can create, edit and delete users.
 These users can be used to log into the applications listed below.
 You can log in with the user "admin". The password can be found by running
 
 .. code:: bash
 
-   python3 -m openappstack oas.example.org secrets
+   python3 -m stackspin stackspin.example.org secrets
 
 Search for ``userbackend_admin_password``.
 
 After logging in, you will see an overview of all the installed applications
 your user has access to. For more information on how to create users and give
 them access to applications, take a look at the `user panel documentation
-<https://docs.openappstack.net/projects/user-panel/en/latest>`_.
+<https://docs.stackspin.net/projects/user-panel/en/latest>`_.
 
 .. note::
 
@@ -27,7 +27,7 @@ them access to applications, take a look at the `user panel documentation
    optional application in :ref:`additional_apps` of the installation procedure.
 
 For creating users follow the `user creation documentation
-<https://docs.openappstack.net/projects/user-panel/en/latest/#creating-a-new-user>`_.
+<https://docs.stackspin.net/projects/user-panel/en/latest/#creating-a-new-user>`_.
 
 *Note*: The email address is important because some applications need a valid
 email address for notification mails.
diff --git a/flux2/README.md b/flux2/README.md
index 6c7fd51a0933999802c3b7ad46b0d796375a64a7..8168e9b3c9c783dbdfdd5d2f08dfee6358a5581d 100644
--- a/flux2/README.md
+++ b/flux2/README.md
@@ -23,15 +23,15 @@ flux2
 │   │   └── monitoring.yaml      # Applies `flux2/apps/monitoring` folder
 │   └── optional    # Kustomizations that can be applied to add applications
 │       └── ... # 1 folder per app in `apps/`
-├── core     # Resources that need variables from `oas-cluster-variables` secret
+├── core     # Resources that need variables from `stackspin-cluster-variables` secret
 │   └── base
 │       ├── cluster-issuer # `cert-manager` is part of `infrastructure`, this only adds the cluster-issuer
 │       ├── metallb        # Load balancer
 │       └── single-sign-on # Single sign-on system
-└── infrastructure  # First to be installed, essential OAS resources
+└── infrastructure  # First to be installed, essential Stackspin resources
     ├── cert-manager           # Let's Encrypt certificate generator
     ├── local-path-provisioner # (default) storage class to safe files on disk
-    ├── namespaces             # namespaces used by OAS
+    ├── namespaces             # namespaces used by Stackspin
     ├── nginx    # Ingress
     └── sources  # Helm repositories needed for HelmReleases from other folders
 ```
diff --git a/flux2/apps/monitoring/eventrouter-release.yaml b/flux2/apps/monitoring/eventrouter-release.yaml
index cdea652a23afe03590250356891aadbf9ece5568..b18483d7175e1c800e425448e3aa0bba7c95425a 100644
--- a/flux2/apps/monitoring/eventrouter-release.yaml
+++ b/flux2/apps/monitoring/eventrouter-release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: eventrouter
-  namespace: oas
+  namespace: stackspin
 spec:
   releaseName: eventrouter
   chart:
@@ -20,12 +20,12 @@ spec:
   interval: 1h
   valuesFrom:
     - kind: ConfigMap
-      name: oas-eventrouter-values
+      name: stackspin-eventrouter-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-eventrouter-override
+      name: stackspin-eventrouter-override
       optional: true
     - kind: Secret
-      name: oas-eventrouter-override
+      name: stackspin-eventrouter-override
       optional: true
diff --git a/flux2/apps/monitoring/eventrouter-values-configmap.yaml b/flux2/apps/monitoring/eventrouter-values-configmap.yaml
index aa6f0bef85c11ffd4081980b55fdcec647975f25..65b6d671012d99cb416362210edae62aad3d4d94 100644
--- a/flux2/apps/monitoring/eventrouter-values-configmap.yaml
+++ b/flux2/apps/monitoring/eventrouter-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-eventrouter-values
+  name: stackspin-eventrouter-values
 data:
   values.yaml: |
     sink: stdout
diff --git a/flux2/apps/monitoring/kube-prometheus-stack-release.yaml b/flux2/apps/monitoring/kube-prometheus-stack-release.yaml
index a8c0c76c9fe1950f08225de66f6defdd668a1ed9..13c80a29b4652fc3ed94d03f5310ab6021fc7c9e 100644
--- a/flux2/apps/monitoring/kube-prometheus-stack-release.yaml
+++ b/flux2/apps/monitoring/kube-prometheus-stack-release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: kube-prometheus-stack
-  namespace: oas
+  namespace: stackspin
 spec:
   releaseName: kube-prometheus-stack
   chart:
@@ -11,7 +11,7 @@ spec:
       # https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack
       # renovate: registryUrl=https://prometheus-community.github.io/helm-charts
       chart: kube-prometheus-stack
-      version: 19.2.2
+      version: 20.0.1
       sourceRef:
         kind: HelmRepository
         name: prometheus-community
@@ -25,12 +25,12 @@ spec:
     crds: CreateReplace
   valuesFrom:
     - kind: ConfigMap
-      name: oas-kube-prometheus-stack-values
+      name: stackspin-kube-prometheus-stack-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-kube-prometheus-stack-override
+      name: stackspin-kube-prometheus-stack-override
       optional: true
     - kind: Secret
-      name: oas-kube-prometheus-stack-override
+      name: stackspin-kube-prometheus-stack-override
       optional: true
diff --git a/flux2/apps/monitoring/kube-prometheus-stack-values-configmap.yaml b/flux2/apps/monitoring/kube-prometheus-stack-values-configmap.yaml
index 1f4729181818e341650ab0ce637128fc6a70a263..479ad58d58695610b6b65b69c874d7e339fb51e1 100644
--- a/flux2/apps/monitoring/kube-prometheus-stack-values-configmap.yaml
+++ b/flux2/apps/monitoring/kube-prometheus-stack-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-kube-prometheus-stack-values
+  name: stackspin-kube-prometheus-stack-values
 data:
   values.yaml: |
     # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml
@@ -24,7 +24,7 @@ data:
         enabled: true
         annotations:
           nginx.ingress.kubernetes.io/auth-type: basic
-          nginx.ingress.kubernetes.io/auth-secret: oas-alertmanager-basic-auth
+          nginx.ingress.kubernetes.io/auth-secret: stackspin-alertmanager-basic-auth
           nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
           kubernetes.io/tls-acme: "true"
         pathType: ImplementationSpecific
@@ -128,7 +128,7 @@ data:
         enabled: true
         annotations:
           nginx.ingress.kubernetes.io/auth-type: basic
-          nginx.ingress.kubernetes.io/auth-secret: oas-prometheus-basic-auth
+          nginx.ingress.kubernetes.io/auth-secret: stackspin-prometheus-basic-auth
           nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
           kubernetes.io/tls-acme: "true"
         pathType: ImplementationSpecific
@@ -151,15 +151,15 @@ data:
         server:
           root_url: "https://grafana.${domain}"
         auth.generic_oauth:
-          name: OpenAppStack
+          name: Stackspin
           enabled: true
           client_id: grafana
           client_secret: "${grafana_oauth_client_secret}"
-          scopes: "openid profile email openappstack_roles"
+          scopes: "openid profile email stackspin_roles"
           auth_url: "https://sso.${domain}/oauth2/auth"
           token_url: "https://sso.${domain}/oauth2/token"
           api_url: "https://sso.${domain}/userinfo"
-          role_attribute_path: contains(openappstack_roles[*], 'admin') && 'Admin' || 'Editor'
+          role_attribute_path: contains(stackspin_roles[*], 'admin') && 'Admin' || 'Editor'
       ingress:
         enabled: true
         annotations:
diff --git a/flux2/apps/monitoring/kustomization.yaml b/flux2/apps/monitoring/kustomization.yaml
index 769a6eca285070904208ea019ef18dd57e7b5f38..1b30e22f87d3dd1eec895cc42580c1f9e9d87519 100644
--- a/flux2/apps/monitoring/kustomization.yaml
+++ b/flux2/apps/monitoring/kustomization.yaml
@@ -1,7 +1,7 @@
 ---
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas
+namespace: stackspin
 resources:
   - eventrouter-release.yaml
   - eventrouter-values-configmap.yaml
diff --git a/flux2/apps/monitoring/loki-configmap.yaml b/flux2/apps/monitoring/loki-configmap.yaml
index e28b3b1cc549120114c30a92b7f5466dfe54774e..53c7ce25e47104775f69ed5ef0fb879302d5e747 100644
--- a/flux2/apps/monitoring/loki-configmap.yaml
+++ b/flux2/apps/monitoring/loki-configmap.yaml
@@ -7,7 +7,7 @@ metadata:
     grafana_datasource: "1"
     release: loki
   name: loki-datasource
-  namespace: oas
+  namespace: stackspin
 data:
   loki-stack-datasource.yaml: |-
     apiVersion: 1
diff --git a/flux2/apps/monitoring/loki-release.yaml b/flux2/apps/monitoring/loki-release.yaml
index 8c7cf6fb66e884a3b39897ae81c5b74de7e1231f..9ba09d4b2731be5ffc7a08a5b2c67fb874d770a7 100644
--- a/flux2/apps/monitoring/loki-release.yaml
+++ b/flux2/apps/monitoring/loki-release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: loki
-  namespace: oas
+  namespace: stackspin
 spec:
   releaseName: loki
   chart:
@@ -11,7 +11,7 @@ spec:
       # https://artifacthub.io/packages/helm/grafana/loki
       # renovate: registryUrl=https://grafana.github.io/helm-charts
       chart: loki
-      version: 2.7.0
+      version: 2.8.1
       sourceRef:
         kind: HelmRepository
         name: grafana
@@ -23,12 +23,12 @@ spec:
       retries: 2
   valuesFrom:
     - kind: ConfigMap
-      name: oas-loki-values
+      name: stackspin-loki-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-loki-override
+      name: stackspin-loki-override
       optional: true
     - kind: Secret
-      name: oas-loki-override
+      name: stackspin-loki-override
       optional: true
diff --git a/flux2/apps/monitoring/loki-values-configmap.yaml b/flux2/apps/monitoring/loki-values-configmap.yaml
index c6d417e16155284899b2a721916a2d9ae4ee7430..285c22e6c21b6818fe47dd45b53ab2a74efd232d 100644
--- a/flux2/apps/monitoring/loki-values-configmap.yaml
+++ b/flux2/apps/monitoring/loki-values-configmap.yaml
@@ -2,32 +2,28 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-loki-values
+  name: stackspin-loki-values
 data:
   values.yaml: |
     # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml
     resources:
       limits:
         cpu: 800m
-        memory: 1536Mi
+        memory: 2304Mi
       requests:
         cpu: 300m
-        memory: 1024Mi
+        memory: 1280Mi
     persistence:
       enabled: true
       accessModes:
         - ReadWriteOnce
       size: 10Gi
       annotations: {}
-      # existingClaim:
-    # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml#L46
     config:
-      # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml#L48
       ingester:
         chunk_idle_period: 30m
         chunk_block_size: 1048576
         chunk_retain_period: 15m
-        max_transfer_retries: 10
       # https://github.com/grafana/loki/blob/main/cmd/loki/loki-local-config.yaml
       # https://grafana.com/docs/loki/latest/operations/storage/retention
       schema_config:
@@ -41,28 +37,17 @@ data:
               period: 24h
             chunks:
               period: 24h
-      storage_config:
-        boltdb_shipper:
-          active_index_directory: /data/loki/boltdb-shipper-active
-          cache_location: /data/loki/boltdb-shipper-cache
-          cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
-          shared_store: filesystem
-        filesystem:
-          directory: /data/loki/chunks
-      # https://grafana.com/docs/loki/v2.3.0/operations/storage/retention/#retention-configuration^B
+      # https://grafana.com/docs/loki/latest/operations/storage/retention/
+      limits_config:
+        retention_period: 48h
+        reject_old_samples_max_age: 48h
+      chunk_store_config:
+        max_look_back_period: 48h
+      table_manager:
+        retention_deletes_enabled: true
+        retention_period: 48h
       compactor:
-        working_directory: /data/loki/boltdb-shipper-compactor
-        shared_store: filesystem
         compaction_interval: 10m
         retention_enabled: true
         retention_delete_delay: 2h
         retention_delete_worker_count: 150
-      limits_config:
-        retention_period: 48h # 2 days
-        reject_old_samples: true
-        reject_old_samples_max_age: 48h  # 2 days
-      chunk_store_config:
-        max_look_back_period: 48h  # 2 days
-      table_manager:
-        retention_deletes_enabled: true
-        retention_period: 48h  # 7 days
diff --git a/flux2/apps/monitoring/promtail-release.yaml b/flux2/apps/monitoring/promtail-release.yaml
index 14b13f890370f34c4146bdb5e099ea34548351f6..e5f95e775c4813211c71989c3d6c9103c1760734 100644
--- a/flux2/apps/monitoring/promtail-release.yaml
+++ b/flux2/apps/monitoring/promtail-release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: promtail
-  namespace: oas
+  namespace: stackspin
 spec:
   releaseName: promtail
   chart:
@@ -11,7 +11,7 @@ spec:
       # https://artifacthub.io/packages/helm/grafana/promtail
       # renovate: registryUrl=https://grafana.github.io/helm-charts
       chart: promtail
-      version: 3.8.2
+      version: 3.9.1
       sourceRef:
         kind: HelmRepository
         name: grafana
@@ -19,12 +19,12 @@ spec:
   interval: 1h
   valuesFrom:
     - kind: ConfigMap
-      name: oas-promtail-values
+      name: stackspin-promtail-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-promtail-override
+      name: stackspin-promtail-override
       optional: true
     - kind: Secret
-      name: oas-promtail-override
+      name: stackspin-promtail-override
       optional: true
diff --git a/flux2/apps/monitoring/promtail-values-configmap.yaml b/flux2/apps/monitoring/promtail-values-configmap.yaml
index 5b247c7f735a7848de8efa7a36da6a4338cdfe10..83472dccb006b3465f184ee46bfc5357b1e1cf80 100644
--- a/flux2/apps/monitoring/promtail-values-configmap.yaml
+++ b/flux2/apps/monitoring/promtail-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-promtail-values
+  name: stackspin-promtail-values
 data:
   values.yaml: |
     initContainer:
@@ -11,10 +11,10 @@ data:
     resources:
       limits:
         cpu: 400m
-        memory: 256Mi
+        memory: 384Mi
       requests:
         cpu: 200m
-        memory: 128Mi
+        memory: 256Mi
     config:
       lokiAddress: http://loki:3100/loki/api/v1/push
       # https://github.com/grafana/helm-charts/blob/main/charts/promtail/values.yaml#L217
@@ -42,4 +42,3 @@ data:
                     event_name:
                     event_source_host:
                     event_source_component:
-
diff --git a/flux2/apps/nextcloud/kustomization.yaml b/flux2/apps/nextcloud/kustomization.yaml
index bdd7b84a07a289aff0f0e90612a5ac35ca0fd250..340146ce7c862b8e99469257a160897e925a967a 100644
--- a/flux2/apps/nextcloud/kustomization.yaml
+++ b/flux2/apps/nextcloud/kustomization.yaml
@@ -1,6 +1,6 @@
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas-apps
+namespace: stackspin-apps
 resources:
   - pvc.yaml
   - release.yaml
diff --git a/flux2/apps/nextcloud/nextcloud-values-configmap.yaml b/flux2/apps/nextcloud/nextcloud-values-configmap.yaml
index 4d865b0322965beed9fefa506505ec2bc1d5bcc7..f18b5c9590d773b766398ef9ab1c3283bf97f1cc 100644
--- a/flux2/apps/nextcloud/nextcloud-values-configmap.yaml
+++ b/flux2/apps/nextcloud/nextcloud-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-nextcloud-values
+  name: stackspin-nextcloud-values
 data:
   values.yaml: |
     nextcloud:
@@ -58,7 +58,7 @@ data:
         tls:
           - hosts:
               - "files.${domain}"
-            secretName: oas-nextcloud-files
+            secretName: stackspin-nextcloud-files
 
       # Use 2 GB of storage for NC storage (maybe make configurable later?)
       persistence:
@@ -142,7 +142,7 @@ data:
         tls:
           - hosts:
               - "office.${domain}"
-            secretName: oas-nextcloud-office
+            secretName: stackspin-nextcloud-office
       jwtSecret: "${onlyoffice_jwt_secret}"
 
       persistence:
@@ -198,7 +198,13 @@ data:
         save ""
 
     sociallogin:
-      server_name: "sso.${domain}"
-      client_id: nextcloud
-      client_secret: "${nextcloud_oauth_client_secret}"
-      wordpressgroups_claim: "openappstack_roles"
+      custom_oidc:
+        name: stackspin
+        title: Stackspin
+        authorizeUrl: "https://sso.${domain}/oauth2/auth"
+        tokenUrl: "https://sso.${domain}/oauth2/token"
+        userInfoUrl: "https://sso.${domain}/userinfo"
+        clientSecret: "${nextcloud_oauth_client_secret}"
+        groupsClaim: "stackspin_roles"
+        clientId: nextcloud
+        scope: "openid profile email stackspin_roles"
diff --git a/flux2/apps/nextcloud/release.yaml b/flux2/apps/nextcloud/release.yaml
index 7a6da8343fa61d1bafd94a8ffb25437aad940f6f..85601730d3066a3a25532dae0fa7acd8d52d05c2 100644
--- a/flux2/apps/nextcloud/release.yaml
+++ b/flux2/apps/nextcloud/release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: nextcloud
-  namespace: oas-apps
+  namespace: stackspin-apps
 spec:
   releaseName: nc
   chart:
@@ -19,12 +19,12 @@ spec:
     timeout: 30m
   valuesFrom:
     - kind: ConfigMap
-      name: oas-nextcloud-values
+      name: stackspin-nextcloud-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-nextcloud-override
+      name: stackspin-nextcloud-override
       optional: true
     - kind: Secret
-      name: oas-nextcloud-override
+      name: stackspin-nextcloud-override
       optional: true
diff --git a/flux2/apps/rocketchat/kustomization.yaml b/flux2/apps/rocketchat/kustomization.yaml
index 835ce5fef882f0aa6d74f2ca52346df2cd028acf..35879d42a58e97cd9024538a8e6582066e9d963f 100644
--- a/flux2/apps/rocketchat/kustomization.yaml
+++ b/flux2/apps/rocketchat/kustomization.yaml
@@ -1,6 +1,6 @@
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas-apps
+namespace: stackspin-apps
 resources:
   - release.yaml
   - rocketchat-values-configmap.yaml
diff --git a/flux2/apps/rocketchat/release.yaml b/flux2/apps/rocketchat/release.yaml
index 864768e3b499729a8e1e466557a5f39ca35ee738..c48f58164547d5e6d9f69d129f82c7eb86e2c929 100644
--- a/flux2/apps/rocketchat/release.yaml
+++ b/flux2/apps/rocketchat/release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: rocketchat
-  namespace: oas-apps
+  namespace: stackspin-apps
 spec:
   releaseName: rocketchat
   chart:
@@ -19,12 +19,12 @@ spec:
     timeout: 15m
   valuesFrom:
     - kind: ConfigMap
-      name: oas-rocketchat-values
+      name: stackspin-rocketchat-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-rocketchat-override
+      name: stackspin-rocketchat-override
       optional: true
     - kind: Secret
-      name: oas-rocketchat-override
+      name: stackspin-rocketchat-override
       optional: true
diff --git a/flux2/apps/rocketchat/rocketchat-values-configmap.yaml b/flux2/apps/rocketchat/rocketchat-values-configmap.yaml
index d5339c0f064a2e298cddc84e0ffd2d058ba1cf02..1d5bb9c3af0c5a05b10bb2139590e28510d41510 100644
--- a/flux2/apps/rocketchat/rocketchat-values-configmap.yaml
+++ b/flux2/apps/rocketchat/rocketchat-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-rocketchat-values
+  name: stackspin-rocketchat-values
 data:
   values.yaml: |
     # Hostname for Rocket.chat
@@ -28,45 +28,45 @@ data:
       - name: Accounts_RegistrationForm_LinkReplacementText
         value: "Create a new account at admin.${domain} to add users"
       # Custom OAuth rules:
-      - name: Accounts_OAuth_Custom_Openappstack
+      - name: Accounts_OAuth_Custom_Stackspin
         value: "true"
-      - name: Accounts_OAuth_Custom_Openappstack_url
+      - name: Accounts_OAuth_Custom_Stackspin_url
         value: https://sso.${domain}
-      - name: Accounts_OAuth_Custom_Openappstack_token_path
+      - name: Accounts_OAuth_Custom_Stackspin_token_path
         value: /oauth2/token
-      - name: Accounts_OAuth_Custom_Openappstack_token_sent_via
+      - name: Accounts_OAuth_Custom_Stackspin_token_sent_via
         value: payload
-      - name: Accounts_OAuth_Custom_Openappstack_identity_token_sent_via
+      - name: Accounts_OAuth_Custom_Stackspin_identity_token_sent_via
         value: payload
-      - name: Accounts_OAuth_Custom_Openappstack_identity_path
+      - name: Accounts_OAuth_Custom_Stackspin_identity_path
         value: /userinfo
-      - name: Accounts_OAuth_Custom_Openappstack_authorize_path
+      - name: Accounts_OAuth_Custom_Stackspin_authorize_path
         value: /oauth2/auth
-      - name: Accounts_OAuth_Custom_Openappstack_scope
-        value: openid profile openappstack_roles email
-      - name: Accounts_OAuth_Custom_Openappstack_id
+      - name: Accounts_OAuth_Custom_Stackspin_scope
+        value: openid profile stackspin_roles email
+      - name: Accounts_OAuth_Custom_Stackspin_id
         value: rocketchat
-      - name: Accounts_OAuth_Custom_Openappstack_secret
+      - name: Accounts_OAuth_Custom_Stackspin_secret
         value: ${rocketchat_oauth_client_secret}
-      - name: Accounts_OAuth_Custom_Openappstack_login_style
+      - name: Accounts_OAuth_Custom_Stackspin_login_style
         value: redirect
-      - name: Accounts_OAuth_Custom_Openappstack_button_label_text
-        value: Login via OpenAppStack
-      - name: Accounts_OAuth_Custom_Openappstack_button_label_color
+      - name: Accounts_OAuth_Custom_Stackspin_button_label_text
+        value: Login via Stackspin
+      - name: Accounts_OAuth_Custom_Stackspin_button_label_color
         value: "#FFFFFF"
-      - name: Accounts_OAuth_Custom_Openappstack_button_color
+      - name: Accounts_OAuth_Custom_Stackspin_button_color
         value: "#1d74f5"
-      - name: Accounts_OAuth_Custom_Openappstack_username_field
+      - name: Accounts_OAuth_Custom_Stackspin_username_field
         value: preferred_username
-      - name: Accounts_OAuth_Custom_Openappstack_name_field
+      - name: Accounts_OAuth_Custom_Stackspin_name_field
         value: preferred_username
-      - name: Accounts_OAuth_Custom_Openappstack_roles_claim
-        value: openappstack_roles
-      - name: Accounts_OAuth_Custom_Openappstack_merge_roles
+      - name: Accounts_OAuth_Custom_Stackspin_roles_claim
+        value: stackspin_roles
+      - name: Accounts_OAuth_Custom_Stackspin_merge_roles
         value: "true"
-      - name: Accounts_OAuth_Custom_Openappstack_merge_users
+      - name: Accounts_OAuth_Custom_Stackspin_merge_users
         value: "true"
-      - name: Accounts_OAuth_Custom_Openappstack_show_button
+      - name: Accounts_OAuth_Custom_Stackspin_show_button
         value: "true"
       # Prevent problems with 2FA in combination with OIDC
       # (https://github.com/RocketChat/Rocket.Chat/issues/21533)
@@ -105,7 +105,7 @@ data:
       tls:
         - hosts:
             - "chat.${domain}"
-          secretName: oas-rocketchat
+          secretName: stackspin-rocketchat
 
     persistence:
       enabled: true
diff --git a/flux2/apps/velero/release.yaml b/flux2/apps/velero/release.yaml
index 32a2a6c42ea016b659386beaa9be9bc6fdd9bd87..ad88fd550104960367617a799d900f904251b68e 100644
--- a/flux2/apps/velero/release.yaml
+++ b/flux2/apps/velero/release.yaml
@@ -10,7 +10,7 @@ spec:
     spec:
       # renovate: registryUrl=https://vmware-tanzu.github.io/helm-charts
       chart: velero
-      version: 2.26.2
+      version: 2.26.3
       sourceRef:
         kind: HelmRepository
         name: vmware-tanzu
@@ -18,12 +18,12 @@ spec:
   interval: 1h
   valuesFrom:
     - kind: ConfigMap
-      name: oas-velero-values
+      name: stackspin-velero-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-velero-override
+      name: stackspin-velero-override
       optional: true
     - kind: Secret
-      name: oas-velero-override
+      name: stackspin-velero-override
       optional: true
diff --git a/flux2/apps/velero/velero-values-configmap.yaml b/flux2/apps/velero/velero-values-configmap.yaml
index a7b4637a25592c5bc5a7a0d7c6e2a045bb69f199..4b459e318e668d01793e172a1c8a57a2470a57b8 100644
--- a/flux2/apps/velero/velero-values-configmap.yaml
+++ b/flux2/apps/velero/velero-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-velero-values
+  name: stackspin-velero-values
 data:
   values.yaml: |
     # Init containers to add to the Velero deployment's pod spec. At least one
@@ -113,4 +113,3 @@ data:
             # We include all namespaces.
             - '*'
     configMaps: {}
-
diff --git a/flux2/apps/wekan/kustomization.yaml b/flux2/apps/wekan/kustomization.yaml
index 157fa6a24d7d9c4730b33813d5abb979140718b8..0cebe4f023593cb83caf64c2b15048684ae2f0f7 100644
--- a/flux2/apps/wekan/kustomization.yaml
+++ b/flux2/apps/wekan/kustomization.yaml
@@ -1,7 +1,7 @@
 ---
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas-apps
+namespace: stackspin-apps
 resources:
   - pvc.yaml
   - release.yaml
diff --git a/flux2/apps/wekan/release.yaml b/flux2/apps/wekan/release.yaml
index 89d9b32d403b5cbc203fb8fd14771aa77dd61e19..a79a1cc2199eef2c24bc25d2c91a21dbb8be2a2a 100644
--- a/flux2/apps/wekan/release.yaml
+++ b/flux2/apps/wekan/release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: wekan
-  namespace: oas-apps
+  namespace: stackspin-apps
 spec:
   releaseName: wekan
   chart:
@@ -19,12 +19,12 @@ spec:
     timeout: 30m
   valuesFrom:
     - kind: ConfigMap
-      name: oas-wekan-values
+      name: stackspin-wekan-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-wekan-override
+      name: stackspin-wekan-override
       optional: true
     - kind: Secret
-      name: oas-wekan-override
+      name: stackspin-wekan-override
       optional: true
diff --git a/flux2/apps/wekan/wekan-values-configmap.yaml b/flux2/apps/wekan/wekan-values-configmap.yaml
index ee8630ad724203e82dfc700f3765ad0dcedbf922..8a62a50bd188c313d50abc89bf2b9334f645eecc 100644
--- a/flux2/apps/wekan/wekan-values-configmap.yaml
+++ b/flux2/apps/wekan/wekan-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-wekan-values
+  name: stackspin-wekan-values
 data:
   values.yaml: |
     # https://github.com/wekan/wekan/blob/master/helm/wekan/values.yaml
@@ -91,7 +91,7 @@ data:
         # substitution names, while mongodb requires hyphens/dashes in the
         # var names. See https://github.com/fluxcd/kustomize-controller/issues/395
         # for more details.
-        # existingSecret: oas-wekan-variables
+        # existingSecret: stackspin-wekan-variables
         rootPassword: ${mongodb_root_password}
         password: ${mongodb_password}
       podAnnotations:
diff --git a/flux2/apps/wordpress/kustomization.yaml b/flux2/apps/wordpress/kustomization.yaml
index ff8190bffd2a34f7b68c0739447c44225e9ff0aa..5080ac0cd282652c3ce7b056cfba0fc199ca29d8 100644
--- a/flux2/apps/wordpress/kustomization.yaml
+++ b/flux2/apps/wordpress/kustomization.yaml
@@ -1,7 +1,7 @@
 ---
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas-apps
+namespace: stackspin-apps
 resources:
   - pvc.yaml
   - release.yaml
diff --git a/flux2/apps/wordpress/release.yaml b/flux2/apps/wordpress/release.yaml
index cc45d5713f5048dc167b3f750a1c18d01de209bf..0d2651e119104a03d4ffd12f62af0a876e36b311 100644
--- a/flux2/apps/wordpress/release.yaml
+++ b/flux2/apps/wordpress/release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: wordpress
-  namespace: oas-apps
+  namespace: stackspin-apps
 spec:
   releaseName: wordpress
   chart:
@@ -19,12 +19,12 @@ spec:
     timeout: 30m
   valuesFrom:
     - kind: ConfigMap
-      name: oas-wordpress-values
+      name: stackspin-wordpress-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-wordpress-override
+      name: stackspin-wordpress-override
       optional: true
     - kind: Secret
-      name: oas-wordpress-override
+      name: stackspin-wordpress-override
       optional: true
diff --git a/flux2/apps/wordpress/wordpress-values-configmap.yaml b/flux2/apps/wordpress/wordpress-values-configmap.yaml
index 0e13fbaef467fc6a01ed8429af3c9cd6afd31656..a8f426cab71a5196002fbc53410d56ef8dec4a26 100644
--- a/flux2/apps/wordpress/wordpress-values-configmap.yaml
+++ b/flux2/apps/wordpress/wordpress-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-wordpress-values
+  name: stackspin-wordpress-values
 data:
   values.yaml: |
     wordpress:
@@ -16,7 +16,7 @@ data:
         # NOTE: Make sure you use underscore and that the localisation is in full caps
         locale: en_US
         url: "https://www.${domain}"
-        title: "OpenAppStack website"
+        title: "Stackspin website"
 
     persistence:
       existingClaim: wordpress-files
@@ -31,14 +31,14 @@ data:
       endpoint_token: https://sso.${domain}/oauth2/token
       endpoint_end_session: ""
       # After our SSO supports it, we should set this as the logout URL
-      # https://open.greenhost.net/openappstack/single-sign-on/issues/28
+      # https://open.greenhost.net/stackspin/single-sign-on/issues/28
       # endpoint_end_session: https://sso.${domain}/oauth2/sessions/logout
       no_sslverify: "0"
       http_request_timeout: "15"
       enable_logging: "1"
-      scope: email profile openid openappstack_roles offline_access
+      scope: email profile openid stackspin_roles offline_access
       role_mapping_enabled: true
-      role_key: openappstack_roles
+      role_key: stackspin_roles
 
     smtp_settings:
       enabled: ${outgoing_mail_enabled}
@@ -92,4 +92,4 @@ data:
         - hosts:
             - "www.${domain}"
             - "${domain}"
-          secretName: oas-wordpress
+          secretName: stackspin-wordpress
diff --git a/flux2/cluster/base/core.yaml b/flux2/cluster/base/core.yaml
index 7a12c2e19de36da067b958951bcab14a9f7ee9a9..c52b22b433d06d5d06d12cb9391e7e065c62cc92 100644
--- a/flux2/cluster/base/core.yaml
+++ b/flux2/cluster/base/core.yaml
@@ -10,18 +10,18 @@ spec:
   interval: 1h
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/core
   prune: true
   validation: client
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-single-sign-on-variables
+        name: stackspin-single-sign-on-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
   healthChecks:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
@@ -30,20 +30,20 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: nginx
-      namespace: oas
+      namespace: stackspin
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: single-sign-on
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: single-sign-on-userbackend
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: single-sign-on-hydra
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: single-sign-on-login
-      namespace: oas
+      namespace: stackspin
diff --git a/flux2/cluster/base/infrastructure.yaml b/flux2/cluster/base/infrastructure.yaml
index 51ba9edbe2a45c51ba8c8f4ead5d9b10615200b7..bcd11891ab4a5429d88ed2a55be40292665cdb95 100644
--- a/flux2/cluster/base/infrastructure.yaml
+++ b/flux2/cluster/base/infrastructure.yaml
@@ -8,7 +8,7 @@ spec:
   interval: 1h
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/infrastructure
   prune: true
   validation: client
diff --git a/flux2/cluster/optional/monitoring/monitoring-config.yaml b/flux2/cluster/optional/monitoring/monitoring-config.yaml
index 483b7a2975e9577218f8cf9d973a4ed6da6d1d6f..9952710d37e5cd607262f12bb9cdecaea0fe3514 100644
--- a/flux2/cluster/optional/monitoring/monitoring-config.yaml
+++ b/flux2/cluster/optional/monitoring/monitoring-config.yaml
@@ -10,7 +10,7 @@ spec:
     - name: monitoring
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/config/monitoring
   prune: true
   validation: client
diff --git a/flux2/cluster/optional/monitoring/monitoring.yaml b/flux2/cluster/optional/monitoring/monitoring.yaml
index 91a33049b03ca5ef1beeed9cb9310bb92dba0bc3..90e5f5b1e5724bbf6db5d694fe1a13492d326619 100644
--- a/flux2/cluster/optional/monitoring/monitoring.yaml
+++ b/flux2/cluster/optional/monitoring/monitoring.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/monitoring
   prune: true
   validation: client
@@ -19,48 +19,48 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: eventrouter
-      namespace: oas
+      namespace: stackspin
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: kube-prometheus-stack
-      namespace: oas
+      namespace: stackspin
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: loki
-      namespace: oas
+      namespace: stackspin
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: promtail
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: eventrouter
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: StatefulSet
       name: loki
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: DaemonSet
       name: promtail
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: StatefulSet
       name: prometheus-kube-prometheus-stack-prometheus
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: kube-prometheus-stack-kube-state-metrics
-      namespace: oas
+      namespace: stackspin
     - apiVersion: apps/v1
       kind: Deployment
       name: kube-prometheus-stack-grafana
-      namespace: oas
+      namespace: stackspin
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-kube-prometheus-stack-variables
+        name: stackspin-kube-prometheus-stack-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/cluster/optional/nextcloud/nextcloud.yaml b/flux2/cluster/optional/nextcloud/nextcloud.yaml
index 07fac76dd9473a0ce3c622cf6fb870c898422a01..a8dc35479dc16bcfd1a3e15814c8fe19ab084fd4 100644
--- a/flux2/cluster/optional/nextcloud/nextcloud.yaml
+++ b/flux2/cluster/optional/nextcloud/nextcloud.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/nextcloud
   prune: true
   validation: client
@@ -19,20 +19,20 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: nextcloud
-      namespace: oas-apps
+      namespace: stackspin-apps
     - apiVersion: apps/v1
       kind: Deployment
       name: nc-nextcloud
-      namespace: oas-apps
+      namespace: stackspin-apps
     - apiVersion: apps/v1
       kind: Deployment
       name: nc-onlyoffice-documentserver
-      namespace: oas-apps
+      namespace: stackspin-apps
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-nextcloud-variables
+        name: stackspin-nextcloud-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/cluster/optional/rocketchat/rocketchat.yaml b/flux2/cluster/optional/rocketchat/rocketchat.yaml
index 5b597db0af1bfa779e8c4d5a02dfac27ea39f4c5..8e2924f24acdcee9acdfd7c414ba384bb376d33a 100644
--- a/flux2/cluster/optional/rocketchat/rocketchat.yaml
+++ b/flux2/cluster/optional/rocketchat/rocketchat.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/rocketchat
   prune: true
   validation: client
@@ -19,16 +19,16 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: rocketchat
-      namespace: oas-apps
+      namespace: stackspin-apps
     - apiVersion: apps/v1
       kind: Deployment
       name: rocketchat-rocketchat
-      namespace: oas-apps
+      namespace: stackspin-apps
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-rocketchat-variables
+        name: stackspin-rocketchat-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/cluster/optional/velero/velero.yaml b/flux2/cluster/optional/velero/velero.yaml
index 2f6364db874369d316fdb29e4387b3db6e2903be..1893f524e7268f1edafbec6625ecccece721ca5a 100644
--- a/flux2/cluster/optional/velero/velero.yaml
+++ b/flux2/cluster/optional/velero/velero.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/velero
   prune: true
   validation: client
@@ -23,4 +23,4 @@ spec:
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/cluster/optional/wekan/wekan.yaml b/flux2/cluster/optional/wekan/wekan.yaml
index 92cdf331d8c7284139da05635c7226e500a3947a..c231ba7f3ed79763ef0349667f66ac96c0e5558c 100644
--- a/flux2/cluster/optional/wekan/wekan.yaml
+++ b/flux2/cluster/optional/wekan/wekan.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/wekan
   prune: true
   validation: client
@@ -19,16 +19,16 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: wekan
-      namespace: oas-apps
+      namespace: stackspin-apps
     - apiVersion: apps/v1
       kind: Deployment
       name: wekan
-      namespace: oas-apps
+      namespace: stackspin-apps
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-wekan-variables
+        name: stackspin-wekan-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/cluster/optional/wordpress/wordpress.yaml b/flux2/cluster/optional/wordpress/wordpress.yaml
index 9bb1cff0b31a25e59dfc69d7f61a3e3b10c19e12..54510a83cac42a7f9aa3698eb6c8b93a2158834e 100644
--- a/flux2/cluster/optional/wordpress/wordpress.yaml
+++ b/flux2/cluster/optional/wordpress/wordpress.yaml
@@ -11,7 +11,7 @@ spec:
     - name: infrastructure
   sourceRef:
     kind: GitRepository
-    name: openappstack
+    name: stackspin
   path: ./flux2/apps/wordpress
   prune: true
   validation: client
@@ -19,16 +19,16 @@ spec:
     - apiVersion: helm.toolkit.fluxcd.io/v1beta1
       kind: HelmRelease
       name: wordpress
-      namespace: oas-apps
+      namespace: stackspin-apps
     - apiVersion: apps/v1
       kind: StatefulSet
       name: wordpress
-      namespace: oas-apps
+      namespace: stackspin-apps
   postBuild:
     substituteFrom:
       - kind: Secret
-        name: oas-wordpress-variables
+        name: stackspin-wordpress-variables
       - kind: Secret
-        name: oas-oauth-variables
+        name: stackspin-oauth-variables
       - kind: Secret
-        name: oas-cluster-variables
+        name: stackspin-cluster-variables
diff --git a/flux2/config/monitoring/flux-alerts-prometheusrule.yaml b/flux2/config/monitoring/flux-alerts-prometheusrule.yaml
index fb16df35f72f4cdb5cf9faf00bb25fdd46dd7893..16d4b0d83c43d22ca897782eba907d326f4bcbd0 100644
--- a/flux2/config/monitoring/flux-alerts-prometheusrule.yaml
+++ b/flux2/config/monitoring/flux-alerts-prometheusrule.yaml
@@ -2,7 +2,7 @@ apiVersion: monitoring.coreos.com/v1
 kind: PrometheusRule
 metadata:
   name: flux-prometheus.rules
-  namespace: oas
+  namespace: stackspin
   labels:
     app.kubernetes.io/managed-by: flux
     app.kubernetes.io/part-of: custom-flux-config
diff --git a/flux2/config/monitoring/stackspin-alerts-prometheusrule.yaml b/flux2/config/monitoring/stackspin-alerts-prometheusrule.yaml
index 5e476ff60ad2b2084e360c5e37cd2df31b1f0411..9a2f8d4cfdb5743b0566aac82dd10db7f977ae2d 100644
--- a/flux2/config/monitoring/stackspin-alerts-prometheusrule.yaml
+++ b/flux2/config/monitoring/stackspin-alerts-prometheusrule.yaml
@@ -1,14 +1,14 @@
 apiVersion: monitoring.coreos.com/v1
 kind: PrometheusRule
 metadata:
-  name: prometheus-custom-alerts-openappstack.rules
-  namespace: oas
+  name: prometheus-custom-alerts-stackspin.rules
+  namespace: stackspin
   labels:
     app.kubernetes.io/managed-by: flux
     app.kubernetes.io/part-of: custom-flux-config
 spec:
   groups:
-  - name: oas-general
+  - name: stackspin-general
     rules:
     - alert: service_down
       expr: up == 0 or probe_success == 0
@@ -20,7 +20,7 @@ spec:
         description: "{{ $labels.instance }} of job {{ $labels.job }} has been down\
           \ for more than 5 minutes."
 
-  - name: oas-systemd
+  - name: stackspin-systemd
     rules:
     - alert: failed_systemd_units
       expr: node_systemd_unit_state{state="failed"} !=0
@@ -32,7 +32,7 @@ spec:
         description: "Warning: Systemd unit failed on {{ $labels.instance }} (job {{\
           \ $labels.job }}) for more than 5 min."
 
-  - name: oas-maintenance
+  - name: stackspin-maintenance
     rules:
     - alert: apt_upgrades_pending
       expr: apt_upgrades_pending !=0
@@ -53,3 +53,25 @@ spec:
         summary: "Reboot required on {{ $labels.instance }}"
         description: "Warning: Reboot required on {{ $labels.instance }} (job {{ $labels.job\
           \ }}) for more then 2 days."
+
+  - name: stackspin-resources
+    rules:
+      # https://awesome-prometheus-alerts.grep.to/rules#rule-host-and-hardware-1-23
+      - alert: HostOomKillDetected
+        expr: increase(node_vmstat_oom_kill[20m]) > 0
+        for: 0m
+        labels:
+          severity: warning
+        annotations:
+          summary: Host OOM kill detected (instance {{ $labels.instance }})
+          description: "OOM kill detected\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
+
+      # https://awesome-prometheus-alerts.grep.to/rules#rule-docker-containers-1-4
+      - alert: ContainerMemoryUsage
+        expr: (sum(container_memory_working_set_bytes) BY (instance, name) / sum(container_spec_memory_limit_bytes > 0) BY (instance, name) * 100) > 80
+        for: 2m
+        labels:
+          severity: warning
+        annotations:
+          summary: Container Memory usage (instance {{ $labels.instance }})
+          description: "Container Memory usage is above 80%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
diff --git a/flux2/core/base/metallb/metallb-values-configmap.yaml b/flux2/core/base/metallb/metallb-values-configmap.yaml
index 22db3b569100952fad120063c0c997aca470a298..fca77e3e4a8db955570c0e88cbd4cea242e26b1d 100644
--- a/flux2/core/base/metallb/metallb-values-configmap.yaml
+++ b/flux2/core/base/metallb/metallb-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-metallb-values
+  name: stackspin-metallb-values
 data:
   values.yaml: |
     # https://artifacthub.io/packages/helm/bitnami/metallb#example-layer-2-configuration
@@ -12,4 +12,3 @@ data:
           protocol: layer2
           addresses:
             - "${ip_address}/32"
-
diff --git a/flux2/core/base/metallb/release.yaml b/flux2/core/base/metallb/release.yaml
index 37f8dadc8518e84e65272926292af62fdde0d225..dd5827ae77c7e347478b8773b71c5e98df8ddeef 100644
--- a/flux2/core/base/metallb/release.yaml
+++ b/flux2/core/base/metallb/release.yaml
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
   name: metallb
-  namespace: oas
+  namespace: stackspin
 spec:
   releaseName: metallb
   chart:
@@ -21,12 +21,12 @@ spec:
     timeout: 2m
   valuesFrom:
     - kind: ConfigMap
-      name: oas-metallb-values
+      name: stackspin-metallb-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-metallb-override
+      name: stackspin-metallb-override
       optional: true
     - kind: Secret
-      name: oas-metallb-override
+      name: stackspin-metallb-override
       optional: true
diff --git a/flux2/core/base/nginx/kustomization.yaml b/flux2/core/base/nginx/kustomization.yaml
index 5624efc1cc23587798ec3f79c24072c1eab86f3e..a9c9978bc7e1570803181d5af04c58caff71e1c2 100644
--- a/flux2/core/base/nginx/kustomization.yaml
+++ b/flux2/core/base/nginx/kustomization.yaml
@@ -1,7 +1,7 @@
 ---
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas
+namespace: stackspin
 resources:
   - release.yaml
   - nginx-values-configmap.yaml
diff --git a/flux2/core/base/nginx/nginx-values-configmap.yaml b/flux2/core/base/nginx/nginx-values-configmap.yaml
index 8aa377fefb1024cc613ed329aa4c4729dfd0f300..aa6b99b726f574933827a1064e79fba7a2e86e5f 100644
--- a/flux2/core/base/nginx/nginx-values-configmap.yaml
+++ b/flux2/core/base/nginx/nginx-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-nginx-values
+  name: stackspin-nginx-values
 data:
   values.yaml: |
     # https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml
diff --git a/flux2/core/base/nginx/release.yaml b/flux2/core/base/nginx/release.yaml
index 40c851c00f2ffb4813b8d936a142c9f0d9f37d05..466c13cf603cc405b83321ba468eba64f9b4a4e7 100644
--- a/flux2/core/base/nginx/release.yaml
+++ b/flux2/core/base/nginx/release.yaml
@@ -25,12 +25,12 @@ spec:
       namespace: kube-system
   valuesFrom:
     - kind: ConfigMap
-      name: oas-nginx-values
+      name: stackspin-nginx-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-nginx-override
+      name: stackspin-nginx-override
       optional: true
     - kind: Secret
-      name: oas-nginx-override
+      name: stackspin-nginx-override
       optional: true
diff --git a/flux2/core/base/single-sign-on/kustomization.yaml b/flux2/core/base/single-sign-on/kustomization.yaml
index fc3b4afe5a00adc3e0ef7d989fe019cd1f06078d..e659f8e9f752293cac7c8b204b4bafb4ab1b0617 100644
--- a/flux2/core/base/single-sign-on/kustomization.yaml
+++ b/flux2/core/base/single-sign-on/kustomization.yaml
@@ -1,7 +1,7 @@
 ---
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
-namespace: oas
+namespace: stackspin
 resources:
   - pvc.yaml
   - release.yaml
diff --git a/flux2/core/base/single-sign-on/release.yaml b/flux2/core/base/single-sign-on/release.yaml
index 364ee3b1e6036b66052931aa1bb26109ff39e3f9..110530a048758ecbd0de55cc91de808e4d5f6ce6 100644
--- a/flux2/core/base/single-sign-on/release.yaml
+++ b/flux2/core/base/single-sign-on/release.yaml
@@ -21,11 +21,11 @@ spec:
       retries: 3
   valuesFrom:
     - kind: ConfigMap
-      name: oas-single-sign-on-values
+      name: stackspin-single-sign-on-values
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-single-sign-on-override
+      name: stackspin-single-sign-on-override
       optional: true
     - kind: Secret
-      name: oas-single-sign-on-override
+      name: stackspin-single-sign-on-override
       optional: true
diff --git a/flux2/core/base/single-sign-on/single-sign-on-values-configmap.yaml b/flux2/core/base/single-sign-on/single-sign-on-values-configmap.yaml
index 1c72c28ac9f8ead05b3f2f364fb75b0366d2164f..3238f62f623c02660a006eeaf812a6bf1563d41a 100644
--- a/flux2/core/base/single-sign-on/single-sign-on-values-configmap.yaml
+++ b/flux2/core/base/single-sign-on/single-sign-on-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-single-sign-on-values
+  name: stackspin-single-sign-on-values
 data:
   values.yaml: |
     singleSignOnHost: &SSO_HOST "sso.${domain}"
@@ -23,7 +23,7 @@ data:
         - name: &ROCKETCHAT rocketchat
           description: "Communicate and collaborate using team chat and switch to video or audio calls with screen sharing for more efficient teamwork."
         - name: &GRAFANA grafana
-          description: "Grafana allows you to query, visualize, alert on and understand metrics generated by OpenAppStack. It can be used to create explore and share dashboards."
+          description: "Grafana allows you to query, visualize, alert on and understand metrics generated by Stackspin. It can be used to create explore and share dashboards."
         - name: &WEKAN wekan
           description: "Wekan Kanban board."
       username: "${userbackend_admin_username}"
@@ -73,7 +73,7 @@ data:
     - clientName: *USER_PANEL
       clientSecret: "${userpanel_oauth_client_secret}"
       redirectUri: "https://admin.${domain}/callback"
-      scopes: "openid profile email openappstack_roles"
+      scopes: "openid profile email stackspin_roles"
       clientUri: "https://admin.${domain}"
       clientLogoUri: "https://admin.${domain}/favicon.ico"
       tokenEndpointAuthMethod: "client_secret_basic"
@@ -83,8 +83,8 @@ data:
         - "implicit"
     - clientName: *NEXTCLOUD
       clientSecret: "${nextcloud_oauth_client_secret}"
-      redirectUri: "https://files.${domain}/apps/sociallogin/custom_oidc/oas"
-      scopes: "openid profile email openappstack_roles"
+      redirectUri: "https://files.${domain}/apps/sociallogin/custom_oidc/stackspin"
+      scopes: "openid profile email stackspin_roles"
       clientUri: "https://files.${domain}"
       clientLogoUri: "https://files.${domain}/core/img/favicon-touch.png"
       tokenEndpointAuthMethod: "client_secret_post"
@@ -98,7 +98,7 @@ data:
     - clientName: *WORDPRESS
       clientSecret: "${wordpress_oauth_client_secret}"
       redirectUri: "https://www.${domain}/wp-admin/admin-ajax.php?action=openid-connect-authorize"
-      scopes: "openid profile email openappstack_roles offline_access"
+      scopes: "openid profile email stackspin_roles offline_access"
       clientUri: "https://www.${domain}"
       clientLogoUri: "https://www.${domain}/wp-admin/images/wordpress-logo.svg"
       tokenEndpointAuthMethod: "client_secret_post"
@@ -112,8 +112,8 @@ data:
         - "implicit"
     - clientName: *ROCKETCHAT
       clientSecret: "${rocketchat_oauth_client_secret}"
-      redirectUri: "https://chat.${domain}/_oauth/openappstack"
-      scopes: "openid profile email openappstack_roles"
+      redirectUri: "https://chat.${domain}/_oauth/stackspin"
+      scopes: "openid profile email stackspin_roles"
       clientUri: "https://chat.${domain}"
       clientLogoUri: "https://chat.${domain}/images/logo/logo.svg"
       tokenEndpointAuthMethod: "client_secret_post"
@@ -127,7 +127,7 @@ data:
     - clientName: *GRAFANA
       clientSecret: "${grafana_oauth_client_secret}"
       redirectUri: "https://grafana.${domain}/login/generic_oauth"
-      scopes: "openid profile email openappstack_roles"
+      scopes: "openid profile email stackspin_roles"
       clientUri: "https://grafana.${domain}"
       clientLogoUri: "https://grafana.${domain}/public/img/grafana_icon.svg"
       tokenEndpointAuthMethod: "client_secret_post"
diff --git a/flux2/infrastructure/cert-manager/cert-manager-values-configmap.yaml b/flux2/infrastructure/cert-manager/cert-manager-values-configmap.yaml
index 59a26bcc886d944d5e2b6c34b1cc54ae437e96e2..d825673bbb8df59f586c2ea409f272c6bfe7a9b1 100644
--- a/flux2/infrastructure/cert-manager/cert-manager-values-configmap.yaml
+++ b/flux2/infrastructure/cert-manager/cert-manager-values-configmap.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-cert-manager-values
+  name: stackspin-cert-manager-values
 data:
   values.yaml: |
     ingressShim:
@@ -32,4 +32,3 @@ data:
           cpu: 200m
           memory: 80Mi
     installCRDs: true
-
diff --git a/flux2/infrastructure/cert-manager/release.yaml b/flux2/infrastructure/cert-manager/release.yaml
index d8b014e6022eaf4c5b608a8c47b950e52e2f1802..5ec6c473432a4e342a691a14bed8f5976ced5c6d 100644
--- a/flux2/infrastructure/cert-manager/release.yaml
+++ b/flux2/infrastructure/cert-manager/release.yaml
@@ -21,12 +21,12 @@ spec:
       retries: 3
   valuesFrom:
     - kind: ConfigMap
-      name: oas-cert-manager-values
+      name: stackspin-cert-manager-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-cert-manager-override
+      name: stackspin-cert-manager-override
       optional: true
     - kind: Secret
-      name: oas-cert-manager-override
+      name: stackspin-cert-manager-override
       optional: true
diff --git a/flux2/infrastructure/local-path-provisioner/local-path-provisioner-values-configmap.yaml b/flux2/infrastructure/local-path-provisioner/local-path-provisioner-values-configmap.yaml
index b80032123979a25e9ddc9824ba5f28dce76a204f..eba40259498c35a0a972f4863dcbd7ff5d1c6ea1 100644
--- a/flux2/infrastructure/local-path-provisioner/local-path-provisioner-values-configmap.yaml
+++ b/flux2/infrastructure/local-path-provisioner/local-path-provisioner-values-configmap.yaml
@@ -2,20 +2,20 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-local-path-provisioner-values
+  name: stackspin-local-path-provisioner-values
 data:
   values.yaml: |
     nodePathMap:
       - node: DEFAULT_PATH_FOR_NON_LISTED_NODES
         paths:
-          - "/var/lib/OpenAppStack/local-storage"
+          - "/var/lib/Stackspin/local-storage"
     storageClass:
       defaultClass: true
     # We temporarily use our own build in order to use local volumes instead of
     # hostPath, see https://github.com/rancher/local-path-provisioner/issues/85
-    # and https://open.greenhost.net/openappstack/openappstack/-/issues/773
+    # and https://open.greenhost.net/stackspin/stackspin/-/issues/773
     image:
-      repository: "open.greenhost.net:4567/openappstack/local-path-provisioner/local-path-provisioner"
+      repository: "open.greenhost.net:4567/stackspin/local-path-provisioner/local-path-provisioner"
       # Make sure this tag is the same as the tag for the chart in the
       # local-path-provisioner GitRepository
       tag: "v0.0.20-gh1"
diff --git a/flux2/infrastructure/local-path-provisioner/release.yaml b/flux2/infrastructure/local-path-provisioner/release.yaml
index f25f1a7231351517d9b3980bd5b6ea3392402b28..cd3d2a7fea591cf29e1479fe4af06f112f64f65b 100644
--- a/flux2/infrastructure/local-path-provisioner/release.yaml
+++ b/flux2/infrastructure/local-path-provisioner/release.yaml
@@ -18,12 +18,12 @@ spec:
       retries: 3
   valuesFrom:
     - kind: ConfigMap
-      name: oas-local-path-provisioner-values
+      name: stackspin-local-path-provisioner-values
       optional: false
     # Allow overriding values by ConfigMap or Secret
     - kind: ConfigMap
-      name: oas-local-path-provisioner-override
+      name: stackspin-local-path-provisioner-override
       optional: true
     - kind: Secret
-      name: oas-local-path-provisioner-override
+      name: stackspin-local-path-provisioner-override
       optional: true
diff --git a/flux2/infrastructure/namespaces/kustomization.yaml b/flux2/infrastructure/namespaces/kustomization.yaml
index 1d9d771f62f28fbc8171153c3a1ba0ef805fe700..b8a80d8bca3137b4eac12119a90daf67fd71b5a8 100644
--- a/flux2/infrastructure/namespaces/kustomization.yaml
+++ b/flux2/infrastructure/namespaces/kustomization.yaml
@@ -3,6 +3,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
 resources:
   - cert-manager.yaml
-  - oas.yaml
-  - oas-apps.yaml
+  - stackspin.yaml
+  - stackspin-apps.yaml
   - velero.yaml
diff --git a/flux2/infrastructure/namespaces/oas.yaml b/flux2/infrastructure/namespaces/stackspin-apps.yaml
similarity index 64%
rename from flux2/infrastructure/namespaces/oas.yaml
rename to flux2/infrastructure/namespaces/stackspin-apps.yaml
index a960e21ab6dd0fef2fbfbd100e76206b342da128..8159073174a2a8aba2cc7144f61607a34565fea7 100644
--- a/flux2/infrastructure/namespaces/oas.yaml
+++ b/flux2/infrastructure/namespaces/stackspin-apps.yaml
@@ -1,4 +1,4 @@
 apiVersion: v1
 kind: Namespace
 metadata:
-  name: oas
+  name: stackspin-apps
diff --git a/flux2/infrastructure/namespaces/oas-apps.yaml b/flux2/infrastructure/namespaces/stackspin.yaml
similarity index 69%
rename from flux2/infrastructure/namespaces/oas-apps.yaml
rename to flux2/infrastructure/namespaces/stackspin.yaml
index 0ae83a7ac35c8a5358888eada14ea201cb95ee3f..25ae8c579deb2a91cc9758b25d8db1f2b6ddeaf9 100644
--- a/flux2/infrastructure/namespaces/oas-apps.yaml
+++ b/flux2/infrastructure/namespaces/stackspin.yaml
@@ -1,4 +1,4 @@
 apiVersion: v1
 kind: Namespace
 metadata:
-  name: oas-apps
\ No newline at end of file
+  name: stackspin
diff --git a/flux2/infrastructure/sources/local-path-provisioner.yaml b/flux2/infrastructure/sources/local-path-provisioner.yaml
index 13019447341825edbb66b1da803f503b2fe3f456..2082907ba8a4fc773f379edbac036f5e0b55a972 100644
--- a/flux2/infrastructure/sources/local-path-provisioner.yaml
+++ b/flux2/infrastructure/sources/local-path-provisioner.yaml
@@ -11,7 +11,7 @@ spec:
   #
   # We need to use our own fork of the local-path-provisioner until
   # https://github.com/rancher/local-path-provisioner/issues/85 is resolved
-  url: https://open.greenhost.net/openappstack/local-path-provisioner
+  url: https://open.greenhost.net/stackspin/local-path-provisioner
   # The Git reference to checkout and monitor for changes
   # (defaults to master)
   # For all available options, see:
diff --git a/flux2/infrastructure/sources/nextcloud.yaml b/flux2/infrastructure/sources/nextcloud.yaml
index 181face9e579786db4a19b9454f336b48664ae05..95c54e09f79c3e6b458aec6b1b4721024377a5e3 100644
--- a/flux2/infrastructure/sources/nextcloud.yaml
+++ b/flux2/infrastructure/sources/nextcloud.yaml
@@ -8,10 +8,10 @@ spec:
   # The interval at which to check the upstream for updates
   interval: 1h
   # The repository URL, can be a HTTP/S or SSH address
-  url: https://open.greenhost.net/openappstack/nextcloud
+  url: https://open.greenhost.net/stackspin/nextcloud
   # The Git reference to checkout and monitor for changes
   # (defaults to master)
   # For all available options, see:
   # https://toolkit.fluxcd.io/components/source/api/#source.toolkit.fluxcd.io/v1beta1.GitRepositoryRef
   ref:
-    tag: 0.4.0
+    tag: 0.5.1
diff --git a/flux2/infrastructure/sources/rocketchat-helm-chart.yaml b/flux2/infrastructure/sources/rocketchat-helm-chart.yaml
index a4e0ea3134e8f71d94c26ad246380e4890ee4e77..f717787f1372387cf55d0e5802aa66346099b632 100644
--- a/flux2/infrastructure/sources/rocketchat-helm-chart.yaml
+++ b/flux2/infrastructure/sources/rocketchat-helm-chart.yaml
@@ -14,5 +14,5 @@ spec:
   # For all available options, see:
   # https://toolkit.fluxcd.io/components/source/api/#source.toolkit.fluxcd.io/v1beta1.GitRepositoryRef
   ref:
-    branch: openappstack
+    branch: stackspin
     tag: 3.1.0-gh2
diff --git a/flux2/infrastructure/sources/single-sign-on.yaml b/flux2/infrastructure/sources/single-sign-on.yaml
index ed825d265c7147c0334843562c2358ede0fe4d79..f66f5090dc4673330f655332dd794eca8352135d 100644
--- a/flux2/infrastructure/sources/single-sign-on.yaml
+++ b/flux2/infrastructure/sources/single-sign-on.yaml
@@ -8,7 +8,7 @@ spec:
   # The interval at which to check the upstream for updates
   interval: 1h
   # The repository URL, can be a HTTP/S or SSH address
-  url: https://open.greenhost.net/openappstack/single-sign-on
+  url: https://open.greenhost.net/stackspin/single-sign-on
   # The Git reference to checkout and monitor for changes
   # (defaults to master)
   # For all available options, see:
diff --git a/flux2/infrastructure/sources/wordpress.yaml b/flux2/infrastructure/sources/wordpress.yaml
index 750d828a326a4f4348318856245c44bf8cc78935..3d4209e9d7c09775ead7e410f1f91ece2a82a76e 100644
--- a/flux2/infrastructure/sources/wordpress.yaml
+++ b/flux2/infrastructure/sources/wordpress.yaml
@@ -8,10 +8,10 @@ spec:
   # The interval at which to check the upstream for updates
   interval: 1h
   # The repository URL, can be a HTTP/S or SSH address
-  url: https://open.greenhost.net/openappstack/wordpress-helm
+  url: https://open.greenhost.net/stackspin/wordpress-helm
   # The Git reference to checkout and monitor for changes
   # (defaults to master)
   # For all available options, see:
   # https://toolkit.fluxcd.io/components/source/api/#source.toolkit.fluxcd.io/v1beta1.GitRepositoryRef
   ref:
-    tag: 0.4.1
+    tag: 0.4.2
diff --git a/install/.flux.env.example b/install/.flux.env.example
index d67c951cc8acccdcd3b53e2656ada58f5916f780..c6524c880d1b2111bd833e768727d607d8e5eaf8 100755
--- a/install/.flux.env.example
+++ b/install/.flux.env.example
@@ -31,7 +31,7 @@ outgoing_mail_smtp_port=587
 # Let's Encrypt ACME server address, keep this for production clusters
 acme_server=https://acme-v02.api.letsencrypt.org/directory
 
-# On development setups please use Letsencrypts staging API 
+# On development setups please use Letsencrypts staging API
 # - Note that single sign-on will not work, because it requires valid
 #   certificates.
 # - Use `nextcloud-values-override.yml` for Nextcloud and ONLYOFFICE to work
@@ -39,7 +39,7 @@ acme_server=https://acme-v02.api.letsencrypt.org/directory
 # acme_server=https://acme-staging-v02.api.letsencrypt.org/directory
 
 # Save backups to an S3 bucket.
-backup_s3_bucket=oas.greenhost.net
+backup_s3_bucket=stackspin.greenhost.net
 backup_s3_prefix=ci-prefix
 backup_s3_url=https://store.greenhost.net
 backup_s3_region=ceph
diff --git a/install/flux-version-check.sh b/install/flux-version-check.sh
index 2cbb2ed49c9d25cdee17108b32a611fb9f9ba7c4..88cd01b6065614640e09b8a4a6c1fd3e3ffef33e 100644
--- a/install/flux-version-check.sh
+++ b/install/flux-version-check.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
 if [ "$(flux --version)" != "flux version 0.20.1" ]; then
-  echo "The OpenAppStack installation only works with Flux version 0.20.1"
+  echo "The Stackspin installation only works with Flux version 0.20.1"
   exit 1
 fi
diff --git a/install/generate_secrets.py b/install/generate_secrets.py
index 95b3e6cba2e05fc35d68adeef1fc8e40eb5fb696..bf6cf0e013fa225ba6afb3c40e1690c64c8b33b9 100644
--- a/install/generate_secrets.py
+++ b/install/generate_secrets.py
@@ -1,12 +1,12 @@
 """
 Generates Kubernetes secrets based on a provided app name.
 
-If the `templates` directory contains a secret called `oas-{app}-variables`, it
+If the `templates` directory contains a secret called `stackspin-{app}-variables`, it
 will check if that secret already exists in the cluster, and if not: generate
-it. It does the same for an `oas-{app}-basic-auth` secret that will contain a
+it. It does the same for an `stackspin-{app}-basic-auth` secret that will contain a
 password as well as a htpasswd encoded version of it.
 
-See https://open.greenhost.net/openappstack/openappstack/-/issues/891 for the
+See https://open.greenhost.net/stackspin/stackspin/-/issues/891 for the
 context why we use this script and not a helm chart to generate secrets.
 
 usage: python generate_secrets.py template_filename.j2
@@ -17,10 +17,10 @@ import os
 import secrets
 import string
 import sys
-import yaml
 
 import jinja2
 import jinja2_base64_filters  # pylint: disable=unused-import
+import yaml
 from kubernetes import client, config
 from kubernetes.client.exceptions import ApiException
 from kubernetes.utils import create_from_yaml
@@ -50,7 +50,7 @@ def get_templates_dir():
 def create_variables_secret(app_name, env):
     """Checks if a variables secret for app_name already exists, generates it if necessary"""
     variables_filename = \
-        os.path.join(get_templates_dir(), f"oas-{app_name}-variables.yaml.jinja")
+        os.path.join(get_templates_dir(), f"stackspin-{app_name}-variables.yaml.jinja")
     if os.path.exists(variables_filename):
         # Check if k8s secret already exists, if not, generate it
         with open(variables_filename) as template_file:
@@ -71,7 +71,7 @@ def create_variables_secret(app_name, env):
 def create_basic_auth_secret(app_name, env):
     """Checks if a basic auth secret for app_name already exists, generates it if necessary"""
     basic_auth_filename = \
-        os.path.join(get_templates_dir(), f"oas-{app_name}-basic-auth.yaml.jinja")
+        os.path.join(get_templates_dir(), f"stackspin-{app_name}-basic-auth.yaml.jinja")
     if os.path.exists(basic_auth_filename):
         with open(basic_auth_filename) as template_file:
             lines = template_file.read()
diff --git a/install/install-app.sh b/install/install-app.sh
index b7b2000ec9f2ad73e162424415c1f91c30cb63f0..8bcb58de24f84584bf4b4c06df3dc24f3e6b2293 100755
--- a/install/install-app.sh
+++ b/install/install-app.sh
@@ -16,7 +16,7 @@ python "$(dirname "$0")/generate_secrets.py" "$app"
 # an `add-$app` kustomization will be present on the cluster, as well as a
 # `$app` kustomization that adds the actual app
 flux create kustomization "add-${app}" \
-  --source=GitRepository/openappstack \
+  --source=GitRepository/stackspin \
   --path="./flux2/cluster/optional/${app}" \
   --prune=true \
   --interval=1h
diff --git a/install/install-openappstack.sh b/install/install-stackspin.sh
similarity index 70%
rename from install/install-openappstack.sh
rename to install/install-stackspin.sh
index 55fc6f049047d60ca01cdd1ca970fbd0a0c3dbe9..d151e0b09d6b4e505f08ed288e50a555791a6b3e 100755
--- a/install/install-openappstack.sh
+++ b/install/install-stackspin.sh
@@ -25,11 +25,11 @@ kubectl patch deployment \
 branch=${CI_COMMIT_REF_NAME:-}
 [ -z "$branch" ] && branch=$(git rev-parse --abbrev-ref HEAD)
 
-echo "Tracking branch $branch for https://open.greenhost.net/openappstack/openappstack flux repo"
+echo "Tracking branch $branch for https://open.greenhost.net/stackspin/stackspin flux repo"
 
-# Create oas and oas-apps namespaces
-kubectl get namespace oas 2>/dev/null || kubectl create namespace oas
-kubectl get namespace oas-apps 2>/dev/null || kubectl create namespace oas-apps
+# Create stackspin and stackspin-apps namespaces
+kubectl get namespace stackspin 2>/dev/null || kubectl create namespace stackspin
+kubectl get namespace stackspin-apps 2>/dev/null || kubectl create namespace stackspin-apps
 
 # Generate oauth and SSO secrets
 python "$(dirname "$0")/generate_secrets.py" single-sign-on
@@ -40,13 +40,13 @@ python "$(dirname "$0")/generate_secrets.py" kube-prometheus-stack
 python "$(dirname "$0")/generate_secrets.py" prometheus
 python "$(dirname "$0")/generate_secrets.py" alertmanager
 
-flux create source git openappstack \
-  --url=https://open.greenhost.net/openappstack/openappstack \
+flux create source git stackspin \
+  --url=https://open.greenhost.net/stackspin/stackspin \
   --branch="$branch" \
   --interval=1h
 
-flux create kustomization openappstack \
-  --source=GitRepository/openappstack \
+flux create kustomization stackspin \
+  --source=GitRepository/stackspin \
   --path="./flux2/cluster/base" \
   --prune=true \
   --interval=1h
diff --git a/install/kustomization.yaml b/install/kustomization.yaml
index 90e20008f7e82da75428c88dae93d51df1c66daa..217b25dee541ca435b99e7ee95ab422fd2e0d451 100644
--- a/install/kustomization.yaml
+++ b/install/kustomization.yaml
@@ -3,7 +3,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
 namespace: flux-system
 secretGenerator:
-  - name: oas-cluster-variables
+  - name: stackspin-cluster-variables
     envs:
       - .flux.env
 generatorOptions:
diff --git a/install/overrides/oas-nextcloud-override.yaml b/install/overrides/stackspin-nextcloud-override.yaml
similarity index 93%
rename from install/overrides/oas-nextcloud-override.yaml
rename to install/overrides/stackspin-nextcloud-override.yaml
index 72c1313a5fa63a8cb3848df396c55efdd90204a9..0a33526ff1a947bdd9aa27ea7bb237d0d7414f5a 100644
--- a/install/overrides/oas-nextcloud-override.yaml
+++ b/install/overrides/stackspin-nextcloud-override.yaml
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-nextcloud-override
+  name: stackspin-nextcloud-override
 data:
   values.yaml: |
     # By overriding these values, Nextcloud and ONLYOFFICE will work on ACME
diff --git a/install/templates/oas-alertmanager-basic-auth.yaml.jinja b/install/templates/stackspin-alertmanager-basic-auth.yaml.jinja
similarity index 63%
rename from install/templates/oas-alertmanager-basic-auth.yaml.jinja
rename to install/templates/stackspin-alertmanager-basic-auth.yaml.jinja
index fedb272ab91f0794367040944c361f9bccd94690..2490b011783a7f630c2692807c594a6f55ddc900 100644
--- a/install/templates/oas-alertmanager-basic-auth.yaml.jinja
+++ b/install/templates/stackspin-alertmanager-basic-auth.yaml.jinja
@@ -2,8 +2,8 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  namespace: "oas"
-  name: "oas-alertmanager-basic-auth"
+  namespace: "stackspin"
+  name: "stackspin-alertmanager-basic-auth"
 data:
   pass: "{{ pass | b64encode }}"
   auth: "{{ htpasswd | b64encode }}"
diff --git a/install/templates/oas-kube-prometheus-stack-variables.yaml.jinja b/install/templates/stackspin-kube-prometheus-stack-variables.yaml.jinja
similarity index 70%
rename from install/templates/oas-kube-prometheus-stack-variables.yaml.jinja
rename to install/templates/stackspin-kube-prometheus-stack-variables.yaml.jinja
index 035baf54b938c396a8012ca9e36625c26e73750c..b3478ada3cf1418bc5e0ee8a88abc3b9abab8fa5 100644
--- a/install/templates/oas-kube-prometheus-stack-variables.yaml.jinja
+++ b/install/templates/stackspin-kube-prometheus-stack-variables.yaml.jinja
@@ -2,6 +2,6 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-kube-prometheus-stack-variables
+  name: stackspin-kube-prometheus-stack-variables
 data:
   grafana_admin_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-nextcloud-variables.yaml.jinja b/install/templates/stackspin-nextcloud-variables.yaml.jinja
similarity index 92%
rename from install/templates/oas-nextcloud-variables.yaml.jinja
rename to install/templates/stackspin-nextcloud-variables.yaml.jinja
index 6ef7809d889c53c9761eeb1b0c771301653b2cb0..59adddfcfb98bf4116bfec9a124c8f45e94ebc50 100644
--- a/install/templates/oas-nextcloud-variables.yaml.jinja
+++ b/install/templates/stackspin-nextcloud-variables.yaml.jinja
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-nextcloud-variables
+  name: stackspin-nextcloud-variables
 data:
   nextcloud_password: "{{ 32 | generate_password | b64encode }}"
   nextcloud_mariadb_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-oauth-variables.yaml.jinja b/install/templates/stackspin-oauth-variables.yaml.jinja
similarity index 93%
rename from install/templates/oas-oauth-variables.yaml.jinja
rename to install/templates/stackspin-oauth-variables.yaml.jinja
index befd2f774e40402a86caf20ea51c7173342165f7..0445e6d868b76095602276f0a589f12079fe6ade 100644
--- a/install/templates/oas-oauth-variables.yaml.jinja
+++ b/install/templates/stackspin-oauth-variables.yaml.jinja
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-oauth-variables
+  name: stackspin-oauth-variables
 data:
   grafana_oauth_client_secret: "{{ 32 | generate_password | b64encode }}"
   nextcloud_oauth_client_secret: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-prometheus-basic-auth.yaml.jinja b/install/templates/stackspin-prometheus-basic-auth.yaml.jinja
similarity index 77%
rename from install/templates/oas-prometheus-basic-auth.yaml.jinja
rename to install/templates/stackspin-prometheus-basic-auth.yaml.jinja
index d4d2d35521890ed6a3f53951b8a77070a1b8d2f6..fef26c0141ef38717cac6f218d6c5ad2c8af42f3 100644
--- a/install/templates/oas-prometheus-basic-auth.yaml.jinja
+++ b/install/templates/stackspin-prometheus-basic-auth.yaml.jinja
@@ -1,8 +1,8 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  namespace: "oas"
-  name: "oas-prometheus-basic-auth"
+  namespace: "stackspin"
+  name: "stackspin-prometheus-basic-auth"
 data:
   # Readable version of the password for humans who want to log in
   pass: "{{ pass | b64encode }}"
diff --git a/install/templates/oas-rocketchat-variables.yaml.jinja b/install/templates/stackspin-rocketchat-variables.yaml.jinja
similarity index 86%
rename from install/templates/oas-rocketchat-variables.yaml.jinja
rename to install/templates/stackspin-rocketchat-variables.yaml.jinja
index 4bce7f2911c2375e567b9a16333e89f7ff0c4453..7170de0b3e0f883b687e00d7882afa49ff2a7217 100644
--- a/install/templates/oas-rocketchat-variables.yaml.jinja
+++ b/install/templates/stackspin-rocketchat-variables.yaml.jinja
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-rocketchat-variables
+  name: stackspin-rocketchat-variables
 data:
   mongodb_password: "{{ 32 | generate_password | b64encode }}"
   mongodb_root_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-single-sign-on-variables.yaml.jinja b/install/templates/stackspin-single-sign-on-variables.yaml.jinja
similarity index 88%
rename from install/templates/oas-single-sign-on-variables.yaml.jinja
rename to install/templates/stackspin-single-sign-on-variables.yaml.jinja
index 7424dd4ed4eb672b4030ff632b560f2b19852e80..1484b58aa9e6efc3fd70c0aaf2fd11efa1e5ac33 100644
--- a/install/templates/oas-single-sign-on-variables.yaml.jinja
+++ b/install/templates/stackspin-single-sign-on-variables.yaml.jinja
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-single-sign-on-variables
+  name: stackspin-single-sign-on-variables
 data:
   userbackend_admin_username: '{{ "admin" | b64encode }}'
   userbackend_admin_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-wekan-variables.yaml.jinja b/install/templates/stackspin-wekan-variables.yaml.jinja
similarity index 83%
rename from install/templates/oas-wekan-variables.yaml.jinja
rename to install/templates/stackspin-wekan-variables.yaml.jinja
index f3cc5a366cd1b39a18a41903a43f3cff7dee61e0..b5bad3dc2514f3f72d6ad30cf662ac794a6422a6 100644
--- a/install/templates/oas-wekan-variables.yaml.jinja
+++ b/install/templates/stackspin-wekan-variables.yaml.jinja
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-wekan-variables
+  name: stackspin-wekan-variables
 data:
   mongodb_password: "{{ 32 | generate_password | b64encode }}"
   mongodb_root_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/install/templates/oas-wordpress-variables.yaml.jinja b/install/templates/stackspin-wordpress-variables.yaml.jinja
similarity index 87%
rename from install/templates/oas-wordpress-variables.yaml.jinja
rename to install/templates/stackspin-wordpress-variables.yaml.jinja
index 18bf4339ca9afa86d1583f9a6ab0716a578fa00d..b491834d6d0ea9bc7dda576b8846988c6af8f09f 100644
--- a/install/templates/oas-wordpress-variables.yaml.jinja
+++ b/install/templates/stackspin-wordpress-variables.yaml.jinja
@@ -2,7 +2,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: oas-wordpress-variables
+  name: stackspin-wordpress-variables
 data:
   wordpress_admin_password: "{{ 32 | generate_password | b64encode }}"
   wordpress_mariadb_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/openappstack/__init__.py b/openappstack/__init__.py
deleted file mode 100644
index a85c322e6af4271383833a7a63dc8bf43c760de4..0000000000000000000000000000000000000000
--- a/openappstack/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-name='openappstack'
diff --git a/requirements.in b/requirements.in
index f4bb163a1456e29253486383d9260b223b7bfbfb..67aa8bfc329f728def07564c3a8f80784c87537d 100644
--- a/requirements.in
+++ b/requirements.in
@@ -7,7 +7,7 @@
 # See https://pypi.org/project/pip-tools/#updating-requirements for more.
 #
 # Please add developer dependencies which are not needed to install
-# OpenAppStack to requirements-dev.txt!
+# Stackspin to requirements-dev.txt!
 
 # We need to update the mitogen plugin first in order to update to a newer
 # ansible version
diff --git a/requirements.txt b/requirements.txt
index afd7c86277960815f83469f97b35bb6517fe9ef4..3f8b0deedcc54e5388d1417ad388ba3968d5bd50 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -40,7 +40,7 @@ idna==3.3
     # via requests
 iniconfig==1.1.1
     # via pytest
-jinja2==3.0.2
+jinja2==3.0.3
     # via
     #   ansible
     #   jinja2-base64-filters
@@ -54,7 +54,7 @@ oauthlib==3.1.1
     # via requests-oauthlib
 orderedmultidict==1.0.1
     # via htpasswd
-packaging==21.0
+packaging==21.2
     # via pytest
 paramiko==2.8.0
     # via -r requirements.in
@@ -64,7 +64,7 @@ pluggy==1.0.0
     # via pytest
 psutil==5.8.0
     # via -r requirements.in
-py==1.10.0
+py==1.11.0
     # via pytest
 pyasn1==0.4.8
     # via
@@ -72,13 +72,13 @@ pyasn1==0.4.8
     #   rsa
 pyasn1-modules==0.2.8
     # via google-auth
-pycparser==2.20
+pycparser==2.21
     # via cffi
 pynacl==1.4.0
     # via paramiko
 pyopenssl==21.0.0
     # via -r requirements.in
-pyparsing==3.0.4
+pyparsing==2.4.7
     # via packaging
 pytest==6.2.5
     # via
@@ -108,6 +108,7 @@ rsa==4.7.2
 six==1.16.0
     # via
     #   bcrypt
+    #   google-auth
     #   kubernetes
     #   orderedmultidict
     #   pynacl
diff --git a/stackspin/__init__.py b/stackspin/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..4f37c251ad3d66dbb25b58e1933431207d429055
--- /dev/null
+++ b/stackspin/__init__.py
@@ -0,0 +1 @@
+name='stackspin'
diff --git a/openappstack/__main__.py b/stackspin/__main__.py
similarity index 93%
rename from openappstack/__main__.py
rename to stackspin/__main__.py
index e8b2d4ddf728fed21900b9918f7f3237828be066..c8aa5e102dc35cd63221d01dec7e3b28f7967f83 100755
--- a/openappstack/__main__.py
+++ b/stackspin/__main__.py
@@ -20,12 +20,14 @@ Install requirements:
 
 import argparse
 import logging
-from math import floor
 import os
 import sys
-from subprocess import Popen, PIPE
+from math import floor
+from subprocess import PIPE, Popen
+
 import greenhost_cloud
-from openappstack import name, cluster, ansible
+
+from stackspin import ansible, cluster, name
 
 # We're limiting to 50, because we use subdomains, the current longest of which
 # is 7 characters (`office.`). Max CN length is 63 characters, so we have some
@@ -41,25 +43,25 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
 
     - create, responsible for setting up VPSs and their local configuration
       files
-    - install, responsible for setting up Kubernetes and OpenAppStack on those
+    - install, responsible for setting up Kubernetes and Stackspin on those
       VPSs
     - test, responsible for testing if all the setup steps worked.
 
-    Run python3 -m openappstack --help for more information.
+    Run python3 -m stackspin --help for more information.
     """
     # Parse command line arguments
     parser = argparse.ArgumentParser(
         prog=name,
         description='Run installation script '
-        'to deploy Openappstack to a given node. Note that you always need to '
+        'to deploy Stackspin to a given node. Note that you always need to '
         'provide a cluster name. For subcommand specific help, for example, '
-        'run "python3 -m openappstack your-cluster install --help"')
+        'run "python3 -m stackspin your-cluster install --help"')
 
     parser.add_argument(
         'cluster_name',
         metavar='CLUSTER_NAME',
         type=str,
-        help='Name of the cluster you want to use openappstack with')
+        help='Name of the cluster you want to use stackspin with')
 
     subparsers = parser.add_subparsers(help='Available subcommands')
 
@@ -69,7 +71,7 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
     create_parser.add_argument(
         'domain',
         metavar='DOMAIN_NAME',
-        help='Domain name to run OpenAppStack under')
+        help='Domain name to run Stackspin under')
     create_parser.add_argument(
         '--create-hostname',
         type=str,
@@ -151,7 +153,7 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
     install_parser = subparsers.add_parser(
         'install',
         help=("Use this to run the ansible playbook that sets up your VPS to run "
-              "OpenAppStack. The ansible-playbook process will run in the "
+              "Stackspin. The ansible-playbook process will run in the "
               "'{ansible_path}' directory, so do not use relative paths with these "
               "arguments.").format(ansible_path=ansible.ANSIBLE_PATH))
     install_parser.set_defaults(func=install)
@@ -204,7 +206,7 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
 
     secrets_parser = subparsers.add_parser(
         'secrets',
-        help=("Show OAS cluster secrets"))
+        help=("Show Stackspin cluster secrets"))
     secrets_parser.set_defaults(func=secrets)
 
     args = parser.parse_args()
@@ -343,7 +345,7 @@ def install(clus, args):
     """
     Parses arguments for the 'install' subcommand
 
-    :param cluster.Cluster clus: Cluster object to install OAS to
+    :param cluster.Cluster clus: Cluster object to install Stackspin to
     :param argparse.Namespace args: Command line arguments
     """
     clus.load_data()
@@ -375,16 +377,16 @@ def test(clus, args):
 
     # SSO tests currently only work with valid letsencrypt production certs.
     # Therefor we disable SSO tests for now, until
-    # https://open.greenhost.net/openappstack/single-sign-on/-/issues/62
+    # https://open.greenhost.net/stackspin/single-sign-on/-/issues/62
     # is fixed.
     #
     #  sso_username = clus.get_password_from_kubernetes(
-    #      'oas-single-sign-on-variables',
+    #      'stackspin-single-sign-on-variables',
     #      'userbackend_admin_username',
     #      'flux-system'
     #  )
     #  sso_password = clus.get_password_from_kubernetes(
-    #      'oas-single-sign-on-variables',
+    #      'stackspin-single-sign-on-variables',
     #      'userbackend_admin_password',
     #      'flux-system'
     #  )
@@ -393,7 +395,7 @@ def test(clus, args):
 
     if "nextcloud" in args.apps or args.apps=='all':
         nextcloud_password = clus.get_password_from_kubernetes(
-            'oas-nextcloud-variables',
+            'stackspin-nextcloud-variables',
             'nextcloud_password',
             'flux-system'
         )
@@ -401,7 +403,7 @@ def test(clus, args):
 
     if "rocketchat" in args.apps or args.apps=='all':
         rocketchat_password = clus.get_password_from_kubernetes(
-            'oas-rocketchat-variables',
+            'stackspin-rocketchat-variables',
             'rocketchat_admin_password',
             'flux-system'
         )
@@ -409,7 +411,7 @@ def test(clus, args):
 
     if "wordpress" in args.apps or args.apps=='all':
         wordpress_password = clus.get_password_from_kubernetes(
-            'oas-wordpress-variables',
+            'stackspin-wordpress-variables',
             'wordpress_admin_password',
             'flux-system'
         )
@@ -417,7 +419,7 @@ def test(clus, args):
 
     if "grafana" in args.apps or args.apps=='all':
         grafana_password = clus.get_password_from_kubernetes(
-            'oas-kube-prometheus-stack-variables',
+            'stackspin-kube-prometheus-stack-variables',
             'grafana_admin_password',
             'flux-system'
         )
@@ -445,7 +447,7 @@ def create_domain_records(domain, droplet_ip, subdomain=None):
 
     :param str domain: the domain the cluster will be hosted on.
     :param str droplet_ip: The IP address the A record will point to.
-    :param subdomain: Optional subdomain to host OAS on.
+    :param subdomain: Optional subdomain to host Stackspin on.
     :type subdomain: str or None
     """
     subdomain_arg = subdomain
@@ -493,5 +495,5 @@ def init_logging(logger, loglevel):
 
 if __name__ == '__main__':
     # Setup logging for this script
-    log = logging.getLogger('openappstack')  # pylint: disable=invalid-name
+    log = logging.getLogger('stackspin')  # pylint: disable=invalid-name
     main()
diff --git a/openappstack/ansible.py b/stackspin/ansible.py
similarity index 94%
rename from openappstack/ansible.py
rename to stackspin/ansible.py
index 1e02d60ad53bd1f2ef888572f21750caca5740ed..1efeae4ef232df5b9ac357ca682556c9d57020cc 100644
--- a/openappstack/ansible.py
+++ b/stackspin/ansible.py
@@ -1,9 +1,10 @@
 """
-Module responsible for running the Ansible part of the OpenAppStack setup.
+Module responsible for running the Ansible part of the Stackspin setup.
 """
 import logging
 import os
 import subprocess
+
 import yaml
 
 log = logging.getLogger(__name__)  # pylint: disable=invalid-name
@@ -66,10 +67,10 @@ def create_inventory(cluster):
         inventory = yaml.safe_load(stream)
 
     # Rename the hostname in the inventory to one provided by the user.
-    if cluster.hostname != 'oas-dev':
+    if cluster.hostname != 'stackspin-dev':
         inventory['all']['hosts'][cluster.hostname] = \
-            inventory['all']['hosts']['oas-dev']
-        del inventory['all']['hosts']['oas-dev']
+            inventory['all']['hosts']['stackspin-dev']
+        del inventory['all']['hosts']['stackspin-dev']
 
     inventory['all']['hosts'][cluster.hostname]['ansible_host'] = \
         cluster.ip_address
diff --git a/openappstack/cluster.py b/stackspin/cluster.py
similarity index 93%
rename from openappstack/cluster.py
rename to stackspin/cluster.py
index 960914624f08ee101e0644d4c98df07f4d96dce2..0e28c602619ae7ed7a4bffe9a931f13895334cb4 100644
--- a/openappstack/cluster.py
+++ b/stackspin/cluster.py
@@ -1,4 +1,4 @@
-"""Contains code for managing the files related to an OpenAppStack cluster."""
+"""Contains code for managing the files related to an Stackspin cluster."""
 
 import base64
 import logging
@@ -9,7 +9,7 @@ import greenhost_cloud
 import yaml
 from kubernetes import client, config
 
-from openappstack import ansible
+from stackspin import ansible
 
 CLUSTER_PATH = 'clusters'
 
@@ -95,7 +95,7 @@ class Cluster:
 
     def create_droplet(self, ssh_key_id=0, hostname=None):
         """
-        Uses the Cosmos API to create a droplet with OAS default spec
+        Uses the Cosmos API to create a droplet with Stackspin default spec
 
         :param int ssh_key_id: SSH key ID in Greenhost Cosmos.
         :param str hostname: hostname of the droplet created at GH. Defaults to
@@ -196,35 +196,35 @@ KUBECONFIG={cluster_dir}/kube_config_cluster.yml
 
     def dump_secrets(self):
         """
-        Shows all OAS cluster secrets.
+        Shows all Stackspin cluster secrets.
         """
         all_secrets = {
             'flux-system': {
-                'oas-kube-prometheus-stack-variables': ['grafana_admin_password'],
-                'oas-nextcloud-variables': [
+                'stackspin-kube-prometheus-stack-variables': ['grafana_admin_password'],
+                'stackspin-nextcloud-variables': [
                     'nextcloud_mariadb_password',
                     'nextcloud_mariadb_root_password',
                     'nextcloud_password',
                     'onlyoffice_jwt_secret',
                     'onlyoffice_postgresql_password',
                     'onlyoffice_rabbitmq_password'],
-                'oas-rocketchat-variables': [
+                'stackspin-rocketchat-variables': [
                     'rocketchat_admin_password',
                     'mongodb_root_password',
                     'mongodb_password'],
-                'oas-single-sign-on-variables': [
+                'stackspin-single-sign-on-variables': [
                     'userbackend_admin_username',
                     'userbackend_admin_password',
                     'userbackend_postgres_password',
                     'hydra_system_secret'],
-                'oas-wordpress-variables': [
+                'stackspin-wordpress-variables': [
                     'wordpress_admin_password',
                     'wordpress_mariadb_password',
                     'wordpress_mariadb_root_password']
             },
-            'oas': {
-                'oas-alertmanager-basic-auth': ['pass'],
-                'oas-prometheus-basic-auth': ['pass']
+            'stackspin': {
+                'stackspin-alertmanager-basic-auth': ['pass'],
+                'stackspin-prometheus-basic-auth': ['pass']
             }
         }
 
diff --git a/test/pytest/test_prometheus.py b/test/pytest/test_prometheus.py
index a4f6a5fdab88e4483542d8bc9c3fef99455d93b4..7e90f0d874a3d1bc72c4b247b4064bcd8a9545db 100755
--- a/test/pytest/test_prometheus.py
+++ b/test/pytest/test_prometheus.py
@@ -24,7 +24,7 @@ def ignore_alert(alert):
     if re.search(r"(KubeAPIDown|KubeletDown|NodeFilesystemSpaceFillingUp|NodeClockNotSynchronising)",
         alert["labels"]["alertname"]):
         return True
-    # Ignore nextcloud cron jobs (https://open.greenhost.net/openappstack/openappstack/-/issues/984)
+    # Ignore nextcloud cron jobs (https://open.greenhost.net/stackspin/stackspin/-/issues/984)
     if re.search(r"nc-nextcloud-cron", alert["annotations"]["description"]):
         return True
 
diff --git a/test/taiko/apps.js b/test/taiko/apps.js
index 5cbbb587e5a9a6d78f1e9e553e4f9211c7e8aeab..7d55c5308d6d3765f063c900cd560ec9e7c406a3 100644
--- a/test/taiko/apps.js
+++ b/test/taiko/apps.js
@@ -76,7 +76,7 @@ const assert = require('assert');
       // Open document and type some text
       await click('Files')
       // Force page reload because of random empty pages for files app
-      // https://open.greenhost.net/openappstack/nextcloud/-/issues/973
+      // https://open.greenhost.net/stackspin/nextcloud/-/issues/973
       await reload()
 
       await waitFor(async () => (await link({class:'new'}).isVisible()), globalTimeout)
diff --git a/test/taiko/single-sign-on.js b/test/taiko/single-sign-on.js
index 8dc60bc76ef3227ad95521fccb8f3fd345f4d283..ca7fc5ea685436a04869ea03d64be82cf56550ca 100644
--- a/test/taiko/single-sign-on.js
+++ b/test/taiko/single-sign-on.js
@@ -1,7 +1,7 @@
 // Tests if logging into all apps works using SSO
 // Unfortunately we still can't run this test in CI because we haven't found
 // a way to use SSO with LE staging certs.
-// See https://open.greenhost.net/openappstack/single-sign-on/-/issues/62
+// See https://open.greenhost.net/stackspin/single-sign-on/-/issues/62
 
 const { openBrowser, goto, textBox, into, write, click, toRightOf, below, link, press, image, waitFor, closeBrowser, screenshot } = require('taiko');
 const assert = require('assert');
@@ -26,7 +26,7 @@ const assert = require('assert');
 
     await goto(adminpanelUrl)
     await click('Login')
-    await click('Login with OAS')
+    await click('Login with Stackspin')
     await write(username, into(textBox('Username')))
     await write(pw, into(textBox('Password')))
     await click('Remember me')
@@ -36,7 +36,7 @@ const assert = require('assert');
     if (taikoTests.includes('nextcloud') || taikoTests === 'all') {
       console.log('• Nextcloud and Onlyoffice')
       await click(link(below('nextcloud')))
-      await click('Log in with OpenAppStack')
+      await click('Log in with Stackspin')
       await click('Continue with ' + username)
 
       // Close potential nextcloud first run wizard modal
@@ -55,9 +55,9 @@ const assert = require('assert');
       // Navigate to rocketchat
       // Breaks because of 2fa challenge which is not recieved
       // by email
-      // https://open.greenhost.net/openappstack/openappstack/-/issues/819
+      // https://open.greenhost.net/stackspin/stackspin/-/issues/819
       // await click(link(below('rocketchat')));
-      // await click('Login via OpenAppStack');
+      // await click('Login via Stackspin');
       // await click('Continue with ' + username)
     }
 
@@ -77,7 +77,7 @@ const assert = require('assert');
       console.log('• Grafana')
       await goto(adminpanelUrl)
       await click(link(below('grafana')))
-      await click('Sign in with OpenAppStack')
+      await click('Sign in with Stackspin')
       await click('Continue with ' + username)
       await assert.ok(await text('Welcome to Grafana').exists());
     }
diff --git a/upgrade-scripts/to-0.8.0/cleanup.sh b/upgrade-scripts/to-0.8.0/cleanup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..25c5f9276e22c9005f0b6b599bc96a17a2c12b49
--- /dev/null
+++ b/upgrade-scripts/to-0.8.0/cleanup.sh
@@ -0,0 +1,16 @@
+#! /usr/bin/env bash
+
+# Clean up oas-* secrets
+kubectl delete secret -n flux-system oas-cluster-variables
+kubectl delete secret -n flux-system oas-single-sign-on-variables
+kubectl delete secret -n flux-system oas-oauth-variables
+kubectl delete secret -n flux-system oas-kube-prometheus-stack-variables
+kubectl delete secret -n flux-system oas-nextcloud-variables
+kubectl delete secret -n flux-system oas-wekan-variables
+kubectl delete secret -n flux-system oas-rocketchat-variables
+kubectl delete secret -n flux-system oas-wordpress-variables
+
+# Set retain policy for PVs back to "Delete"
+for pv in $(kubectl get pv --no-headers | awk '{print $1}'); do
+  kubectl patch pv "$pv" -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
+done
diff --git a/upgrade-scripts/to-0.8.0/rename-to-stackspin.sh b/upgrade-scripts/to-0.8.0/rename-to-stackspin.sh
new file mode 100644
index 0000000000000000000000000000000000000000..84721c720dbbac080b3ae4e6247f29ee1f6ad0c0
--- /dev/null
+++ b/upgrade-scripts/to-0.8.0/rename-to-stackspin.sh
@@ -0,0 +1,94 @@
+#! /usr/bin/env bash
+set -euo pipefail
+
+sudo snap install jq
+
+echo "Stopping k3s service for backup"
+/usr/local/bin/k3s-killall.sh
+echo "Backing up all PVCs to /var/lib/OpenAppStack.tar.gz"
+cd /var/lib
+tar -czf OpenAppStack.tar.gz OpenAppStack
+cd -
+echo "Starting k3s service"
+sudo systemctl start k3s
+
+echo "Making new namespaces"
+
+kubectl create ns stackspin
+kubectl create ns stackspin-apps
+
+echo "adding stackspin-named secrets"
+kubectl get secret -n flux-system oas-cluster-variables -o json | jq '.metadata.name="stackspin-cluster-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-single-sign-on-variables -o json | jq '.metadata.name="stackspin-single-sign-on-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-oauth-variables -o json | jq '.metadata.name="stackspin-oauth-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-kube-prometheus-stack-variables -o json | jq '.metadata.name="stackspin-kube-prometheus-stack-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-nextcloud-variables -o json | jq '.metadata.name="stackspin-nextcloud-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-wekan-variables -o json | jq '.metadata.name="stackspin-wekan-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-rocketchat-variables -o json | jq '.metadata.name="stackspin-rocketchat-variables"' | kubectl apply -f -
+kubectl get secret -n flux-system oas-wordpress-variables -o json | jq '.metadata.name="stackspin-wordpress-variables"' | kubectl apply -f -
+
+# Backs up pvcs to /tmp/$namespace/$pvc.yaml and sets their pv's to "retain"
+backup_pvc() {
+  pvc=$1
+  old_namespace=$2
+  new_namespace=$3
+
+  pv="$(kubectl get pvc -n "$old_namespace" "$pvc" --template '{{ .spec.volumeName }}')"
+  pv_path="$(kubectl get pv "$pv" --template '{{ .spec.local.path }}')"
+
+  echo "Backing up PVC '$pvc' with PV '$pv' from namespace '$old_namespace'"
+  echo "PV path: '$pv_path'"
+
+  # Make namespace backup directory
+  mkdir -p "/tmp/$old_namespace"
+
+  # back-up PVC and PV manifests
+  kubectl get pvc -n "$old_namespace" "$pvc" -o yaml >"/tmp/$old_namespace/$pvc.yaml"
+  kubectl get pv "$pv" -o yaml >"/tmp/$old_namespace/$pv.yaml"
+
+  # Set reclaimpolicy for PV
+  kubectl patch pv "$pv" -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
+
+  # Re-add PVC in new namespace
+  grep -v -e "uid:" -e "resourceVersion:" -e "namespace:" -e "selfLink:" "/tmp/$old_namespace/$pvc.yaml" | kubectl -n "$new_namespace" apply -f -
+
+  # Get new pvc UID
+  uid=$(kubectl get -n "$new_namespace" pvc "$pvc" --template '{{ .metadata.uid }}')
+
+  # Set new PVC UID in PV
+  kubectl patch pv "$pv" -p '{"spec":{"claimRef":{"uid":"'"$uid"'","name":null}}}'
+
+  echo "When all is fine, re-set the reclaimPolicy to Delete:"
+  echo "kubectl patch pv \"'$pv'\" -p '{\"spec\":{\"persistentVolumeReclaimPolicy\":\"Delete\"}}'"
+}
+
+# Move all PVCs to stackspin namespace
+oas_pvcs="single-sign-on-userbackend storage-loki-0 grafana alertmanager-kube-prometheus-stack-alertmanager-db-alertmanager-kube-prometheus-stack-alertmanager-0 prometheus-kube-prometheus-stack-prometheus-db-prometheus-kube-prometheus-stack-prometheus-0"
+for pvc in $oas_pvcs; do
+  backup_pvc "$pvc" oas stackspin
+done
+
+# Move all PVCs to stackspin-apps namespace
+oas_apps_pvcs="nextcloud-postgresql nextcloud-mariadb nextcloud-onlyoffice-data nextcloud-files wekan wordpress-files wordpress-mariadb"
+for pvc in $oas_apps_pvcs; do
+  backup_pvc "$pvc" oas-apps stackspin-apps
+done
+
+# Remove the old OAS kustomizations
+flux delete --silent kustomization openappstack || echo "kustomization 'openappstack' not found"
+flux delete --silent kustomization infrastructure || echo "kustomization 'infrastructure' not found"
+flux delete --silent kustomization core || echo "kustomization 'core' not found"
+
+# Remove old add-apps kustomizations
+apps="monitoring  nextcloud  rocketchat  velero  wekan  wordpress"
+for app in $apps; do
+  flux delete --silent kustomization "add-$app" || echo "kustomization 'add-$app' not found"
+  flux delete --silent kustomization "$app" || echo "kustomization '$app' not found"
+done
+
+# Remove old git repository
+flux delete --silent source git openappstack
+
+echo "Now check if all the Flux kustomizations and HelmReleases and the 'oas' and 'oas-apps' namespace have disappeared. If they haven't, wait until they have. Then you can re-run the install-stackspin.sh script and after that, re-run install-apps.sh <app> for each app you want to (re)install."
+
+echo "Refer to the upgrade guide <https://docs.stackspin.net/en/latest/upgrading.html> for app specific upgrades."