From ac3fb460881daa4b8c46bdfa74eaadea4ef7b1fd Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 9 Feb 2024 12:29:47 +0100
Subject: [PATCH] Add info page, pipeline

---
 .gitlab-ci.yml                  |  17 ++++
 next-env.d.ts                   |   4 +-
 package-lock.json               | 143 +++++++++++++++++---------------
 package.json                    |  36 ++++----
 pages/_app.tsx                  |  27 ++++--
 pages/api/auth/[...nextauth].ts |   6 +-
 pages/info/index.jsx            |  19 +++++
 pages/login/index.tsx           |   3 +
 public/favicon.ico              | Bin 101076 -> 67646 bytes
 src/components/fdo_logo.jsx     |  15 ++++
 tsconfig.json                   |  51 +++++++++---
 11 files changed, 215 insertions(+), 106 deletions(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 pages/info/index.jsx
 create mode 100644 src/components/fdo_logo.jsx

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..887a823
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,17 @@
+
+default:
+  image: node:lts-alpine
+  tags:
+    - docker
+
+workflow:
+  rules:
+    - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_NAME != $CI_COMMIT_TAG
+
+stages:
+  - test
+
+webui:build-test:
+  stage: test
+  script:
+    - npm run build
diff --git a/next-env.d.ts b/next-env.d.ts
index c6643fd..4f11a03 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,3 +1,5 @@
 /// <reference types="next" />
-/// <reference types="next/types/global" />
 /// <reference types="next/image-types/global" />
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/package-lock.json b/package-lock.json
index 49efe31..e46bc7d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,14 +14,14 @@
         "@mui/lab": "^5.0.0-alpha.85",
         "@mui/material": "^5.8.6",
         "@mui/x-data-grid": "^6.6.0",
-        "@refinedev/cli": "^2.16.21",
-        "@refinedev/core": "^4.46.1",
-        "@refinedev/devtools": "^1.1.29",
-        "@refinedev/inferencer": "^4.5.16",
-        "@refinedev/kbar": "^1.3.5",
-        "@refinedev/mui": "^5.14.1",
-        "@refinedev/nextjs-router": "^5.5.5",
-        "@refinedev/react-hook-form": "^4.8.13",
+        "@refinedev/cli": "^2.16.24",
+        "@refinedev/core": "^4.47.1",
+        "@refinedev/devtools": "^1.1.32",
+        "@refinedev/inferencer": "^4.5.20",
+        "@refinedev/kbar": "^1.3.6",
+        "@refinedev/mui": "^5.14.4",
+        "@refinedev/nextjs-router": "^5.5.7",
+        "@refinedev/react-hook-form": "^4.8.14",
         "@refinedev/simple-rest": "^5.0.1",
         "next": "^13.0.6",
         "next-auth": "^4.20.1",
@@ -1635,9 +1635,9 @@
       }
     },
     "node_modules/@ory/client": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@ory/client/-/client-1.5.2.tgz",
-      "integrity": "sha512-GjCzukyyMPg1Pp3uyAIbIhI+OOO9ekR1Zonz4+X29nt6OtD3Efha8BCRKEooKeeoKLtI3HYUXXxD6zLuPns41Q==",
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/@ory/client/-/client-1.6.1.tgz",
+      "integrity": "sha512-CboARAoTtXOFx1fVVPN/IezU5S6uEOtSvI8Y6LkXD6NKiMzJdc9Ezt8m807toI6lCz1Gc+DCD1OX6gnHnMjb4g==",
       "dependencies": {
         "axios": "^1.6.1"
       }
