diff --git a/next.config.mjs b/next.config.mjs
index 7a0ce9424419ec6e01fddeff316d5109ada63e7b..8892f3d68ba71fbaa4332924c2845e5e37b77e43 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -76,6 +76,10 @@ const nextConfig = {
     images: {
         unoptimized: true, // mandatory, otherwise won't export
     },
+    i18n: {
+        locales: ['de', 'en'],
+        defaultLocale: 'de',
+    },
 }
 const withNextra = nextra({
     theme: 'nextra-theme-docs',
diff --git a/package-lock.json b/package-lock.json
index 60648168c8178b6a2de7c58b08ddd470d5d3dc7e..056a64f60f33ae2c5ab10cef94b0319cf57e39d6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,26 +27,26 @@
                 "p-limit": "^6.1.0",
                 "react": "^18.3.1",
                 "react-dom": "^18.3.1",
-                "react-hook-form": "^7.54.1",
+                "react-hook-form": "^7.54.2",
                 "react-markdown": "^9.0.1",
-                "react-syntax-highlighter": "^15.6.1",
+                "react-syntax-highlighter": "^5.8.0",
                 "recharts": "^2.15.1",
                 "remark-gemoji": "^8.0.0",
-                "remark-gfm": "^4.0.0",
+                "remark-gfm": "^4.0.1",
                 "sass": "^1.83.0",
                 "sharp": "^0.33.5",
-                "tailwind-merge": "^3.0.1",
+                "tailwind-merge": "^3.0.2",
                 "winston": "^3.17.0"
             },
             "devDependencies": {
                 "@types/node": "22.10.2",
-                "autoprefixer": "^10.4.20",
+                "autoprefixer": "^10.4.21",
                 "eslint-config-next": "^14.2.18",
-                "eslint-plugin-prettier": "^5.2.1",
+                "eslint-plugin-prettier": "^5.2.3",
                 "jest": "^29.7.0",
                 "jest-environment-jsdom": "^29.7.0",
                 "postcss": "^8.4.49",
-                "prettier-plugin-tailwindcss": "^0.6.9",
+                "prettier-plugin-tailwindcss": "^0.6.11",
                 "tailwindcss": "^3.4.16",
                 "typescript": "^5.7.2"
             }
@@ -4456,9 +4456,9 @@
             "license": "MIT"
         },
         "node_modules/autoprefixer": {
-            "version": "10.4.20",
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
-            "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+            "version": "10.4.21",
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+            "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
             "dev": true,
             "funding": [
                 {
@@ -4476,11 +4476,11 @@
             ],
             "license": "MIT",
             "dependencies": {
-                "browserslist": "^4.23.3",
-                "caniuse-lite": "^1.0.30001646",
+                "browserslist": "^4.24.4",
+                "caniuse-lite": "^1.0.30001702",
                 "fraction.js": "^4.3.7",
                 "normalize-range": "^0.1.2",
-                "picocolors": "^1.0.1",
+                "picocolors": "^1.1.1",
                 "postcss-value-parser": "^4.2.0"
             },
             "bin": {
@@ -4655,6 +4655,22 @@
                 "@babel/core": "^7.0.0"
             }
         },
+        "node_modules/babel-runtime": {
+            "version": "6.26.0",
+            "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+            "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+            "license": "MIT",
+            "dependencies": {
+                "core-js": "^2.4.0",
+                "regenerator-runtime": "^0.11.0"
+            }
+        },
+        "node_modules/babel-runtime/node_modules/regenerator-runtime": {
+            "version": "0.11.1",
+            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+            "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+            "license": "MIT"
+        },
         "node_modules/bail": {
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
@@ -5401,6 +5417,14 @@
             "dev": true,
             "license": "MIT"
         },
+        "node_modules/core-js": {
+            "version": "2.6.12",
+            "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+            "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+            "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+            "hasInstallScript": true,
+            "license": "MIT"
+        },
         "node_modules/cose-base": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
@@ -8236,16 +8260,6 @@
                 "url": "https://opencollective.com/unified"
             }
         },
-        "node_modules/hast-util-parse-selector": {
-            "version": "2.2.5",
-            "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
-            "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
-            "license": "MIT",
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/unified"
-            }
-        },
         "node_modules/hast-util-raw": {
             "version": "9.1.0",
             "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
@@ -8420,86 +8434,16 @@
                 "url": "https://opencollective.com/unified"
             }
         },
-        "node_modules/hastscript": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
-            "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
-            "license": "MIT",
-            "dependencies": {
-                "@types/hast": "^2.0.0",
-                "comma-separated-tokens": "^1.0.0",
-                "hast-util-parse-selector": "^2.0.0",
-                "property-information": "^5.0.0",
-                "space-separated-tokens": "^1.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/unified"
-            }
-        },
-        "node_modules/hastscript/node_modules/@types/hast": {
-            "version": "2.3.10",
-            "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
-            "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
-            "license": "MIT",
-            "dependencies": {
-                "@types/unist": "^2"
-            }
-        },
-        "node_modules/hastscript/node_modules/@types/unist": {
-            "version": "2.0.11",
-            "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
-            "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
-            "license": "MIT"
-        },
-        "node_modules/hastscript/node_modules/comma-separated-tokens": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
-            "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/hastscript/node_modules/property-information": {
-            "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
-            "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
-            "license": "MIT",
-            "dependencies": {
-                "xtend": "^4.0.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/hastscript/node_modules/space-separated-tokens": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
-            "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
         "node_modules/highlight.js": {
-            "version": "10.7.3",
-            "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-            "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+            "version": "9.12.0",
+            "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz",
+            "integrity": "sha512-qNnYpBDO/FQwYVur1+sQBQw7v0cxso1nOYLklqWh6af8ROwwTVoII5+kf/BVa8354WL4ad6rURHYGUXCbD9mMg==",
+            "deprecated": "Version no longer supported. Upgrade to @latest",
             "license": "BSD-3-Clause",
             "engines": {
                 "node": "*"
             }
         },
-        "node_modules/highlightjs-vue": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
-            "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
-            "license": "CC0-1.0"
-        },
         "node_modules/html-encoding-sniffer": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
@@ -10529,17 +10473,13 @@
             }
         },
         "node_modules/lowlight": {
-            "version": "1.20.0",
-            "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
-            "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
+            "version": "1.9.2",
+            "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.9.2.tgz",
+            "integrity": "sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q==",
             "license": "MIT",
             "dependencies": {
-                "fault": "^1.0.0",
-                "highlight.js": "~10.7.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
+                "fault": "^1.0.2",
+                "highlight.js": "~9.12.0"
             }
         },
         "node_modules/lru-cache": {
@@ -13152,15 +13092,6 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/prismjs": {
-            "version": "1.29.0",
-            "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
-            "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/prompts": {
             "version": "2.4.2",
             "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -13374,17 +13305,14 @@
             }
         },
         "node_modules/react-syntax-highlighter": {
-            "version": "15.6.1",
-            "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
-            "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
+            "version": "5.8.0",
+            "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-5.8.0.tgz",
+            "integrity": "sha512-+FolT9NhFBqE4SsZDelSzsYJJS/JCnQqo4+GxLrFPoML548uvr8f4Eh5nnd5o6ERKFW7ryiygOX9SPnxdnlpkg==",
             "license": "MIT",
             "dependencies": {
-                "@babel/runtime": "^7.3.1",
-                "highlight.js": "^10.4.1",
-                "highlightjs-vue": "^1.0.0",
-                "lowlight": "^1.17.0",
-                "prismjs": "^1.27.0",
-                "refractor": "^3.6.0"
+                "babel-runtime": "^6.18.0",
+                "highlight.js": "~9.12.0",
+                "lowlight": "~1.9.1"
             },
             "peerDependencies": {
                 "react": ">= 0.14.0"
@@ -13568,122 +13496,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/refractor": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
-            "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
-            "license": "MIT",
-            "dependencies": {
-                "hastscript": "^6.0.0",
-                "parse-entities": "^2.0.0",
-                "prismjs": "~1.27.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/character-entities": {
-            "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
-            "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/character-entities-legacy": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
-            "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/character-reference-invalid": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
-            "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/is-alphabetical": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
-            "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/is-alphanumerical": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
-            "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
-            "license": "MIT",
-            "dependencies": {
-                "is-alphabetical": "^1.0.0",
-                "is-decimal": "^1.0.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/is-decimal": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
-            "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/is-hexadecimal": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
-            "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
-            "license": "MIT",
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/parse-entities": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
-            "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
-            "license": "MIT",
-            "dependencies": {
-                "character-entities": "^1.0.0",
-                "character-entities-legacy": "^1.0.0",
-                "character-reference-invalid": "^1.0.0",
-                "is-alphanumerical": "^1.0.0",
-                "is-decimal": "^1.0.0",
-                "is-hexadecimal": "^1.0.0"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/refractor/node_modules/prismjs": {
-            "version": "1.27.0",
-            "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
-            "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/regenerator-runtime": {
             "version": "0.14.1",
             "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
@@ -16656,15 +16468,6 @@
                 "node": ">=0.1"
             }
         },
-        "node_modules/xtend": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-            "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.4"
-            }
-        },
         "node_modules/y18n": {
             "version": "5.0.8",
             "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 7d5615e0ad8bcdb406ff266a30b645b365619125..373ad127d02f23d0fde478265acb215535a356fb 100644
--- a/package.json
+++ b/package.json
@@ -51,27 +51,27 @@
         "p-limit": "^6.1.0",
         "react": "^18.3.1",
         "react-dom": "^18.3.1",
-        "react-hook-form": "^7.54.1",
+        "react-hook-form": "^7.54.2",
         "react-markdown": "^9.0.1",
-        "react-syntax-highlighter": "^15.6.1",
+        "react-syntax-highlighter": "^5.8.0",
         "recharts": "^2.15.1",
         "remark-gemoji": "^8.0.0",
-        "remark-gfm": "^4.0.0",
+        "remark-gfm": "^4.0.1",
         "sass": "^1.83.0",
         "sharp": "^0.33.5",
-        "tailwind-merge": "^3.0.1",
+        "tailwind-merge": "^3.0.2",
         "winston": "^3.17.0"
     },
     "devDependencies": {
         "@types/node": "22.10.2",
-        "autoprefixer": "^10.4.20",
+        "autoprefixer": "^10.4.21",
         "eslint-config-next": "^14.2.18",
-        "eslint-plugin-prettier": "^5.2.1",
+        "eslint-plugin-prettier": "^5.2.3",
         "jest": "^29.7.0",
         "jest-environment-jsdom": "^29.7.0",
         "postcss": "^8.4.49",
-        "prettier-plugin-tailwindcss": "^0.6.9",
+        "prettier-plugin-tailwindcss": "^0.6.11",
         "tailwindcss": "^3.4.16",
         "typescript": "^5.7.2"
     }
-}
\ No newline at end of file
+}
diff --git a/src/components/CheckRepoForm.tsx b/src/components/CheckRepoForm.tsx
index 15066d802c6ad61d6835f20d117b07b4e27b0724..601bca7be1bd09af734644e514ceb9da0fdaad14 100644
--- a/src/components/CheckRepoForm.tsx
+++ b/src/components/CheckRepoForm.tsx
@@ -1,24 +1,28 @@
 // Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
 // SPDX-License-Identifier: MIT
 
-import React, { FunctionComponent, useTransition } from 'react'
-import { Form, FormItem } from './ui/form'
-import { Label } from './ui/label'
-import { Input } from './ui/input'
-import { Button } from './ui/button'
-import { useToast } from '../hooks/use-toast'
+import { Loader2 } from 'lucide-react'
+import React, { FunctionComponent } from 'react'
 import { useForm } from 'react-hook-form'
+import { useToast } from '../hooks/use-toast'
 import { apiCall, SarifApiResponse } from '../lib/apiClient'
-import { Loader2 } from 'lucide-react'
+import { Button } from './ui/button'
+import { Form, FormItem } from './ui/form'
+import { Input } from './ui/input'
+import { Label } from './ui/label'
 
 interface Props {
     onScanFinished: (response: SarifApiResponse) => void
     displayLabel?: boolean
+    pleaseWait: string
+    test: string
 }
 
 const CheckRepoForm: FunctionComponent<Props> = ({
     onScanFinished,
     displayLabel,
+    pleaseWait,
+    test,
 }) => {
     const form = useForm<{
         repositoryUrl: string
@@ -50,9 +54,9 @@ const CheckRepoForm: FunctionComponent<Props> = ({
         } catch (e) {
             console.error(e)
             toast({
-                title: 'Provided url is invalid',
+                title: 'Die angegebene Url ist ungültig',
                 description:
-                    'Please check if the url you provided has a typo. Make sure to include the whole url to the repo, without the .git ending.',
+                    'Bitte überprüfen Sie, ob die von Ihnen angegebene URL einen Tippfehler enthält. Stellen Sie sicher, dass Sie die gesamte URL des Repos angeben, ohne die Endung .git.',
             })
         } finally {
             setIsPending(false)
@@ -78,7 +82,7 @@ const CheckRepoForm: FunctionComponent<Props> = ({
                         {isPending ? (
                             <Button className="border-transparent" disabled>
                                 <Loader2 className="animate-spin" />
-                                Bitte warten
+                                {pleaseWait}
                             </Button>
                         ) : (
                             <Button
@@ -86,7 +90,7 @@ const CheckRepoForm: FunctionComponent<Props> = ({
                                 type="submit"
                                 variant={'default'}
                             >
-                                Testen
+                                {test}
                             </Button>
                         )}
                     </div>
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 55d6f56240d4b6ab3a7116ca899c3eb6b8eeebcf..32a9749794e2574e440cc51c4b1a18c843fe588e 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -4,74 +4,74 @@ SPDX-License-Identifier: MIT */
 const navigation = {
     officialBadges: [
         {
-            name: 'Maintained Badge',
-            href: '/official-badges/active-maintained-badge',
+            name: 'Aktive Wartungs Badge',
+            href: '/de/official-badges/active-maintained-badge',
             external: false,
         },
         {
-            name: 'Reuse Badge',
-            href: '/official-badges/reuse-badge',
+            name: 'Nachnutzungs Badge',
+            href: '/de/official-badges/reuse-badge',
             external: false,
         },
         {
             name: 'Open Source Badge',
-            href: '/official-badges/open-source-badge',
+            href: '/de/official-badges/open-source-badge',
             external: false,
         },
         {
             name: 'Security Badge',
-            href: '/official-badges/security-badge',
+            href: '/de/official-badges/security-badge',
             external: false,
         },
     ],
     community: [
         {
-            name: 'Project on openCode',
+            name: 'Projekt auf openCode',
             href: 'https://gitlab.opencode.de/open-code/badgebackend',
             external: true,
         },
         {
-            name: 'Contribute',
+            name: 'Beitragen',
             href: 'https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/blob/main/CONTRIBUTING.md',
             external: true,
         },
         {
-            name: 'Open issue',
+            name: 'Issue öffnen',
             href: 'https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/issues/new',
             external: true,
         },
     ],
     legal: [
         {
-            name: 'Imprint',
+            name: 'Impressum',
             href: 'https://opencode.de/de/impressum',
             external: true,
         },
         {
-            name: 'Privacy policy',
+            name: 'Datenschutzerklärung',
             href: 'https://opencode.de/de/datenschutz',
             external: true,
         },
         {
-            name: 'License',
+            name: 'Lizenz',
             href: 'https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/blob/main/LICENSE',
             external: true,
         },
     ],
     accessibility: [
         {
-            name: 'Declaration on Accessibility',
-            href: '/declaration-on-accessibility',
+            name: 'Erklärung zur Barrierefreiheit',
+            href: '/de/erklaerung-zur-barrierefreiheit',
             external: false,
         },
         {
-            name: 'Reporting barriers',
+            name: 'Barriere melden',
             href: 'mailto:info@opencode.de',
             external: false,
         },
         {
-            name: 'Easy read',
-            href: '/leichte-sprache',
+            name: 'Leichte Sprache',
+            href: '/de/leichte-sprache',
             external: false,
         },
     ],
@@ -94,7 +94,7 @@ export default function Footer() {
                         />
                     </a>
                     <p className="text-balance text-sm/6 text-gray-600">
-                        The Badge Programm is an{' '}
+                        Das Badge Programm ist ein{' '}
                         <a
                             href="https://opencode.de/"
                             target="_blank"
@@ -103,7 +103,7 @@ export default function Footer() {
                         >
                             openCode
                         </a>{' '}
-                        service by{' '}
+                        Dienst der{' '}
                         <a
                             href="https://zendis.de/"
                             target="_blank"
@@ -112,7 +112,7 @@ export default function Footer() {
                         >
                             ZenDiS
                         </a>{' '}
-                        maintained by{' '}
+                        maintained durch{' '}
                         <a
                             href="https://l3montree.com"
                             target="_blank"
@@ -128,7 +128,7 @@ export default function Footer() {
                     <div className="md:grid md:grid-cols-2 md:gap-8">
                         <div>
                             <h3 className="text-sm/6 font-semibold text-gray-900">
-                                Official Badges
+                                Offizielle Badges
                             </h3>
                             <ul role="list" className="mt-6 space-y-4">
                                 {navigation.officialBadges.map((item) => (
@@ -176,7 +176,7 @@ export default function Footer() {
                     <div className="md:grid md:grid-cols-2 md:gap-8">
                         <div>
                             <h3 className="text-sm/6 font-semibold text-gray-900">
-                                Legal
+                                Rechtliches
                             </h3>
                             <ul role="list" className="mt-6 space-y-4">
                                 {navigation.legal.map((item) => (
@@ -199,7 +199,7 @@ export default function Footer() {
                         </div>
                         <div className="mt-10 md:mt-0">
                             <h3 className="text-sm/6 font-semibold text-gray-900">
-                                Accessibility
+                                Barrierefreiheit
                             </h3>
                             <ul role="list" className="mt-6 space-y-4">
                                 {navigation.accessibility.map((item) => (
diff --git a/src/components/ResultGrid.tsx b/src/components/ResultGrid.tsx
index e96d1567ca521838a5536d06be5381083f6f65e2..434e4ae39f2928d2d96aa209ae8ec38a7d68f7a1 100644
--- a/src/components/ResultGrid.tsx
+++ b/src/components/ResultGrid.tsx
@@ -2,16 +2,49 @@
 // SPDX-License-Identifier: MIT
 
 import Image from 'next/image'
-import { SarifApiResponse } from '../lib/apiClient'
+import { Badge, SarifApiResponse } from '../lib/apiClient'
 import { cn } from '../lib/utils'
 import ResultTable from './ResultTable'
 import { config } from '../config'
 
 interface Props {
     currentScan: SarifApiResponse | null
+    resultTitle: string
+    deniedTitle: string
+    moreInfo: string
+    tableCheck: string
+    tableStatus: string
+    tableDescription: string
+    tableEvidence: string
 }
 
-export default function ResultGrid({ currentScan }: Props) {
+const order = [
+    'maintained:bronze',
+    'maintained:silver',
+    'maintained:gold',
+    'reused:bronze',
+    'reused:silver',
+    'reused:gold',
+    'open-source:gold',
+]
+
+const sortBadges = (a: Badge, b: Badge): number => {
+    return (
+        order.indexOf(a.badgeId + ':' + a.badgeLevel) -
+        order.indexOf(b.badgeId + ':' + b.badgeLevel)
+    )
+}
+
+export default function ResultGrid({
+    currentScan,
+    resultTitle,
+    deniedTitle,
+    moreInfo,
+    tableCheck,
+    tableStatus,
+    tableDescription,
+    tableEvidence,
+}: Props) {
     return (
         <div className="py-10">
             {currentScan && (
@@ -19,7 +52,7 @@ export default function ResultGrid({ currentScan }: Props) {
                     <div className="mx-auto max-w-7xl px-6 lg:px-8">
                         <div className="mb-8">
                             <h2 className="mb-1 text-2xl font-semibold">
-                                Displaying results for:
+                                {resultTitle}:
                             </h2>
                             <a
                                 target="_blank"
@@ -36,21 +69,19 @@ export default function ResultGrid({ currentScan }: Props) {
                                 }
                             </a>
                         </div>
-                        <div className="-mx-6 grid grid-cols-2 gap-0.5 overflow-hidden sm:mx-0 sm:rounded-2xl md:grid-cols-3">
+                        <div className="-mx-6 grid grid-cols-1 gap-0.5 overflow-hidden px-6 sm:mx-0 sm:grid-cols-2 sm:rounded-2xl sm:px-0 md:grid-cols-2 lg:grid-cols-3">
                             {currentScan.runs[0].properties.testedRepository &&
                                 currentScan?.runs[0].properties.badges
-                                    .sort((a, b) =>
-                                        a.badgeId.localeCompare(b.badgeId),
-                                    )
+                                    .sort(sortBadges)
                                     .map((badge) => (
                                         <div
-                                            className="overflow-hidden bg-gray-400/10 p-10"
+                                            className="overflow-hidden rounded-xl bg-gray-400/10 p-10 sm:rounded-none"
                                             key={`${badge.badgeId}-${badge.badgeLevel}`}
                                         >
                                             <div className="relative aspect-square">
                                                 {!badge.badgeGranted && (
-                                                    <div className="absolute right-0 top-0 -translate-y-1/2 translate-x-1/2 rotate-45 bg-red-600 px-10 py-2 font-bold text-white">
-                                                        Not granted
+                                                    <div className="absolute right-0 top-0 -translate-y-1/2 translate-x-1/2 rotate-45 bg-red-600 px-10 py-2 text-center text-xs font-bold text-white">
+                                                        {deniedTitle}
                                                     </div>
                                                 )}
                                                 <Image
@@ -71,7 +102,7 @@ export default function ResultGrid({ currentScan }: Props) {
                                             </div>
                                             <p
                                                 className={cn(
-                                                    'text-sm',
+                                                    'text-base',
                                                     !badge.badgeGranted &&
                                                         'opacity-50',
                                                 )}
@@ -82,7 +113,14 @@ export default function ResultGrid({ currentScan }: Props) {
                                     ))}
                         </div>
                         <div className="mt-12">
-                            <ResultTable currentScan={currentScan} />
+                            <ResultTable
+                                currentScan={currentScan}
+                                moreInfo={moreInfo}
+                                tableCheck={tableCheck}
+                                tableStatus={tableStatus}
+                                tableDescription={tableDescription}
+                                tableEvidence={tableEvidence}
+                            />
                         </div>
                     </div>
                 </div>
diff --git a/src/components/ResultTable.tsx b/src/components/ResultTable.tsx
index 68b02437e9867708aa8b303d95794960dfe7b853..a2f3ac142b892e672dc08625e33d41b04cb5ffa8 100644
--- a/src/components/ResultTable.tsx
+++ b/src/components/ResultTable.tsx
@@ -6,20 +6,61 @@ import { SarifApiResponse } from '../lib/apiClient'
 import { cn } from '../lib/utils'
 import { Badge } from './ui/badge'
 
-const people = [
-    {
-        name: 'Lindsay Walton',
-        title: 'Front-end Developer',
-        email: 'lindsay.walton@example.com',
-        role: 'Member',
-    },
-    // More people...
-]
 interface Props {
     currentScan: SarifApiResponse
+    moreInfo: string
+    tableCheck: string
+    tableStatus: string
+    tableDescription: string
+    tableEvidence: string
+}
+
+const translateCriteriaStatus = (status: string) => {
+    switch (status) {
+        case 'open':
+            return 'Offen'
+        case 'pass':
+            return 'Bestanden'
+        case 'fail':
+            return 'Nicht bestanden'
+        default:
+            return status
+    }
 }
 
-export default function ResultTable({ currentScan }: Props) {
+const badgeTranslation: Record<string, Record<string, string>> = {
+    maintained: {
+        bronze: 'Aktive Wartung',
+        silver: 'Verlässliche Wartung',
+        gold: 'Krisensichere Wartung',
+    },
+    reused: {
+        bronze: 'Bereit zur Nutzung',
+        silver: 'Aktiv genutzt',
+        gold: 'Häufig aktiv genutzt',
+    },
+    'open-source': {
+        gold: 'Open Source lizenziert',
+    },
+}
+
+const translateBadge = (badgeId: string, level: string): string => {
+    if (badgeId in badgeTranslation) {
+        if (level in badgeTranslation[badgeId]) {
+            return badgeTranslation[badgeId][level]
+        }
+    }
+    return badgeId + ' ' + level
+}
+
+export default function ResultTable({
+    currentScan,
+    moreInfo,
+    tableCheck,
+    tableStatus,
+    tableDescription,
+    tableEvidence,
+}: Props) {
     return (
         <div className="">
             {currentScan?.runs[0].properties.badges
@@ -30,10 +71,12 @@ export default function ResultTable({ currentScan }: Props) {
                         className="mt-8 rounded-lg bg-gray-100 px-4 py-2"
                     >
                         <details className="">
-                            <summary className="relative flex cursor-pointer flex-row justify-between text-lg font-medium text-gray-900">
+                            <summary className="relative flex cursor-pointer flex-row justify-between font-medium text-gray-900 md:text-lg">
                                 <span>
-                                    Details on: {badge.badgeId}{' '}
-                                    {badge.badgeLevel}
+                                    {translateBadge(
+                                        badge.badgeId,
+                                        badge.badgeLevel,
+                                    )}
                                     <Badge
                                         variant={
                                             badge.badgeGranted
@@ -43,42 +86,46 @@ export default function ResultTable({ currentScan }: Props) {
                                         className="ml-2"
                                     >
                                         {badge.badgeGranted
-                                            ? 'Granted'
-                                            : 'Not granted'}
+                                            ? 'Verliehen'
+                                            : 'Verweigert'}
                                     </Badge>
                                 </span>
-
-                                <ChevronDownIcon className="w-5" />
+                                <div className="flex flex-row items-center gap-2">
+                                    <span className="hidden text-sm text-gray-500 md:inline-block">
+                                        {moreInfo}
+                                    </span>
+                                    <ChevronDownIcon className="w-4" />
+                                </div>
                             </summary>
-                            <div className="mt-8">
+                            <div className="md:mt-8">
                                 <div className="overflow-x-aut">
                                     <div className="inline-block min-w-full py-2 align-middle">
-                                        <table className="min-w-full divide-y divide-gray-400">
-                                            <thead>
+                                        <table className="flex min-w-full divide-gray-400 md:table md:divide-y">
+                                            <thead className="hidden md:table-header-group">
                                                 <tr className="grid grid-cols-6">
                                                     <th
                                                         scope="col"
-                                                        className="col-span-1 py-3.5 pl-4 pr-3 text-left font-semibold sm:pl-6 lg:pl-8"
+                                                        className="col-span-1 py-3.5 pr-3 text-left font-semibold lg:pl-8"
                                                     >
-                                                        Check
+                                                        {tableCheck}
                                                     </th>
                                                     <th
                                                         scope="col"
                                                         className="col-span-1 px-3 py-3.5 text-left font-semibold"
                                                     >
-                                                        Status
+                                                        {tableStatus}
                                                     </th>
                                                     <th
                                                         scope="col"
                                                         className="col-span-2 px-3 py-3.5 text-left font-semibold"
                                                     >
-                                                        Description
+                                                        {tableDescription}
                                                     </th>
                                                     <th
                                                         scope="col"
                                                         className="col-span-2 px-3 py-3.5 text-left font-semibold"
                                                     >
-                                                        Evidence
+                                                        {tableEvidence}
                                                     </th>
                                                 </tr>
                                             </thead>
@@ -87,13 +134,13 @@ export default function ResultTable({ currentScan }: Props) {
                                                     (criteria) => (
                                                         <tr
                                                             key={`${badge.badgeId}-${badge.badgeLevel}-${criteria.ruleId}`}
-                                                            className="grid grid-cols-6"
+                                                            className="grid grid-cols-1 md:grid-cols-6"
                                                         >
                                                             <td
                                                                 title={
                                                                     criteria.ruleId
                                                                 }
-                                                                className="col-span-1 overflow-hidden overflow-ellipsis whitespace-nowrap py-4 pl-4 pr-3 font-medium text-gray-900 sm:pl-6 lg:pl-8"
+                                                                className="col-span-1 overflow-hidden overflow-ellipsis whitespace-nowrap py-4 font-medium text-gray-900 md:pr-3 lg:pl-8"
                                                             >
                                                                 {
                                                                     criteria.ruleId.split(
@@ -101,8 +148,8 @@ export default function ResultTable({ currentScan }: Props) {
                                                                     )[0]
                                                                 }
                                                             </td>
-                                                            <td className="col-span-1 whitespace-nowrap px-3 py-4">
-                                                                <div className="flex items-center justify-end gap-x-2 sm:justify-start">
+                                                            <td className="col-span-1 whitespace-nowrap py-4 md:px-3">
+                                                                <div className="flex items-center justify-end gap-x-2 md:justify-start">
                                                                     <span className="relative flex size-2">
                                                                         <span
                                                                             className={cn(
@@ -129,19 +176,31 @@ export default function ResultTable({ currentScan }: Props) {
                                                                             )}
                                                                         ></span>
                                                                     </span>
-                                                                    <div className="hidden sm:block">
-                                                                        {
-                                                                            criteria.status
-                                                                        }
-                                                                    </div>
+                                                                    <span className="w-full">
+                                                                        {translateCriteriaStatus(
+                                                                            criteria.status,
+                                                                        )}
+                                                                    </span>
                                                                 </div>
                                                             </td>
-                                                            <td className="col-span-2 px-3 py-4">
+                                                            <td className="col-span-2 py-4 md:px-3">
+                                                                <b className="md:hidden">
+                                                                    {
+                                                                        tableDescription
+                                                                    }
+                                                                    :{' '}
+                                                                </b>
                                                                 {
                                                                     criteria.description
                                                                 }
                                                             </td>
-                                                            <td className="col-span-2 px-3 py-4">
+                                                            <td className="col-span-2 py-4 md:px-3">
+                                                                <b className="md:hidden">
+                                                                    {
+                                                                        tableEvidence
+                                                                    }
+                                                                    :{' '}
+                                                                </b>
                                                                 {
                                                                     criteria.evidence
                                                                 }
diff --git a/src/components/landing-page/ApiSmallDemo.tsx b/src/components/landing-page/ApiSmallDemo.tsx
index 8c7b546fec5ad21e94b450970412077107200ec0..d7881ceeaecb7366f1efcdc459ec9a67d6d81a1e 100644
--- a/src/components/landing-page/ApiSmallDemo.tsx
+++ b/src/components/landing-page/ApiSmallDemo.tsx
@@ -7,7 +7,21 @@ import CheckRepoForm from '../CheckRepoForm'
 import { Toaster } from '../ui/toaster'
 import ResultGrid from '../ResultGrid'
 
-export default function ApiSmallDemo() {
+interface Props {
+    titleH2: string
+    description: string
+    resultTitle: string
+    deniedTitle: string
+    moreInfo: string
+    tableCheck: string
+    tableStatus: string
+    tableDescription: string
+    tableEvidence: string
+    pleaseWait: string
+    test: string
+}
+
+export default function ApiSmallDemo(props: Props) {
     const [currentScan, setCurrentScan] = useState<SarifApiResponse | null>(
         null,
     )
@@ -18,17 +32,19 @@ export default function ApiSmallDemo() {
     return (
         <div className="mx-auto mt-16 max-w-7xl" id="api-small-demo">
             <Toaster />
-            <div className="relative isolate overflow-hidden bg-blue-900 px-6 py-24 shadow-2xl sm:rounded-3xl sm:px-24 xl:py-32">
+            <div className="relative isolate overflow-hidden bg-blue-900 px-6 py-24 shadow-2xl sm:px-24 xl:rounded-3xl xl:py-32">
                 <h2 className="mx-auto max-w-3xl text-center text-4xl font-semibold tracking-tight text-white sm:text-5xl">
-                    Testen Sie die Badge API
+                    {props.titleH2}
                 </h2>
                 <p className="mx-auto mt-6 max-w-lg text-center text-lg text-zinc-200">
-                    Geben Sie die URL eines öffentlichen openCode-Repositorys
-                    ein, um zu sehen, welche der offiziellen Badges vergeben
-                    werden.
+                    {props.description}
                 </p>
                 <div className="mx-auto mt-12 max-w-4xl">
-                    <CheckRepoForm onScanFinished={handleScanFinished} />
+                    <CheckRepoForm
+                        onScanFinished={handleScanFinished}
+                        pleaseWait={props.pleaseWait}
+                        test={props.test}
+                    />
                 </div>
                 <div className="absolute inset-0 -z-20 size-[64rem] overflow-hidden bg-gradient-to-r from-blue-800">
                     <svg
@@ -74,8 +90,19 @@ export default function ApiSmallDemo() {
                     </svg>
                 </div>
             </div>
-            <div>
-                <ResultGrid currentScan={currentScan} />
+            <div className="xl:py-10">
+                {Boolean(currentScan) && (
+                    <ResultGrid
+                        currentScan={currentScan}
+                        resultTitle={props.resultTitle}
+                        deniedTitle={props.deniedTitle}
+                        moreInfo={props.moreInfo}
+                        tableCheck={props.tableCheck}
+                        tableStatus={props.tableStatus}
+                        tableDescription={props.tableDescription}
+                        tableEvidence={props.tableEvidence}
+                    />
+                )}
             </div>
         </div>
     )
diff --git a/src/components/landing-page/Hero.tsx b/src/components/landing-page/Hero.tsx
index 85ae56d6fcb19c67f9779ffe157a5ada925e6f60..ef9a19203d843c16743d64d34899bc50e36f150c 100644
--- a/src/components/landing-page/Hero.tsx
+++ b/src/components/landing-page/Hero.tsx
@@ -3,7 +3,16 @@
 
 import Image from 'next/image'
 
-export default function Hero() {
+interface Props {
+    titleH1: string
+    greetingChildren: React.ReactNode
+    toDocs: string
+    toDocsHref: string
+    toDemo: string
+    toDemoHref: string
+}
+
+export default function Hero(props: Props) {
     return (
         <div className="bg-white">
             <main>
@@ -54,40 +63,25 @@ export default function Hero() {
                         />
                     </div>
                     <div className="overflow-hidden">
-                        <div className="mx-auto max-w-7xl px-6 pb-32 pt-36 sm:pt-60 lg:px-8 lg:pt-32">
+                        <div className="mx-auto max-w-7xl px-6 pb-0 pt-20 md:pb-20 md:pt-20 lg:px-8 lg:pt-32">
                             <div className="mx-auto max-w-2xl gap-x-14 lg:mx-0 lg:flex lg:max-w-none lg:items-center">
                                 <div className="relative w-full lg:max-w-xl lg:shrink-0 xl:max-w-2xl">
                                     <h1 className="text-pretty text-5xl font-semibold tracking-tight text-zinc-900 sm:text-7xl">
-                                        Badge Programm - Vertrauen in Open
-                                        Source Software stärken
+                                        {props.titleH1}
                                     </h1>
-                                    <p className="mt-8 text-pretty text-lg font-medium text-zinc-600 sm:max-w-md sm:text-xl/8 lg:max-w-none">
-                                        Das Badge Programm prüft openCode
-                                        Repositories und vergibt Badges, die im{' '}
-                                        <a
-                                            target="_blank"
-                                            rel="noreferrer noopener"
-                                            href="https://opencode.de/en/software"
-                                            className="text-blue-500 underline"
-                                        >
-                                            openCode Softwarekatalog
-                                        </a>{' '}
-                                        angezeigt werden und den Status der
-                                        Repositories in Bezug auf Sicherheit,
-                                        Wartung und Wiederverwendung anzeigen.
-                                    </p>
+                                    {props.greetingChildren}
                                     <div className="mt-10 flex items-center gap-x-6">
                                         <a
-                                            href="/introduction"
+                                            href={props.toDocsHref}
                                             className="rounded-md bg-blue-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600"
                                         >
-                                            Zur Dokumentation (EN)
+                                            {props.toDocs}
                                         </a>
                                         <a
-                                            href="#api-small-demo"
+                                            href={props.toDemoHref}
                                             className="text-sm/6 font-semibold text-zinc-900"
                                         >
-                                            API Live Demo{' '}
+                                            {props.toDemo}{' '}
                                             <span aria-hidden="true">→</span>
                                         </a>
                                     </div>
diff --git a/src/pages/_meta.ts b/src/pages/_meta.ts
index e33d114916bffd118f7a33205d7622a0aff68bf3..d61742124da1e39453eb54811678607b56d14778 100644
--- a/src/pages/_meta.ts
+++ b/src/pages/_meta.ts
@@ -1,34 +1,3 @@
 // Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
 // SPDX-License-Identifier: MIT
 
-export default {
-    index: {
-        theme: {
-            layout: 'raw',
-        },
-        display: 'hidden',
-    },
-    introduction: { title: 'Introduction' },
-    'official-badges': { title: 'Official Badges 🛡️' },
-    concepts: { title: 'Concepts' },
-    'api-docs': { title: 'API' },
-    docs: {
-        title: 'Documentation (EN)',
-        type: 'page',
-        href: '/introduction',
-    },
-    'live-demo': {
-        title: 'Zur Live Demo 🚀',
-        type: 'page',
-        href: '/#api-small-demo',
-    },
-    'about-opencode': {
-        title: 'Mehr zu openCode ↗',
-        type: 'page',
-        href: 'https://opencode.de/en',
-        newWindow: true,
-    },
-    'declaration-on-accessibility': {
-        display: 'hidden',
-    },
-}
diff --git a/src/pages/concepts/implemented-checks/index.mdx b/src/pages/concepts/implemented-checks/index.mdx
deleted file mode 100644
index 5af1d653b80750df92e07a1b9c501a7f8a7019ff..0000000000000000000000000000000000000000
--- a/src/pages/concepts/implemented-checks/index.mdx
+++ /dev/null
@@ -1,16 +0,0 @@
-{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
-SPDX-License-Identifier: MIT */}
-
-# Overview of Implemented Checks
-
-The following checks are implemented and can be used to generate badges:
-
-- [`BUS_FACTOR` ↗](/concepts/implemented-checks/bus-factor)
-- [`CI_PIPELINE` ↗](/concepts/implemented-checks/ci-pipeline)
-- [`COMMITS` ↗](/concepts/implemented-checks/commits)
-- [`ELEPHANT_FACTOR` ↗](/concepts/implemented-checks/elephant-factor)
-- [`ISSUE_REACTION_TIME` ↗](/concepts/implemented-checks/issue-reaction-time)
-- [`PACKAGES` ↗](/concepts/implemented-checks/packages)
-- [`PROTECTED_BRANCHES` ↗](/concepts/implemented-checks/protected-branches)
-- [`RELEASES` ↗](/concepts/implemented-checks/releases)
-- [`SUBSEQUENT_USE` ↗](/concepts/implemented-checks/subsequent-use)
\ No newline at end of file
diff --git a/src/pages/de/_meta.ts b/src/pages/de/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a2a0c19935db632d514eb2f0b274b1420dc852cf
--- /dev/null
+++ b/src/pages/de/_meta.ts
@@ -0,0 +1,31 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: {
+        theme: {
+            layout: 'raw',
+        },
+        display: 'hidden',
+    },
+    introduction: { title: 'Einführung' },
+    'official-badges': { title: 'Offizielle Badges 🛡️' },
+    concepts: { title: 'Konzepte' },
+    'api-docs': { title: 'API' },
+    docs: {
+        title: 'Dokumentation',
+        type: 'page',
+        href: '/de/introduction',
+    },
+    'live-demo': {
+        title: 'Zur Live Demo 🚀',
+        type: 'page',
+        href: '/de/#api-small-demo',
+    },
+    'erklaerung-zur-barrierefreiheit': {
+        display: 'hidden',
+    },
+    'leichte-sprache': {
+        display: 'hidden',
+    },
+}
diff --git a/src/pages/de/api-docs/_meta.ts b/src/pages/de/api-docs/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3e73835f194ed84a7cb5d48a24dfb1aa9634b8a
--- /dev/null
+++ b/src/pages/de/api-docs/_meta.ts
@@ -0,0 +1,7 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: { title: 'Überblick' },
+    v1: { title: 'API v1' },
+}
diff --git a/src/pages/de/api-docs/index.mdx b/src/pages/de/api-docs/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..423e215363cba31adf3dd32cd26385e03ff97f3a
--- /dev/null
+++ b/src/pages/de/api-docs/index.mdx
@@ -0,0 +1,35 @@
+---
+sidebar_position: 1
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Cards } from 'nextra/components'
+import {
+  LinkIcon,
+  CubeIcon,
+  EyeSlashIcon
+} from '@heroicons/react/24/outline'
+
+# API Dokumentation
+
+Die Badge API bietet eine RESTful JSON-API an. Die folgenden Endpunkte sind verfügbar:
+
+<Cards>
+  <Cards.Card
+    icon={<EyeSlashIcon />}
+    title="SARIF Report pro Repository"
+    href="/de/api-docs/v1/sarif-per-repo-endpoint"
+  />
+  <Cards.Card
+    icon={<LinkIcon />}
+    title="Badge eines Repositorys als SVG"
+    href="/de/api-docs/v1/badges#get-svg-badge"
+  />
+  <Cards.Card
+    icon={<CubeIcon />}
+    title="Erklärung einer Badge eines Repositorys"
+    href="/de/api-docs/v1/badges#get-badge-explanation"
+  />
+</Cards>
\ No newline at end of file
diff --git a/src/pages/de/api-docs/v1/_meta.ts b/src/pages/de/api-docs/v1/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eccddbee993ae53d09e99dc8b04db60be884bf7b
--- /dev/null
+++ b/src/pages/de/api-docs/v1/_meta.ts
@@ -0,0 +1,8 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    'sarif-per-repo-endpoint': { title: 'SARIF pro Repo' },
+    badges: { title: 'Badge pro Repo and Badge-ID' },
+    'badge-explanation': { title: 'Erklärung einer Badge' },
+}
diff --git a/src/pages/de/api-docs/v1/badge-explanation.mdx b/src/pages/de/api-docs/v1/badge-explanation.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..50c57b8bb7cb137949454520f443a991bf5c366b
--- /dev/null
+++ b/src/pages/de/api-docs/v1/badge-explanation.mdx
@@ -0,0 +1,71 @@
+---
+sidebar_position: 3
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Tabs, Callout } from 'nextra/components'
+
+# Erklärung einer Badge
+
+## Erklärung zu einer Badge erhalten
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/badges/{badgeID}/sarif`
+</Callout>
+
+Dieser Endpunkt gibt die Erklärung einer Badges für die angegebene Repository-URL und Badge-ID zurück.
+
+Dieser Endpunkt wird mit der Repository-URL und der Badge-ID parametrisiert. Die Repository-URL ist die
+URL des Repositorys, das gescannt werden soll oder bereits gescannt wurde. **Die URL muss URL-encodiert sein.** 
+(`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
+
+Die Badge-ID ist der Titel der Badge, der zurückgegeben werden soll. Die verfügbaren Badges und damit die Badge-IDs werden in der
+[.badge-api.yaml](/de/concepts/configuration) der Instanz der API definiert.
+
+### Beispiel Anfrage
+
+<Tabs items={['GO', 'JavaScript', 'curl']}>
+    <Tabs.Tab>
+        ```go filename="main.go" copy
+        package main
+
+        import (
+            "fmt"
+            "io"
+            "net/http"
+        )
+
+        func main() {
+            url := "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED/sarif"
+            resp, err := http.Get(url)
+            if err != nil {
+                fmt.Println("Error:", err)
+                return
+            }
+            defer resp.Body.Close()
+
+            body, _ := io.ReadAll(resp.Body)
+            fmt.Println(string(body))
+        }
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```js filename="main.js" copy
+        const fetch = require('node-fetch');
+
+        const url = 'https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED/sarif';
+
+        fetch(url)
+        .then(response => response.json())
+        .then(data => console.log(data))
+        .catch(error => console.error('Error:', error));
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```bash filename="cli" copy
+        curl -X GET "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED/sarif"
+        ```
+    </Tabs.Tab>
+</Tabs>
\ No newline at end of file
diff --git a/src/pages/de/api-docs/v1/badges.mdx b/src/pages/de/api-docs/v1/badges.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..fa9638b28ab695272d68eda8833c975fb4014db0
--- /dev/null
+++ b/src/pages/de/api-docs/v1/badges.mdx
@@ -0,0 +1,70 @@
+---
+sidebar_position: 2
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Tabs, Callout } from 'nextra/components'
+
+# Badge pro Repository und Badge-ID
+
+## SVG einer Badge
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/badges/{badgeID}`
+</Callout>
+
+Dieser Endpunkt gibt die **SVG-Badge** für die angegebene Repository-URL und Badge-ID zurück.
+
+Dieser Endpunkt wird mit der Repository-URL und der Badge-ID parametrisiert. Die Repository-URL ist die URL des Repositorys, das 
+gescannt werden soll oder bereits gescannt wurde. **Die URL muss URL-encodiert sein** 
+(`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
+
+Die Badge-ID ist der Titel der Badge, der zurückgegeben werden soll. Die verfügbaren Badges und damit die Badge-IDs werden in der
+[.badge-api.yaml](/de/concepts/configuration) der Instanz der API definiert.
+
+### Beispiel Anfrage
+<Tabs items={['GO', 'JavaScript', 'curl']}>
+    <Tabs.Tab>
+        ```go filename="main.go" copy
+        package main
+
+        import (
+            "fmt"
+            "io"
+            "net/http"
+        )
+
+        func main() {
+            url := "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED"
+            resp, err := http.Get(url)
+            if err != nil {
+                fmt.Println("Error:", err)
+                return
+            }
+            defer resp.Body.Close()
+
+            body, _ := io.ReadAll(resp.Body)
+            fmt.Println(string(body))
+        }
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```js filename="main.js" copy
+        const fetch = require('node-fetch');
+
+        const url = 'https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED';
+
+        fetch(url)
+        .then(response => response.json())
+        .then(data => console.log(data))
+        .catch(error => console.error('Error:', error));
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```bash filename="cli" copy
+        curl -X GET "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/badges/MAINTAINED"
+        ```
+    </Tabs.Tab>
+</Tabs>
diff --git a/src/pages/de/api-docs/v1/sarif-per-repo-endpoint.mdx b/src/pages/de/api-docs/v1/sarif-per-repo-endpoint.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..4bf213b86dd3ea9a21de025e42f277efb58dada8
--- /dev/null
+++ b/src/pages/de/api-docs/v1/sarif-per-repo-endpoint.mdx
@@ -0,0 +1,573 @@
+---
+sidebar_position: 1
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Tabs, Callout } from 'nextra/components'
+
+# SARIF pro Repository
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/sarif`
+</Callout>
+
+Dieser Endpunkt wird mit der **vollständigen Repository-URL** parametrisiert. Die Repository-URL ist die URL des zu scannenden Repositorys.
+**Die URL muss URL-encodiert sein** 
+(`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
+
+Die Verwendung dieses Formats eröffnet die Möglichkeit, Repositorys von anderen Plattformen wie GitHub, Bitbucket usw.
+zu scannen. Außerdem wird das Caching vereinfacht, da die URL eindeutig ist (anstatt beispielsweise die Projekt-ID und
+eine Plattform-URL als Query-String zu verwenden) und die URL zumindest nach der URL-Dekodierung für Menschen
+lesbar ist. Dies könnte in Zukunft die Fehlerbehebung verbessern.
+
+Die Antwort der API ist im [SARIF format](https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/sarif-support-for-code-scanning). 
+**SARIF vereinfacht eine mögliche spätere Integration mit anderen Tools. Es handelt sich um einen offenen Standard, der breite Unterstützung findet.**
+
+### Beispiel Anfrage
+
+<Tabs items={['GO', 'JavaScript', 'curl']}>
+    <Tabs.Tab>
+        ```go filename="main.go" copy
+        package main
+
+        import (
+            "fmt"
+            "io"
+            "net/http"
+        )
+
+        func main() {
+            url := "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/sarif"
+            resp, err := http.Get(url)
+            if err != nil {
+                fmt.Println("Error:", err)
+                return
+            }
+            defer resp.Body.Close()
+
+            body, _ := io.ReadAll(resp.Body)
+            fmt.Println(string(body))
+        }
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```js filename="main.js" copy
+        const fetch = require('node-fetch');
+
+        const url = 'https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/sarif';
+
+        fetch(url)
+        .then(response => response.json())
+        .then(data => console.log(data))
+        .catch(error => console.error('Error:', error));
+        ```
+    </Tabs.Tab>
+    <Tabs.Tab>
+        ```bash filename="cli" copy
+        curl -X GET "https://scanner.zend.is/api/v1/repositories/https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner/sarif"
+        ```
+    </Tabs.Tab>
+</Tabs>
+
+### Beispiel Antwort
+
+```json
+{
+  "$schema": "https://www.schemastore.org/schemas/json/sarif-2.1.0.json",
+  "runs": [
+    {
+      "properties": {
+        "badges": [
+          {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "BRONZE",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-1.svg",
+            "badgeGranted": true,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": false,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "The number of commits in the last 6 months. (The current value is 39)",
+                  "value": "39",
+                  "status": "pass",
+                  "ruleId": "COMMITS",
+                  "threshold": {
+                    "min": 5,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4"
+                }
+              ]
+            }
+          },
+          {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "SILVER",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-2.svg",
+            "badgeGranted": true,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": false,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "The number of commits in the last 6 months. (The current value is 39)",
+                  "value": "39",
+                  "status": "pass",
+                  "ruleId": "COMMITS",
+                  "threshold": {
+                    "min": 5,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4"
+                },
+                {
+                  "description": "The minimum time it takes for a project member to react to an issue in the last 3 months. (The current value is <nil>)",
+                  "value": "<nil>",
+                  "status": "open",
+                  "ruleId": "ISSUE_REACTION_TIME",
+                  "threshold": {
+                    "max": 7,
+                    "timeRangeInMonths": 3
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "SILVER"
+                }
+              ]
+            }
+          },
+          {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "GOLD",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-3.svg",
+            "badgeGranted": true,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": true,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "The number of commits in the last 6 months. (The current value is 39)",
+                  "value": "39",
+                  "status": "pass",
+                  "ruleId": "COMMITS",
+                  "threshold": {
+                    "min": 5,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4"
+                },
+                {
+                  "description": "The minimum time it takes for a project member to react to an issue in the last 3 months. (The current value is <nil>)",
+                  "value": "<nil>",
+                  "status": "open",
+                  "ruleId": "ISSUE_REACTION_TIME",
+                  "threshold": {
+                    "max": 7,
+                    "timeRangeInMonths": 3
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "SILVER"
+                },
+                {
+                  "description": "The number of tags/releases in the last 6 months. (The current value is 1)",
+                  "value": "1",
+                  "status": "pass",
+                  "ruleId": "RELEASES",
+                  "threshold": {
+                    "min": 1,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "MAINTAINED",
+                  "badgeLevel": "GOLD",
+                  "evidence": "The number of tags/releases in the last 6 months is 1 (1 tag(s) of which 0 are releases). The following tags/releases were found: tag:v1.1.0"
+                }
+              ]
+            }
+          },
+          {
+            "badgeId": "REUSED",
+            "badgeLevel": "BRONZE",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/REUSED-1.svg",
+            "badgeGranted": false,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": false,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "The project has a packaging system in place and used it during the last 6 months. It checks the container registry, the package registry and the releases. It expects either a release to have assets or packages inside those two registries (The current value is 0)",
+                  "value": "0",
+                  "status": "fail",
+                  "ruleId": "PACKAGES",
+                  "threshold": {
+                    "min": 1,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "REUSED",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "No container tags, packages or releases with assets found."
+                },
+                {
+                  "description": "The number of CI pipeline runs in the last 6 months. (The current value is 56)",
+                  "value": "56",
+                  "status": "pass",
+                  "ruleId": "CI_PIPELINE",
+                  "threshold": {
+                    "min": 1,
+                    "timeRangeInMonths": 6
+                  },
+                  "badgeId": "REUSED",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "The number of CI pipeline runs in the last 6 months is 56 (43 of 56 were successful)."
+                }
+              ]
+            }
+          },
+          {
+            "badgeId": "DIN-SPEC-XXXX",
+            "badgeLevel": "BRONZE",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/manual-badges/-/raw/main/badges/din-spec-xxxx.svg",
+            "badgeGranted": false,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": false,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "Provides a badge for projects that are compliant with DIN SPEC XXXX. This badge is granted manually trough the DIN SPEC XXXX working group. (The current value is 0)",
+                  "value": "0",
+                  "status": "fail",
+                  "ruleId": "MANUAL/DIN SPEC XXXX compliant",
+                  "threshold": {
+                    "min": 1
+                  },
+                  "badgeId": "DIN-SPEC-XXXX",
+                  "badgeLevel": "BRONZE",
+                  "evidence": "Check was not manually granted"
+                }
+              ]
+            }
+          },
+          {
+            "badgeId": "OPEN-SOURCE",
+            "badgeLevel": "GOLD",
+            "badgeUrl": "https://gitlab.opencode.de/open-code/badgebackend/manual-badges/-/raw/main/badges/open-source.svg",
+            "badgeGranted": true,
+            "badgeInformationUri": "",
+            "isHighestGrantedBadge": true,
+            "badgeExplanation": {
+              "criteria": [
+                {
+                  "description": "Provides a badge for projects that are open-source. This badge is granted manually by the openCode team. (The current value is 1)",
+                  "value": "1",
+                  "status": "pass",
+                  "ruleId": "MANUAL/Project is open source",
+                  "threshold": {
+                    "min": 1
+                  },
+                  "badgeId": "OPEN-SOURCE",
+                  "badgeLevel": "GOLD",
+                  "evidence": "Check was manually granted"
+                }
+              ]
+            }
+          }
+        ],
+        "testedRepository": "https://gitlab.opencode.de/bmi/ozg-rahmenarchitektur/ozgsec/ozgsec-best-practice-scanner"
+      },
+      "results": [
+        {
+          "kind": "pass",
+          "message": "The number of commits in the last 6 months. (The current value is 39)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "BRONZE",
+            "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4",
+            "threshold": {
+              "min": 5,
+              "timeRangeInMonths": 6
+            },
+            "value": "39"
+          },
+          "ruleId": "COMMITS",
+          "ruleIndex": 0
+        },
+        {
+          "kind": "pass",
+          "message": "The number of commits in the last 6 months. (The current value is 39)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "BRONZE",
+            "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4",
+            "threshold": {
+              "min": 5,
+              "timeRangeInMonths": 6
+            },
+            "value": "39"
+          },
+          "ruleId": "COMMITS",
+          "ruleIndex": 0
+        },
+        {
+          "kind": "open",
+          "message": "The minimum time it takes for a project member to react to an issue in the last 3 months. (The current value is <nil>)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "SILVER",
+            "evidence": "",
+            "threshold": {
+              "max": 7,
+              "timeRangeInMonths": 3
+            },
+            "value": "<nil>"
+          },
+          "ruleId": "ISSUE_REACTION_TIME",
+          "ruleIndex": 1
+        },
+        {
+          "kind": "pass",
+          "message": "The number of commits in the last 6 months. (The current value is 39)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "BRONZE",
+            "evidence": "The number of commits in the last 6 months is 39. First commit dd519848, last commit e5eaf6c4",
+            "threshold": {
+              "min": 5,
+              "timeRangeInMonths": 6
+            },
+            "value": "39"
+          },
+          "ruleId": "COMMITS",
+          "ruleIndex": 0
+        },
+        {
+          "kind": "open",
+          "message": "The minimum time it takes for a project member to react to an issue in the last 3 months. (The current value is <nil>)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "SILVER",
+            "evidence": "",
+            "threshold": {
+              "max": 7,
+              "timeRangeInMonths": 3
+            },
+            "value": "<nil>"
+          },
+          "ruleId": "ISSUE_REACTION_TIME",
+          "ruleIndex": 1
+        },
+        {
+          "kind": "pass",
+          "message": "The number of tags/releases in the last 6 months. (The current value is 1)",
+          "properties": {
+            "badgeId": "MAINTAINED",
+            "badgeLevel": "GOLD",
+            "evidence": "The number of tags/releases in the last 6 months is 1 (1 tag(s) of which 0 are releases). The following tags/releases were found: tag:v1.1.0",
+            "threshold": {
+              "min": 1,
+              "timeRangeInMonths": 6
+            },
+            "value": "1"
+          },
+          "ruleId": "RELEASES",
+          "ruleIndex": 2
+        },
+        {
+          "kind": "fail",
+          "message": "The project has a packaging system in place and used it during the last 6 months. It checks the container registry, the package registry and the releases. It expects either a release to have assets or packages inside those two registries (The current value is 0)",
+          "properties": {
+            "badgeId": "REUSED",
+            "badgeLevel": "BRONZE",
+            "evidence": "No container tags, packages or releases with assets found.",
+            "threshold": {
+              "min": 1,
+              "timeRangeInMonths": 6
+            },
+            "value": "0"
+          },
+          "ruleId": "PACKAGES",
+          "ruleIndex": 3
+        },
+        {
+          "kind": "pass",
+          "message": "The number of CI pipeline runs in the last 6 months. (The current value is 56)",
+          "properties": {
+            "badgeId": "REUSED",
+            "badgeLevel": "BRONZE",
+            "evidence": "The number of CI pipeline runs in the last 6 months is 56 (43 of 56 were successful).",
+            "threshold": {
+              "min": 1,
+              "timeRangeInMonths": 6
+            },
+            "value": "56"
+          },
+          "ruleId": "CI_PIPELINE",
+          "ruleIndex": 4
+        },
+        {
+          "kind": "fail",
+          "message": "Provides a badge for projects that are compliant with DIN SPEC XXXX. This badge is granted manually trough the DIN SPEC XXXX working group. (The current value is 0)",
+          "properties": {
+            "badgeId": "DIN-SPEC-XXXX",
+            "badgeLevel": "BRONZE",
+            "evidence": "Check was not manually granted",
+            "threshold": {
+              "min": 1
+            },
+            "value": "0"
+          },
+          "ruleId": "MANUAL/DIN SPEC XXXX compliant",
+          "ruleIndex": 5
+        },
+        {
+          "kind": "pass",
+          "message": "Provides a badge for projects that are open-source. This badge is granted manually by the openCode team. (The current value is 1)",
+          "properties": {
+            "badgeId": "OPEN-SOURCE",
+            "badgeLevel": "GOLD",
+            "evidence": "Check was manually granted",
+            "threshold": {
+              "min": 1
+            },
+            "value": "1"
+          },
+          "ruleId": "MANUAL/Project is open source",
+          "ruleIndex": 6
+        }
+      ],
+      "tool": {
+        "driver": {
+          "informationUri": "https://gitlab.opencode.de/open-code/badgebackend/badge-api",
+          "name": "badge-api",
+          "rules": [
+            {
+              "id": "COMMITS",
+              "name": "Commits",
+              "fullDescription": {
+                "text": "The number of commits in the last 6 months."
+              },
+              "help": {
+                "text": "The number of commits in the last 6 months."
+              },
+              "properties": {
+                "unit": "commits",
+                "threshold": {
+                  "min": 5,
+                  "timeRangeInMonths": 6
+                }
+              }
+            },
+            {
+              "id": "ISSUE_REACTION_TIME",
+              "name": "Issue Reaction Time",
+              "fullDescription": {
+                "text": "The minimum time it takes for a project member to react to an issue in the last 3 months."
+              },
+              "help": {
+                "text": "The minimum time it takes for a project member to react to an issue in the last 3 months."
+              },
+              "properties": {
+                "unit": "days",
+                "threshold": {
+                  "max": 7,
+                  "timeRangeInMonths": 3
+                }
+              }
+            },
+            {
+              "id": "RELEASES",
+              "name": "Releases",
+              "fullDescription": {
+                "text": "The number of tags/releases in the last 6 months."
+              },
+              "help": {
+                "text": "The number of tags/releases in the last 6 months."
+              },
+              "properties": {
+                "unit": "releases",
+                "threshold": {
+                  "min": 1,
+                  "timeRangeInMonths": 6
+                }
+              }
+            },
+            {
+              "id": "PACKAGES",
+              "name": "Packaging",
+              "fullDescription": {
+                "text": "The project has a packaging system in place and used it during the last 6 months. It checks the container registry, the package registry and the releases. It expects either a release to have assets or packages inside those two registries"
+              },
+              "help": {
+                "text": "Packaging is a way to distribute software. It is important to have a packaging system in place to make it easier for users to install and use the software. Packaging systems can help automate the process of installing software, manage dependencies, and ensure that the software is installed correctly. This check looks for a packaging system in the project and checks if it has been used in the last 6 months."
+              },
+              "properties": {
+                "unit": "packages",
+                "threshold": {
+                  "min": 1,
+                  "timeRangeInMonths": 6
+                }
+              }
+            },
+            {
+              "id": "CI_PIPELINE",
+              "name": "CI Pipeline Runs",
+              "fullDescription": {
+                "text": "The number of CI pipeline runs in the last 6 months."
+              },
+              "help": {
+                "text": "The number of CI pipeline runs the last 6 months."
+              },
+              "properties": {
+                "unit": "runs",
+                "threshold": {
+                  "min": 1,
+                  "timeRangeInMonths": 6
+                }
+              }
+            },
+            {
+              "id": "MANUAL/DIN SPEC XXXX compliant",
+              "name": "DIN SPEC XXXX compliant",
+              "fullDescription": {
+                "text": "Provides a badge for projects that are compliant with DIN SPEC XXXX. This badge is granted manually trough the DIN SPEC XXXX working group."
+              },
+              "help": {
+                "text": "This is a manual check"
+              },
+              "properties": {
+                "unit": "",
+                "threshold": {
+                  "min": 1
+                }
+              }
+            },
+            {
+              "id": "MANUAL/Project is open source",
+              "name": "Project is open source",
+              "fullDescription": {
+                "text": "Provides a badge for projects that are open-source. This badge is granted manually by the openCode team."
+              },
+              "help": {
+                "text": "This is a manual check"
+              },
+              "properties": {
+                "unit": "",
+                "threshold": {
+                  "min": 1
+                }
+              }
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "version": "2.1.0"
+}
+```
\ No newline at end of file
diff --git a/src/pages/de/concepts/_meta.ts b/src/pages/de/concepts/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1e8ba106387e2479716678901cb12082c24eb8d3
--- /dev/null
+++ b/src/pages/de/concepts/_meta.ts
@@ -0,0 +1,8 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: { title: 'Überblick' },
+    configuration: { title: 'Konfiguration' },
+    'implemented-checks': { title: 'Implementierte Checks' },
+}
diff --git a/src/pages/de/concepts/configuration/_meta.ts b/src/pages/de/concepts/configuration/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..25028b1a7ffa2f1d802ebdc815f867c23e0ce44d
--- /dev/null
+++ b/src/pages/de/concepts/configuration/_meta.ts
@@ -0,0 +1,7 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: { title: 'Konfigurationsdatei' },
+    'manual-checks': { title: 'Manuelle Checks' },
+}
diff --git a/src/pages/de/concepts/configuration/index.mdx b/src/pages/de/concepts/configuration/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..3878787eff641109eadfdc76e5af4af1d24d3f7c
--- /dev/null
+++ b/src/pages/de/concepts/configuration/index.mdx
@@ -0,0 +1,137 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Konfigurationsdatei
+
+<Callout type="info">
+  Die Konfigurationsdatei der offiziellen Instanz finden Sie [hier →](https://gitlab.opencode.de/open-code/badgebackend/badge-config/-/blob/main/.badge-api.yaml)
+</Callout>
+
+Die Badge-API wird mithilfe einer yaml-Konfigurationsdatei mit dem Namen `.badge-api.yaml` konfiguriert. Das Programm sucht diese Datei im aktuellen Arbeitsverzeichnis
+und in `/etc/badge-api/` oder frag diese aus einem Git-Repository ab.
+
+Die Konfigurationsdatei besteht aus mehreren Schlüsselabschnitten, darunter:
+
+- **gitClients**: Enthält die Konfiguration für die Verbindung zu Git-Anbietern.
+- **badges**: Definiert die Abzeichen, ihre Stufen, Prüfungen und zugehörigen Schwellenwerte.
+- **personalEmailDomains**: Eine Liste persönlicher E-Mail-Domains (erforderlich für die Überprüfung des Elefanten- und Busfaktors).
+- **remoteConfigUrl**: URL zu einer Remote-Konfigurationsdatei (optional). Oder die Umgebungsvariable `REMOTE_CONFIG_URL`.
+- **subsequentUseApiDomain**: Die Domain der API für die nachfolgende Verwendung
+
+### Git Clients Konfiguration
+
+Der Abschnitt `gitClients` definiert, wie die Badge-API eine Verbindung zu GitLab-Repositorys herstellt.
+
+```yaml
+gitClients:
+  - baseUrl: <git_server_url>
+    tokenFile: <path_to_token_file>
+    type: <git_server_type>
+    maxRequestsPerSecond: <requests_per_second>
+```
+
+- `baseUrl`: Die URL Ihrer GitLab-Instanz (z. B., https://gitlab.opencode.de).
+- `tokenFile`: The file containing the access token (see Token Permissions).
+- `type`: The type of GitLab server (e.g., gitlab).
+- `maxRequestsPerSecond`: Maximum number of requests allowed per second to avoid rate-limiting.
+
+
+#### Token Rechte
+
+Ein Token wird verwendet, um die Badge-API gegenüber der API des Git-Providers zu authentifizieren. Für den regulären Gebrauch
+benötigt der Token keine besonderen Berechtigungen. Er wird nur verwendet, weil **GitLab** selbst für
+Open-Source-Projekte eine Authentifizierung für den Endpunkt `/member` erfordert.
+
+Es gibt jedoch einen Sonderfall, wenn Sie [manuelle Prüfungen](/de/concepts/configuration/manual-checks) mit einer in einem privaten Repository
+gespeicherten Entscheidungs-JSON-Datei bereitstellen. In diesem Fall verwendet die Badge-API das bereitgestellte Token
+auch für den Zugriff auf die JSON-Datei (sofern die baseURL übereinstimmt). Für diesen Vorgang muss das Token mindestens
+über die Berechtigung `read_repository` verfügen (ein Projektzugriffstoken ist ebenfalls zulässig). Dasselbe gilt für
+`svgUrls`, die in privaten Repositorys gespeichert sind.
+
+Die API identifiziert das richtige Token anhand der bereitgestellten `baseUrl` und `type` in der Konfigurationsdatei.
+
+### Badges Konfiguration
+
+Im Abschnitt `badges` werden verschiedene Badges, ihre Level und Prüfungen definiert. Eine Badge
+kann mehrere Stufen haben, die jeweils mit Prüfungen verbunden sind.
+
+```yaml
+badges:
+  - id: <badge_id>
+    description: <badge_description>
+    levels:
+      - name: <level_name>
+        svgUrl: <url_to_badge_svg>
+        checks:
+          - type: <check_type>
+            description: <check_description>
+            threshold:
+              timeRangeInMonths: <number_of_months>
+              min: <minimum_value>
+              max: <maximum_value>
+```
+Jede Badge kann verschiedene Stufen haben (z. B. `bronze`, `silver`, `gold`). Für jede Stufe gibt es
+Prüfungen, die auf das Projekt angewendet werden. Die verfügbaren Prüfungen finden Sie im Abschnitt 
+[Implemnetierte Checks](/de/concepts/implemented-checks).
+
+Jeder Check hat einen Schwellenwert mit zwei optionalen Parametern:
+
+- `min`: Mindestwert (z. B. Anzahl der Commits, Maintainer).
+- `max`: Maximalwert (z. B. Antwortzeit auf Issues).
+- `timeRangeInMonths`: Zeitraum (in Monaten) zur Bewertung der Projektaktivität.
+
+#### Beispiel Konfiguration
+
+```yaml
+badges:
+  - id: maintained
+    description: This badge checks if a project is maintained.
+    levels:
+      - name: bronze
+        notNecessaryForNextHigherLevel: true
+        svgUrl: https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-1.svg
+        checks:
+          - type: COMMITS
+            description: Checks if the number of commits during the last 6 month is greater than 5.
+            threshold:
+              timeRangeInMonths: 6
+              min: 5
+      - name: silver
+        svgUrl: https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-2.svg
+        checks:
+          - type: ISSUE_REACTION_TIME
+            description: Checks if the average reaction time to issues is less than 7 days.
+            threshold:
+              timeRangeInMonths: 3
+              max: 7
+          - type: BUS_FACTOR
+            description: Checks if multiple maintainers are working on the project.
+            threshold:
+              timeRangeInMonths: 6
+              min: 1
+      - name: gold
+        svgUrl: https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/raw/main/assets/MAINTAINED-3.svg
+        checks:
+          - type: RELEASES
+            description: Checks if the number of releases during the last 6 month is greater than 1.
+            threshold:
+              timeRangeInMonths: 6
+              min: 1
+          - type: ELEPHANT_FACTOR
+            description: Checks if multiple companies are working on the project.
+            threshold:
+              timeRangeInMonths: 6
+              min: 1
+```
+
+### Remote-Konfiguration
+Mit dem Parameter `remoteConfigUrl` können Sie eine URL zu einer Remote-Konfigurationsdatei angeben. Diese
+Datei wird abgerufen und verwendet, um die lokale Konfiguration zu überschreiben. Nur die Abschnitte
+`badges` und `personalEmailDomains` werden aus der Remote-Konfigurationsdatei berücksichtigt. Um andere
+Werte zu aktualisieren, muss eine lokale Datei verwendet werden.
+
+Die Remote-Konfigurationsdatei kann die spezielle Zeichenfolge `<badge-config-repo>` enthalten. Dieser
+Wert wird durch den `remoteConfigUrl`-Basispfad ersetzt. Dies ist nützlich, um die Remote-Konfiguration
+von einem anderen Branch aus zu validieren und die URL über eine Umgebungsvariable zu übergeben.
diff --git a/src/pages/de/concepts/configuration/manual-checks.mdx b/src/pages/de/concepts/configuration/manual-checks.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..7f2d99e85d362108a48e397f3e80ec1a49ad8f15
--- /dev/null
+++ b/src/pages/de/concepts/configuration/manual-checks.mdx
@@ -0,0 +1,24 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Manuelle checks
+
+Manuelle Prüfungen sind eine besondere Art von Prüfung, die nicht automatisch von der Badge-API ausgewertet wird. 
+Stattdessen wird das Ergebnis der Prüfung von einer JSON-Datei bereitgestellt, die auf einem Server gehostet wird,
+der von der Badge-API-Instanz aus erreichbar ist. 
+Die JSON-Datei enthält eine Liste der genehmigten Projekte oder ein Regex-Muster für genehmigte Projekte.
+
+Sie können einen persönlichen GitLab-Zugriffstoken über die Umgebungsvariable `GITLAB_TOKEN` bereitstellen,
+um auf ein privates Repository zuzugreifen, in dem die JSON-Datei gespeichert ist.
+
+```json filename="manual-check.json" copy
+{
+    "granted": [],
+    "grantedRegex": [
+        "^https://gitlab\\.opencode\\.de.*"
+    ]
+}
+```
+
+Die Datei wird in der Konfigurationsdatei `.badge-api.yaml` des Badges referenziert. 
+Weitere Informationen zur Konfigurationsdatei finden Sie [hier](/de/concepts/configuration).
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/_meta.ts b/src/pages/de/concepts/implemented-checks/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..314e001f5dc9b22d40a0c5dcc40f786f12eeef01
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/_meta.ts
@@ -0,0 +1,15 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: { title: 'Überblick' },
+    'bus-factor': { title: 'Bus-Faktor' },
+    'ci-pipeline': { title: 'CI-Pipeline' },
+    commits: { title: 'Commits' },
+    'elephant-factor': { title: 'Elephant-Faktor' },
+    'issue-reaction-time': { title: 'Reaktionszeit auf Issues' },
+    packages: { title: 'Pakete' },
+    'protected-branches': { title: 'Geschützte Branches' },
+    releases: { title: 'Releases' },
+    'subsequent-use': { title: 'Nachnutzung' },
+}
diff --git a/src/pages/de/concepts/implemented-checks/bus-factor.mdx b/src/pages/de/concepts/implemented-checks/bus-factor.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..31ac0535bf76ae2f999b085ffb3a0dd7eefd3660
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/bus-factor.mdx
@@ -0,0 +1,32 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Bus Faktor
+
+<Callout type="default">
+  Check Typ: `BUS_FACTOR`
+</Callout>
+
+Dieser Check berechnet den Busfaktor eines Projekts für einen bestimmten Zeitraum.
+Der Check gilt als bestanden, wenn der Busfaktor größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: BUS_FACTOR
+  description: Checks if multiple maintainers are working on the project.
+  threshold:
+    timeRangeInMonths: 6
+    min: 2
+```
+
+### Hintergrund
+
+Der Bus-Faktor ist ein Maß für das Risiko, das entsteht, wenn Informationen und Fähigkeiten nicht unter den Teammitgliedern geteilt werden.
+
+Stellen Sie sich vor, es gibt einen ziemlich präzisen Bus, der leider immer genau eine Person überfährt. Der Bus-Faktor ist die Anzahl der
+Personen, die vom Bus überfahren werden müssen, bis die Hälfte der Commits im Projekt keinen lebenden Contributor mehr hat. Je höher der
+Bus-Faktor, desto geringer ist das Risiko, dass das Projekt aufgrund des Verlusts einer einzelnen Person scheitert.
+
+Wenn ein Projekt beispielsweise einen Bus-Faktor von 2 hat, bedeutet dies, dass die beiden wichtigsten Beitragenden für 50 % der
+Commits verantwortlich sind und das Projekt in Gefahr wäre, wenn beide wegfallen würden.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/ci-pipeline.mdx b/src/pages/de/concepts/implemented-checks/ci-pipeline.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..2bcb29e79f413c375f4c64e3fdf2b520b25f0b1b
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/ci-pipeline.mdx
@@ -0,0 +1,38 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# CI Pipeline
+
+<Callout type="default">
+  Check Typ: `CI_PIPELINE`
+</Callout>
+
+Dieser Check fragt die GitLab-API ab und zählt die Anzahl der CI-Pipeline-Durchläufe (erfolgreich oder fehlgeschlagen) im Betrachtungszeitraum.
+Der Check gilt als bestanden, wenn die Anzahl der Commits größer oder gleich dem Mindestschwellenwert ist.
+
+Die Anzahl der erfolgreichen CI-Pipeline-Läufe wird als Information im Nachweis der API-Antwort bereitgestellt.
+
+
+```yaml filename=".badge-api.yaml" copy
+- type: CI_PIPELINE
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    min: 1
+```
+
+### Hintergrund
+
+Die Messung der Anzahl der CI-Pipeline-Durchläufe kann dabei helfen, die Stabilität und Zuverlässigkeit
+des Entwicklungsprozesses eines Projekts zu beurteilen. Eine hohe Anzahl erfolgreicher Pipeline-Durchläufe
+deutet auf eine gut gepflegte und stabile Codebasis mit regelmäßigen Tests und Validierungen hin.
+
+- Continuous Integration Ansatz: Häufige CI-Pipeline-Läufe deuten darauf hin, dass das Projekt regelmäßigen
+  automatisierten Tests unterzogen wird, wodurch Fehler frühzeitig erkannt und die Qualität der Software
+  sichergestellt werden.
+
+- Entwicklungseffizienz: Eine reibungslose CI-Pipeline spiegelt auch die Effizienz des Entwicklungsteams
+  bei der Integration und dem Testen neuer Änderungen wider, wodurch der Gesamt-Workflow des Projekts
+  verbessert und die Wahrscheinlichkeit von Problemen in der Produktion verringert wird.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/commits.mdx b/src/pages/de/concepts/implemented-checks/commits.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..cc0ae431939b9d5f26f978e6d61cee48e2b65649
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/commits.mdx
@@ -0,0 +1,28 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Commits
+
+<Callout type="default">
+  Check Typ: `COMMITS`
+</Callout>
+
+Dieser Check fragt die GitLab-API ab und zählt die Anzahl der Commits in einem bestimmten Zeitraum. 
+Der Check gilt als bestanden, wenn die Anzahl der Commits größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: COMMITS
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    min: 5
+```
+
+### Hintergrund
+
+Das Zählen von Commits innerhalb eines bestimmten Zeitraums kann Teil der Messung der Aktivität und Wartung eines Projekts sein. 
+Häufige Commits deuten auf eine aktive Entwicklung, Fehlerbehebungen und laufende Verbesserungen hin.
+Eine hohe Anzahl von Commits kann ferner auf engagierte Mitwirkende und eine positive Entwicklung des Projekts
+hinweisen, während eine geringere Anzahl von Commits oder das Ausbleiben dieser auf eine Stagnation hindeuten kann.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/elephant-factor.mdx b/src/pages/de/concepts/implemented-checks/elephant-factor.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..e6333055a724ffbc7061a1555a1456d3ff91470f
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/elephant-factor.mdx
@@ -0,0 +1,33 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Elephant Faktor
+
+<Callout type="default">
+  Check Typ: `ELEPHANT_FACTOR`
+</Callout>
+
+Dieser Check berechnet den Elefantenfaktor eines Projekts für einen bestimmten Zeitraum.
+Der Check gilt als bestanden, wenn der Elefantenfaktor größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: ELEPHANT_FACTOR
+  description: Checks if multiple companies are working on the project.
+  threshold:
+    timeRangeInMonths: 6
+    min: 2
+```
+
+### Hintergrund
+
+Der Elefantenfaktor ist ein Maß für das Risiko, das sich daraus ergibt, dass Informationen und Fähigkeiten
+nicht zwischen Organisationen ausgetauscht werden.
+
+Er ähnelt dem [Bus-Faktor](/de/concepts/implemented-checks/bus-factor), misst jedoch nicht das Risiko,
+Einzelpersonen zu verlieren, sondern das Risiko, am Projekt mitwirkende Organisationen zu verlieren.
+
+Wenn ein Projekt etwa einen Elefantenfaktor von 2 hat, bedeutet dies, dass die beiden wichtigsten
+Organisationen für 50 % der Commits verantwortlich sind und das Projekt in Gefahr wäre, wenn beide
+wegfallen würden. 
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/index.mdx b/src/pages/de/concepts/implemented-checks/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..179bdd1ad363b64ebdd6446026c2ba3f50fb770c
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/index.mdx
@@ -0,0 +1,16 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Überblick über implementierte Checks
+
+Die folgenden Checks sind implementiert und können zur Erstellung von Badges verwendet werden:
+
+- [`BUS_FACTOR` ↗](/de/concepts/implemented-checks/bus-factor)
+- [`CI_PIPELINE` ↗](/de/concepts/implemented-checks/ci-pipeline)
+- [`COMMITS` ↗](/de/concepts/implemented-checks/commits)
+- [`ELEPHANT_FACTOR` ↗](/de/concepts/implemented-checks/elephant-factor)
+- [`ISSUE_REACTION_TIME` ↗](/de/concepts/implemented-checks/issue-reaction-time)
+- [`PACKAGES` ↗](/de/concepts/implemented-checks/packages)
+- [`PROTECTED_BRANCHES` ↗](/de/concepts/implemented-checks/protected-branches)
+- [`RELEASES` ↗](/de/concepts/implemented-checks/releases)
+- [`SUBSEQUENT_USE` ↗](/de/concepts/implemented-checks/subsequent-use)
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/issue-reaction-time.mdx b/src/pages/de/concepts/implemented-checks/issue-reaction-time.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..4a144f2541cfdd123c18a16619e973f1eb84b952
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/issue-reaction-time.mdx
@@ -0,0 +1,58 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Reaktionszeit auf Issues
+
+<Callout type="default">
+  Check Typ: `ISSUE_REACTION_TIME`
+</Callout>
+
+Dieser Check fragt die GitLab-API für den Betrachtungszeitraum nach der Mindestzeit ab, die Projektmitglieder benötigen, um auf ein Issue zu reagieren.
+Der Check gilt als bestanden, wenn die Anzahl der Commits größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: ISSUE_REACTION_TIME
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 3
+    max: 7
+```
+Die Reaktionszeit auf ein Issue ist die Zeit zwischen der Erstellung eines Issues in einem Projekt und der ersten gültigen Reaktion.
+
+Ein **Projektmitglied** ist ein Benutzer, der eines der folgenden Kriterien erfüllt:
+
+- Ein Mitglied des Projekts (wie von der `members`-API von GitLab zurückgegeben)
+- Ein Benutzer, der mindestens 5 % (magische Zahl) aller Issues und/oder Commits im Projekt erstellt hat
+
+**Die Bedingungen gelten gleichzeitig und nicht unabhängig voneinander:**
+
+- Wenn ein Projekt keine Issue hat, gilt die Prüfung als bestanden.
+- Von Projektmitgliedern erstellte Issues werden nicht berücksichtigt.
+- Jede (automatische) Aktion im Stream eines Issues, mit Ausnahme von Kommentaren wie „In MR erwähnt“, „markiert“ oder „zugewiesen“ usw., wird als gültige Problemreaktion gewertet.
+- Ein Kommentar gilt als gültige Reaktion, wenn er von einem Projektmitglied abgesetzt wird.
+- Ein Kommentar wird nicht als gültige Reaktion betrachtet, wenn ein Nicht-Projektmitglied auf das Ticket eines Nicht-Projektmitglieds antwortet.
+
+
+### Hintergrund
+
+Die Messung der Reaktionszeit auf Issues ist eine wertvolle Kennzahl für die Bewertung
+der Wartung und Reaktionsfähigkeit eines Projekts. Eine schnelle Reaktionszeit deutet darauf hin,
+dass die Projektmitglieder Issues aktiv überwachen und beheben, was auf einen guten Projektzustand
+und eine gute Reaktionsfähigkeit hindeutet.
+
+- Indikator für aktive Wartung: Schnelle Reaktionen auf Issues signalisieren, dass das Projekt
+  aktiv gewartet wird, wobei Fehler, Anfragen zu Funktionen oder andere Anliegen der Benutzer
+  berücksichtigt werden. Langsame Reaktionen könnten auf Vernachlässigung hindeuten, was sich auf die
+  Benutzererfahrung auswirken oder Mitwirkende abschrecken könnte.
+- Engagement der Community: Schnelle Reaktionen von Projektmitgliedern zeigen auch eine engagierte
+  und unterstützende Community. Sie zeigen, dass Maintainer oder Contributoren zur Verfügung stehen,
+  um zu helfen, und fördern so eine kollaborativere und produktivere Umgebung.
+- Vertrauen der Benutzer: Projekte mit kürzeren Reaktionszeiten auf Issues schaffen bei
+  den Benutzern mehr Vertrauen, da sie wissen, dass ihre Anliegen umgehend bearbeitet werden,
+  was das Projekt für die Übernahme und Mitwirkung attraktiver macht.
+
+Die Untersuchung der Reaktionszeit auf Issues hilft dabei,
+den Grad der aktiven Wartung, des Engagements der Community und der Reaktionsfähigkeit zu messen, die
+für den langfristigen Erfolg und die Nachhaltigkeit eines Projekts von entscheidender Bedeutung sind.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/packages.mdx b/src/pages/de/concepts/implemented-checks/packages.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..ad2ee5536ce89e0376f21ea3def0df3587441a70
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/packages.mdx
@@ -0,0 +1,36 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Pakete
+
+<Callout type="default">
+  Check Typ: `PACKAGES`
+</Callout>
+
+Der Check ist erfolgreich, wenn das Projekt über ein Packaging-System verfügt und dies im betrachteten Zeitraum genutzt wurde.
+
+Der Check überprüft die Container-Registry, das Packaging-System und Releases. Es wird erwartet, dass ein Release
+entweder Assets oder Pakete in einer der Registries enthält.
+
+```yaml filename=".badge-api.yaml" copy
+- type: PACKAGES
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    max: 1
+```
+
+### Hintergrund
+
+Packaging ist ein Mechanismus, um Software zu verteilen und auszuliefern. Es ist wichtig, ein Paketsystem einzusetzen,
+um Benutzern die Installation und Verwendung der Software zu erleichtern. Paketsysteme können dabei helfen, den Prozess der
+Softwareinstallation zu automatisieren, Abhängigkeiten zu verwalten und sicherzustellen, dass die Software
+korrekt installiert wird.
+Regelmäßige Aktualisierungen der Paket-Register signalisieren eine aktive Wartung und zeigen, dass das Projekt
+gut unterstützt wird und sich weiterentwickelt. Die Versionierung hilft den Benutzern, Aktualisierungen zu
+verfolgen und auf stabile Versionen zuzugreifen, während eine konsistente Paketierung die Kompatibilität und
+Konsistenz in allen Umgebungen verbessert. Insgesamt verbessert die Verwendung von Paketierungssystemen die
+Zugänglichkeit von Software, signalisiert einen guten Projektzustand und fördert die Zuverlässigkeit und
+Wiederverwendung.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/protected-branches.mdx b/src/pages/de/concepts/implemented-checks/protected-branches.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..71ff5fecf2f258936b2760914076da1c33aecf68
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/protected-branches.mdx
@@ -0,0 +1,42 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Geschützte Branches
+
+<Callout type="default">
+  Check Typ: `PROTECTED_BRANCHES`
+</Callout>
+
+Mit diesem Check wird überprüft, ob der Haupt-Branch geschützt (protected) ist und ob die Möglichkeit zum
+„Force Push“ auf Standard-Branches deaktiviert ist.
+Der Check ist erfolgreich, wenn der Haupt-Branch geschützt ist und die erzwungene Weiterleitung für
+Standardzweige deaktiviert ist und die Mindestberechtigungsstufe für den Zugriff auf den Haupt- und
+Standardzweig größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: PROTECTED_BRANCHES
+  description: Checks if main branch is protected and if force push is disabled for default branches
+  threshold:
+    min: 40 # 0: no access; 30: Developer access; 40: Maintainer access; 60: Admin access
+```
+
+### Hintergrund
+
+Geschützte Branches sind ein wichtiges Merkmal von Git-Repositorys, die dazu beitragen, die Integrität
+der Codebasis sicherzustellen.
+
+Durch den Schutz von Branches können Sie versehentliche Änderungen verhindern, Richtlinien zur
+Codeüberprüfung durchsetzen und sicherstellen, dass nur autorisierte Benutzer die Codebasis
+ändern können.
+
+Der Haupt-Branch ist oft der Standard-Branch  (z. B. `main`) in einem Repository und dient als primärer Branch für das
+Projekt. Durch den Schutz des Haupt-Branches wird sichergestellt, dass nur autorisierte Benutzer
+Änderungen an diesem vornehmen können, wodurch das Risiko versehentlicher Änderungen oder nicht
+autorisierter Modifikationen verringert wird.
+
+„Force Push“ ist ein Git-Vorgang, mit dem Sie den Verlauf eines Branches überschreiben können, wodurch
+möglicherweise Commits verloren gehen und es schwierig wird, Änderungen nachzuverfolgen. Durch das
+Deaktivieren von „Force Push“ für Standard-Branches bleibt die Integrität des Commit-Verlaufs erhalten
+und es wird sichergestellt, dass Änderungen genau nachverfolgt werden können.
\ No newline at end of file
diff --git a/src/pages/de/concepts/implemented-checks/releases.mdx b/src/pages/de/concepts/implemented-checks/releases.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..e509bbf4fccc2495c6c3b50653985b7d282a8d53
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/releases.mdx
@@ -0,0 +1,49 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Releases
+
+<Callout type="default">
+  Check Typ: `RELEASES`
+</Callout>
+
+Dieser Check fragt die GitLab-API ab und zählt die Anzahl der Tags/Veröffentlichungen im Betrachtungszeitraum.
+Der Check ist erfolgreich, wenn die Anzahl der Tags/Veröffentlichungen größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: RELEASES
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    max: 1
+```
+
+### Hintergrund
+
+Die Verwendung von Tags und Releases in einem Projekt kann ein Indikator für dessen Wartung,
+Stabilität und einfache Wiederverwendbarkeit sein.
+
+Tags und Releases ermöglichen es Entwicklern, bestimmte Punkte in der Historie eines Projekts zu markieren,
+die häufig stabile Versionen, wichtige Aktualisierungen oder bedeutende Meilensteine darstellen.
+
+- Wartungsindikator: Regelmäßige Releases und Tags zeigen, dass ein Projekt aktiv gepflegt wird. Wenn
+  regelmäßig Releases veröffentlicht werden, deutet dies darauf hin, dass das Projekt von seinen Maintainern
+  beachtet und aktualisiert wird. Umgekehrt kann das Ausbleiben von Veröffentlichungen über einen längeren
+  Zeitraum darauf hindeuten, dass das Projekt aufgegeben wurde oder stagniert.
+- Versionierung und Stabilität: Tags entsprechen oft stabilen Punkten in der Entwicklung des Projekts. Sie 
+  helfen bei der Definition und Kommunikation bestimmter Versionen der Software und erleichtern die Nachverfolgung
+  von Änderungen im Laufe der Zeit. Benutzer oder andere Entwickler, die sich auf Ihr Projekt verlassen, können
+  sich auf die von Ihnen gesetzte Version verlassen, da sie wissen, dass es sich um einen definierten, stabilen
+  Zustand handelt.
+- Einfache Wiederverwendung: Projekte mit regelmäßigen, gut dokumentierten Releases lassen sich
+  leichter in anderen Projekten wiederverwenden. Wenn Entwickler klar erkennen können, welche Versionen eines
+  Projekts verfügbar sind, ist es viel einfacher, die Richtige auszuwählen. Darüber hinaus
+  ermöglicht eine ordnungsgemäße Kennzeichnung den Benutzern bei Bedarf den Zugriff auf neuere oder frühere
+  Versionen des Projekts, ohne dass das Risiko besteht, von kritischen Änderungen oder Problemeb betroffen zu sein.
+
+Kurz gesagt: Wenn Sie Tags und Releases ordentlich verwenden, wird Ihr Projekt für Mitwirkende,
+Benutzer und diejenigen, die es in ihre eigene Arbeit integrieren möchten, attraktiver. 
+Dies schafft Vertrauen, verbessert die Benutzerfreundlichkeit und stellt sicher, dass Ihr Projekt langfristig relevant bleibt.
+
diff --git a/src/pages/de/concepts/implemented-checks/subsequent-use.mdx b/src/pages/de/concepts/implemented-checks/subsequent-use.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..8721f3b83177da083a63d09963dcc6823827a48b
--- /dev/null
+++ b/src/pages/de/concepts/implemented-checks/subsequent-use.mdx
@@ -0,0 +1,31 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Nachnutzung
+
+<Callout type="default">
+  Check Typ: `SUBSEQUENT_USE`
+</Callout>
+
+Dieser Check ermittelt die Anzahl der Organisationen, die angegeben haben, das Projekt produktiv zu verwenden.
+Der Check gilt als bestanden, wenn die Anzahl der nutzenden Organisationen größer oder gleich dem Mindestschwellenwert ist.
+
+```yaml filename=".badge-api.yaml" copy
+- type: SUBSEQUENT_USE
+  description: Check if at least 10 organizations are using it in production
+  threshold:
+    min: 10
+```
+
+### Hintergrund
+
+Die Prüfung auf Nachnutzung ist ein Maß für die Akzeptanz des Projekts in der Community.
+Je mehr Organisationen ein Projekt nutzen, desto wahrscheinlicher ist es, dass das Projekt stabil und gut
+dokumentiert ist und einen guten Ruf hat. Dies ist ein wichtiger Indikator für die Nachhaltigkeit und
+Qualität eines Projekts.
+
+Organisationen können dem openCode-Team melden, dass sie ein Projekt produktiv verwenden. Darüber
+hinaus erfasst das openCode-Team proaktiv Nachnutzungsfälle, wenn im Rahmen von Projekten, Kooperationen oder
+Ähnlichem ein Fall bekannt wird, der bisher nicht erfasst wurde.
\ No newline at end of file
diff --git a/src/pages/de/concepts/index.mdx b/src/pages/de/concepts/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..4563bd951085e58fd924c3a1d3ddb6425e8325d4
--- /dev/null
+++ b/src/pages/de/concepts/index.mdx
@@ -0,0 +1,26 @@
+---
+sidebar_position: 1
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Überblick
+
+<div className="flex justify-center py-8">
+    <img src="/assets/overview.png" className="h-auto lg:h-[30rem]" alt="Schematische Darstellung der Architektur des Badge API"/>
+</div>
+
+### Grundlagen
+
+Die Badge-API ist ein Dienst, der Repositories nach bestimmten Kriterien durchsucht und auf der Grundlage
+der Ergebnisse Badges generiert. Die Badges werden im openCode-Softwarekatalog angezeigt und geben den Status
+des Repositorys in Bezug auf **Sicherheit**, **Wartung** und **Wiederverwendung** an.
+
+Jede Badge basiert auf einer Reihe von Kriterien, die das Repository erfüllen muss, um die Badge zu erhalten.
+Die Konfiguration der zu erfüllenden Kriterien sind im Abschnitt [Konfiguration](/de/concepts/configuration) definiert.
+
+Alle Kriterien werden wie eine Checkliste bewertet und müssen daher zu einem wahren oder falschen Ergebnis führen.
+Infolgedessen werden einige Prüfungen anhand von Schwellenwerten bewertet (z. B. die Reaktionszeit auf Issues).
+Um die Schwellenwerte zu bestimmen, untersuchen wir die üblichen Werte der Projekte auf openCode und leiten die
+entsprechenden Schwellenwerte aus ihren Mittelwerten und Standardabweichungen ab.
\ No newline at end of file
diff --git a/src/pages/declaration-on-accessibility.mdx b/src/pages/de/erklaerung-zur-barrierefreiheit.mdx
similarity index 100%
rename from src/pages/declaration-on-accessibility.mdx
rename to src/pages/de/erklaerung-zur-barrierefreiheit.mdx
diff --git a/src/pages/de/index.mdx b/src/pages/de/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..a0b27fbb7a69902a3bb135e174c5e907da8695c5
--- /dev/null
+++ b/src/pages/de/index.mdx
@@ -0,0 +1,57 @@
+---
+title: Home
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import Hero from '../../components/landing-page/Hero'
+import ApiSmallDemo from '../../components/landing-page/ApiSmallDemo'
+
+export default function Home() {
+    return (
+        <div className="overflow-hidden">
+            <Hero
+                titleH1="Badge Programm - Vertrauen in Open Source Software stärken"
+                greetingChildren={
+                    <p className="mt-8 text-pretty text-lg font-medium text-zinc-600 sm:max-w-md sm:text-xl/8 lg:max-w-none">
+                        Das Badge Programm prüft openCode Repositories und
+                        vergibt Badges, die im{' '}
+                        <a
+                            target="_blank"
+                            rel="noreferrer noopener"
+                            href="https://opencode.de/en/software"
+                            className="text-blue-500 underline"
+                        >
+                            openCode Softwarekatalog
+                        </a>{' '}
+                        angezeigt werden und den Status der Repositories in
+                        Bezug auf Sicherheit, Wartung und Wiederverwendung
+                        anzeigen.
+                    </p>
+                }
+                toDocs="Zur Dokumentation"
+                toDocsHref="/de/introduction"
+                toDemo="API Live Demo"
+                toDemoHref="/de#api-small-demo"
+            />
+            <main>
+                <ApiSmallDemo
+                    titleH2="Testen Sie die Badge API"
+                    description="Geben Sie die URL eines öffentlichen openCode-Repositorys
+                    ein, um zu sehen, welche der offiziellen Badges vergeben
+                    werden."
+                    resultTitle={'Ergebnisse für'}
+                    deniedTitle={'Verweigert'}
+                    moreInfo={'Mehr informationen'}
+                    tableCheck={'Überprüfung'}
+                    tableStatus={'Status'}
+                    tableDescription={'Beschreibung'}
+                    tableEvidence={'Nachweis'}
+                    pleaseWait={'Bitte warten'}
+                    test={'Testen'}
+                />
+            </main>
+        </div>
+    )
+}
diff --git a/src/pages/de/introduction.mdx b/src/pages/de/introduction.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..1d99915609d0271b2bbbf88da2169e58ff3e3868
--- /dev/null
+++ b/src/pages/de/introduction.mdx
@@ -0,0 +1,58 @@
+---
+sidebar_position: 1
+title: Einführung
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Badge Programm
+
+Das Badge Programm prüft openCode Repositories und vergibt Badges, die im
+[openCode Softwarekatalog](https://opencode.de/de/software) angezeigt werden
+und den Status der Repositories in Bezug auf **Wartung**, **Wiederverwendung**
+und **Sicherheit** anzeigen.
+
+Mit der Badge-API können Sie interagieren, indem Sie eine Repository-URL übermitteln.
+Basierend auf den erfüllten Kriterien des Repositorys erhalten Sie entsprechende
+Badges. Zudem stellt die API eine detaillierte Erklärung des Ergebnisses bereit.
+
+## Offizielle Badges auf openCode
+
+Erfahren Sie mehr über die verschiedenen Arten von Badges, die auf openCode verfügbar
+sind, und was sie bedeuten, im Abschnitt [Offizielle Badges 🛡️](/de/official-badges/active-maintained-badge).
+
+## Erfahre mehr
+
+Mehr über die Ideen hinter dem Badge-Programm, die implementierten Prüfungen
+usw. finden Sie im Abschnitt [Konzepte](/de/concepts).
+
+## Los geht's
+
+### Ausprobieren
+
+Sie können die Badge-API ausprobieren, indem Sie die [API-Live-Demo](/de/#api-small-demo) verwenden.
+
+### API verwenden
+
+Das Herzstück des Badge-Programms ist eine RESTful-API.
+Um die Badge-API zu nutzen, können Sie eine Repository-URL übermitteln und erhalten Badges
+basierend auf den erfüllten Kriterien. Eine Übersicht aller verfügbaren Endpunkte sowie
+deren Verwendung finden Sie in der [API-Dokumentation](/de/api-docs).
+
+### Hoste die Badge-API selbst
+
+Sie können die Badge-API selbst hosten. Wir stellen ein [Helm-Chart zur Bereitstellung
+der Badge-API](https://gitlab.opencode.de/open-code/badgebackend/badge-api-helm-chart)
+auf einem Kubernetes-Cluster zur Verfügung. 
+Alternativ können Sie die API lokal als Container oder Bare-Metal ausführen.
+
+### Beitragen zum Badge-Programm
+
+Wir freuen uns über Beiträge zum Badge Programm. Den Quellcode finden Sie auf [openCode](https://gitlab.opencode.de/open-code/badgebackend/badge-api).
+Wir freuen uns, wenn Sie die [Richtlinien für Beiträge](https://gitlab.opencode.de/open-code/badgebackend/badge-api/-/blob/main/CONTRIBUTING.md) befolgen.
+Zögern Sie nicht, ein Issue (Ticket) zu eröffnen, wenn Sie Fragen haben oder Hilfe benötigen.
+
+## Lizenz
+
+Dieses Projekt ist unter der MIT-Lizenz lizenziert.
\ No newline at end of file
diff --git a/src/pages/leichte-sprache.mdx b/src/pages/de/leichte-sprache.mdx
similarity index 98%
rename from src/pages/leichte-sprache.mdx
rename to src/pages/de/leichte-sprache.mdx
index 144302aa58751ec464c053040c76026135b625e5..20ed30c93ac58bde0379dc45bdf99b3dfa53cb9b 100644
--- a/src/pages/leichte-sprache.mdx
+++ b/src/pages/de/leichte-sprache.mdx
@@ -1,8 +1,3 @@
----
-sidebar_position: 1
-title: Introduction
----
-
 {/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
 SPDX-License-Identifier: MIT */}
 
diff --git a/src/pages/de/official-badges/_meta.ts b/src/pages/de/official-badges/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4a967dfc157e17f17d125d4038a7a46179ebd296
--- /dev/null
+++ b/src/pages/de/official-badges/_meta.ts
@@ -0,0 +1,9 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    'active-maintained-badge': { title: 'Wartungs Badge' },
+    'reuse-badge': { title: 'Nachnutzungs Badge' },
+    'open-source-badge': { title: 'Open Source Badge' },
+    'security-badge': { title: 'Security Badge' },
+}
diff --git a/src/pages/de/official-badges/active-maintained-badge.mdx b/src/pages/de/official-badges/active-maintained-badge.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..c09b5cfe295f077b98045dcb990a8d45328d087d
--- /dev/null
+++ b/src/pages/de/official-badges/active-maintained-badge.mdx
@@ -0,0 +1,46 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Badge für aktive Wartung
+
+<Callout type="info" emoji="🛡️">
+**Offizielle Badge im openCode Software-Katalog**
+</Callout>
+
+
+<div className="grid grid-cols-none lg:grid-cols-3 gap-4 mt-8 justify-center">
+    <img src="/assets/badges/MAINTAINED-1.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/MAINTAINED-2.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/MAINTAINED-3.svg" className="h-36 lg:h-48"/>
+</div>
+
+Die Badge für aktive Wartung gibt den Wartungsstatus eines Repositorys an.
+Die Badge basiert auf den folgenden Kriterien:
+
+### Stufe 1: Aktive Wartung
+
+Das Projekt erfüllt die Mindestanforderungen für ein gewartetes Projekt. Es wird weiterentwickelt und auf
+Probleme wird schnell reagiert.
+
+- [Commits](/de/concepts/implemented-checks/commits): Mindestens 5 Commits innerhalb der letzten 6 Monate
+- [Reaktionszeit auf Issues](/de/konzepte/implementierte-kontrollen/reaktionszeit-bei-problemen):
+  Die durchschnittliche Reaktionszeit auf Issues, welche innerhalb der letzten 3 Monate entstanden sind, beträgt weniger als 7 Tage
+
+### Level 2: Verlässliche Wartung
+
+Das Projekt erfüllt die Anforderungen für ein zuverlässig gewartetes Projekt. Es werden regelmäßig neue
+Versionen veröffentlicht, auf Probleme wird schnell reagiert und es gibt eine aktive Community.
+
+- Alle Kriterien des ersten Levels
+- [Releases](/de/concepts/implemented-checks/releases): In den letzten 6 Monaten wurde mindestens ein Release oder ein Git-Tag erstellt
+
+### Level 3: Krisensichere Wartung
+
+Das Projekt erfüllt die Anforderungen an ein krisensicher gewartetes Projekt. Es werden regelmäßig neue
+Versionen veröffentlicht, auf Probleme wird schnell reagiert und es gibt eine breite und aktive Community.
+
+- Alle Kriterien der Levels 1 und 2
+- [Bus Faktor](/de/concepts/implemented-checks/bus-factor): Mehrere Maintainer (Einzelpersonen) tragen aktiv zum Projekt bei.
+  Das Projekt hat im Betrachtungszeitraum von 6 Monaten einen Bus-Faktor von mindestens 2.
\ No newline at end of file
diff --git a/src/pages/de/official-badges/open-source-badge.mdx b/src/pages/de/official-badges/open-source-badge.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..4ba22dd68a49ef9bd951c9f0a74b67aaa7c12416
--- /dev/null
+++ b/src/pages/de/official-badges/open-source-badge.mdx
@@ -0,0 +1,32 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Open Source Badge
+
+<Callout type="info" emoji="🛡️">
+**Offizielle Badge im openCode Software-Katalog**
+</Callout>
+
+<div className="grid grid-cols-none lg:grid-cols-3 gap-4 mt-8 justify-center">
+    <img src="/assets/badges/OSS.svg" className="h-36 lg:h-48"/>
+</div>
+
+Diese Badge zeigt an, ob ein Projekt Open Source ist. Es handelt sich
+um ein manuell vergebenes Badge, das vom openCode-Team ausgestellt wird.
+
+Alle öffentlichen Projekte auf openCode müssen über eine gültige,
+genehmigte Lizenz verfügen. Daher wird grundsätzlich angenommen,
+dass sämtliche Projekte auf openCode Open Source sind.
+
+- Dieses Abzeichen wird für Projekte auf openCode vergeben, die der folgenden Entscheidungsdatei entsprechen: 
+
+```json
+{
+    "granted": [],
+    "grantedRegex": [
+        "^https://gitlab\\.opencode\\.de.*"
+    ]
+}
+```
\ No newline at end of file
diff --git a/src/pages/de/official-badges/reuse-badge.mdx b/src/pages/de/official-badges/reuse-badge.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..5413dd69fd201f2d46211d7e95ddc2ee4017986a
--- /dev/null
+++ b/src/pages/de/official-badges/reuse-badge.mdx
@@ -0,0 +1,40 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Nachnutzungs Badge
+
+<Callout type="info" emoji="🛡️">
+**Offizielle Badge im openCode Software-Katalog**
+</Callout>
+
+<div className="grid grid-cols-none lg:grid-cols-3 gap-4 mt-8 justify-center">
+    <img src="/assets/badges/REUSED-1.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/REUSED-2.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/REUSED-3.svg" className="h-36 lg:h-48"/>
+</div>
+
+Die Badge für Nachnutzung gibt die Eignung und den Grad der Nutzung eines Repositorys an.
+Die Badge basiert auf den folgenden Kriterien:
+
+### Level 1: Bereit zur Nutzung
+
+Das Projekt erfüllt die Anforderungen für eine spätere Verwendung. Pakete werden für die weitere Verwendung bereitgestellt.
+
+- [Pakete](/de/concepts/implemented-checks/packages): In den letzten 6 Monaten wurde mindestens ein Paket veröffentlicht
+- [CI-Pipelines](/de/concepts/implemented-checks/ci-pipeline): In den letzten 6 Monaten gab es mindestens eine erfolgreiche CI-Pipeline
+
+### Level 2: Aktiv genutzt
+
+Das Projekt wird von mindestens einer Organisation produktiv genutzt.
+
+- Alle Kriterien des Levels 1
+- [Nachnutzung](/de/concepts/implemented-checks/subsequent-use): Mindestens eine Organisation nutzt das Projekt aktiv
+
+### Level 3: Häufig aktiv genutzt
+
+Das Projekt wird von mindestens 10 Organisationen produktiv genutzt.
+
+- Alle Kriterien des Levels 1 und 2
+- [Nachnutzung](/de/concepts/implemented-checks/subsequent-use): Mindestens 10 Organisationen nutzen das Projekt aktiv
diff --git a/src/pages/de/official-badges/security-badge.mdx b/src/pages/de/official-badges/security-badge.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..0b3dab5e7150907aa4bb3e5276bfdc5e204d9e72
--- /dev/null
+++ b/src/pages/de/official-badges/security-badge.mdx
@@ -0,0 +1,37 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Security Badge
+
+<Callout type="warning">
+**Status: In Planung**
+</Callout>
+
+<div className="grid grid-cols-none lg:grid-cols-3 gap-4 mt-8 justify-center">
+    <img src="/assets/badges/SECURITY-1.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/SECURITY-2.svg" className="h-36 lg:h-48"/>
+    <img src="/assets/badges/SECURITY-3.svg" className="h-36 lg:h-48"/>
+</div>
+
+Die Security Badge gibt auskunft über den Sicherheitsstatus eines Repositorys.
+Die Badge basiert auf den folgenden Kriterien:
+
+### Level 1: Basis Sicherheit
+
+- Fehlerberichtsprozess vorhanden: TBD
+- [Reaktionszeit auf Issues](/de/concepts/implemented-checks/issue-reaction-time): TBD
+- Branch protection: TBD
+- Schwachstellenprüfungen - Alter von CVE: TBD
+- Schwachstellenprüfungen - Behebungszeit: TBD
+
+### Level 2: Erweiterte Sicherheit
+- Alle Kriterien des Levels 1
+- Sicherheitsrichtlinie (SECURITY.md): TBD
+- Keine Releases mit bekannten Schwachstellen: TBD
+
+### Level 3: Umfassende Sicherheit
+- Alle Kriterien der Levels 1 und 2
+- Signed Releases: TBD
+- Code-Review-Prozess vorhanden: TBD
\ No newline at end of file
diff --git a/src/pages/en/_meta.ts b/src/pages/en/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8990723650b09eecdb218630c1aabc57327c6b93
--- /dev/null
+++ b/src/pages/en/_meta.ts
@@ -0,0 +1,25 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: {
+        theme: {
+            layout: 'raw',
+        },
+        display: 'hidden',
+    },
+    introduction: { title: 'Introduction' },
+    'official-badges': { title: 'Official Badges 🛡️' },
+    concepts: { title: 'Concepts' },
+    'api-docs': { title: 'API' },
+    docs: {
+        title: 'Documentation',
+        type: 'page',
+        href: '/en/introduction',
+    },
+    'live-demo': {
+        title: 'Live Demo 🚀',
+        type: 'page',
+        href: '/en/#api-small-demo',
+    },
+}
diff --git a/src/pages/api-docs/_meta.ts b/src/pages/en/api-docs/_meta.ts
similarity index 100%
rename from src/pages/api-docs/_meta.ts
rename to src/pages/en/api-docs/_meta.ts
diff --git a/src/pages/api-docs/index.mdx b/src/pages/en/api-docs/index.mdx
similarity index 100%
rename from src/pages/api-docs/index.mdx
rename to src/pages/en/api-docs/index.mdx
diff --git a/src/pages/api-docs/v1/_meta.ts b/src/pages/en/api-docs/v1/_meta.ts
similarity index 100%
rename from src/pages/api-docs/v1/_meta.ts
rename to src/pages/en/api-docs/v1/_meta.ts
diff --git a/src/pages/api-docs/v1/badge-explanation.mdx b/src/pages/en/api-docs/v1/badge-explanation.mdx
similarity index 96%
rename from src/pages/api-docs/v1/badge-explanation.mdx
rename to src/pages/en/api-docs/v1/badge-explanation.mdx
index c6268409c130046aec75bd8f7329a028ba944a5f..2d41777336cc7b8911e38907409805ec3f00bf16 100644
--- a/src/pages/api-docs/v1/badge-explanation.mdx
+++ b/src/pages/en/api-docs/v1/badge-explanation.mdx
@@ -22,7 +22,7 @@ be or was already scanned. **The URL must be URL encoded**
 (`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
 
 The badge ID is the title of the badge that should be returned. The available badges and therefore the badge IDs are defined in the
-[.badge-api.yaml](/concepts/configuration) of the badge api instance.
+[.badge-api.yaml](/en/concepts/configuration) of the badge api instance.
 
 ### Example Request
 
diff --git a/src/pages/api-docs/v1/badges.mdx b/src/pages/en/api-docs/v1/badges.mdx
similarity index 96%
rename from src/pages/api-docs/v1/badges.mdx
rename to src/pages/en/api-docs/v1/badges.mdx
index 35449449fb4c6f5af919bd90b2bc25f62cb738d1..85e445f3f9172fa3f94b20e9c14d92b94cbb387f 100644
--- a/src/pages/api-docs/v1/badges.mdx
+++ b/src/pages/en/api-docs/v1/badges.mdx
@@ -22,7 +22,7 @@ be or was already scanned. **The URL must be URL encoded**
 (`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
 
 The badge ID is the title of the badge that should be returned. The available badges and therefore the badge IDs are defined in the
-[.badge-api.yaml](/concepts/configuration) of the badge api instance.
+[.badge-api.yaml](/en/concepts/configuration) of the badge api instance.
 
 ### Example Request
 
diff --git a/src/pages/api-docs/v1/sarif-per-repo-endpoint.mdx b/src/pages/en/api-docs/v1/sarif-per-repo-endpoint.mdx
similarity index 100%
rename from src/pages/api-docs/v1/sarif-per-repo-endpoint.mdx
rename to src/pages/en/api-docs/v1/sarif-per-repo-endpoint.mdx
diff --git a/src/pages/concepts/_meta.ts b/src/pages/en/concepts/_meta.ts
similarity index 100%
rename from src/pages/concepts/_meta.ts
rename to src/pages/en/concepts/_meta.ts
diff --git a/src/pages/concepts/configuration/_meta.ts b/src/pages/en/concepts/configuration/_meta.ts
similarity index 100%
rename from src/pages/concepts/configuration/_meta.ts
rename to src/pages/en/concepts/configuration/_meta.ts
diff --git a/src/pages/concepts/configuration/index.mdx b/src/pages/en/concepts/configuration/index.mdx
similarity index 100%
rename from src/pages/concepts/configuration/index.mdx
rename to src/pages/en/concepts/configuration/index.mdx
diff --git a/src/pages/concepts/configuration/manual-checks.mdx b/src/pages/en/concepts/configuration/manual-checks.mdx
similarity index 91%
rename from src/pages/concepts/configuration/manual-checks.mdx
rename to src/pages/en/concepts/configuration/manual-checks.mdx
index 02a73142f33cf88f4b8682f7c04f3742462a0d8a..00aadff4e12704be1354967dd657654178d37300 100644
--- a/src/pages/concepts/configuration/manual-checks.mdx
+++ b/src/pages/en/concepts/configuration/manual-checks.mdx
@@ -20,4 +20,4 @@ where the JSON file is stored.
 ```
 
 The file is referenced in the `.badge-api.yaml` configuration file of the badge. 
-See more details about the [configuration file](/concepts/configuration).
\ No newline at end of file
+See more details about the [configuration file](/en/concepts/configuration).
\ No newline at end of file
diff --git a/src/pages/concepts/implemented-checks/_meta.ts b/src/pages/en/concepts/implemented-checks/_meta.ts
similarity index 100%
rename from src/pages/concepts/implemented-checks/_meta.ts
rename to src/pages/en/concepts/implemented-checks/_meta.ts
diff --git a/src/pages/concepts/implemented-checks/bus-factor.mdx b/src/pages/en/concepts/implemented-checks/bus-factor.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/bus-factor.mdx
rename to src/pages/en/concepts/implemented-checks/bus-factor.mdx
diff --git a/src/pages/concepts/implemented-checks/ci-pipeline.mdx b/src/pages/en/concepts/implemented-checks/ci-pipeline.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/ci-pipeline.mdx
rename to src/pages/en/concepts/implemented-checks/ci-pipeline.mdx
diff --git a/src/pages/concepts/implemented-checks/commits.mdx b/src/pages/en/concepts/implemented-checks/commits.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/commits.mdx
rename to src/pages/en/concepts/implemented-checks/commits.mdx
diff --git a/src/pages/concepts/implemented-checks/elephant-factor.mdx b/src/pages/en/concepts/implemented-checks/elephant-factor.mdx
similarity index 88%
rename from src/pages/concepts/implemented-checks/elephant-factor.mdx
rename to src/pages/en/concepts/implemented-checks/elephant-factor.mdx
index b21219db7f9fa5b4c19e5d101b993b0ee4519e19..1caed0ffdbc57ac6351f77774a917f5a5fa3c948 100644
--- a/src/pages/concepts/implemented-checks/elephant-factor.mdx
+++ b/src/pages/en/concepts/implemented-checks/elephant-factor.mdx
@@ -24,7 +24,7 @@ The check passes if the elephant factor is greater than or equal to the minimum
 
 The elephant factor is a measure of the risk resulting from information and capabilities not being shared among organizations.
 
-It is similar to the [bus factor](/concepts/implemented-checks/bus-factor) but instead of measuring the risk of losing individuals,
+It is similar to the [bus factor](/en/concepts/implemented-checks/bus-factor) but instead of measuring the risk of losing individuals,
 it measures the risk of losing organizations.
 
 For example, if a project has an elephant factor of 2, it means that the 2 most important organizations are responsible for 50% of the commits
diff --git a/src/pages/en/concepts/implemented-checks/index.mdx b/src/pages/en/concepts/implemented-checks/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..040aaa8478b4c038e4820f5b7fa97306df9a731e
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/index.mdx
@@ -0,0 +1,16 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Overview of Implemented Checks
+
+The following checks are implemented and can be used to generate badges:
+
+- [`BUS_FACTOR` ↗](/en/concepts/implemented-checks/bus-factor)
+- [`CI_PIPELINE` ↗](/en/concepts/implemented-checks/ci-pipeline)
+- [`COMMITS` ↗](/en/concepts/implemented-checks/commits)
+- [`ELEPHANT_FACTOR` ↗](/en/concepts/implemented-checks/elephant-factor)
+- [`ISSUE_REACTION_TIME` ↗](/en/concepts/implemented-checks/issue-reaction-time)
+- [`PACKAGES` ↗](/en/concepts/implemented-checks/packages)
+- [`PROTECTED_BRANCHES` ↗](/en/concepts/implemented-checks/protected-branches)
+- [`RELEASES` ↗](/en/concepts/implemented-checks/releases)
+- [`SUBSEQUENT_USE` ↗](/en/concepts/implemented-checks/subsequent-use)
\ No newline at end of file
diff --git a/src/pages/concepts/implemented-checks/issue-reaction-time.mdx b/src/pages/en/concepts/implemented-checks/issue-reaction-time.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/issue-reaction-time.mdx
rename to src/pages/en/concepts/implemented-checks/issue-reaction-time.mdx
diff --git a/src/pages/concepts/implemented-checks/packages.mdx b/src/pages/en/concepts/implemented-checks/packages.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/packages.mdx
rename to src/pages/en/concepts/implemented-checks/packages.mdx
diff --git a/src/pages/concepts/implemented-checks/protected-branches.mdx b/src/pages/en/concepts/implemented-checks/protected-branches.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/protected-branches.mdx
rename to src/pages/en/concepts/implemented-checks/protected-branches.mdx
diff --git a/src/pages/concepts/implemented-checks/releases.mdx b/src/pages/en/concepts/implemented-checks/releases.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/releases.mdx
rename to src/pages/en/concepts/implemented-checks/releases.mdx
diff --git a/src/pages/concepts/implemented-checks/subsequent-use.mdx b/src/pages/en/concepts/implemented-checks/subsequent-use.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/subsequent-use.mdx
rename to src/pages/en/concepts/implemented-checks/subsequent-use.mdx
diff --git a/src/pages/concepts/index.mdx b/src/pages/en/concepts/index.mdx
similarity index 93%
rename from src/pages/concepts/index.mdx
rename to src/pages/en/concepts/index.mdx
index b6910fa1fbfdf3d432c3b62e2a435fb6eb1ee38d..ac65a248a29f381acf6bacb78bd9cef88c54ff39 100644
--- a/src/pages/concepts/index.mdx
+++ b/src/pages/en/concepts/index.mdx
@@ -18,7 +18,7 @@ The badges are displayed in the openCode software catalog and indicate the statu
 **security**, **maintenance**, and **reuse**.
 
 Each badge is based on a set of criteria that the repository must meet to receive the badge. The Badges and the criteria to 
-meet are defined in the [configuration](/concepts/configuration) section.
+meet are defined in the [configuration](/en/concepts/configuration) section.
 
 All criteria are evaluated bluntly like a checklist and must therefore lead to a true or false result. 
 As a result, some checks are evaluated based on thresholds (e.g. the issue reaction time). 
diff --git a/src/pages/en/index.mdx b/src/pages/en/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..c6b03970dc30991c75f3f47e4df87cebfea0b747
--- /dev/null
+++ b/src/pages/en/index.mdx
@@ -0,0 +1,55 @@
+---
+title: Home
+---
+
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+
+import Hero from '../../components/landing-page/Hero'
+import ApiSmallDemo from '../../components/landing-page/ApiSmallDemo'
+
+export default function Home() {
+    return (
+        <div className="overflow-hidden">
+            <Hero
+                titleH1="Badge Program - Building Trust in Open Source Software"
+                greetingChildren={
+                    <p className="mt-8 text-pretty text-lg font-medium text-zinc-600 sm:max-w-md sm:text-xl/8 lg:max-w-none">
+                        The badge program checks open-code repositories and
+                        awards badges that are displayed in the{' '}
+                        <a
+                            target="_blank"
+                            rel="noreferrer noopener"
+                            href="https://opencode.de/en/software"
+                            className="text-blue-500 underline"
+                        >
+                            open-code software catalogue
+                        </a>{' '}
+                        and indicate the status of the repositories in terms of
+                        security, maintenance and reuse.
+                    </p>
+                }
+                toDocs="To Documentation"
+                toDocsHref="/en/introduction"
+                toDemo="API Live Demo"
+                toDemoHref="/en#api-small-demo"
+            />
+            <main>
+                <ApiSmallDemo
+                    titleH2="Try out the Badge API"
+                    description="Enter the URL of a public openCode repository to see which official badges are awarded to this project."
+                    resultTitle={'Results for'}
+                    deniedTitle={'Denied'}
+                    moreInfo={'More information'}
+                    tableCheck={'Check'}
+                    tableStatus={'Status'}
+                    tableDescription={'Description'}
+                    tableEvidence={'Evidence'}
+                    pleaseWait={'Please wait'}
+                    test={'Test'}
+                />
+            </main>
+        </div>
+    )
+}
diff --git a/src/pages/introduction.mdx b/src/pages/en/introduction.mdx
similarity index 87%
rename from src/pages/introduction.mdx
rename to src/pages/en/introduction.mdx
index d64a17d870dde4e6422856839342139a0e66a58b..0356ee6b179a9e0e208145ac3e1a5c919b8a6de8 100644
--- a/src/pages/introduction.mdx
+++ b/src/pages/en/introduction.mdx
@@ -17,22 +17,22 @@ provide you a detailed explanation of the result too.
 
 ## Official Badges on openCode
 
-Learn about the different types of badges that are available on openCode and what they mean in the [Official Badges 🛡️](/official-badges) section.
+Learn about the different types of badges that are available on openCode and what they mean in the [Official Badges 🛡️](/en/official-badges/active-maintained-badge) section.
 
 ## Learn more
 
-Learn more about the ideas behind the Badge Programm, implemented checks, etc. in the [Concepts](/concepts) section.
+Learn more about the ideas behind the Badge Programm, implemented checks, etc. in the [Concepts](/en/concepts) section.
 
 ## Getting started 
 
 ### Try it out
 
-You can try out the Badge API by using the [API Live Demo](/#api-small-demo).
+You can try out the Badge API by using the [API Live Demo](/en/#api-small-demo).
 
 ### Use the API
 
 To use the Badge RESTful API, you can submit a repository URL to the API and receive badges based on the criteria that the repository meets. 
-See all available endpoints and how to use them in the [API documentation](/api-docs).
+See all available endpoints and how to use them in the [API documentation](/en/api-docs).
 
 ### Host the Badge API yourself
 
diff --git a/src/pages/official-badges/_meta.ts b/src/pages/en/official-badges/_meta.ts
similarity index 100%
rename from src/pages/official-badges/_meta.ts
rename to src/pages/en/official-badges/_meta.ts
diff --git a/src/pages/official-badges/active-maintained-badge.mdx b/src/pages/en/official-badges/active-maintained-badge.mdx
similarity index 70%
rename from src/pages/official-badges/active-maintained-badge.mdx
rename to src/pages/en/official-badges/active-maintained-badge.mdx
index 403df6b2014175fdf9c3ea46c740694cd660d5f5..8ddca48c881e697108194e600e384c4c80cb8fea 100644
--- a/src/pages/official-badges/active-maintained-badge.mdx
+++ b/src/pages/en/official-badges/active-maintained-badge.mdx
@@ -23,19 +23,19 @@ The badge is based on the following criteria:
 
 The project meets the minimum requirements for a maintained project. It is being further developed and problems are responded to quickly.
 
-- [Commits](/concepts/implemented-checks/commits): A minimum of 5 commits within the last 6 months
-- [Issue Reaction Time](/concepts/implemented-checks/issue-reaction-time): The average reaction time to issues is less than 7 days for issues created within the last 3 months
+- [Commits](/en/concepts/implemented-checks/commits): A minimum of 5 commits within the last 6 months
+- [Issue Reaction Time](/en/concepts/implemented-checks/issue-reaction-time): The average reaction time to issues is less than 7 days for issues created within the last 3 months
 
 ### Level 2: Reliable maintenance (Silver)
 
 The project fulfills the requirements for a reliably maintained project. New versions are released regularly, problems are responded to quickly, and there is an active community.
 
 - All criteria from level 1
-- [Releases](/concepts/implemented-checks/releases): There was at least one release or tag created within the last 6 months
+- [Releases](/en/concepts/implemented-checks/releases): There was at least one release or tag created within the last 6 months
 
 ### Level 3: Crisis-proof maintenance (Gold)
 
 The project fulfills the requirements for a crisis-proof maintained project. New versions are released regularly, problems are responded to quickly and there is a broad and active community.
 
 - All criteria from levels 1 and 2
-- [Bus Factor](/concepts/implemented-checks/bus-factor): Multiple maintainers (individuals) are actively contributing to the project. The project has a bus factor of at least 2 in the last 6 months.
\ No newline at end of file
+- [Bus Factor](/en/concepts/implemented-checks/bus-factor): Multiple maintainers (individuals) are actively contributing to the project. The project has a bus factor of at least 2 in the last 6 months.
\ No newline at end of file
diff --git a/src/pages/official-badges/open-source-badge.mdx b/src/pages/en/official-badges/open-source-badge.mdx
similarity index 100%
rename from src/pages/official-badges/open-source-badge.mdx
rename to src/pages/en/official-badges/open-source-badge.mdx
diff --git a/src/pages/official-badges/reuse-badge.mdx b/src/pages/en/official-badges/reuse-badge.mdx
similarity index 68%
rename from src/pages/official-badges/reuse-badge.mdx
rename to src/pages/en/official-badges/reuse-badge.mdx
index f070e973732253e0cab3980d56f5ef2dc1ed2674..e4ff4ee70b857c55512837a1394407c9617dfd1d 100644
--- a/src/pages/official-badges/reuse-badge.mdx
+++ b/src/pages/en/official-badges/reuse-badge.mdx
@@ -22,19 +22,19 @@ The badge is based on the following criteria:
 
 The project meets the requirements for subsequent use. Packages are provided for further use.
 
-- [Packages](/concepts/implemented-checks/packages): There has been at least one package published within the last 6 months
-- [CI-Pipelines](/concepts/implemented-checks/ci-pipeline): There has been at least one successful CI pipeline within the last 6 months
+- [Packages](/en/concepts/implemented-checks/packages): There has been at least one package published within the last 6 months
+- [CI-Pipelines](/en/concepts/implemented-checks/ci-pipeline): There has been at least one successful CI pipeline within the last 6 months
 
 ### Level 2: Actively Reused (Silver)
 
 The project is used productively by at least 1 organization.
 
 - All criteria from level 1
-- [Subsequent use](/concepts/implemented-checks/subsequent-use): At least one organization is actively using the project
+- [Subsequent use](/en/concepts/implemented-checks/subsequent-use): At least one organization is actively using the project
 
 ### Level 3: Frequently Actively Reused (Gold)
 
 The project is used productively by at least 10 organizations.
 
 - All criteria from levels 1 and 2
-- [Subsequent use](/concepts/implemented-checks/subsequent-use): At least 10 organizations are actively using the project
\ No newline at end of file
+- [Subsequent use](/en/concepts/implemented-checks/subsequent-use): At least 10 organizations are actively using the project
\ No newline at end of file
diff --git a/src/pages/official-badges/security-badge.mdx b/src/pages/en/official-badges/security-badge.mdx
similarity index 86%
rename from src/pages/official-badges/security-badge.mdx
rename to src/pages/en/official-badges/security-badge.mdx
index b3856ccc845fa6e1b57a0174f5c031eaf1e800bd..f3624daabbbe60043d06413ef20f202d41e1bfb3 100644
--- a/src/pages/official-badges/security-badge.mdx
+++ b/src/pages/en/official-badges/security-badge.mdx
@@ -15,12 +15,12 @@ import { Callout } from 'nextra/components'
     <img src="/assets/badges/SECURITY-3.svg" className="h-36 lg:h-48"/>
 </div>
 
-The active maintained badge is a badge that indicates the security status of a repository.
+The security badge indicates the security status of a repository.
 The badge is based on the following criteria:
 
 ### Level 1: Basic Security Practices (Bronze)
 - Bug-Report process in place: TBD
-- [Issue Reaction Time](/concepts/implemented-checks/issue-reaction-time): TBD
+- [Issue Reaction Time](/en/concepts/implemented-checks/issue-reaction-time): TBD
 - Branch protection: TBD
 - Vulnerability checks - CVE Age: TBD
 - Vulnerability checks - Remediation time: TBD
diff --git a/src/pages/index.mdx b/src/pages/index.mdx
deleted file mode 100644
index 613bfc73a7ea8494a3cba066651d0e2b9e24841a..0000000000000000000000000000000000000000
--- a/src/pages/index.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Home
----
-
-{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
-SPDX-License-Identifier: MIT */}
-
-import Hero from '../components/landing-page/Hero'
-import ApiSmallDemo from '../components/landing-page/ApiSmallDemo'
-
-export default function Home() {
-    return (
-        <div className="overflow-hidden">
-            <Hero />
-            <main>
-            <ApiSmallDemo />
-            </main>
-        </div>
-    )
-}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..f430b7f91014783a2a57e6c9ea257b4867e9187c
--- /dev/null
+++ b/src/pages/index.tsx
@@ -0,0 +1,12 @@
+import { useEffect } from 'react'
+import { useRouter } from 'next/router'
+
+export default function Home() {
+    const { replace } = useRouter()
+
+    useEffect(() => {
+        replace('/de')
+    }, [])
+
+    return null
+}
diff --git a/tailwind.config.js b/tailwind.config.js
index 709dc19ad893f27e7b4afee2371051e0030f904a..b80ad1b01d16f4eb50aa3b8e891ca90b5d105693 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -15,6 +15,20 @@ module.exports = {
         },
         extend: {
             colors: {
+                background: {
+                    DEFAULT: '#f7f7f7',
+                    50: '#ffffff',
+                    100: '#ffffff',
+                    200: '#ffffff',
+                    300: '#ffffff',
+                    400: '#ffffff',
+                    500: '#f7f7f7',
+                    600: '#e0e0e0',
+                    700: '#c8c8c8',
+                    800: '#b1b1b1',
+                    900: '#999999',
+                },
+                
                 zendis: {
                     50: '#eefffb',
                     100: '#c6fff4',
diff --git a/theme.config.tsx b/theme.config.tsx
index 6b998815eaf41d8a431d966b28d7d2aedfea9ba1..471b88c600ed146849c231a9ac968a3ccf12779b 100644
--- a/theme.config.tsx
+++ b/theme.config.tsx
@@ -41,6 +41,10 @@ const config: DocsThemeConfig = {
         content: '🚧 Diese Dokumentation befindet sich aktuell im Aufbau.',
         dismissible: false,
     },
+    i18n: [
+        { locale: 'en', name: 'English' },
+        { locale: 'de', name: 'Deutsch' },
+    ],
     logo: (
         <span className="flex items-center space-x-2">
             <Image
@@ -48,12 +52,11 @@ const config: DocsThemeConfig = {
                 alt="Badge API Icon"
                 width={220}
                 height={80}
-                className="h-12 w-auto"
+                className="h-12 w-auto md:inline-block"
             />
-            <span>
-                <span className="font-space-grotesk text-xl font-bold text-black">
-                    Badge Programm
-                </span>
+
+            <span className="font-space-grotesk text-xl font-bold text-black md:hidden lg:inline-block">
+                Badge Programm
             </span>
         </span>
     ),
@@ -72,7 +75,7 @@ const config: DocsThemeConfig = {
         ),
     },
     docsRepositoryBase:
-        'https://gitlab.opencode.de/open-code/badgebackend/gitlab-profile/-/tree/main/',
+        'https://gitlab.opencode.de/open-code/badgebackend/gitlab-profile/-/tree/main',
     backgroundColor: {
         dark: '12,17,23',
         light: '255,255,255',
@@ -103,7 +106,7 @@ const config: DocsThemeConfig = {
         extraContent: (
             <div className="flex items-center space-x-4">
                 <a
-                    href="/leichte-sprache"
+                    href="/de/leichte-sprache"
                     className="text-base font-medium hover:opacity-60"
                 >
                     <img