From 4afc7367b44f02ec18d95f290adef755d509519c Mon Sep 17 00:00:00 2001
From: Maarten de Waard <maarten@greenhost.nl>
Date: Fri, 5 Nov 2021 08:50:27 +0100
Subject: [PATCH] Rename all occurences of "oas" to "stackspin"

---
 .gitlab-ci.yml                                | 68 ++++++++--------
 .gitlab/ci_scripts/create_vps.sh              |  4 +-
 .gitlab/issue_templates/bug.md                |  2 +-
 .gitlab/issue_templates/feedback.md           |  2 +-
 .gitlab/issue_templates/new_app.md            |  6 +-
 .../issue_templates/update_all_components.md  | 16 ++--
 CONTRIBUTING.md                               |  8 +-
 Makefile                                      |  2 +-
 README.md                                     |  2 +-
 ansible/conftest.py                           | 31 ++++++-
 ansible/group_vars/all/oas.yml                |  2 +-
 ansible/inventory.yml.example                 |  6 +-
 ansible/roles/configure/files/README.md       |  2 +-
 ansible/roles/configure/tasks/main.yml        | 18 ++---
 ansible/roles/configure/templates/version.txt | 10 +--
 ansible/roles/pre-configure/tasks/main.yml    |  2 +-
 .../pre-configure/templates/registries.yaml   |  2 +-
 docs/README.md                                |  2 +-
 docs/customizing.rst                          |  8 +-
 docs/design.md                                |  6 +-
 docs/index.rst                                |  4 +-
 docs/installation/create_cluster.rst          | 46 +++++------
 docs/installation/install_oas.rst             | 26 +++---
 docs/installation/overview.rst                | 16 ++--
 docs/maintenance.rst                          | 10 +--
 docs/security.rst                             |  6 +-
 docs/testing.rst                              |  4 +-
 docs/troubleshooting.rst                      | 80 +++++++++----------
 docs/usage.rst                                |  8 +-
 flux2/README.md                               |  2 +-
 .../apps/monitoring/eventrouter-release.yaml  |  8 +-
 .../eventrouter-values-configmap.yaml         |  2 +-
 .../kube-prometheus-stack-release.yaml        |  8 +-
 ...ube-prometheus-stack-values-configmap.yaml | 10 +--
 flux2/apps/monitoring/kustomization.yaml      |  2 +-
 flux2/apps/monitoring/loki-configmap.yaml     |  2 +-
 flux2/apps/monitoring/loki-release.yaml       |  8 +-
 .../monitoring/loki-values-configmap.yaml     |  2 +-
 flux2/apps/monitoring/promtail-release.yaml   |  8 +-
 .../monitoring/promtail-values-configmap.yaml |  3 +-
 flux2/apps/nextcloud/kustomization.yaml       |  2 +-
 .../nextcloud/nextcloud-values-configmap.yaml |  8 +-
 flux2/apps/nextcloud/release.yaml             |  8 +-
 flux2/apps/rocketchat/kustomization.yaml      |  2 +-
 flux2/apps/rocketchat/release.yaml            |  8 +-
 .../rocketchat-values-configmap.yaml          |  8 +-
 flux2/apps/velero/release.yaml                |  6 +-
 .../apps/velero/velero-values-configmap.yaml  |  3 +-
 flux2/apps/wekan/kustomization.yaml           |  2 +-
 flux2/apps/wekan/release.yaml                 |  8 +-
 flux2/apps/wekan/wekan-values-configmap.yaml  |  4 +-
 flux2/apps/wordpress/kustomization.yaml       |  2 +-
 flux2/apps/wordpress/release.yaml             |  8 +-
 .../wordpress/wordpress-values-configmap.yaml | 10 +--
 flux2/cluster/base/core.yaml                  | 18 ++---
 flux2/cluster/base/infrastructure.yaml        |  2 +-
 .../monitoring/monitoring-config.yaml         |  2 +-
 .../optional/monitoring/monitoring.yaml       | 28 +++----
 .../cluster/optional/nextcloud/nextcloud.yaml | 14 ++--
 .../optional/rocketchat/rocketchat.yaml       | 12 +--
 flux2/cluster/optional/velero/velero.yaml     |  4 +-
 flux2/cluster/optional/wekan/wekan.yaml       | 12 +--
 .../cluster/optional/wordpress/wordpress.yaml | 12 +--
 .../flux-alerts-prometheusrule.yaml           |  2 +-
 .../stackspin-alerts-prometheusrule.yaml      | 10 +--
 .../metallb/metallb-values-configmap.yaml     |  3 +-
 flux2/core/base/metallb/release.yaml          |  8 +-
 flux2/core/base/nginx/kustomization.yaml      |  2 +-
 .../base/nginx/nginx-values-configmap.yaml    |  2 +-
 flux2/core/base/nginx/release.yaml            |  6 +-
 .../base/single-sign-on/kustomization.yaml    |  2 +-
 flux2/core/base/single-sign-on/release.yaml   |  6 +-
 .../single-sign-on-values-configmap.yaml      | 16 ++--
 .../cert-manager-values-configmap.yaml        |  3 +-
 .../infrastructure/cert-manager/release.yaml  |  6 +-
 ...cal-path-provisioner-values-configmap.yaml |  6 +-
 .../local-path-provisioner/release.yaml       |  6 +-
 .../namespaces/kustomization.yaml             |  4 +-
 flux2/infrastructure/namespaces/oas-apps.yaml |  2 +-
 flux2/infrastructure/namespaces/oas.yaml      |  2 +-
 .../sources/local-path-provisioner.yaml       |  2 +-
 flux2/infrastructure/sources/nextcloud.yaml   |  2 +-
 .../sources/rocketchat-helm-chart.yaml        |  2 +-
 .../sources/single-sign-on.yaml               |  2 +-
 flux2/infrastructure/sources/wordpress.yaml   |  2 +-
 install/.flux.env.example                     |  4 +-
 install/generate_secrets.py                   | 12 +--
 install/install-app.sh                        |  2 +-
 install/install-openappstack.sh               | 16 ++--
 install/kustomization.yaml                    |  2 +-
 install/overrides/oas-nextcloud-override.yaml |  2 +-
 .../oas-alertmanager-basic-auth.yaml.jinja    |  4 +-
 ...kube-prometheus-stack-variables.yaml.jinja |  2 +-
 .../oas-nextcloud-variables.yaml.jinja        |  2 +-
 .../templates/oas-oauth-variables.yaml.jinja  |  2 +-
 .../oas-prometheus-basic-auth.yaml.jinja      |  4 +-
 .../oas-rocketchat-variables.yaml.jinja       |  2 +-
 .../oas-single-sign-on-variables.yaml.jinja   |  2 +-
 .../templates/oas-wekan-variables.yaml.jinja  |  2 +-
 .../oas-wordpress-variables.yaml.jinja        |  2 +-
 openappstack/__init__.py                      |  2 +-
 openappstack/__main__.py                      | 29 +++----
 openappstack/ansible.py                       |  7 +-
 openappstack/cluster.py                       | 19 +++--
 test/pytest/test_prometheus.py                |  2 +-
 test/taiko/apps.js                            |  2 +-
 test/taiko/single-sign-on.js                  |  4 +-
 107 files changed, 442 insertions(+), 416 deletions(-)
 mode change 120000 => 100644 ansible/conftest.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4f107b738..a17700eac 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -53,7 +53,7 @@ include:
       - flux2/**/*
       - install/**/*
       - test/**/*