@@ -1755,11 +1755,11 @@
       "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ=="
     },
     "node_modules/@refinedev/cli": {
-      "version": "2.16.23",
-      "resolved": "https://registry.npmjs.org/@refinedev/cli/-/cli-2.16.23.tgz",
-      "integrity": "sha512-Me7VOhC/gx5bZEakkaYb1kaOObWRPxNAYgW78Ji96wu25+7V7rURiLJfEF9FtIv3XxIChuybO8cbTzp27NDsKA==",
+      "version": "2.16.24",
+      "resolved": "https://registry.npmjs.org/@refinedev/cli/-/cli-2.16.24.tgz",
+      "integrity": "sha512-xN7xJMbA8tyHCIvTR6ZuvMNEbEDzjGH3XF4CKhRql7k5Q8TCpWhmUZ2cFHEIa5RpdYaboS7lFAdwwm2uW0rLVQ==",
       "dependencies": {
-        "@refinedev/devtools-server": "1.1.23",
+        "@refinedev/devtools-server": "1.1.24",
         "boxen": "^5.1.2",
         "cardinal": "^2.1.1",
         "center-align": "1.0.1",
@@ -1800,11 +1800,11 @@
       }
     },
     "node_modules/@refinedev/core": {
-      "version": "4.47.0",
-      "resolved": "https://registry.npmjs.org/@refinedev/core/-/core-4.47.0.tgz",
-      "integrity": "sha512-kCKw7zvm6kbdUmBcoDLEF3+lN6d+FZ2x++KEWfbiMDaU8RndMCgPwywz3Edi1ehbZ5e4PkitenwrsKVmrRBRCw==",
+      "version": "4.47.1",
+      "resolved": "https://registry.npmjs.org/@refinedev/core/-/core-4.47.1.tgz",
+      "integrity": "sha512-J2bsJTZ+pkqwXlkH84oauPkc0O9P6m+39FF7TgvvkKzu7XKIg/ifoeG1PDMy5Nxgdb9oiJLr0H4YQYKNi8JErA==",
       "dependencies": {
-        "@refinedev/devtools-internal": "1.1.4",
+        "@refinedev/devtools-internal": "1.1.5",
         "@tanstack/react-query": "^4.10.1",
         "lodash": "^4.17.21",
         "lodash-es": "^4.17.21",
@@ -1823,12 +1823,12 @@
       }
     },
     "node_modules/@refinedev/devtools": {
-      "version": "1.1.31",
-      "resolved": "https://registry.npmjs.org/@refinedev/devtools/-/devtools-1.1.31.tgz",
-      "integrity": "sha512-waCCUvE5qW8N2c8m3ub0wVPb88hPH0CAFfHpIzCinkccDZ8dLZpvEl3v89IxcsvrNAwFLW69zEx6n4j4TibKhA==",
+      "version": "1.1.32",
+      "resolved": "https://registry.npmjs.org/@refinedev/devtools/-/devtools-1.1.32.tgz",
+      "integrity": "sha512-xFtIiYUjbvqhz0iKFl/CZZOajIOuHWmprSwOt85qdTAF3VkUzwDiPdK/6QdgcBgCZ7aToWu1jFKyGs5h4uIiXA==",
       "dependencies": {
         "@aliemir/dom-to-fiber-utils": "^0.4.0",
-        "@refinedev/devtools-shared": "1.1.2",
+        "@refinedev/devtools-shared": "1.1.3",
         "error-stack-parser": "^2.1.4",
         "lodash": "^4.17.21",
         "lodash-es": "^4.17.21"
@@ -1837,9 +1837,9 @@
         "node": ">=10"
       },
       "peerDependencies": {
-        "@refinedev/cli": "2.16.23",
+        "@refinedev/cli": "2.16.24",
         "@refinedev/core": "^4.46.1",
-        "@refinedev/devtools-server": "1.1.23",
+        "@refinedev/devtools-server": "1.1.24",
         "@types/react": "^17.0.0 || ^18.0.0",
         "@types/react-dom": "^17.0.0 || ^18.0.0",
         "react": "^17.0.0 || ^18.0.0",
@@ -1847,11 +1847,11 @@
       }
     },
     "node_modules/@refinedev/devtools-internal": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@refinedev/devtools-internal/-/devtools-internal-1.1.4.tgz",
-      "integrity": "sha512-AuXlKRdDZ8POC1B2DMa3AzSICN3LmKebmsMUry3+T9xc7TkL2lGy3anqJnBOQw8asWd5fr+vz1UYjdVcvqUqJA==",
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/@refinedev/devtools-internal/-/devtools-internal-1.1.5.tgz",
+      "integrity": "sha512-24yE9r6rnTcCAe35XqmeiL5oL9FlodAOAPo4joMxu2SDzBNndh1ZdEEuFxoLd9t9CYu46cjLKQhaWcWWC2Ii3A==",
       "dependencies": {
-        "@refinedev/devtools-shared": "1.1.2",
+        "@refinedev/devtools-shared": "1.1.3",
         "@tanstack/react-query": "^4.10.1",
         "error-stack-parser": "^2.1.4"
       },
