diff --git a/alfa-client/apps/info-e2e/.eslintrc.json b/alfa-client/apps/info-e2e/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..696cb8b12127425419f6d2809c5f15a5963d86de
--- /dev/null
+++ b/alfa-client/apps/info-e2e/.eslintrc.json
@@ -0,0 +1,10 @@
+{
+  "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/apps/info-e2e/cypress.config.ts b/alfa-client/apps/info-e2e/cypress.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7df58bdcfa071c45e23c30e751581287aaacd2e8
--- /dev/null
+++ b/alfa-client/apps/info-e2e/cypress.config.ts
@@ -0,0 +1,7 @@
+import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
+
+import { defineConfig } from 'cypress';
+
+export default defineConfig({
+  e2e: { ...nxE2EPreset(__filename, { cypressDir: 'src' }), baseUrl: 'http://localhost:4200' },
+});
diff --git a/alfa-client/apps/info-e2e/project.json b/alfa-client/apps/info-e2e/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..2582290b0a800dcaef7e9bcdd3f0b218414656f8
--- /dev/null
+++ b/alfa-client/apps/info-e2e/project.json
@@ -0,0 +1,29 @@
+{
+  "name": "info-e2e",
+  "$schema": "../../node_modules/nx/schemas/project-schema.json",
+  "projectType": "application",
+  "sourceRoot": "apps/info-e2e/src",
+  "tags": [],
+  "implicitDependencies": ["info"],
+  "targets": {
+    "e2e": {
+      "executor": "@nx/cypress:cypress",
+      "options": {
+        "cypressConfig": "apps/info-e2e/cypress.config.ts",
+        "testingType": "e2e",
+        "devServerTarget": "info:serve:development"
+      },
+      "configurations": {
+        "production": {
+          "devServerTarget": "info:serve:production"
+        },
+        "ci": {
+          "devServerTarget": "info:serve-static"
+        }
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint"
+    }
+  }
+}
diff --git a/alfa-client/apps/info-e2e/src/e2e/app.cy.ts b/alfa-client/apps/info-e2e/src/e2e/app.cy.ts
new file mode 100644
index 0000000000000000000000000000000000000000..904740f4a976253f4bcb00eb67bfda320a5d436f
--- /dev/null
+++ b/alfa-client/apps/info-e2e/src/e2e/app.cy.ts
@@ -0,0 +1,13 @@
+import { getGreeting } from '../support/app.po';
+
+describe('info-e2e', () => {
+  beforeEach(() => cy.visit('/'));
+
+  it('should display welcome message', () => {
+    // Custom command example, see `../support/commands.ts` file
+    cy.login('my-email@something.com', 'myPassword');
+
+    // Function helper example, see `../support/app.po.ts` file
+    getGreeting().contains(/Welcome/);
+  });
+});
diff --git a/alfa-client/apps/info-e2e/src/fixtures/example.json b/alfa-client/apps/info-e2e/src/fixtures/example.json
new file mode 100644
index 0000000000000000000000000000000000000000..02e4254378e9785f013be7cc8d94a8229dcbcbb7
--- /dev/null
+++ b/alfa-client/apps/info-e2e/src/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+  "name": "Using fixtures to represent data",
+  "email": "hello@cypress.io",
+  "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/alfa-client/apps/info-e2e/src/support/app.po.ts b/alfa-client/apps/info-e2e/src/support/app.po.ts
new file mode 100644
index 0000000000000000000000000000000000000000..32934246969c2ecb827ac05677785933a707a54d
--- /dev/null
+++ b/alfa-client/apps/info-e2e/src/support/app.po.ts
@@ -0,0 +1 @@
+export const getGreeting = () => cy.get('h1');
diff --git a/alfa-client/apps/info-e2e/src/support/commands.ts b/alfa-client/apps/info-e2e/src/support/commands.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c421a3c47c1aa0f82f17f545268ec5965e6b5a79
--- /dev/null
+++ b/alfa-client/apps/info-e2e/src/support/commands.ts
@@ -0,0 +1,35 @@
+/// <reference types="cypress" />
+
+// ***********************************************
+// This example commands.ts shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+
+// eslint-disable-next-line @typescript-eslint/no-namespace
+declare namespace Cypress {
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  interface Chainable<Subject> {
+    login(email: string, password: string): void;
+  }
+}
+
+// -- This is a parent command --
+Cypress.Commands.add('login', (email, password) => {
+  console.log('Custom command example: Login', email, password);
+});
+//
+// -- This is a child command --
+// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
diff --git a/alfa-client/apps/info-e2e/src/support/e2e.ts b/alfa-client/apps/info-e2e/src/support/e2e.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1c1a9e772baea367e08b1c7b15e65b3fede3d17f
--- /dev/null
+++ b/alfa-client/apps/info-e2e/src/support/e2e.ts
@@ -0,0 +1,17 @@
+// ***********************************************************
+// This example support/e2e.ts is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.ts using ES2015 syntax:
+import './commands';
diff --git a/alfa-client/apps/info-e2e/tsconfig.json b/alfa-client/apps/info-e2e/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..e28de1d7913d8d554fee7f55bdf42f0bd4125191
--- /dev/null
+++ b/alfa-client/apps/info-e2e/tsconfig.json
@@ -0,0 +1,17 @@
+{
+  "extends": "../../tsconfig.base.json",
+  "compilerOptions": {
+    "allowJs": true,
+    "outDir": "../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["cypress", "node"],
+    "sourceMap": false,
+    "forceConsistentCasingInFileNames": true,
+    "strict": true,
+    "noImplicitOverride": true,
+    "noPropertyAccessFromIndexSignature": true,
+    "noImplicitReturns": true,
+    "noFallthroughCasesInSwitch": true
+  },
+  "include": ["**/*.ts", "**/*.js", "cypress.config.ts", "**/*.cy.ts", "**/*.cy.js", "**/*.d.ts"]
+}
diff --git a/alfa-client/apps/info/.eslintrc.json b/alfa-client/apps/info/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..437641b9a11a424b46bcf2606b683998a3a6bba1
--- /dev/null
+++ b/alfa-client/apps/info/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "app",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "app",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/apps/info/jest.config.ts b/alfa-client/apps/info/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ae2366cf2ae77ab38f66c709e392a383f2e42aae
--- /dev/null
+++ b/alfa-client/apps/info/jest.config.ts
@@ -0,0 +1,22 @@
+/* eslint-disable */
+export default {
+  displayName: 'info',
+  preset: '../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../coverage/apps/info',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/apps/info/project.json b/alfa-client/apps/info/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..2a2d8535964e81fc5bf91c57a6a035ef83c51d1c
--- /dev/null
+++ b/alfa-client/apps/info/project.json
@@ -0,0 +1,95 @@
+{
+  "name": "info",
+  "$schema": "../../node_modules/nx/schemas/project-schema.json",
+  "projectType": "application",
+  "prefix": "app",
+  "sourceRoot": "apps/info/src",
+  "tags": [],
+  "targets": {
+    "build": {
+      "executor": "@angular-devkit/build-angular:browser",
+      "outputs": ["{options.outputPath}"],
+      "options": {
+        "outputPath": "dist/apps/info",
+        "index": "apps/info/src/index.html",
+        "main": "apps/info/src/main.ts",
+        "polyfills": ["zone.js"],
+        "tsConfig": "apps/info/tsconfig.app.json",
+        "inlineStyleLanguage": "scss",
+        "assets": ["apps/info/src/favicon.ico", "apps/info/src/assets"],
+        "styles": ["apps/info/src/styles.scss"],
+        "scripts": [],
+        "stylePreprocessorOptions": {
+          "includePaths": [
+            "apps/alfa/src/styles/abstracts",
+            "node_modules/@angular",
+            "node_modules/include-media",
+            "node_modules/typeface-roboto"
+          ]
+        }
+      },
+      "configurations": {
+        "production": {
+          "budgets": [
+            {
+              "type": "initial",
+              "maximumWarning": "500kb",
+              "maximumError": "1mb"
+            },
+            {
+              "type": "anyComponentStyle",
+              "maximumWarning": "2kb",
+              "maximumError": "4kb"
+            }
+          ],
+          "outputHashing": "all"
+        },
+        "development": {
+          "buildOptimizer": false,
+          "optimization": false,
+          "vendorChunk": true,
+          "extractLicenses": false,
+          "sourceMap": true,
+          "namedChunks": true
+        }
+      },
+      "defaultConfiguration": "production"
+    },
+    "serve": {
+      "executor": "@angular-devkit/build-angular:dev-server",
+      "configurations": {
+        "production": {
+          "buildTarget": "info:build:production"
+        },
+        "development": {
+          "buildTarget": "info:build:development"
+        }
+      },
+      "defaultConfiguration": "development"
+    },
+    "extract-i18n": {
+      "executor": "@angular-devkit/build-angular:extract-i18n",
+      "options": {
+        "buildTarget": "info:build"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint"
+    },
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "jestConfig": "apps/info/jest.config.ts"
+      }
+    },
+    "serve-static": {
+      "executor": "@nx/web:file-server",
+      "options": {
+        "buildTarget": "info:build",
+        "port": 4200,
+        "spa": true
+      }
+    }
+  }
+}
diff --git a/alfa-client/apps/info/src/app/app.component.html b/alfa-client/apps/info/src/app/app.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..8a9193807993f22bc8471d0b53b39f46fd383aa3
--- /dev/null
+++ b/alfa-client/apps/info/src/app/app.component.html
@@ -0,0 +1,115 @@
+<header
+  class="flex h-16 items-center justify-between border-b border-b-ozggray-300 bg-white px-9 py-2"
+  data-test-id="admin-header"
+>
+  <a
+    class="rounded border-2 border-transparent p-1 outline-2 outline-offset-2 hover:border-primary focus-visible:border-gray-200 focus-visible:outline-focus"
+    aria-label="OZG-Cloud Administration"
+    routerLink="/"
+    data-test-id="logo-link"
+  >
+    LOGO
+  </a>
+</header>
+<div class="relative flex w-full flex-auto justify-center">
+  <main class="flex-auto bg-background-50 p-6">
+    <div class="ozg-prose prose">
+      <h1>Erklärung zur Barrierefreiheit</h1>
+      <p>
+        Die Staatskanzlei des Ministerpräsidenten ist bemüht, ihre Anwendung im Einklang mit § 11 Absatz 1
+        Landesbehindertengleichstellungsgesetz (LBGG) sowie den Anforderungen der Barrierefreiheit gemäß § 13 Absatz 3 LBGG
+        barrierefrei zugänglich zu machen.
+      </p>
+      <p>Diese Erklärung zur Barrierefreiheit gilt für:</p>
+      <ul>
+        <li>
+          <a href="https://se.kop.schleswig-holstein.de" target="_blank">https://se.kop.schleswig-holstein.de</a>
+        </li>
+        <li>
+          <a href="https://luebeck.kop.schleswig-holstein.de" target="_blank">https://luebeck.kop.schleswig-holstein.de</a>
+        </li>
+        <li>
+          <a href="https://kiel.kop.schleswig-holstein.de" target="_blank">https://kiel.kop.schleswig-holstein.de</a>
+        </li>
+      </ul>
+      <h2>Stand der Vereinbarkeit mit den Anforderungen</h2>
+      <p>Diese Website/mobile Anwendung ist teilweise mit § 13 Absatz 3 LBGG vereinbar.</p>
+      <h2>Nicht barrierefreie Inhalte</h2>
+      <p>Die nachstehend aufgeführten Inhalte sind unvereinbar mit § 13 Absatz 3 LBGG und somit nicht barrierefrei:</p>
+      <ul>
+        <li>Erläuterungen zu den Inhalten und der Navigation dieser Anwendung in leichter Sprache sind nicht vorhanden.</li>
+        <li>
+          Responsive Darstellung ist nicht vorhanden, weshalb Inhalte nur bedingt verlustfrei vergrößerbar sind oder umbrechen.
+        </li>
+        <li>Gliedernde Überschriften und Bereiche sind nicht umfassend vorhanden.</li>
+        <li>Benutzerdefinierte Einstellungen (Farbauswahl und Schriftgröße) werden nicht umfänglich angewendet.</li>
+        <li>Die Einstellungsmöglichkeiten im oberen Navigationsmenü können nicht per Tastatursteuerung erreicht werden.</li>
+        <li>Die Vorschläge der Vorgangssuche sind nicht per Screenreader wahrnehmbar.</li>
+        <li>Vereinzelt treten Texte mit zu geringem Kontrast zum Hintergrund auf.</li>
+        <li>Vereinzelt ist der Tastaturfokus nur schwer wahrnehmbar. Bei Datumspickern ist keine Fokushervorhebung vorhanden.</li>
+        <li>
+          Es fehlen Statusmeldungen, die Screenreader-Nutzende über Änderungen der Suchergebnisse oder über Änderungen von
+          Anträgen informieren.
+        </li>
+        <li>
+          Der als PDF zur Verfügung gestellte Benutzerleitfaden, sowie die als PDF abgespeicherten Nachrichten der Anwendung
+          entsprechen nicht dem PDF/UA-Standard.
+        </li>
+      </ul>
+      <p>
+        Die Anwendung befindet sich derzeit noch in der Entwicklung. An bestehenden und bekannten Barrieren wird gearbeitet, um
+        eine Barrierefreiheit gemäß § 13 Absatz 3 LBGG gewährleisten zu können.
+      </p>
+      <h2>Erstellung dieser Erklärung zur Barrierefreiheit</h2>
+      <p>Diese Erklärung wurde am 15.07.2024 erstellt.</p>
+      <p>
+        Die Aussagen bezüglich der Vereinbarkeit mit den Barrierefreiheitsanforderungen in dieser Erklärung beruhen auf einem
+        Prüfbericht von Dataport vom 08.04.2024 und einer Selbstbewertung.
+      </p>
+      <p>Die Erklärung wurde zuletzt am 15.07.2024 aktualisiert.</p>
+      <h2>Feedback und Kontaktangaben</h2>
+      <p>
+        Sie möchten uns bestehende Barrieren mitteilen oder Informationen zur Umsetzung der Barrierefreiheit erfragen? Für Ihr
+        Feedback sowie alle weiteren Informationen sprechen Sie unsere Verantwortlichen Kontaktpersonen unter
+        <a href="mailto:digitalisierung@stk.landsh.de">digitalisierung&commat;stk.landsh.de</a> an.
+      </p>
+      <h2>Beschwerdeverfahren</h2>
+      <p>
+        Wenn auch nach Ihrem Feedback an den oben genannten Kontakt keine zufriedenstellende Lösung gefunden wurde, können Sie
+        sich an die Beschwerdestelle des Landes Schleswig-Holstein gemäß Landesbehindertengleichstellungsgesetz (LBGG) wenden. Die
+        Beschwerdestelle hat die Aufgabe, Konflikte zum Thema Barrierefreiheit zwischen Menschen mit Behinderungen und
+        öffentlichen Stellen in Schleswig-Holstein zu lösen. Dabei geht es nicht darum, Gewinner oder Verlierer zu finden.
+        Vielmehr ist es das Ziel, mit Hilfe der Beschwerdestelle gemeinsam und außergerichtlich eine Lösung für ein Problem zu
+        finden. Das Beschwerdeverfahren ist kostenlos. Es muss kein Rechtsbeistand eingeschaltet werden.
+      </p>
+      <p>
+        Auf der
+        <a href="https://www.landtag.ltsh.de/beauftragte/beschwerdestelle-fuer-barrieren/" target="_blank"
+          >Internetseite der Beschwerdestelle</a
+        >
+        finden Sie alle Informationen zum Beschwerdeverfahren. Dort können Sie nachlesen, wie ein Beschwerdeverfahren abläuft.
+      </p>
+      <p>Sie erreichen die Beschwerdestelle unter folgender Adresse:</p>
+      <p>Beschwerdestelle nach dem Behindertengleichstellungsgesetz bei der Landesbeauftragten für Menschen mit Behinderung</p>
+      <p>Büroanschrift: Karolinenweg 1 24105 Kiel</p>
+      <p>Postanschrift: Postfach 7121 24171 Kiel</p>
+      <p>Telefon: +49 431 988 1620</p>
+      <p>
+        E-Mail:
+        <a href="mailto:bbit@landtag.ltsh.de">bbit&commat;landtag.ltsh.de</a>
+      </p>
+    </div>
+
+    <footer class="ozg-prose">
+      <nav>
+        <ul class="flex flex-row flex-wrap justify-center gap-9 pt-14">
+          <li><a routerLink="/barrierefreiheit">Barrierefreiheit</a></li>
+          <li><a routerLink="/datenschutzerklarrung">Datenschutzerklärung</a></li>
+          <li><a routerLink="/impressum">Impressum</a></li>
+        </ul>
+      </nav>
+    </footer>
+
+    <router-outlet></router-outlet>
+  </main>
+</div>
diff --git a/alfa-client/apps/info/src/app/app.component.scss b/alfa-client/apps/info/src/app/app.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/alfa-client/apps/info/src/app/app.component.spec.ts b/alfa-client/apps/info/src/app/app.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0f49c5d7e876c27aeb99adf35200f2dfc2fd2e03
--- /dev/null
+++ b/alfa-client/apps/info/src/app/app.component.spec.ts
@@ -0,0 +1,25 @@
+import { TestBed } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+import { AppComponent } from './app.component';
+import { NxWelcomeComponent } from './nx-welcome.component';
+
+describe('AppComponent', () => {
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [AppComponent, NxWelcomeComponent, RouterTestingModule],
+    }).compileComponents();
+  });
+
+  it('should render title', () => {
+    const fixture = TestBed.createComponent(AppComponent);
+    fixture.detectChanges();
+    const compiled = fixture.nativeElement as HTMLElement;
+    expect(compiled.querySelector('h1')?.textContent).toContain('Welcome info');
+  });
+
+  it(`should have as title 'info'`, () => {
+    const fixture = TestBed.createComponent(AppComponent);
+    const app = fixture.componentInstance;
+    expect(app.title).toEqual('info');
+  });
+});
diff --git a/alfa-client/apps/info/src/app/app.component.ts b/alfa-client/apps/info/src/app/app.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0b1ed01b56d8435808e3c52fba146b1dc807a278
--- /dev/null
+++ b/alfa-client/apps/info/src/app/app.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { RouterModule } from '@angular/router';
+
+@Component({
+  standalone: true,
+  imports: [RouterModule],
+  selector: 'app-root',
+  templateUrl: './app.component.html',
+  styleUrl: './app.component.scss',
+})
+export class AppComponent {
+  title = 'info';
+}
diff --git a/alfa-client/apps/info/src/app/app.config.ts b/alfa-client/apps/info/src/app/app.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ed404941f7b7e0784f92f0bc82c7cab3b2914047
--- /dev/null
+++ b/alfa-client/apps/info/src/app/app.config.ts
@@ -0,0 +1,7 @@
+import { ApplicationConfig } from '@angular/core';
+import { provideRouter } from '@angular/router';
+import { appRoutes } from './app.routes';
+
+export const appConfig: ApplicationConfig = {
+  providers: [provideRouter(appRoutes)],
+};
diff --git a/alfa-client/apps/info/src/app/app.routes.ts b/alfa-client/apps/info/src/app/app.routes.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8762dfe2c6510c01425b35c6cf76371cc0b332c6
--- /dev/null
+++ b/alfa-client/apps/info/src/app/app.routes.ts
@@ -0,0 +1,3 @@
+import { Route } from '@angular/router';
+
+export const appRoutes: Route[] = [];
diff --git a/alfa-client/apps/info/src/assets/.gitkeep b/alfa-client/apps/info/src/assets/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/alfa-client/apps/info/src/favicon.ico b/alfa-client/apps/info/src/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57
Binary files /dev/null and b/alfa-client/apps/info/src/favicon.ico differ
diff --git a/alfa-client/apps/info/src/index.html b/alfa-client/apps/info/src/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..1c98446a114b23800f609cdce62aee5da0d11a49
--- /dev/null
+++ b/alfa-client/apps/info/src/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en" class="h-full bg-white antialiased">
+  <head>
+    <meta charset="utf-8" />
+    <title>Info</title>
+    <base href="/" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <link rel="icon" type="image/x-icon" href="favicon.ico" />
+  </head>
+  <body class="flex min-h-full bg-white text-black">
+    <app-root class="flex w-full flex-col"></app-root>
+  </body>
+</html>
diff --git a/alfa-client/apps/info/src/main.ts b/alfa-client/apps/info/src/main.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7205a13df94cc9e1949c07ac16454fc4faf8b564
--- /dev/null
+++ b/alfa-client/apps/info/src/main.ts
@@ -0,0 +1,5 @@
+import { bootstrapApplication } from '@angular/platform-browser';
+import { AppComponent } from './app/app.component';
+import { appConfig } from './app/app.config';
+
+bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
diff --git a/alfa-client/apps/info/src/styles.scss b/alfa-client/apps/info/src/styles.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e8b9bb8f36b34dd294d70f707c3ba23965dbf339
--- /dev/null
+++ b/alfa-client/apps/info/src/styles.scss
@@ -0,0 +1,11 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@import 'libs/design-system/src/lib/tailwind-preset/root.css';
+
+@layer components {
+  .ozg-prose a {
+    @apply text-primary no-underline hover:text-primary-hover hover:underline focus-visible:rounded-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus;
+  }
+}
diff --git a/alfa-client/apps/info/src/test-setup.ts b/alfa-client/apps/info/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ab1eeeb335d7890571dda105cf8bc1ea77086866
--- /dev/null
+++ b/alfa-client/apps/info/src/test-setup.ts
@@ -0,0 +1,8 @@
+// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
+globalThis.ngJest = {
+  testEnvironmentOptions: {
+    errorOnUnknownElements: true,
+    errorOnUnknownProperties: true,
+  },
+};
+import 'jest-preset-angular/setup-jest';
diff --git a/alfa-client/apps/info/tailwind.config.js b/alfa-client/apps/info/tailwind.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fd1192933dc7dfc4be0b96c7301380e7bc6a1f7
--- /dev/null
+++ b/alfa-client/apps/info/tailwind.config.js
@@ -0,0 +1,16 @@
+/* eslint-env node */
+/* eslint @typescript-eslint/no-var-requires: "off" */
+
+const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind');
+const { join } = require('path');
+const sharedTailwindConfig = require('../../libs/design-system/src/lib/tailwind-preset/tailwind.config.js');
+
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+  presets: [sharedTailwindConfig],
+  content: [join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), ...createGlobPatternsForDependencies(__dirname)],
+  theme: {
+    extend: {},
+  },
+  plugins: [],
+};
diff --git a/alfa-client/apps/info/tsconfig.app.json b/alfa-client/apps/info/tsconfig.app.json
new file mode 100644
index 0000000000000000000000000000000000000000..fff4a41d444a486d4cf163be19f8601e0510c270
--- /dev/null
+++ b/alfa-client/apps/info/tsconfig.app.json
@@ -0,0 +1,10 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../dist/out-tsc",
+    "types": []
+  },
+  "files": ["src/main.ts"],
+  "include": ["src/**/*.d.ts"],
+  "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"]
+}
diff --git a/alfa-client/apps/info/tsconfig.editor.json b/alfa-client/apps/info/tsconfig.editor.json
new file mode 100644
index 0000000000000000000000000000000000000000..a8ac182c08dec53b3647f810cd2c47a51ace51c9
--- /dev/null
+++ b/alfa-client/apps/info/tsconfig.editor.json
@@ -0,0 +1,6 @@
+{
+  "extends": "./tsconfig.json",
+  "include": ["src/**/*.ts"],
+  "compilerOptions": {},
+  "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"]
+}
diff --git a/alfa-client/apps/info/tsconfig.json b/alfa-client/apps/info/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..de18e88adcda3cbae746e2c6cdf0625592966cd9
--- /dev/null
+++ b/alfa-client/apps/info/tsconfig.json
@@ -0,0 +1,32 @@
+{
+  "compilerOptions": {
+    "target": "es2022",
+    "useDefineForClassFields": false,
+    "forceConsistentCasingInFileNames": true,
+    "strict": true,
+    "noImplicitOverride": true,
+    "noPropertyAccessFromIndexSignature": true,
+    "noImplicitReturns": true,
+    "noFallthroughCasesInSwitch": true
+  },
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.editor.json"
+    },
+    {
+      "path": "./tsconfig.app.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "extends": "../../tsconfig.base.json",
+  "angularCompilerOptions": {
+    "enableI18nLegacyMessageIdFormat": false,
+    "strictInjectionParameters": true,
+    "strictInputAccessModifiers": true,
+    "strictTemplates": true
+  }
+}
diff --git a/alfa-client/apps/info/tsconfig.spec.json b/alfa-client/apps/info/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..7870b7c011681fb77d6114001f44d3eeca69975b
--- /dev/null
+++ b/alfa-client/apps/info/tsconfig.spec.json
@@ -0,0 +1,11 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../dist/out-tsc",
+    "module": "commonjs",
+    "target": "es2016",
+    "types": ["jest", "node"]
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
+}
diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css
index 22790260b6e1dfc572920df9f126930e36fd683b..00d1a2d0676bfb305fe215e2b379a0a96ee38647 100644
--- a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css
+++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css
@@ -3,6 +3,13 @@
 @tailwind utilities;
 
 @import '~@angular/cdk/overlay-prebuilt.css';
