diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6868f6f676ca0342ea4455d7f942cc8e61fce7b2..71f167fecdcee5948a9b7fd2caa03252ec4852d6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,7 @@ stages:
   - build
   - test
   - deploy
+  - upload
 
 variables:
   COMMON_CONFIG_REMOTE: https://root:$CONFIG_ACCESS_TOKEN@$CI_SERVER_HOST/VIPS/vips-common-config.git
@@ -45,21 +46,61 @@ test:
   tags:
     - vips-java
 
-deploy-snapshot:
+deploy-to-staging:
   stage: deploy
+  script:
+    - apk add --no-cache rsync openssh
+    - mkdir -p ~/.ssh
+    - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa
+    - chmod 600 ~/.ssh/id_dsa
+    - cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts
+    - chmod 644 ~/.ssh/known_hosts
+    #- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
+    - WAR_FILE=$(find target -maxdepth 1 -type f -name "*.war" | sort -n | tail -1)
+    - if [ -z "$WAR_FILE" ]; then echo "No WAR files found in target directory"; exit 1; fi
+    - echo "Deploying $WAR_FILE to the server"
+    - rsync -rav --delete "$WAR_FILE" $SERVER_USER@$SERVER_IP:/home/deployer/
+  tags:
+    - vips-java
+  rules:
+    - if: '$CI_COMMIT_REF_NAME == $MAIN_BRANCH'
+  environment:
+    name: staging
+    url: https://vipscore02test.nibio.no
+
+upload-snapshot:
+  stage: upload
   script:
     - export VERSION=$(./mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS --batch-mode --no-transfer-progress --non-recursive help:evaluate -Dexpression=project.version | grep -v "\[.*")
     - if ! [[ $VERSION =~ .*SNAPSHOT ]]; then
         echo "Version '$VERSION' is not SNAPSHOT"; exit 1;
       fi
     - './mvnw $MAVEN_POM_WITH_MODELS $MAVEN_CLI_OPTS $MAVEN_OPTS deploy -DskipTests'
+    - apk add --no-cache rsync openssh
+    - mkdir -p ~/.ssh
+    - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa
+    - chmod 600 ~/.ssh/id_dsa
+    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
+    - rsync -rav --delete dist/ $SERVER_USER@$SERVER_IP:/home/deployer/frontend
   tags:
     - vips-java
   rules:
     - if: '$CI_COMMIT_REF_NAME == $MAIN_BRANCH'
 
-deploy-release:
+deploy-to-production:
   stage: deploy
+  script:
+    - echo "NOT IMPLEMENTED"
+  tags:
+    - vips-java
+  only:
+    - release
+  environment:
+    name: production
+    url: https://vipscore02.nibio.no
+
+upload-and-tag-release:
+  stage: upload
   script:
     # Use access token given by CI/CD variable ACCESS_TOKEN to authenticate
     - &authenticate