@@ -1866,13 +1866,13 @@
       }
     },
     "node_modules/@refinedev/devtools-server": {
-      "version": "1.1.23",
-      "resolved": "https://registry.npmjs.org/@refinedev/devtools-server/-/devtools-server-1.1.23.tgz",
-      "integrity": "sha512-Bxi+tFv48WefmD8r7QE2ovPzg9pksgfP8YKIOcYu2aBCFJZ133F35fG5AOdiSHHAp7Y9gl2tDL2cR1PVH/7Pow==",
+      "version": "1.1.24",
+      "resolved": "https://registry.npmjs.org/@refinedev/devtools-server/-/devtools-server-1.1.24.tgz",
+      "integrity": "sha512-4nKBhOKBOSPdO6LGfZnk0XmJ74TSQ/MQ2h5204aQgM1znPhPNnLERsTzKL6b0vHoli/EKzm0nRFcTfFJ0WOEUg==",
       "dependencies": {
         "@ory/client": "^1.5.2",
-        "@refinedev/devtools-shared": "1.1.2",
-        "@refinedev/devtools-ui": "1.1.16",
+        "@refinedev/devtools-shared": "1.1.3",
+        "@refinedev/devtools-ui": "1.1.17",
         "body-parser": "^1.20.2",
         "boxen": "^5.1.2",
         "chalk": "^4.1.2",
@@ -1908,9 +1908,9 @@
       }
     },
     "node_modules/@refinedev/devtools-shared": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@refinedev/devtools-shared/-/devtools-shared-1.1.2.tgz",
-      "integrity": "sha512-ze+akDLtCblBBEZuFTYoiAu1CfEdzBRBdttVaLJEAgSNdMva9vpbV/7gG5yTQRIIi4kIdfghphwrGHBxOOKjXQ==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@refinedev/devtools-shared/-/devtools-shared-1.1.3.tgz",
+      "integrity": "sha512-3xtVUwMGWwwnufDL+QDEdMkoi+qLQllefil+y5UyNsDuEIeh9xcNn/Uxl/N27lObA+zakHX9QOR++lR8SQ+TnQ==",
       "dependencies": {
         "@tanstack/react-query": "^4.10.1",
         "error-stack-parser": "^2.1.4"
@@ -1926,14 +1926,14 @@
       }
     },
     "node_modules/@refinedev/devtools-ui": {
-      "version": "1.1.16",
-      "resolved": "https://registry.npmjs.org/@refinedev/devtools-ui/-/devtools-ui-1.1.16.tgz",
-      "integrity": "sha512-i7TJ7vj4kF16PK8t8bn1TDSOk/vgSihHwSGq/vCuDEw9D6C0+gxDBQGbb6iAXPthoT3TK3KnPbkPZOj8xRzycQ==",
+      "version": "1.1.17",
+      "resolved": "https://registry.npmjs.org/@refinedev/devtools-ui/-/devtools-ui-1.1.17.tgz",
+      "integrity": "sha512-bV9FjWBYIB73pwSS/2jBbmWznqxvBHSXXk9cNqY+FhqKHWBUznFs5c64YimCBRZajcdGeFZhiJ8FZhC8l5T8vw==",
       "dependencies": {
         "@fireworks-js/react": "^2.10.7",
         "@headlessui/react": "^1.7.17",
         "@ory/client": "^1.5.2",
-        "@refinedev/devtools-shared": "1.1.2",
+        "@refinedev/devtools-shared": "1.1.3",
         "@tanstack/react-table": "^8.2.6",
         "clsx": "^1.1.1",
         "dayjs": "^1.10.7",
@@ -1963,14 +1963,15 @@
       }
     },
     "node_modules/@refinedev/inferencer": {
-      "version": "4.5.18",
-      "resolved": "https://registry.npmjs.org/@refinedev/inferencer/-/inferencer-4.5.18.tgz",
-      "integrity": "sha512-zg3aZC9H108prwLtf120CNYyNsr+vuwa2XPXUnArbuy+LzIO6tCUFhZblsQUf+olR7Cf9rPUmEKOPe/Ne3clUA==",
+      "version": "4.5.20",
+      "resolved": "https://registry.npmjs.org/@refinedev/inferencer/-/inferencer-4.5.20.tgz",
+      "integrity": "sha512-3BlTrhmMijzhoWuVbnez2VbtINPp1YV+ZZFv7mg5eRYgV1pfjacz10EjIsmhihQ51W/1NhLG4kkp+SzYBWjTkA==",
       "dependencies": {
         "@aliemir/react-live": "^4.0.0",
-        "@refinedev/core": "^4.47.0",
+        "@refinedev/core": "^4.47.1",
         "@tabler/icons": "^1.119.0",
         "dayjs": "^1.10.7",
+        "graphql": "^15.6.1",
         "graphql-tag": "^2.12.6",
         "lodash": "^4.17.21",
         "lodash-es": "^4.17.21",
@@ -2077,9 +2078,9 @@
       }
     },
     "node_modules/@refinedev/kbar": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/@refinedev/kbar/-/kbar-1.3.5.tgz",