+@import 'typeface-roboto/index.css';
+
+@layer base {
+  html {
+    font-family: 'Roboto', 'Helvetica Neue', sans-serif;
+  }
+}
 
 :root {
   --warning: 38 92% 50%;
diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js
index 88f03501ec468c7aea37ab033a35ce86c7d57280..68734c4d0c02b31874d30b3a030a0892e251476e 100644
--- a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js
+++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js
@@ -130,5 +130,5 @@ module.exports = {
       },
     },
   },
-  plugins: [],
+  plugins: [require('@tailwindcss/typography')],
 };
diff --git a/alfa-client/nx.json b/alfa-client/nx.json
index d5846d9ce54ec894bf7601a95e7f626e1bfe360b..d4a997871fa8e52b66b2003fbd860e6249437ecb 100644
--- a/alfa-client/nx.json
+++ b/alfa-client/nx.json
@@ -4,10 +4,10 @@
   },
   "generators": {
     "@nx/angular:application": {
-      "style": "scss",
+      "e2eTestRunner": "cypress",
       "linter": "eslint",
-      "unitTestRunner": "jest",
-      "e2eTestRunner": "cypress"
+      "style": "scss",
+      "unitTestRunner": "jest"
     },
     "@nx/angular:library": {
       "linter": "eslint",
@@ -67,6 +67,11 @@
     "@nx/eslint:lint": {
       "inputs": ["default", "{workspaceRoot}/.eslintrc.json"],
       "cache": true
+    },
+    "@angular-devkit/build-angular:browser": {
+      "cache": true,
+      "dependsOn": ["^build"],
+      "inputs": ["production", "^production"]
     }
   },
   "namedInputs": {
diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json
index f5d4ef0b6b33ddad3f5f22615556d5c373121bea..60754866c3fb107583f93192d120458feecf3e2c 100644
--- a/alfa-client/package-lock.json
+++ b/alfa-client/package-lock.json
@@ -79,6 +79,7 @@
         "@swc-node/register": "1.9.1",
         "@swc/core": "~1.5.7",
         "@swc/helpers": "~0.5.2",
+        "@tailwindcss/typography": "^0.5.15",
         "@testing-library/jest-dom": "6.4.5",
         "@types/file-saver": "2.0.7",
         "@types/jest": "29.4.4",
@@ -15388,6 +15389,36 @@
         "@swc/counter": "^0.1.3"
       }
     },
