diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e472b7318509db963871fb52d237746ea83d86b2
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,56 @@
+stages:
+  - lint
+  - build
+
+.eslint:
+  image: node:16.14.0-alpine
+  stage: lint
+  script:
+    - cd $CONTEXT
+    # install packages
+    - npm install
+    # Run eslint
+    - npm run lint
+
+.build:
+  stage: build
+  rules:
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    - if: $CI_COMMIT_BRANCH
+  image:
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  script:
+    - if [ $CI_COMMIT_BRANCH = $CI_DEFAULT_BRANCH ] ; then
+    - TAG="latest" ; else
+    - TAG=$CI_COMMIT_BRANCH ; fi
+    - mkdir -p /kaniko/.docker
+    - echo "{\"auths\":{\"${REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "robot\$${REGISTRY_USERNAME}" "${REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
+    - >-
+      /kaniko/executor
+      --context $CONTEXT
+      --dockerfile $CONTEXT/Dockerfile
+      --destination "${REGISTRY}/$IMAGE_NAME:${TAG}"
+      --cache
+
+lint-front:
+  extends: .eslint
+  variables:
+    CONTEXT: frontend/
+
+lint-back:
+  extends: .eslint
+  variables:
+    CONTEXT: backend/
+
+build-front:
+  extends: .build
+  variables:
+    CONTEXT: frontend/
+    IMAGE_NAME: front
+
+build-back:
+  extends: .build
+  variables:
+    CONTEXT: backend/
+    IMAGE_NAME: back
diff --git a/backend/package.json b/backend/package.json
index d1fd70032a7c6b715f43c833303485a417475112..a067f27c606d6a1da1b0f7d8fbb7567eb29a9b33 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -5,7 +5,8 @@
   "scripts": {
     "dev": "dotenv nodemon ./server.js",
     "start": "dotenv node ./server.js",
-    "lint": "eslint . --fix"
+    "lint": "eslint . ",
+    "format": "eslint . --fix"
   },
   "dependencies": {
     "cors": "^2.8.5",