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/src/components/Footer.tsx b/src/components/Footer.tsx
index 6ec2c5f406c423f5e5ad00a942854321409c26f8..2b8915c2032aade2f2cff9cffdb6982143c7f892 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -5,22 +5,22 @@ const navigation = {
     officialBadges: [
         {
             name: 'Maintained Badge',
-            href: '/official-badges/active-maintained-badge',
+            href: '/de/official-badges/active-maintained-badge',
             external: false,
         },
         {
             name: 'Reuse Badge',
-            href: '/official-badges/reuse-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,
         },
     ],
@@ -61,7 +61,7 @@ const navigation = {
     accessibility: [
         {
             name: 'Erklärung zur Barrierefreiheit',
-            href: '/declaration-on-accessibility',
+            href: '/de/erklaerung-zur-barrierefreiheit',
             external: false,
         },
         {
@@ -71,7 +71,7 @@ const navigation = {
         },
         {
             name: 'Leichte Sprache',
-            href: '/leichte-sprache',
+            href: '/de/leichte-sprache',
             external: false,
         },
     ],
diff --git a/src/components/landing-page/Hero.tsx b/src/components/landing-page/Hero.tsx
index eced96a5e1e18e575d3b34f2bbce43767f0c5ee8..dfe085031ac1eac1a30019e54ced7e15b40e869a 100644
--- a/src/components/landing-page/Hero.tsx
+++ b/src/components/landing-page/Hero.tsx
@@ -81,7 +81,7 @@ export default function Hero() {
                                             href="/introduction"
                                             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)
+                                            Zur Dokumentation
                                         </a>
                                         <a
                                             href="#api-small-demo"
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..b7d2503ac7b87b7459b88fa106304013f03be495
--- /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: '/introduction',
+    },
+    'live-demo': {
+        title: 'Zur Live Demo 🚀',
+        type: 'page',
+        href: '/#api-small-demo',
+    },
+    'erklaerung-zur-barrierefreiheit': {
+        display: 'hidden',
+    },
+    'leichte-sprache': {
+        display: 'hidden',
+    },
+}
diff --git a/src/pages/api-docs/_meta.ts b/src/pages/de/api-docs/_meta.ts
similarity index 100%
rename from src/pages/api-docs/_meta.ts
rename to src/pages/de/api-docs/_meta.ts
diff --git a/src/pages/api-docs/index.mdx b/src/pages/de/api-docs/index.mdx
similarity index 100%
rename from src/pages/api-docs/index.mdx
rename to src/pages/de/api-docs/index.mdx
diff --git a/src/pages/api-docs/v1/_meta.ts b/src/pages/de/api-docs/v1/_meta.ts
similarity index 100%
rename from src/pages/api-docs/v1/_meta.ts
rename to src/pages/de/api-docs/v1/_meta.ts
diff --git a/src/pages/api-docs/v1/badge-explanation.mdx b/src/pages/de/api-docs/v1/badge-explanation.mdx
similarity index 96%
rename from src/pages/api-docs/v1/badge-explanation.mdx
rename to src/pages/de/api-docs/v1/badge-explanation.mdx
index c6268409c130046aec75bd8f7329a028ba944a5f..2d41777336cc7b8911e38907409805ec3f00bf16 100644
--- a/src/pages/api-docs/v1/badge-explanation.mdx
+++ b/src/pages/de/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/de/api-docs/v1/badges.mdx
similarity index 96%
rename from src/pages/api-docs/v1/badges.mdx
rename to src/pages/de/api-docs/v1/badges.mdx
index 35449449fb4c6f5af919bd90b2bc25f62cb738d1..85e445f3f9172fa3f94b20e9c14d92b94cbb387f 100644
--- a/src/pages/api-docs/v1/badges.mdx
+++ b/src/pages/de/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/de/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/de/api-docs/v1/sarif-per-repo-endpoint.mdx
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..c1f043189fdbc1beab50e1d6e3fcfd0f8f3146ae
--- /dev/null
+++ b/src/pages/de/concepts/configuration/index.mdx
@@ -0,0 +1,182 @@
+{/* 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?ref_type=heads)
+</Callout>
+
+
+
+The badge API is configured using a yaml configuration file with the name `.badge-api.yaml`. The program looks for this file in the current working directory and inside `/etc/badge-api/`.
+
+The configuration file consists of several key sections, including:
+
+- **gitClients**: Contains the configuration for connecting to git providers.
+- **badges**: Defines the badges, their levels, checks, and associated thresholds.
+- **personalEmailDomains**: A list of personal email domains (required by the elephant and bus factor check).
+- **remoteConfigUrl**: URL to a remote configuration file (optional). Or `REMOTE_CONFIG_URL` environment variable.
+- **subsequentUseApiDomain**: The domain of the subsequent use API
+
+### Git Clients Configuration
+
+The `gitClients` section defines how the Badge API connects to GitLab repositories.
+
+```yaml
+gitClients:
+  - baseUrl: <git_server_url>
+    tokenFile: <path_to_token_file>
+    type: <git_server_type>
+    maxRequestsPerSecond: <requests_per_second>
+```
+
+- `baseUrl`: The URL of your GitLab instance (e.g., 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 Permissions
+
+The token is used to authenticate the badge API against the git provider API. For regular usage the token does not need any special permissions. It is only used because even for open source projects **gitlab** requires authentication for `/member` endpoints.
+
+Nevertheless, there is a special case if you provide [manual checks](#manual-check-type) with a decision json file stored in a private repository. In this case, the badge api uses the provided token to access the json file as well (if the baseURL matches). For this operation the token needs to have at least the `read_repository` permission (project access token is fine as well). The same applies to `svgUrls` which are stored in private repositories.
+
+
+The API identifies the correct token by the provided `baseUrl` and `type` in the configuration file.
+
+
+### Badges Configuration
+
+The `badges` section defines various badges, their levels, and checks. A badge can have multiple levels, each with associated checks.
+
+```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>
+```
+
+Each badge can have different levels (e.g., `bronze`, `silver`, `gold`). For each level, there are checks that are applied to the project. A check can be based on the following types:
+
+- `COMMITS`: Checks if the project has a minimum number of commits in a defined time range.
+- `ISSUE_REACTION_TIME`: Measures the average time to respond to issues.
+- `BUS_FACTOR`: Checks the number of maintainers involved.
+- `RELEASES`: Checks the number of releases made in a specified period.
+- `ELEPHANT_FACTOR`: Checks if multiple companies are contributing to the project.
+- `PACKAGES`: Checks the number of packages released.
+- `CI_PIPELINES`: Checks the number of successful CI pipelines.
+
+Each check has a threshold with two optional parameters:
+
+- `min`: Minimum value required (e.g., number of commits, maintainers).
+- `max`: Maximum value allowed (e.g., issue response time).
+- `timeRangeInMonths`: Time period (in months) to evaluate the project activity.
+
+### Example configuration
+
+```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
+```
+
+### Manual check type
+
+Besides the predefined checks there is a `MANUAL` check type. This type of check requires external input or decision-making, which cannot be automatically evaluated by the API based on predefined metrics like commits, issues, or releases. Instead, it relies on an external JSON file to guide the decision-making process.
+
+Example of a manual check:
+
+```yaml
+badges:
+  - id: open-source
+    description: This badge checks if a project is open source.
+    levels:
+      - name: gold
+        svgUrl: https://gitlab.opencode.de/open-code/badgebackend/manual-badges/-/raw/main/badges/open-source.svg
+        checks:
+          - type: MANUAL
+            decisionJsonUrl: https://gitlab.opencode.de/open-code/badgebackend/manual-badges/-/raw/main/badges/open-source.json
+            description: Checks if a project is open source. This check is decided manually by the openCode team.
+```
+
+In this case, the decisionJsonUrl points to a file (open-source.json) that contains the rules or decision criteria for determining if a project is open source. The file is hosted on a GitLab server, and the Badge API will refresh it every 5 minutes.
+
+The JSON file should have the following structure:
+
+```json
+{
+  "granted": <List of repository urls that are granted the badge>,
+  "grantedRegex": <List of regex patterns that are granted the badge>,
+}
+```
+
+Example decision JSON file:
+
+```json
+{
+  "granted": [
+    "https://gitlab.opencode.de/open-code/badgebackend/badge-api",
+    "https://gitlab.opencode.de/open-code/badgebackend/badge-frontend"
+  ],
+  "grantedRegex": [
+    "https://gitlab.opencode.de/open-code/badgebackend/.*"
+  ]
+}
+```
+
+
+### Remote Configuration
+
+The `remoteConfigUrl` parameter allows you to specify a URL to a remote configuration file. This file will be fetched and used to override the local configuration. Only the `badges` and `personalEmailDomains` sections are respected from the remote configuration file. To update other values, a local file needs to be used.
+
+The remote configuration file might contain the special string `<badge-config-repo>`. This value will be replaced with the `remoteConfigUrl` base path. This is useful to validate remote configuration from a different branch and pass the url via an environment variable.
+
diff --git a/src/pages/concepts/configuration/manual-checks.mdx b/src/pages/de/concepts/configuration/manual-checks.mdx
similarity index 91%
rename from src/pages/concepts/configuration/manual-checks.mdx
rename to src/pages/de/concepts/configuration/manual-checks.mdx
index 02a73142f33cf88f4b8682f7c04f3742462a0d8a..00aadff4e12704be1354967dd657654178d37300 100644
--- a/src/pages/concepts/configuration/manual-checks.mdx
+++ b/src/pages/de/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/de/concepts/implemented-checks/_meta.ts
similarity index 100%
rename from src/pages/concepts/implemented-checks/_meta.ts
rename to src/pages/de/concepts/implemented-checks/_meta.ts
diff --git a/src/pages/concepts/implemented-checks/bus-factor.mdx b/src/pages/de/concepts/implemented-checks/bus-factor.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/bus-factor.mdx
rename to src/pages/de/concepts/implemented-checks/bus-factor.mdx
diff --git a/src/pages/concepts/implemented-checks/ci-pipeline.mdx b/src/pages/de/concepts/implemented-checks/ci-pipeline.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/ci-pipeline.mdx
rename to src/pages/de/concepts/implemented-checks/ci-pipeline.mdx
diff --git a/src/pages/concepts/implemented-checks/commits.mdx b/src/pages/de/concepts/implemented-checks/commits.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/commits.mdx
rename to src/pages/de/concepts/implemented-checks/commits.mdx
diff --git a/src/pages/concepts/implemented-checks/elephant-factor.mdx b/src/pages/de/concepts/implemented-checks/elephant-factor.mdx
similarity index 88%
rename from src/pages/concepts/implemented-checks/elephant-factor.mdx
rename to src/pages/de/concepts/implemented-checks/elephant-factor.mdx
index b21219db7f9fa5b4c19e5d101b993b0ee4519e19..1caed0ffdbc57ac6351f77774a917f5a5fa3c948 100644
--- a/src/pages/concepts/implemented-checks/elephant-factor.mdx
+++ b/src/pages/de/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/de/concepts/implemented-checks/index.mdx b/src/pages/de/concepts/implemented-checks/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..040aaa8478b4c038e4820f5b7fa97306df9a731e
--- /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 */}
+
+# 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/de/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/de/concepts/implemented-checks/issue-reaction-time.mdx
diff --git a/src/pages/concepts/implemented-checks/packages.mdx b/src/pages/de/concepts/implemented-checks/packages.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/packages.mdx
rename to src/pages/de/concepts/implemented-checks/packages.mdx
diff --git a/src/pages/concepts/implemented-checks/protected-branches.mdx b/src/pages/de/concepts/implemented-checks/protected-branches.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/protected-branches.mdx
rename to src/pages/de/concepts/implemented-checks/protected-branches.mdx
diff --git a/src/pages/concepts/implemented-checks/releases.mdx b/src/pages/de/concepts/implemented-checks/releases.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/releases.mdx
rename to src/pages/de/concepts/implemented-checks/releases.mdx
diff --git a/src/pages/concepts/implemented-checks/subsequent-use.mdx b/src/pages/de/concepts/implemented-checks/subsequent-use.mdx
similarity index 100%
rename from src/pages/concepts/implemented-checks/subsequent-use.mdx
rename to src/pages/de/concepts/implemented-checks/subsequent-use.mdx
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/index.mdx b/src/pages/de/index.mdx
similarity index 74%
rename from src/pages/index.mdx
rename to src/pages/de/index.mdx
index 613bfc73a7ea8494a3cba066651d0e2b9e24841a..d11ab6948845a95516c2b9c2051ba706224fe3aa 100644
--- a/src/pages/index.mdx
+++ b/src/pages/de/index.mdx
@@ -5,8 +5,8 @@ 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'
+import Hero from '../../components/landing-page/Hero'
+import ApiSmallDemo from '../../components/landing-page/ApiSmallDemo'
 
 export default function Home() {
     return (
diff --git a/src/pages/de/introduction.mdx b/src/pages/de/introduction.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..735c136aaea52348885d4699dd091b781b245524
--- /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..d8cbb558e75e8d18b132bbfac3161db9f4deb1da
--- /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'
+
+# Maintained 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/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/_meta.ts b/src/pages/en/_meta.ts
similarity index 71%
rename from src/pages/_meta.ts
rename to src/pages/en/_meta.ts
index 90b53a92c6f035ed0e5fc91594ed7cd9edfee01b..8990723650b09eecdb218630c1aabc57327c6b93 100644
--- a/src/pages/_meta.ts
+++ b/src/pages/en/_meta.ts
@@ -13,16 +13,13 @@ export default {
     concepts: { title: 'Concepts' },
     'api-docs': { title: 'API' },
     docs: {
-        title: 'Documentation (EN)',
+        title: 'Documentation',
         type: 'page',
-        href: '/introduction',
+        href: '/en/introduction',
     },
     'live-demo': {
-        title: 'Zur Live Demo 🚀',
+        title: 'Live Demo 🚀',
         type: 'page',
-        href: '/#api-small-demo',
-    },
-    'declaration-on-accessibility': {
-        display: 'hidden',
+        href: '/en/#api-small-demo',
     },
 }
diff --git a/src/pages/en/api-docs/_meta.ts b/src/pages/en/api-docs/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5ecd98b17beb09cbc19f11b337730acb7f0eedca
--- /dev/null
+++ b/src/pages/en/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: 'Overview' },
+    v1: { title: 'API v1' },
+}
diff --git a/src/pages/en/api-docs/index.mdx b/src/pages/en/api-docs/index.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..cfdcadc87e92c3368f4a2fcbb26bf7a126a5b812
--- /dev/null
+++ b/src/pages/en/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 Documentation
+
+The ZenDiS Badge API repository scanner provides a JSON API to interact with. The following endpoints are available:
+
+<Cards>
+  <Cards.Card
+    icon={<EyeSlashIcon />}
+    title="SARIF Report per Repository"
+    href="api-docs/v1/sarif-per-repo-endpoint"
+  />
+  <Cards.Card
+    icon={<LinkIcon />}
+    title="Badge of a Repository as SVG"
+    href="api-docs/v1/badges#get-svg-badge"
+  />
+  <Cards.Card
+    icon={<CubeIcon />}
+    title="Explanation of a Badge of a Repository"
+    href="api-docs/v1/badges#get-badge-explanation"
+  />
+</Cards>
\ No newline at end of file
diff --git a/src/pages/en/api-docs/v1/_meta.ts b/src/pages/en/api-docs/v1/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c939c309f7585bfff8b3efb8a41d8b6434e5075
--- /dev/null
+++ b/src/pages/en/api-docs/v1/_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 {
+    'sarif-per-repo-endpoint': { title: 'SARIF per Repo' },
+    badges: { title: 'Badge per Repo and BadgeId' },
+}
diff --git a/src/pages/en/api-docs/v1/badge-explanation.mdx b/src/pages/en/api-docs/v1/badge-explanation.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..2d41777336cc7b8911e38907409805ec3f00bf16
--- /dev/null
+++ b/src/pages/en/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'
+
+# Badge Explanation
+
+## Get the explanation of a badge
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/badges/{badgeID}/sarif`
+</Callout>
+
+This endpoint returns the the explanation of a badge for the given repository URL and badge ID.
+
+This endpoint gets parameterized with the repository URL and the badge ID. The repository URL is the URL of the repository that should 
+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](/en/concepts/configuration) of the badge api instance.
+
+### Example Request
+
+<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/en/api-docs/v1/badges.mdx b/src/pages/en/api-docs/v1/badges.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..85e445f3f9172fa3f94b20e9c14d92b94cbb387f
--- /dev/null
+++ b/src/pages/en/api-docs/v1/badges.mdx
@@ -0,0 +1,71 @@
+---
+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'
+
+# Badges
+
+## Get SVG Badge
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/badges/{badgeID}`
+</Callout>
+
+This endpoint returns the **SVG badge** for the given repository URL and badge ID.
+
+This endpoint gets parameterized with the repository URL and the badge ID. The repository URL is the URL of the repository that should 
+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](/en/concepts/configuration) of the badge api instance.
+
+### Example Request
+
+<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/en/api-docs/v1/sarif-per-repo-endpoint.mdx b/src/pages/en/api-docs/v1/sarif-per-repo-endpoint.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..dc137c8e8feffa898db773ffb11981d32e5974d9
--- /dev/null
+++ b/src/pages/en/api-docs/v1/sarif-per-repo-endpoint.mdx
@@ -0,0 +1,572 @@
+---
+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 per Repository
+
+<Callout type="info">
+  `GET /api/v1/repositories/{repositoryUrl}/sarif`
+</Callout>
+
+This endpoint gets parameterized with the **full repository URL**. The repository URL is the URL of the repository that should be scanned.
+**The URL must be URL encoded** 
+(`https://gitlab.opencode.de/zendis-repo-scanner` → `https%3A%2F%2Fgitlab.opencode.de%2Fzendis-repo-scanner`).
+
+Using this format opens the possibility to scan repositories from other platforms like GitHub, Bitbucket, etc. Besides 
+that, caching is simplified because the URL is unique (instead of using the project ID and a platform URL as query string for 
+example) and the URL is human-readable, at least after URL decoding. This might improve debugging in the future.
+
+The result is returned in [SARIF format](https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/sarif-support-for-code-scanning). 
+**SARIF simplifies possible later integration with other tools. It is an open standard and widely supported.**
+
+### Example Request
+
+<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>
+
+### Example JSON Response
+
+```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/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/en/concepts/configuration/manual-checks.mdx b/src/pages/en/concepts/configuration/manual-checks.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..00aadff4e12704be1354967dd657654178d37300
--- /dev/null
+++ b/src/pages/en/concepts/configuration/manual-checks.mdx
@@ -0,0 +1,23 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+# Manual checks
+
+Manual checks are a special type of check that is not automatically evaluated by the badge API. 
+Instead, the result of the check is provided by a JSON file that is hosted on a server reachable by the Badge API Instance. 
+The JSON file contains a list of granted projects or a regex pattern for granted projects.
+
+You can provide a GitLab personal access token via the environment variable `GITLAB_TOKEN` to access a private repository 
+where the JSON file is stored.
+
+```json filename="manual-check.json" copy
+{
+    "granted": [],
+    "grantedRegex": [
+        "^https://gitlab\\.opencode\\.de.*"
+    ]
+}
+```
+
+The file is referenced in the `.badge-api.yaml` configuration file of the badge. 
+See more details about the [configuration file](/en/concepts/configuration).
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/_meta.ts b/src/pages/en/concepts/implemented-checks/_meta.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b4b558005d268c119566b5b7026847c5c60d3b29
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/_meta.ts
@@ -0,0 +1,6 @@
+// Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+// SPDX-License-Identifier: MIT
+
+export default {
+    index: { title: 'Overview' },
+}
diff --git a/src/pages/en/concepts/implemented-checks/bus-factor.mdx b/src/pages/en/concepts/implemented-checks/bus-factor.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..3a06a54c6ab87562261a770e30c22ccef69909c7
--- /dev/null
+++ b/src/pages/en/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 Factor
+
+<Callout type="default">
+  Check type: `BUS_FACTOR`
+</Callout>
+
+This check calculates the bus factor of a project for a given time range.
+The check passes if the bus factor is greater than or equal to the minimum threshold.
+
+```yaml filename=".badge-api.yaml" copy
+- type: BUS_FACTOR
+  description: Checks if multiple maintainers are working on the project.
+  threshold:
+    timeRangeInMonths: 6
+    min: 2
+```
+
+### Background
+
+The bus factor is a measure of the risk resulting from information and capabilities not being shared among team members.
+
+Imagine there is a pretty precise bus that unfortunately hits always exactly one person. The bus factor is the number of people
+that need to be hit by the bus until half of the projects commits have no living producer anymore. The higher the bus factor,
+the lower the risk of the project failing due to the loss of a single person.
+
+For example if a project has a bus factor of 2, it means that the 2 most important contributors are responsible for 50% of the commits
+and after both are gone, the project would be in danger.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/ci-pipeline.mdx b/src/pages/en/concepts/implemented-checks/ci-pipeline.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..be4ba5efd2422ccc1ef798f9f15b9871b290d0f4
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/ci-pipeline.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'
+
+# CI Pipeline
+
+<Callout type="default">
+  Check type: `CI_PIPELINE`
+</Callout>
+
+This check queries the GitLab API and counts the number of CI pipeline runs (whether successfull or failed)
+in the time range.
+The check passes if the number of commits is greater than or equal to the minimum threshold.
+
+The number of successfull CI pipeline runs is provided as info in the evidence of the API Response.
+
+```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
+```
+
+### Background
+
+Measuring the number of CI pipeline runs can help gauge the stability and reliability of a project's 
+development process. A high number of successful pipeline runs indicates a well-maintained and 
+stable codebase, with regular testing and validation.
+
+- Continuous Integration Health: Frequent CI pipeline runs indicates that the project is undergoing regular 
+automated testing, catching errors early, and ensuring the quality of the software.
+
+- Development Efficiency: A smooth CI pipeline also reflects the development team's efficiency in 
+integrating and testing new changes, improving the project's overall workflow and reducing the likelihood of issues in production.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/commits.mdx b/src/pages/en/concepts/implemented-checks/commits.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..c9418f1a4ff70589e43d72d73adc42c2ceb607db
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/commits.mdx
@@ -0,0 +1,27 @@
+{/* 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 type: `COMMITS`
+</Callout>
+
+This check queries the GitLab API and counts the number of commits in a given time range. 
+The check passes if the number of commits is greater than or equal to the minimum threshold.
+
+```yaml filename=".badge-api.yaml" copy
+- type: COMMITS
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    min: 5
+```
+
+### Background
+
+Counting commits within a time range can be part of measuring a project's activity and maintenance. 
+Frequent commits indicate active development, bug fixes, and ongoing improvements. A high commit 
+count can reflect engaged contributors and project evolution, while fewer commits may signal stagnation.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/elephant-factor.mdx b/src/pages/en/concepts/implemented-checks/elephant-factor.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..1caed0ffdbc57ac6351f77774a917f5a5fa3c948
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/elephant-factor.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'
+
+# Elephant Factor
+
+<Callout type="default">
+  Check type: `ELEPHANT_FACTOR`
+</Callout>
+
+This check calculates the elephant factor of a project for a given time range.
+The check passes if the elephant factor is greater than or equal to the minimum threshold.
+
+```yaml filename=".badge-api.yaml" copy
+- type: ELEPHANT_FACTOR
+  description: Checks if multiple companies are working on the project.
+  threshold:
+    timeRangeInMonths: 6
+    min: 2
+```
+
+### Background
+
+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](/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
+and after both are gone, the project would be in danger. 
\ No newline at end of file
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/en/concepts/implemented-checks/issue-reaction-time.mdx b/src/pages/en/concepts/implemented-checks/issue-reaction-time.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..8ca4f1be2ca24c252399ffa20ef64ff9a9aee115
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/issue-reaction-time.mdx
@@ -0,0 +1,55 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Issue Reaction Time
+
+<Callout type="default">
+  Check type: `ISSUE_REACTION_TIME`
+</Callout>
+
+This check queries the GitLab API for the minimum time it takes for a project member to react to an issue in the given time range.
+The check passes if the number of commits is greater than or equal to the minimum threshold.
+
+```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
+```
+
+The issue response time is the time between the creation of an issue in a project and the first valid response.
+
+A **project member** is a user matching one of the following criteria:
+
+- A member of the project (as returned by the project member API of GitLab)
+- A user who has created at least 5% (magic number) of all issues and/or commits in the project
+
+**The conditions apply simultaneously and not independently of each other:**
+
+- If a project does not have any issues, the check will pass.
+- Issues created by project members are not considered.
+- Every (automatic) action in the stream of an issue, except comments such as “Mentioned in MR” or “labeled” or “Assigned to” etc. are evaluated as a valid issue reaction.
+- A comment is considered a valid response if the comment is submitted by a project member.
+- A comment is not considered a valid response if a non-project member responds to the ticket of a non-project member.
+
+### Background
+
+Measuring issue reaction time is a valuable metric for assessing a project's maintenance and responsiveness. 
+A quick reaction time indicates that project maintainers are actively monitoring and addressing issues, which 
+reflects good project health and responsiveness.
+
+- Indicator of Active Maintenance: Fast issue responses signal that the project is being actively maintained, 
+with attention to bugs, feature requests, or other user concerns. Slow reactions might suggest neglect, 
+which could impact the user experience or drive away contributors.
+
+- Community Engagement: Quick reactions from project members also demonstrate an engaged and supportive community.
+It shows that maintainers or contributors are available to help, fostering a more collaborative and productive environment.
+
+- User Confidence: Projects with shorter issue reaction times inspire greater confidence in users, as they know 
+their concerns will be addressed promptly, making the project more appealing for adoption and contribution.
+
+In summary, tracking issue reaction time helps gauge the level of active maintenance, community involvement, 
+and responsiveness, which are crucial for the long-term success and sustainability of a project.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/packages.mdx b/src/pages/en/concepts/implemented-checks/packages.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..ef198d0dfdb41b96aac5b4b3d36ba2e1d3cec2cd
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/packages.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'
+
+# Packages
+
+<Callout type="default">
+  Check type: `PACKAGES`
+</Callout>
+
+The check passes if the project has a packaging system in place and used it the give times during the given time range.
+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.
+
+
+```yaml filename=".badge-api.yaml" copy
+- type: PACKAGES
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    max: 1
+```
+
+### Background
+
+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.
+Regularly updating these registries signals active maintenance, showing that the project is well-supported
+and evolving. Versioning helps users track updates and access stable releases, while consistent
+packaging enhances compatibility and consistency across environments. Overall, using packaging systems
+improves software accessibility, signals good project health, and fosters reliability and reuse.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/protected-branches.mdx b/src/pages/en/concepts/implemented-checks/protected-branches.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..64e92306ff106ca182cf554c79dd0dcc8413ced4
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/protected-branches.mdx
@@ -0,0 +1,35 @@
+{/* Copyright 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH.
+SPDX-License-Identifier: MIT */}
+
+import { Callout } from 'nextra/components'
+
+# Protected Branches
+
+<Callout type="default">
+  Check type: `PROTECTED_BRANCHES`
+</Callout>
+
+This check verifies if the main branch is protected and if force push is disabled for default branches.
+The check passes if the main branch is protected and force push is disabled for default branches and 
+the minimum permission level for access to the main and default branch is greater than or equal to the minimum threshold.
+
+```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
+```
+
+### Background
+
+Protected branches are an important feature of Git repositories that help maintain the integrity of the codebase.
+By protecting branches, you can prevent accidental changes, enforce code review policies, and ensure that only
+authorized users can change the codebase.
+
+The main branch is often the default branch in a repository and serves as the primary
+branch for the project. Protecting the main branch ensures that only authorized users can push changes to it,
+reducing the risk of accidental changes or unauthorized modifications.
+
+Force push is a Git operation that allows you to overwrite the history of a branch, potentially losing commits
+and making it difficult to track changes. Disabling force push for default branches helps maintain the integrity
+of the commit history and ensures that changes are tracked accurately.
\ No newline at end of file
diff --git a/src/pages/en/concepts/implemented-checks/releases.mdx b/src/pages/en/concepts/implemented-checks/releases.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..3562e8ed2b41f090a63cabab8b3b85d8ab7d04bd
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/releases.mdx
@@ -0,0 +1,45 @@
+{/* 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 type: `RELEASES`
+</Callout>
+
+This check queries the GitLab API and counts the number of tags/releases in the time range.
+The check passes if the number of tags/releases is greater than or equal to the minimum threshold.
+
+```yaml filename=".badge-api.yaml" copy
+- type: RELEASES
+  description: "Describe the check in context of your badge and level"
+  threshold:
+    timeRangeInMonths: 6
+    max: 1
+```
+
+### Background
+
+The use of tags and releases in a project can be an indicator of its maintenance, stability, and ease of reuse. 
+Tags and releases allow developers to mark specific points in a project's history, often representing stable versions, 
+important updates, or significant milestones.
+
+- Maintenance Indicator: Regular releases and tags show that a project is actively maintained. If releases are 
+consistently made, it indicates that the project is receiving attention and updates from its maintainers. 
+Conversely, a lack of releases over a prolonged period might suggest that the project is abandoned or in a stagnant state.
+
+- Versioning and Stability: Tags often correspond to stable points in the project's development. 
+They help define and communicate specific versions of the software, making it easier to track 
+changes over time. Users or other developers relying on your project can be confident in the 
+version they're using, knowing it's a defined, stable release.
+
+- Ease of Reuse: Projects with regular, well-documented releases are easier to reuse in other projects. 
+When developers can clearly see what versions of a project are available, it's much simpler to pick the right 
+one for their needs. Furthermore, proper tagging allows users to access more recent or earlier versions of the project, 
+if needed, without the risk of breaking changes or similar issues.
+
+In essence, keeping tags and releases up-to-date and within a sensible threshold makes your project 
+more attractive for contributors, users, and those looking to integrate it into their own work. 
+It builds trust, improves usability, and ensures your project remains relevant over time.
diff --git a/src/pages/en/concepts/implemented-checks/subsequent-use.mdx b/src/pages/en/concepts/implemented-checks/subsequent-use.mdx
new file mode 100644
index 0000000000000000000000000000000000000000..8ddac1f9ac37c0872eeae851e1a4378fa6c6fa57
--- /dev/null
+++ b/src/pages/en/concepts/implemented-checks/subsequent-use.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'
+
+# Subsequent Use
+
+<Callout type="default">
+  Check type: `SUBSEQUENT_USE`
+</Callout>
+
+This check fetches the number of organizations that reported using the project in production.
+The check passes if the number of using organizations is greater than or equal to the minimum threshold.
+
+```yaml filename=".badge-api.yaml" copy
+- type: SUBSEQUENT_USE
+  description: Check if at least 10 organizations are using it in production
+  threshold:
+    min: 10
+```
+
+### Background
+
+The subsequent use check is a measure of the project's adoption in the community.
+
+Organizations can report to the openCode team that they are using a project in production. 
+In addition, the openCode team records subsequent use cases if a case becomes known in the
+context of projects, collaborations or similar that has not yet been recorded.
+
+The more organizations use a project, the more likely it is that the project is stable,
+well-documented, and has a good reputation. This is an important indicator for the
+sustainability and quality of a project.
\ No newline at end of file
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..d11ab6948845a95516c2b9c2051ba706224fe3aa
--- /dev/null
+++ b/src/pages/en/index.mdx
@@ -0,0 +1,20 @@
+---
+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/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.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/theme.config.tsx b/theme.config.tsx
index eb9e1e7bdcff6aedf142621ea0f3eabf4b2bfcac..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
@@ -71,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',
@@ -102,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