diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0cbffc3f24ea9bbb0a880046c9ed293c753ec04e
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,71 @@
+variables:
+  LOCAL_DIR: public
+
+stages: 
+ - build
+ - test_deployment
+ - production_deployment
+
+.sftp: &sftp_template
+  image: ${CI_REGISTRY_IMAGE}/ubuntu_sftp
+  tags:
+    - wasenweiler.sit-servers.net
+  script:
+    - mkdir -p ~/.ssh
+    - echo "${SFTP_KEY}" > ~/.ssh/id_rsa
+    - echo "${SFTP_HOSTCERT}" > ~/.ssh/known_hosts
+    - chmod 600 ~/.ssh/*
+    - mv ${LOCAL_DIR} ${REMOTE_DIR}
+    - sed -i "s/%%%DB_PASSWORD%%%/${DB_PASSWORD}/g" ${REMOTE_DIR}/config.php;
+    - sed -i "s/%%%SALT%%%/${SALT}/g" ${REMOTE_DIR}/config.php;
+    - sftp ${SFTP_USERNAME}@${SFTP_HOST} <<< "put -r ${REMOTE_DIR}"
+
+
+brunch_build:
+  stage: build
+  image: npm
+  before_script:
+    - npm i -g brunch
+  script:
+    - brunch b -p
+  artifacts:
+    paths:
+      - public/*
+    expire_in: 3 days
+
+test_deploy: 
+  stage: test_deployment
+  dependencies:
+    - brunch_build
+  variables:
+    SFTP_USERNAME: ${TEST_USERNAME}
+    SFTP_KEY: ${TEST_KEY}
+    SFTP_HOST: ${TEST_HOST}
+    SFTP_HOSTCERT: ${TEST_HOSTCERT}
+    REMOTE_DIR: ${TEST_DIR}
+    GIT_STRATEGY: none
+
+  environment:
+    name: Preview
+    url: http://tls-tracking.preview.sauerburger.com/
+
+  <<: *sftp_template
+
+test_deploy: 
+  stage: production_deployment
+  dependencies:
+    - brunch_build
+  variables:
+    SFTP_USERNAME: ${PRODUCTION_USERNAME}
+    SFTP_KEY: ${PRODUCTION_KEY}
+    SFTP_HOST: ${PRODUCTION_HOST}
+    SFTP_HOSTCERT: ${PRODUCTION_HOSTCERT}
+    REMOTE_DIR: ${PRODUCTION_DIR}
+    GIT_STRATEGY: none
+
+  environment:
+    name: Production
+    url: http://tls-tracking.sauerburger.com/
+
+  <<: *sftp_template
+