diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 62f3813d31343aefd8be9b2c162e5cb7e200eee3..cbdef0702d183010a1c70c32e4706eefb37d9899 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,9 +10,8 @@ stages:
 
 #==[ Prepare node ]=============================================================
 
-fe-cache-node-job:
+.fe-node-job:
   image: node:16-alpine
-  stage: setup
   tags:
     - commul
   cache:
@@ -21,36 +20,76 @@ fe-cache-node-job:
         - frontend/package-lock.json
     paths:
       - frontend/.npm/
-  script:
+  before_script:
     - cd frontend
     - npm ci --cache .npm --prefer-offline
   only:
     - tags
     - development
 
-#==[ Frontend checks ]==========================================================
-
-fe-check-node-job:
-  needs:
-    - fe-cache-node-job
+.be-node-job:
   image: node:16-alpine
-  stage: check
   tags:
     - commul
   cache:
     key:
       files:
-        - frontend/package-lock.json
+        - backend/package-lock.json
     paths:
-      - frontend/.npm/
-  script:
-    - cd frontend
+      - backend/.npm/
+  before_script:
+    - cd backend
     - npm ci --cache .npm --prefer-offline
-    - npm run test
   only:
     - tags
     - development
 
+fe-cache-node-job:
+  extends: .fe-node-job
+  stage: setup
+
+be-cache-node-job:
+  extends: .be-node-job
+  stage: setup
+
+#==[ Frontend checks ]==========================================================
+
+fe-lint-node-job:
+  extends: .fe-node-job
+  stage: check
+  needs:
+    - fe-cache-node-job
+  script:
+    - cd frontend
+    - npm run style:check
+
+fe-test-node-job:
+  extends: .fe-node-job
+  stage: check
+  needs:
+    - fe-cache-node-job
+  script:
+    - cd frontend
+    - npm run test
+
+be-lint-node-job:
+  extends: .be-node-job
+  stage: check
+  needs:
+    - be-cache-node-job
+  script:
+    - cd backend
+    - npm run style:check
+
+be-test-node-job:
+  extends: .be-node-job
+  stage: check
+  needs:
+    - be-cache-node-job
+  script:
+    - cd backend
+    - npm run test
+
 #==[ Backend build ]============================================================
 
 # TODO: cache docker layers