-      "integrity": "sha512-bb0SURbi1fubJx5RD6FPrlq9YbvFVdoLUIbf69hW1UslSTdC9bgXU6raWKCosKWrFyt7Au7CVVP8IqSXoIgb6w==",
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/@refinedev/kbar/-/kbar-1.3.6.tgz",
+      "integrity": "sha512-5eDnrEeyY0INJWgbXPimmPMq1lrcRv80kQmU+PCuTZZwz6GwFXdpp4Oxyf/PQdxfea9yFyXpfkmLe0P7KSewXw==",
       "dependencies": {
         "kbar": "^0.1.0-beta.40"
       },
@@ -2093,9 +2094,9 @@
       }
     },
     "node_modules/@refinedev/mui": {
-      "version": "5.14.3",
-      "resolved": "https://registry.npmjs.org/@refinedev/mui/-/mui-5.14.3.tgz",
-      "integrity": "sha512-Db7xkPvI8TlKMmCT+lSXhofQ1s9wlE60pYNNByvcDeXuSAaK9mWU06bRStjE3chq+nzLNsKHUXdXxtq8Zg1Dwg==",
+      "version": "5.14.4",
+      "resolved": "https://registry.npmjs.org/@refinedev/mui/-/mui-5.14.4.tgz",
+      "integrity": "sha512-D3XI4KI0ttvBZTyaYDHvDH+wQqDOZUAPldAVft4SnjFPxjaf/piWaUj7WwJR+peXtE/+gLGydk4W3oGDUVQ/RA==",
       "dependencies": {
         "@emotion/react": "^11.8.2",
         "@emotion/styled": "^11.8.1",
@@ -2103,7 +2104,7 @@
         "@mui/lab": "^5.0.0-alpha.85",
         "@mui/material": "^5.14.2",
         "@mui/x-data-grid": "^6.6.0",
-        "@refinedev/react-hook-form": "^4.8.13",
+        "@refinedev/react-hook-form": "^4.8.14",
         "@refinedev/ui-types": "^1.22.4",
         "dayjs": "^1.10.7",
         "lodash": "^4.17.21",
@@ -2130,9 +2131,9 @@
       }
     },
     "node_modules/@refinedev/nextjs-router": {
-      "version": "5.5.6",
-      "resolved": "https://registry.npmjs.org/@refinedev/nextjs-router/-/nextjs-router-5.5.6.tgz",
-      "integrity": "sha512-K0VOSfe4CdcfkHkTJyiUbrRzwLhLfQG9DhcUi/qsVWcioqD2u7eSeLPolI5WsnzdhV7TdRsm1/2N3O8GDCyNxg==",
+      "version": "5.5.7",
+      "resolved": "https://registry.npmjs.org/@refinedev/nextjs-router/-/nextjs-router-5.5.7.tgz",
+      "integrity": "sha512-tmZuryorJtgWr2lvuUI8AjAVNyZpVJvGr/v+t+TJp5uiAY8RLuOlUxGBIiYvlFpA2Ach2kaaqx+yBa8rC2Gmsw==",
       "dependencies": {
         "qs": "^6.10.1",
         "warn-once": "^0.1.0"
@@ -2150,9 +2151,9 @@
       }
     },
     "node_modules/@refinedev/react-hook-form": {
-      "version": "4.8.13",
-      "resolved": "https://registry.npmjs.org/@refinedev/react-hook-form/-/react-hook-form-4.8.13.tgz",
-      "integrity": "sha512-IgW5REXgnXQ2jsu//4Lj51MmXjxi/GKIxJs6XXDnNQsdAstLVDW3vneDzokTyt1ywazAeyruSfOYViaDTsEBqg==",
+      "version": "4.8.14",
+      "resolved": "https://registry.npmjs.org/@refinedev/react-hook-form/-/react-hook-form-4.8.14.tgz",
+      "integrity": "sha512-buUTprTFIoc7bB3GWBSIkxmYf7aWKv5yBGbFF064TVXaJowrNHtedltoQ+NujMALglvyTKFXfw+D/PgTEJrPGA==",
       "dependencies": {
         "lodash": "^4.17.21",
         "lodash-es": "^4.17.21",
@@ -3770,9 +3771,9 @@
       "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.656",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz",
-      "integrity": "sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q=="
+      "version": "1.4.661",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.661.tgz",
+      "integrity": "sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw=="
     },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
@@ -3847,9 +3848,9 @@
       }
     },
     "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
       "engines": {
         "node": ">=6"
       }
