diff --git a/.eslintrc.js b/.eslintrc.js
index 1405940ed6d274595b90e54e638005923fe62f80..41ce705b2ee4b84935e042fa4283a14644978383 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -12,6 +12,7 @@ module.exports = {
     parser: "@babel/eslint-parser",
   },
   rules: {
+    "linebreak-style": 0,
     "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
     "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
   },
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 64226ef4d8cfb17bd806c1510b3063d28b96f959..d5a3272aa2efef8561bb8f8b3e676da1b1fa59b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,56 +1,52 @@
-# This file is a template, and might need editing before it works on your project.
-# To contribute improvements to CI/CD templates, please follow the Development guide at:
-# https://docs.gitlab.com/ee/development/cicd/templates.html
-# This specific template is located at:
-# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml
+image: node:lts
 
-# This is a sample GitLab CI/CD configuration file that should run without any modifications.
-# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
-# it uses echo commands to simulate the pipeline execution.
-#
-# A pipeline is composed of independent jobs that run scripts, grouped into stages.
-# Stages run in sequential order, but jobs within stages run in parallel.
-#
-# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
-
-stages:          # List of stages for jobs, and their order of execution
+stages:
   - build
   - test
+#  - deploy
 
-image: node:16
-
+# These folders are cached between builds
+# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
 cache:
+  key: ${CI_COMMIT_REF_SLUG}
   paths:
+    # Default cache directory from https://classic.yarnpkg.com/en/docs/install-ci/#gitlab.
     - node_modules/
+    # Enables git-lab CI caching. Both .cache and public must be cached, otherwise builds will fail.
+    - .cache/
+    - public/
 
-install_dependencies_job:       # This job runs in the build stage, which runs first.
+npm:install:
   stage: build
-
-  script:
-    - echo "Installing dependencies..."
-    - npm install
-    - echo "Dependencies installed."
-  artifacts:
-    paths:
-      - node_modules/
-
-
-lint-test-job:   # This job also runs in the test stage.
-  stage: test    # It can run at the same time as unit-test-job (in parallel).
   script:
-    - echo "Linting the code..."
-    - npm run lint
-    - echo "Code-linting complete."
-  artifacts:
-    paths:
-      - node_modules/
+    - npm ci
 
-unit-test-job:   # This job runs in the test stage.
-  stage: test    # It only starts when the job in the build stage completes successfully.
+test:unit:
+  stage: test
+  needs: ["npm:install"]
   script:
-    - echo "Running unit tests..."
-    - npm run test:unit -- --coverage
-    - echo "Unit tests complete."
-  artifacts:
-    paths:
-      - node_modules/
+    - npm ci
+    - npm run test:unit
+
+#test:coverage:
+#  stage: test
+#  needs: ["npm:install"]
+#  script:
+#    - ./node_modules/.bin/gatsby info
+#  rules:
+#    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+#    - if: $CI_MERGE_REQUEST_ID
+
+#pages:
+#  stage: deploy
+#  needs: 
+#    - npm:install
+#    - test:unit
+#    - test:gatsby
+#  script:
+#    - ./node_modules/.bin/gatsby build --prefix-paths
+#  artifacts:
+#    paths:
+#      - public
+#  rules:
+#    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH