diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3460d643af133be0521393e2bfbe0a6a03e33ca9..a2de4d53490d9ae9e29647827910ea4da7375c07 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,9 +3,30 @@ variables:
   DOCKER_IMAGE: "docker:20.10.12"
 
 stages:
+  - setup
   - build
   - deploy
 
+#==[ Prepare node ]=============================================================
+
+fe-cache-node-job:
+  image: node:16-alpine
+  stage: setup
+  tags:
+    - commul
+  cache:
+    key:
+      files:
+        - frontend/package-lock.json
+    paths:
+      - frontend/.npm/
+  script:
+    - cd frontend
+    - npm ci --cache .npm --prefer-offline
+  only:
+    - tags
+    - development
+
 #==[ Backend build ]============================================================
 
 # TODO: cache docker layers