@@ -4677,6 +4678,14 @@
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
     },
+    "node_modules/graphql": {
+      "version": "15.8.0",
+      "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz",
+      "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==",
+      "engines": {
+        "node": ">= 10.x"
+      }
+    },
     "node_modules/graphql-tag": {
       "version": "2.12.6",
       "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz",
@@ -7364,9 +7373,9 @@
       }
     },
     "node_modules/react-hook-form": {
-      "version": "7.50.0",
-      "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.0.tgz",
-      "integrity": "sha512-AOhuzM3RdP09ZCnq+Z0yvKGHK25yiOX5phwxjV9L7U6HMla10ezkBnvQ+Pk4GTuDfsC5P2zza3k8mawFwFLVuQ==",
+      "version": "7.50.1",
+      "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz",
+      "integrity": "sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==",
       "engines": {
         "node": ">=12.22.0"
       },
diff --git a/package.json b/package.json
index 09a9407..ccac9c6 100644
--- a/package.json
+++ b/package.json
@@ -13,35 +13,35 @@
     "refine": "refine"
   },
   "dependencies": {
-    "@refinedev/cli": "^2.16.21",
-    "@refinedev/core": "^4.46.1",
-    "@refinedev/devtools": "^1.1.29",
-    "@refinedev/nextjs-router": "^5.5.5",
-    "@refinedev/inferencer": "^4.5.16",
-    "@refinedev/kbar": "^1.3.5",
-    "next": "^13.0.6",
-    "nookies": "^2.5.2",
-    "react": "^18.0.0",
-    "react-dom": "^18.0.0",
-    "@refinedev/simple-rest": "^5.0.1",
-    "@refinedev/mui": "^5.14.1",
-    "@refinedev/react-hook-form": "^4.8.13",
-    "@mui/icons-material": "^5.8.3",
     "@emotion/react": "^11.8.2",
     "@emotion/styled": "^11.8.1",
+    "@mui/icons-material": "^5.8.3",
     "@mui/lab": "^5.0.0-alpha.85",
     "@mui/material": "^5.8.6",
     "@mui/x-data-grid": "^6.6.0",
+    "@refinedev/cli": "^2.16.24",
+    "@refinedev/core": "^4.47.1",
+    "@refinedev/devtools": "^1.1.32",
+    "@refinedev/inferencer": "^4.5.20",
+    "@refinedev/kbar": "^1.3.6",
+    "@refinedev/mui": "^5.14.4",
+    "@refinedev/nextjs-router": "^5.5.7",
+    "@refinedev/react-hook-form": "^4.8.14",
+    "@refinedev/simple-rest": "^5.0.1",
+    "next": "^13.0.6",
     "next-auth": "^4.20.1",
-    "next-i18next": "^8.9.0"
+    "next-i18next": "^8.9.0",
+    "nookies": "^2.5.2",
+    "react": "^18.0.0",
+    "react-dom": "^18.0.0"
   },
   "devDependencies": {
+    "@types/node": "^18.0.0",
     "@types/react": "^18.0.0",
     "@types/react-dom": "^18.0.0",
-    "@types/node": "^18.0.0",
     "@typescript-eslint/parser": "5.48.0",
-    "typescript": "^4.7.4",
-    "cross-env": "^7.0.3"
+    "cross-env": "^7.0.3",
+    "typescript": "^4.7.4"
   },
   "refine": {
     "projectId": "sJp3Js-ginGsG-d3ioXd"
diff --git a/pages/_app.tsx b/pages/_app.tsx
index a207da8..98d6bbf 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,8 +1,9 @@
-import { AuthBindings, GitHubBanner, Refine } from "@refinedev/core";
+import { AuthBindings, Refine } from "@refinedev/core";
 import { RefineKbar, RefineKbarProvider } from "@refinedev/kbar";
 import {
   RefineSnackbarProvider,
   ThemedLayoutV2,
+  ThemedTitleV2,
   notificationProvider,
 } from "@refinedev/mui";
 import routerProvider, {
@@ -20,8 +21,9 @@ import CssBaseline from "@mui/material/CssBaseline";
 import GlobalStyles from "@mui/material/GlobalStyles";
 import dataProvider from "@refinedev/simple-rest";
 import { appWithTranslation, useTranslation } from "next-i18next";
+import logo from "../src/components/fdo_logo";
 
-const API_URL = "https://api.fake-rest.refine.dev";
+const API_URL = "http://localhost:8081";
 
 export type NextPageWithLayout<P = {}, IP = P> = NextPage<P, IP> & {
   noLayout?: boolean;
@@ -51,7 +53,7 @@ const App = (props: React.PropsWithChildren) => {
   const authProvider: AuthBindings = {
     login: async () => {
       signIn("keycloak", {
-        callbackUrl: to ? to.toString() : "/",
+        callbackUrl: to ? to.toString() : "/info",
         redirect: true,
       });
 
@@ -105,7 +107,6 @@ const App = (props: React.PropsWithChildren) => {
 
   return (
     <>
-      <GitHubBanner />
       <RefineKbarProvider>
         <ColorModeContextProvider>
           <CssBaseline />
@@ -118,10 +119,17 @@ const App = (props: React.PropsWithChildren) => {
               authProvider={authProvider}
               i18nProvider={i18nProvider}
               options={{
+                disableTelemetry: true,
                 syncWithLocation: true,
                 warnWhenUnsavedChanges: true,
                 useNewQueryKeys: true,
               }}
+              resources={[
+                {
+                  name: "info",
+                  list: "/info",
+                }
+              ]}
             >
               {props.children}
               <RefineKbar />
@@ -144,7 +152,16 @@ function MyApp({
     }
 
     return (
-      <ThemedLayoutV2 Header={() => <Header sticky />}>
+      <ThemedLayoutV2
+        Header={() => <Header sticky />}
+        Title={({ collapsed }) => (
+          <ThemedTitleV2
+            collapsed={collapsed}
+            text="FDO Manager"
+            icon={logo}
+          />
+        )}
+        >
         <Component {...pageProps} />
       </ThemedLayoutV2>
     );
diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts
index 6c57768..9b30bf7 100644
--- a/pages/api/auth/[...nextauth].ts
+++ b/pages/api/auth/[...nextauth].ts
@@ -6,9 +6,9 @@ export const authOptions = {
   providers: [
     // !!! Should be stored in .env file.
     KeycloakProvider({
-      clientId: `refine-demo`,
-      clientSecret: `refine`,
-      issuer: `https://lemur-0.cloud-iam.com/auth/realms/refine`,
+      clientId: `fdo-manager-webui`,
+      clientSecret: `ay7l6jhECSohAZsEp6HYOaoXdARMQCei`,
+      issuer: `http://localhost:8080/realms/FDO%20Manager`,
       profile(profile) {
         return {
           id: profile.sub,
diff --git a/pages/info/index.jsx b/pages/info/index.jsx
new file mode 100644
index 0000000..bd71ad5
--- /dev/null
+++ b/pages/info/index.jsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { useGo, useList } from "@refinedev/core";
+
+const Info = () => {
+  const { data, isLoading } = useList({resource: "hello"});
+
+  const go = useGo();
+
+  if (isLoading) return <div>Loading...</div>;
+
+  return (
+    <div>
+      {data?.data?.message}
+    </div>
+  );
+};
+
+export default Info;
diff --git a/pages/login/index.tsx b/pages/login/index.tsx
index 4f2f6c2..9b4f0c9 100644
--- a/pages/login/index.tsx
+++ b/pages/login/index.tsx
@@ -11,6 +11,7 @@ import { serverSideTranslations } from "next-i18next/serverSideTranslations";
 
 import { getServerSession } from "next-auth";
 import { authOptions } from "../api/auth/[...nextauth]";
+import logo from "../../src/components/fdo_logo";
 
 export default function Login() {
   const { mutate: login } = useLogin();
@@ -33,6 +34,8 @@ export default function Login() {
         flexDirection="column"
       >
         <ThemedTitleV2
+          text="FDO Manager"
+          icon={logo}
           collapsed={false}
           wrapperStyles={{
             fontSize: "22px",
diff --git a/public/favicon.ico b/public/favicon.ico
index 2f05c5f484fbf720523541519ff0cad4df752a9f..55cb44f83d7a6d4ab566588859282d5a39871964 100644
GIT binary patch
literal 67646
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

literal 101076
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

diff --git a/src/components/fdo_logo.jsx b/src/components/fdo_logo.jsx
new file mode 100644
index 0000000..82d8cbe
--- /dev/null
+++ b/src/components/fdo_logo.jsx
@@ -0,0 +1,15 @@
+import React from "react";
+
+const logo = <svg
+      width={24}
+      height={24}
+      viewBox="0 0 24 24"
+      fill="none"
+      xmlns="http://www.w3.org/2000/svg"
+      data-testid="fdo-manager-logo"
+    >
+      <path d="m12 2a10 10 0 0 0-10 10 10 10 0 0 0 10 10 10 10 0 0 0 10-10 10 10 0 0 0-10-10zm0 2a8 8 0 0 1 8 8 8 8 0 0 1-8 8 8 8 0 0 1-8-8 8 8 0 0 1 8-8zm0 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0-6-6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4zm0 2a2 2 0 0 0-2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill="currentColor"/>
+
+    </svg>
+
+export default logo;
diff --git a/tsconfig.json b/tsconfig.json
index 6787272..2e4a628 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,11 @@
 {
   "compilerOptions": {
     "target": "es5",
-    "lib": ["dom", "dom.iterable", "esnext"],
+    "lib": [
+      "dom",
+      "dom.iterable",
+      "esnext"
+    ],
     "allowJs": true,
     "skipLibCheck": true,
     "strict": true,
@@ -15,16 +19,39 @@
     "jsx": "preserve",
     "baseUrl": ".",
     "paths": {
-      "@components/*": ["src/components/*"],
-      "@components": ["src/components"],
-      "@contexts/*": ["src/contexts/*"],
-      "@contexts": ["src/contexts"],
-      "@styles/*": ["src/styles/*"],
-      "@styles": ["src/styles"],
-      "@public/*": ["public/*"],
-      "@public": ["public"]
-    }
+      "@components/*": [
+        "src/components/*"
+      ],
+      "@components": [
+        "src/components"
+      ],
+      "@contexts/*": [
+        "src/contexts/*"
+      ],
+      "@contexts": [
+        "src/contexts"
+      ],
+      "@styles/*": [
+        "src/styles/*"
+      ],
+      "@styles": [
+        "src/styles"
+      ],
+      "@public/*": [
+        "public/*"
+      ],
+      "@public": [
+        "public"
+      ]
+    },
+    "incremental": true
   },
-  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
-  "exclude": ["node_modules"]
+  "include": [
+    "next-env.d.ts",
+    "**/*.ts",
+    "**/*.tsx"
+  ],
+  "exclude": [
+    "node_modules"
+  ]
 }
-- 
GitLab