diff --git a/gitlab-ci-1.2.yml b/gitlab-ci-1.2.yml
index 35541605c6d9b553ddc470ab2ea1f23cd1cd2574..2c9b9ec0a596368c1b948287dc6131f2408f27b9 100644
--- a/gitlab-ci-1.2.yml
+++ b/gitlab-ci-1.2.yml
@@ -12,6 +12,9 @@ variables:
   CONTRIBUTORS: "wpdesk,dyszczo,grola,piotrpo,marcinkolanko"
   MINIMAL_WP_TESTED_UP: "6.2"
   MINIMAL_WC_TESTED_UP: "8.1"
+  DEMO_DEPLOY_TARGETS:
+    value: "/(wpdesk|octolize)/"
+    description: "Override this variable in project's .gitlab-ci.yml to support other servers. List supported targets in a regexg expression. To support all possible targets just use \"/.*/\". Currently supported targets: demo.wpdesk.org, demo.wpdesk.pl, demo.octolize.com, stage.demo.octolize.com, demo.flexibleinvoices."
 
 stages:
   - prepare-vendor
@@ -38,6 +41,7 @@ include:
       - '/includes/tests/codeception-parallel.yml'
       - '/includes/tests/integration.yml'
       - '/includes/deploy.yml'
+      - '/includes/deploy/demo.yml'
       - '/includes/mixins/.after-codeception.yml'
       - '/includes/mixins/.composer-auth.yml'
       - '/includes/mixins/.skip-mr.yml'
diff --git a/includes/deploy.yml b/includes/deploy.yml
index 6feb289cbda753f2537ba8fbce38af2b31fd8774..c3c86304b54c86f484a3b1912d95dc1b9f2ccea6 100644
--- a/includes/deploy.yml
+++ b/includes/deploy.yml
@@ -10,7 +10,7 @@
   only:
     - tags
 
-.template: &job-build-to_deploy
+build to deploy:
   image: wpdesknet/phpunit-woocommerce:0-0
   stage: pre-deploy
   tags:
@@ -47,7 +47,6 @@
     - rm -rf composer.lock auth.json phpcs.xml.dist phpunit-integration.xml phpunit-unit.xml composer.phar wp-cli.phar functional tmp_artifacts .tmp tools codeception.dist.yml .env.testing wp-install.sh
     - rm -rf phpcs.xml.dist phpunit-integration.xml phpunit-unit.xml wp-cli.phar functional tmp_artifacts scoper.inc.php phpstan.dist phpstan.neon.dist
     - rm -rf assets-src package.json package-lock.json .babelrc webpack.mix.js webpack.config.js README.md
-
     - find ./vendor -type d -name "tests" -exec rm -rf {} \; 2>/dev/null || (exit 0)
     - find ./vendor -name "LICENSE" -delete
     - find ./vendor -name "README.md" -delete
@@ -59,9 +58,6 @@
       - $IS_LIBRARY
       - $IS_NPM_LIBRARY
 
-build to deploy:
-  <<: *job-build-to_deploy
-
 plugin zip:
   image: wpdesknet/phpunit-woocommerce:0-0
   stage: pre-deploy
@@ -125,62 +121,6 @@ deploy to license:
       - $IS_LIBRARY
       - $IS_NPM_LIBRARY
 
-deploy to demo NET:
-  <<: *job-deploy-template
-  before_script:
-    - eval "$(ssh-agent -s)"
-    - chmod 600 "$GLOBAL_SSH_PRIV_KEY"
-    - ssh-add "$GLOBAL_SSH_PRIV_KEY"
-    - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts
-  script:
-    - rsync -rlDe 'ssh -p 40022' --delete release/${CI_PROJECT_NAME}/ serwer296287@serwer296287.lh.pl:/home/platne/serwer296287/public_html/demo.wpdesk.org/wp-content/plugins/${CI_PROJECT_NAME}
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <${CI_PROJECT_URL}|${CI_PROJECT_NAME}> zdeployowany do demo w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: wpdesk demo net
-    url: https://demo.wpdesk.org
-  except:
-    variables:
-      - $IS_LIBRARY
-      - $IS_NPM_LIBRARY
-
-deploy to demo PL:
-  <<: *job-deploy-template
-  before_script:
-    - eval "$(ssh-agent -s)"
-    - chmod 600 "$GLOBAL_SSH_PRIV_KEY"
-    - ssh-add "$GLOBAL_SSH_PRIV_KEY"
-    - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts
-  script:
-    - rsync -rlDe 'ssh -p 40022' --delete release/${CI_PROJECT_NAME}/ serwer296287@serwer296287.lh.pl:/home/platne/serwer296287/public_html/demo.wpdesk.pl/wp-content/plugins/${CI_PROJECT_NAME}
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <https://gitlab.com/wpdesk/${CI_PROJECT_NAME}|${CI_PROJECT_NAME}> zdeployowany do demo PL w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: wpdesk demo pl
-    url: https://demo.wpdesk.pl
-  except:
-    variables:
-      - $IS_LIBRARY
-      - $IS_NPM_LIBRARY
-
-deploy to demo octolize:
-  <<: *job-deploy-template
-  before_script:
-    - echo "$DEMO_FS_SSH_KEY" | tr -d '\r' > ~/.ssh/id_rsa_demo_fs
-    - chmod 0600 ~/.ssh/id_rsa_demo_fs
-    - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts
-  script:
-    - echo ${WPDESK_CI_VERSION}
-    - ssh-keyscan -H -p 222 s125.cyber-folks.pl >> ~/.ssh/known_hosts
-    - rsync -v --delete -rlDe 'ssh -p 222 -v -i ~/.ssh/id_rsa_demo_fs' ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME} wlgmnfabmq@s125.cyber-folks.pl:/home/wlgmnfabmq/domains/demo.octolize.com/public_html/wp-content/plugins
-    - rsync -v --delete -rlDe 'ssh -p 222 -v -i ~/.ssh/id_rsa_demo_fs' ${CI_PROJECT_DIR}/release/${CI_PROJECT_NAME} wlgmnfabmq@s125.cyber-folks.pl:/home/wlgmnfabmq/domains/stage.demo.octolize.com/public_html/wp-content/plugins
-    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <${CI_PROJECT_URL}|${CI_PROJECT_NAME}> zdeployowany do demo.octolize.com w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
-  environment:
-    name: demo octolize
-    url: https://demo.octolize.com
-  except:
-    variables:
-      - $IS_LIBRARY
-      - $IS_NPM_LIBRARY
-
 deploy to repository:
   <<: *job-deploy-template
   cache:
diff --git a/includes/deploy/demo.yml b/includes/deploy/demo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1e686938cb6ae022b9c03cf312d4f680063f462e
--- /dev/null
+++ b/includes/deploy/demo.yml
@@ -0,0 +1,71 @@
+deploy:demo:
+  image: gitlab.wpdesk.dev:5050/wpdesk/docker-tests/amazon-svn-deploy:24.09
+  environment:
+    name: $DEPLOY_SERVER
+    url: https://$DEPLOY_SERVER
+  stage: deploy
+  tags:
+    - deploy
+  dependencies:
+    - build to deploy
+  retry: 2
+  parallel:
+    matrix:
+      - DEPLOY_SERVER:
+          - demo.wpdesk.org
+          - demo.wpdesk.pl
+          - demo.octolize.com
+          - stage.demo.octolize.com
+          - demo.flexibleinvoices.com
+  when: on_success
+  rules:
+    - if: $IS_LIBRARY || $IS_NPM_LIBRARY
+      when: never
+    # Run only for tagged deployments
+    - if: $CI_COMMIT_TAG == null
+      when: never
+    # Omit if server is not in deploy targets
+    - if: $DEPLOY_SERVER !~ $DEMO_DEPLOY_TARGETS
+      when: never
+    # Specific server overrides
+    ## demo.wpdesk.pl
+    - if: $DEPLOY_SERVER == 'demo.wpdesk.pl'
+      variables:
+        SSH_DSN: serwer296287@serwer296287.lh.pl:/home/platne/serwer296287/public_html/demo.wpdesk.pl/wp-content/plugins
+        SSH_PORT: 40022
+    ## demo.wpdesk.org
+    - if: $DEPLOY_SERVER == 'demo.wpdesk.org'
+      variables:
+        SSH_DSN: serwer296287@serwer296287.lh.pl:/home/platne/serwer296287/public_html/demo.wpdesk.org/wp-content/plugins
+        SSH_PORT: 40022
+    ## demo.octolize.com
+    - if: $DEPLOY_SERVER == 'demo.octolize.com'
+      variables:
+        SSH_DSN: wlgmnfabmq@s125.cyber-folks.pl:/home/wlgmnfabmq/domains/demo.octolize.com/public_html/wp-content/plugins
+        SSH_PORT: 222
+        GLOBAL_SSH_PRIV_KEY: $DEMO_FS_SSH_KEY_FILE
+    ## stage.demo.octolize.com
+    - if: $DEPLOY_SERVER == 'stage.demo.octolize.com'
+      variables:
+        SSH_DSN: wlgmnfabmq@s125.cyber-folks.pl:/home/wlgmnfabmq/domains/stage.demo.octolize.com/public_html/wp-content/plugins
+        SSH_PORT: 222
+        GLOBAL_SSH_PRIV_KEY: $DEMO_FS_SSH_KEY_FILE
+    ## demo.flexibleinvoices.com
+    - if: $DEPLOY_SERVER == 'demo.flexibleinvoices.com'
+      variables:
+        SSH_DSN: serwer296287@serwer296287.lh.pl:/home/platne/serwer296287/public_html/demo.flexibleinvoices.com/wp-content/plugins
+        SSH_PORT: 40022
+  before_script:
+    - eval "$(ssh-agent -s)"
+    - chmod 600 "$GLOBAL_SSH_PRIV_KEY"
+    - ssh-add "$GLOBAL_SSH_PRIV_KEY"
+    - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts
+  script:
+    - rsync -rlDe "ssh -p $SSH_PORT" --delete "$CI_PROJECT_DIR/release/$CI_PROJECT_NAME" $SSH_DSN
+    - 'curl -X POST --data-urlencode "payload={\"text\": \"Projekt <${CI_PROJECT_URL}|${CI_PROJECT_NAME}> zdeployowany do <${CI_ENVIRONMENT_URL}|${CI_ENVIRONMENT_NAME}> w wersji ${CI_COMMIT_REF_NAME}\", }" https://hooks.slack.com/services/${SLACK_AUTH}'
+
+# deploy to demo octolize:
+#   before_script:
+#     - echo "$DEMO_FS_SSH_KEY" | tr -d '\r' > ~/.ssh/id_rsa_demo_fs
+#     - chmod 0600 ~/.ssh/id_rsa_demo_fs
+#     - echo "$SSH_KNOWN_HOSTS" | tr -d '\r' > ~/.ssh/known_hosts