-      - openappstack/**/*
+      - stackspin/**/*
       - requirements.txt
     - if: '$TRIGGER_JOBS =~ /enable-.*/'
     - if: '$CI_COMMIT_MESSAGE =~ /TRIGGER_JOBS=.*enable-/'
@@ -143,7 +143,7 @@ include:
     - 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/'
@@ -194,7 +194,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 +225,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,7 +249,7 @@ 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/2/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
@@ -288,7 +288,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
@@ -325,7 +325,7 @@ test-dns:
     - .general_rules
   interruptible: true
 
-setup-openappstack:
+setup-stackspin:
   stage: setup-cluster
   script:
     - *debug_information
@@ -333,14 +333,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 +355,7 @@ setup-openappstack:
 .kustomization-ready:
   stage: kustomization
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: test-dns
   script:
     - *debug_information
@@ -379,9 +379,9 @@ infrastructure-kustomizations-ready:
   extends:
     - .kustomization-ready
 
-openappstack-kustomizations-ready:
+stackspin-kustomizations-ready:
   variables:
-    RESOURCE: "openappstack"
+    RESOURCE: "stackspin"
   extends:
     - .kustomization-ready
 
@@ -395,7 +395,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 +448,7 @@ enable-wordpress:
 
 monitoring-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-monitoring
   variables:
     RESOURCE: "monitoring"
@@ -458,7 +458,7 @@ monitoring-kustomization-ready:
 
 nextcloud-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-nextcloud
   variables:
     RESOURCE: "nextcloud"
@@ -468,7 +468,7 @@ nextcloud-kustomization-ready:
 
 rocketchat-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-rocketchat
   variables:
     RESOURCE: "rocketchat"
@@ -478,7 +478,7 @@ rocketchat-kustomization-ready:
 
 wekan-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-wekan
   variables:
     RESOURCE: "wekan"
@@ -488,7 +488,7 @@ wekan-kustomization-ready:
 
 wordpress-kustomization-ready:
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: enable-wordpress
   variables:
     RESOURCE: "wordpress"
@@ -516,7 +516,7 @@ nextcloud-cert:
     RESOURCE: "nextcloud"
   needs:
     - job: enable-nextcloud
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .nextcloud_rules
@@ -526,7 +526,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 +536,7 @@ rocketchat-cert:
     RESOURCE: "rocketchat"
   needs:
     - job: enable-rocketchat
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .rocketchat_rules
@@ -546,7 +546,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 +556,7 @@ wekan-cert:
     RESOURCE: "wekan"
   needs:
     - job: enable-wekan
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .wekan_rules
@@ -566,7 +566,7 @@ wordpress-cert:
     RESOURCE: "wordpress"
   needs:
     - job: enable-wordpress
-    - job: setup-openappstack
+    - job: setup-stackspin
   extends:
     - .apps-cert
     - .wordpress_rules
@@ -598,7 +598,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 +619,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 +631,7 @@ dashboard-taiko:
   variables:
     RESOURCE: "dashboard"
   needs:
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: core-kustomizations-ready
   extends:
     - .taiko
@@ -642,7 +642,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 +653,7 @@ nextcloud-taiko:
     RESOURCE: "nextcloud"
   needs:
     - job: nextcloud-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: nextcloud-kustomization-ready
   extends:
     - .taiko
@@ -664,7 +664,7 @@ rocketchat-taiko:
     RESOURCE: "rocketchat"
   needs:
     - job: rocketchat-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: rocketchat-kustomization-ready
   extends:
     - .taiko
@@ -675,7 +675,7 @@ wekan-taiko:
     RESOURCE: "wekan"
   needs:
     - job: wekan-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: wekan-kustomization-ready
   extends:
     - .taiko
@@ -686,7 +686,7 @@ wordpress-taiko:
     RESOURCE: "wordpress"
   needs:
     - job: wordpress-cert
-    - job: setup-openappstack
+    - job: setup-stackspin
     - job: wordpress-kustomization-ready
   extends:
     - .taiko
