diff --git a/ui/package-lock.json b/ui/package-lock.json
index 70de08177..3964177b4 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -40,7 +40,6 @@
         "uuid": "^10.0.0"
       },
       "devDependencies": {
-        "@nabla/vite-plugin-eslint": "^2.0.2",
         "@testing-library/jest-dom": "^6.5.0",
         "@testing-library/react": "^12.1.5",
         "@testing-library/react-hooks": "^7.0.2",
@@ -58,6 +57,7 @@
         "eslint-plugin-react": "^7.37.0",
         "eslint-plugin-react-hooks": "^4.6.0",
         "eslint-plugin-react-refresh": "^0.4.4",
+        "happy-dom": "^15.7.4",
         "jsdom": "^25.0.1",
         "prettier": "^3.3.3",
         "ra-test": "^3.19.12",
@@ -2786,21 +2786,6 @@
         "react-dom": "^16.8.0 || ^17.0.0"
       }
     },
-    "node_modules/@nabla/vite-plugin-eslint": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@nabla/vite-plugin-eslint/-/vite-plugin-eslint-2.0.4.tgz",
-      "integrity": "sha512-hXLv7XPZLKP54AHLI6JzlCRYptf34rBmT1FyRBi++iN5ucjO7CEf5etV3DfQ2rfTpgMbY+3hoCAfwilA6lyWdw==",
-      "dev": true,
-      "dependencies": {
-        "@types/eslint": "*",
-        "chalk": "^4",
-        "debug": "^4"
-      },
-      "peerDependencies": {
-        "eslint": "^8.45 || ^9",
-        "vite": "^4 || ^5"
-      }
-    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3694,16 +3679,6 @@
         "@babel/types": "^7.20.7"
       }
     },
-    "node_modules/@types/eslint": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
-      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
-      "dev": true,
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
-    },
     "node_modules/@types/estree": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -6459,6 +6434,38 @@
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
+    "node_modules/happy-dom": {
+      "version": "15.7.4",
+      "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-15.7.4.tgz",
+      "integrity": "sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==",
+      "dev": true,
+      "dependencies": {
+        "entities": "^4.5.0",
+        "webidl-conversions": "^7.0.0",
+        "whatwg-mimetype": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/happy-dom/node_modules/webidl-conversions": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+      "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/happy-dom/node_modules/whatwg-mimetype": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+      "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/has-bigints": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
diff --git a/ui/package.json b/ui/package.json
index 5437dc180..baf723237 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -49,7 +49,6 @@
     "uuid": "^10.0.0"
   },
   "devDependencies": {
-    "@nabla/vite-plugin-eslint": "^2.0.2",
     "@testing-library/jest-dom": "^6.5.0",
     "@testing-library/react": "^12.1.5",
     "@testing-library/react-hooks": "^7.0.2",
@@ -67,6 +66,7 @@
     "eslint-plugin-react": "^7.37.0",
     "eslint-plugin-react-hooks": "^4.6.0",
     "eslint-plugin-react-refresh": "^0.4.4",
+    "happy-dom": "^15.7.4",
     "jsdom": "^25.0.1",
     "prettier": "^3.3.3",
     "ra-test": "^3.19.12",
diff --git a/ui/vite.config.js b/ui/vite.config.js
index acbe98de2..910d21871 100644
--- a/ui/vite.config.js
+++ b/ui/vite.config.js
@@ -1,7 +1,6 @@
 import { defineConfig } from 'vite'
 import react from '@vitejs/plugin-react-swc'
 import { VitePWA } from 'vite-plugin-pwa'
-import eslintPlugin from '@nabla/vite-plugin-eslint'
 
 const frontendPort = parseInt(process.env.PORT) || 4533
 const backendPort = frontendPort + 100
@@ -10,7 +9,6 @@ const backendPort = frontendPort + 100
 export default defineConfig({
   plugins: [
     react(),
-    eslintPlugin({ formatter: 'stylish' }),
     VitePWA({
       registerType: 'autoUpdate',
       manifest: manifest(),
@@ -37,6 +35,7 @@ export default defineConfig({
     setupFiles: './src/setupTests.js',
     css: true,
     reporters: ['verbose'],
+    // reporters: ['default', 'hanging-process'],
     coverage: {
       reporter: ['text', 'json', 'html'],
       include: ['src/**/*'],