diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 30fb61962df7319b274cdfae791a6f804421fa1a..a472d5fdc5f65900ab49a30fb613a62cd1ff6487 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,30 @@
 image: node:latest
+
+stages:
+  - build  # Jobs placed in build-stage will run first
+  - test   # Jobs placed in test-stage will run after build-jobs
+  - deploy # Jobs placed in build-stage will run last after test-jobs
+
+install:
+  stage: build
+  script:
+    - npm install
+  # Keep node_modules-folder for the following stages:
+  artifacts:
+    paths:
+      - node_modules
+
+test:
+  stage: test # Job test will run in parallel with the job flow
+  script:
+    - npm test
+
+flow:
+  stage: test # Job flow will run in parallel with the job test
+  script:
+    - npm install --global flow-bin
+    - flow check
+
 deploy:
   stage: deploy
   script:
diff --git a/public/index.html b/public/index.html
index 4260fc32daaeee4fb12b1dd5d8f674eb2c48c4f5..668f5853125bf9d9ee337ae6fed969a4c32b3b86 100644
--- a/public/index.html
+++ b/public/index.html
@@ -4,6 +4,6 @@
     <meta charset="UTF-8" />
   </head>
   <body>
-    Running on port 2000.
+    Running back on port 3000.
   </body>
 </html>
diff --git a/src/server.js b/src/server.js
index 429d4f3e70c2e3689877e5742380d8c0055b837c..b73f484ebfa1f007b2daf788d45a733ed651b764 100644
--- a/src/server.js
+++ b/src/server.js
@@ -9,7 +9,7 @@ app.use(express.static(path.join(__dirname, '../public')));
 
 // The listen promise can be used to wait for the web server to start (for instance in your tests)
 export let appListen = new Promise<void>((resolve, reject) => {
-  app.listen(2000, (error: ?Error) => {
+  app.listen(3000, (error: ?Error) => {
     if (error) return reject(error.message);
 
     console.log('Express server started');