+    "node_modules/@tailwindcss/typography": {
+      "version": "0.5.15",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@tailwindcss/typography/-/typography-0.5.15.tgz",
+      "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "lodash.castarray": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "postcss-selector-parser": "6.0.10"
+      },
+      "peerDependencies": {
+        "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
+      }
+    },
+    "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@testing-library/jest-dom": {
       "version": "6.4.5",
       "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz",
@@ -28163,6 +28194,13 @@
       "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
       "license": "MIT"
     },
+    "node_modules/lodash.castarray": {
+      "version": "4.4.0",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+      "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lodash.debounce": {
       "version": "4.0.8",
       "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -28190,6 +28228,13 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lodash.isstring": {
       "version": "4.0.1",
       "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
diff --git a/alfa-client/package.json b/alfa-client/package.json
index b081dded54752bbfd6e7ccdd48e8736e41e34d44..c6d61cc487a9253a5164f48b3b5c9340d4cae95e 100644
--- a/alfa-client/package.json
+++ b/alfa-client/package.json
@@ -7,6 +7,7 @@
     "start:admin": "nx run admin:serve --port 4301 --disable-host-check",
     "start:demo": "nx run demo:serve --port 4500 --disable-host-check",
     "start:debug": "nx run alfa:serve --port 4300 --disable-host-check --verbose",
+    "start:info": "nx run info:serve --port 4600 --disable-host-check",
     "start-for-screenreader": "nx run alfa:serve --host 192.168.178.20 --port 4300 --disable-host-check --verbose",
     "start:devbe": "nx run alfa:serve --port 4300 --disable-host-check --proxy-config proxy.dev.conf.json --verbose",
     "build": "nx run alfa:build",
@@ -121,6 +122,7 @@
     "@swc-node/register": "1.9.1",
     "@swc/core": "~1.5.7",
     "@swc/helpers": "~0.5.2",
+    "@tailwindcss/typography": "^0.5.15",
     "@testing-library/jest-dom": "6.4.5",
     "@types/file-saver": "2.0.7",
     "@types/jest": "29.4.4",