@@ -711,7 +711,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\" != \"master\" ]; then curl --request DELETE --header \"PRIVATE-TOKEN: ${CLEANER_TOKEN}\" https://open.greenhost.net/api/v4/projects/stackspin%2Fstackspin/registry/repositories/2/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 01d612ac3..10e3e674b 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 1eeb4285d..555403532 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 9ec51ace6..ff674008a 100644
--- a/.gitlab/issue_templates/feedback.md
+++ b/.gitlab/issue_templates/feedback.md
@@ -1,4 +1,4 @@
-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 [OAS testing instructions](https://docs.stackspin.net/en/latest/testing_instructions.html).
 
 # Installation
 
diff --git a/.gitlab/issue_templates/new_app.md b/.gitlab/issue_templates/new_app.md
index ec7b3df75..21159e992 100644
--- a/.gitlab/issue_templates/new_app.md
+++ b/.gitlab/issue_templates/new_app.md
@@ -5,7 +5,7 @@
 
 * [ ] 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`
@@ -15,7 +15,7 @@
 ### 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 +60,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/update_all_components.md b/.gitlab/issue_templates/update_all_components.md
index f1c1f8ac9..03df28802 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/CONTRIBUTING.md b/CONTRIBUTING.md
index 3b75e62c9..3002d6ab5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -81,22 +81,22 @@ 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
diff --git a/Makefile b/Makefile
index 686bb6cca..46a257bfc 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 42f751a77..db86e5fde 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,6 @@ a single-node kubernetes cluster.
 > server’s configuration, so please ONLY install OAS 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 49669d439..000000000
--- 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 000000000..e21517b9d
--- /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/oas.yml
index efd5e0aba..c097ab766 100644
--- a/ansible/group_vars/all/oas.yml
+++ b/ansible/group_vars/all/oas.yml
@@ -22,7 +22,7 @@ k3s:
 
 helm:
   # helm snap 2.15.0 and 2.15.1 broke for us
-  # (https://open.greenhost.net/openappstack/openappstack/issues/338), so we
+  # (https://open.greenhost.net/stackspin/stackspin/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
diff --git a/ansible/inventory.yml.example b/ansible/inventory.yml.example
index 0b5e04227..a3dbb67d5 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/configure/files/README.md b/ansible/roles/configure/files/README.md
index 7ca34cbbf..ace06035a 100644
--- a/ansible/roles/configure/files/README.md
+++ b/ansible/roles/configure/files/README.md
@@ -1,5 +1,5 @@
 This directory contains information about the OpenAppStack instance running on
-this machine. For general information, see [https://openappstack.net].
+this machine. For general information, see [https://stackspin.net].
 
 ## Flux
 
diff --git a/ansible/roles/configure/tasks/main.yml b/ansible/roles/configure/tasks/main.yml
index ad94bc811..b5d7a5c50 100644
--- a/ansible/roles/configure/tasks/main.yml
+++ b/ansible/roles/configure/tasks/main.yml
@@ -42,15 +42,15 @@
   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,8 +58,8 @@
     state: present
     create: true
     block: |
-      # Source Openappstack addtions from .bashrc_oas
-      . /root/.bashrc_oas
+      # Source Openappstack addtions from .bashrc_stackspin
+      . /root/.bashrc_stackspin
 
 - name: Record OpenAppStack version info
   tags:
@@ -70,7 +70,7 @@
     - 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
@@ -82,13 +82,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 7d1aabd9a..6150d7331 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 18191f3ac..530f814fe 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
 
diff --git a/ansible/roles/pre-configure/templates/registries.yaml b/ansible/roles/pre-configure/templates/registries.yaml
index c5bb1520b..87a9463c1 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/docs/README.md b/docs/README.md
index 2da795315..951369891 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/customizing.rst b/docs/customizing.rst
index b389c49a7..c47a682d4 100644
--- a/docs/customizing.rst
+++ b/docs/customizing.rst
@@ -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,14 +43,14 @@ 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
 =================================
diff --git a/docs/design.md b/docs/design.md
index 8cb378693..c10602942 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -103,7 +103,7 @@ 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
 use a [local storage
-provisioner](https://open.greenhost.net/openappstack/local-path-provisioner)
+provisioner](https://open.greenhost.net/stackspin/local-path-provisioner)
 that automatically provides persistent data on the VPS running OAS to an
 application that requests it.
 
@@ -114,7 +114,7 @@ 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
+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
@@ -125,7 +125,7 @@ its components in the [flux 2 documentation](https://fluxcd.io/docs).
 
 OpenAppStack 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 309c7d1d1..4d4f52114 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -20,7 +20,7 @@ OpenAppStack is:
 
 For more information, go to `the OpenAppStack website`_.
 
-.. _the OpenAppStack website: https://openappstack.net
+.. _the OpenAppStack 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 e3646b69b..25eee0786 100644
--- a/docs/installation/create_cluster.rst
+++ b/docs/installation/create_cluster.rst
@@ -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,13 +38,13 @@ 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
+OpenAppStack 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`.
@@ -60,19 +60,19 @@ 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,8 +83,8 @@ 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
@@ -110,7 +110,7 @@ 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.
@@ -120,7 +120,7 @@ OpenAppStack.
 
 ::
 
-    $ 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_oas.rst
index 82e7742e9..cc7118cdb 100644
--- a/docs/installation/install_oas.rst
+++ b/docs/installation/install_oas.rst
@@ -1,4 +1,4 @@
-.. _install_oas:
+.. _install_stackspin:
 
 ====================
 Install OpenAppStack
@@ -35,10 +35,10 @@ Please choose one of the below options:
         **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.
 
@@ -80,7 +80,7 @@ email notifications, you need to provide an email account.
 
 OpenAppStack 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::
 
@@ -128,7 +128,7 @@ 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.
 
-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
 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:
 
@@ -215,8 +215,8 @@ Step 4: Let us know!
 
 We would love to hear about your experience installing OpenAppStack.  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 OpenAppStack
 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 22ef63c2d..d0bffe2e0 100644
--- a/docs/installation/overview.rst
+++ b/docs/installation/overview.rst
@@ -9,7 +9,7 @@ Installation overview
      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>`__.
+     you encounter <https://stackspin.net/contact.html>`__.
    - When you install OpenAppStack 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
@@ -46,8 +46,8 @@ 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
 -----------------------------------
@@ -83,16 +83,16 @@ Now you can run the OpenAppStack 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`.
+   then continue with :ref:`install_stackspin`.
 #. If you want to install Openappstack on an existing Kubernetes cluster you can
-   skip the above instructions and start with :ref:`install_oas`.
+   skip the above instructions and start with :ref:`install_stackspin`.
diff --git a/docs/maintenance.rst b/docs/maintenance.rst
index d6a1c0d5a..971dc2979 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,7 +136,7 @@ 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
+``clusters`` in your clone of the stackspin git repository. Although
 these files are not essential for your OpenAppStack cluster to continue
 functioning, you may want to back this folder up because it allows easy
 access to your cluster.
@@ -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/security.rst b/docs/security.rst
index 099bfa76a..29711b3fd 100644
--- a/docs/security.rst
+++ b/docs/security.rst
@@ -13,8 +13,8 @@ the OAS 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
+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 2328a3e43..d26985e05 100644
--- a/docs/testing.rst
+++ b/docs/testing.rst
@@ -7,7 +7,7 @@ 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>`__.
 
@@ -115,7 +115,7 @@ 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
diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst
index 650f482bc..f97fca786 100644
--- a/docs/troubleshooting.rst
+++ b/docs/troubleshooting.rst
@@ -10,8 +10,8 @@ problem. This document describes what you can do.
 
 **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.
@@ -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'
@@ -233,14 +233,14 @@ your cluster with the OAS 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.
@@ -251,13 +251,13 @@ HTTPS Certificates
 OAS 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
 --------------------------------------------
diff --git a/docs/usage.rst b/docs/usage.rst
index a32cc6bb4..f7e234e5b 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -5,21 +5,21 @@ OAS 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 6c7fd51a0..870e2a07c 100644
--- a/flux2/README.md
+++ b/flux2/README.md
@@ -23,7 +23,7 @@ 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
diff --git a/flux2/apps/monitoring/eventrouter-release.yaml b/flux2/apps/monitoring/eventrouter-release.yaml
index cdea652a2..b18483d71 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 aa6f0bef8..65b6d6710 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 a8c0c76c9..53021d1f1 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:
@@ -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 1f4729181..3fdd5b71e 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
@@ -155,11 +155,11 @@ data:
           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 769a6eca2..1b30e22f8 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 e28b3b1cc..53c7ce25e 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 8c7cf6fb6..e52ff5abe 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:
@@ -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 c6d417e16..c794447b1 100644
--- a/flux2/apps/monitoring/loki-values-configmap.yaml
+++ b/flux2/apps/monitoring/loki-values-configmap.yaml
@@ -2,7 +2,7 @@
 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
diff --git a/flux2/apps/monitoring/promtail-release.yaml b/flux2/apps/monitoring/promtail-release.yaml
index 14b13f890..b374c8170 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:
@@ -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 5b247c7f7..fa166e9a5 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:
@@ -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 bdd7b84a0..340146ce7 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 d0d9a7df4..68261576b 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:
@@ -203,6 +203,6 @@ data:
         tokenUrl: "https://sso.${domain}/oauth2/token"
         userInfoUrl: "https://sso.${domain}/userinfo"
         clientSecret: "${nextcloud_oauth_client_secret}"
-        groupsClaim: "openappstack_roles"
+        groupsClaim: "stackspin_roles"
         clientId: nextcloud
         title: OpenAppStack
diff --git a/flux2/apps/nextcloud/release.yaml b/flux2/apps/nextcloud/release.yaml
index 7a6da8343..85601730d 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 835ce5fef..35879d42a 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 864768e3b..c48f58164 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 d5339c0f0..e22febfcc 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
@@ -43,7 +43,7 @@ data:
       - name: Accounts_OAuth_Custom_Openappstack_authorize_path
         value: /oauth2/auth
       - name: Accounts_OAuth_Custom_Openappstack_scope
-        value: openid profile openappstack_roles email
+        value: openid profile stackspin_roles email
       - name: Accounts_OAuth_Custom_Openappstack_id
         value: rocketchat
       - name: Accounts_OAuth_Custom_Openappstack_secret
@@ -61,7 +61,7 @@ data:
       - name: Accounts_OAuth_Custom_Openappstack_name_field
         value: preferred_username
       - name: Accounts_OAuth_Custom_Openappstack_roles_claim
-        value: openappstack_roles
+        value: stackspin_roles
       - name: Accounts_OAuth_Custom_Openappstack_merge_roles
         value: "true"
       - name: Accounts_OAuth_Custom_Openappstack_merge_users
@@ -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 32a2a6c42..86e46fc31 100644
--- a/flux2/apps/velero/release.yaml
+++ b/flux2/apps/velero/release.yaml
@@ -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 a7b4637a2..4b459e318 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 157fa6a24..0cebe4f02 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 89d9b32d4..a79a1cc21 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 ee8630ad7..8a62a50bd 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 ff8190bff..5080ac0cd 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 cc45d5713..0d2651e11 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 0e13fbaef..b911244fe 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:
@@ -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 7a12c2e19..c52b22b43 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 51ba9edbe..bcd11891a 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 483b7a297..9952710d3 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 91a33049b..90e5f5b1e 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 07fac76dd..a8dc35479 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 5b597db0a..8e2924f24 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 2f6364db8..1893f524e 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 92cdf331d..c231ba7f3 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 9bb1cff0b..54510a83c 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 fb16df35f..16d4b0d83 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 5e476ff60..7f87f6100 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
diff --git a/flux2/core/base/metallb/metallb-values-configmap.yaml b/flux2/core/base/metallb/metallb-values-configmap.yaml
index 22db3b569..fca77e3e4 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 37f8dadc8..dd5827ae7 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 5624efc1c..a9c9978bc 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 8aa377fef..aa6b99b72 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 40c851c00..466c13cf6 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 fc3b4afe5..e659f8e9f 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 364ee3b1e..110530a04 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 689719a80..163c2b939 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}"
@@ -69,7 +69,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"
@@ -79,8 +79,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"
@@ -94,7 +94,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"
@@ -108,8 +108,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"
@@ -123,7 +123,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 59a26bcc8..d825673bb 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 d8b014e60..5ec6c4734 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 b80032123..630e4addd 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,7 +2,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: oas-local-path-provisioner-values
+  name: stackspin-local-path-provisioner-values
 data:
   values.yaml: |
     nodePathMap:
@@ -13,9 +13,9 @@ data:
       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 f25f1a723..cd3d2a7fe 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 1d9d771f6..b8a80d8bc 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-apps.yaml b/flux2/infrastructure/namespaces/oas-apps.yaml
index 0ae83a7ac..815907317 100644
--- a/flux2/infrastructure/namespaces/oas-apps.yaml
+++ b/flux2/infrastructure/namespaces/oas-apps.yaml
@@ -1,4 +1,4 @@
 apiVersion: v1
 kind: Namespace
 metadata:
-  name: oas-apps
\ No newline at end of file
+  name: stackspin-apps
diff --git a/flux2/infrastructure/namespaces/oas.yaml b/flux2/infrastructure/namespaces/oas.yaml
index a960e21ab..25ae8c579 100644
--- a/flux2/infrastructure/namespaces/oas.yaml
+++ b/flux2/infrastructure/namespaces/oas.yaml
@@ -1,4 +1,4 @@
 apiVersion: v1
 kind: Namespace
 metadata:
-  name: oas
+  name: stackspin
diff --git a/flux2/infrastructure/sources/local-path-provisioner.yaml b/flux2/infrastructure/sources/local-path-provisioner.yaml
index 130194473..2082907ba 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 14c47e43c..95c54e09f 100644
--- a/flux2/infrastructure/sources/nextcloud.yaml
+++ b/flux2/infrastructure/sources/nextcloud.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/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:
diff --git a/flux2/infrastructure/sources/rocketchat-helm-chart.yaml b/flux2/infrastructure/sources/rocketchat-helm-chart.yaml
index a4e0ea313..f717787f1 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 0b51a45cc..bdedbdca4 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 750d828a3..f4273c1fa 100644
--- a/flux2/infrastructure/sources/wordpress.yaml
+++ b/flux2/infrastructure/sources/wordpress.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/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:
diff --git a/install/.flux.env.example b/install/.flux.env.example
index d67c951cc..c6524c880 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/generate_secrets.py b/install/generate_secrets.py
index 95b3e6cba..bf6cf0e01 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 b7b2000ec..8bcb58de2 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-openappstack.sh
index 55fc6f049..d151e0b09 100755
--- a/install/install-openappstack.sh
+++ b/install/install-openappstack.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 90e20008f..217b25dee 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/oas-nextcloud-override.yaml
index 72c1313a5..0a33526ff 100644
--- a/install/overrides/oas-nextcloud-override.yaml
+++ b/install/overrides/oas-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/oas-alertmanager-basic-auth.yaml.jinja
index fedb272ab..2490b0117 100644
--- a/install/templates/oas-alertmanager-basic-auth.yaml.jinja
+++ b/install/templates/oas-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/oas-kube-prometheus-stack-variables.yaml.jinja
index 035baf54b..b3478ada3 100644
--- a/install/templates/oas-kube-prometheus-stack-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-nextcloud-variables.yaml.jinja
index 6ef7809d8..59adddfcf 100644
--- a/install/templates/oas-nextcloud-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-oauth-variables.yaml.jinja
index befd2f774..0445e6d86 100644
--- a/install/templates/oas-oauth-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-prometheus-basic-auth.yaml.jinja
index d4d2d3552..fef26c014 100644
--- a/install/templates/oas-prometheus-basic-auth.yaml.jinja
+++ b/install/templates/oas-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/oas-rocketchat-variables.yaml.jinja
index 4bce7f291..7170de0b3 100644
--- a/install/templates/oas-rocketchat-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-single-sign-on-variables.yaml.jinja
index 7424dd4ed..1484b58aa 100644
--- a/install/templates/oas-single-sign-on-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-wekan-variables.yaml.jinja
index f3cc5a366..b5bad3dc2 100644
--- a/install/templates/oas-wekan-variables.yaml.jinja
+++ b/install/templates/oas-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/oas-wordpress-variables.yaml.jinja
index 18bf4339c..b491834d6 100644
--- a/install/templates/oas-wordpress-variables.yaml.jinja
+++ b/install/templates/oas-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
index a85c322e6..4f37c251a 100644
--- a/openappstack/__init__.py
+++ b/openappstack/__init__.py
@@ -1 +1 @@
-name='openappstack'
+name='stackspin'
diff --git a/openappstack/__main__.py b/openappstack/__main__.py
index e8b2d4ddf..c5c7d8796 100755
--- a/openappstack/__main__.py
+++ b/openappstack/__main__.py
@@ -20,12 +20,13 @@ 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
@@ -45,7 +46,7 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
       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(
@@ -53,13 +54,13 @@ def main():  # pylint: disable=too-many-statements,too-many-branches,too-many-lo
         description='Run installation script '
         'to deploy Openappstack 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')
 
@@ -375,16 +376,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 +394,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 +402,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 +410,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 +418,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'
         )
@@ -493,5 +494,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/openappstack/ansible.py
index 1e02d60ad..5b11b3f17 100644
--- a/openappstack/ansible.py
+++ b/openappstack/ansible.py
@@ -4,6 +4,7 @@ Module responsible for running the Ansible part of the OpenAppStack 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/openappstack/cluster.py
index 960914624..a12346ac8 100644
--- a/openappstack/cluster.py
+++ b/openappstack/cluster.py
@@ -8,8 +8,7 @@ import sys
 import greenhost_cloud
 import yaml
 from kubernetes import client, config
-
-from openappstack import ansible
+from stackspin import ansible
 
 CLUSTER_PATH = 'clusters'
 
@@ -200,31 +199,31 @@ KUBECONFIG={cluster_dir}/kube_config_cluster.yml
         """
         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 a4f6a5fda..7e90f0d87 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 5cbbb587e..7d55c5308 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 8dc60bc76..93d533434 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');
@@ -55,7 +55,7 @@ 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('Continue with ' + username)
-- 
GitLab