diff --git a/alfa-client/apps/demo/src/app/app.component.html b/alfa-client/apps/demo/src/app/app.component.html
index 91e8c3f79a3f60c18d7bcbfe94f1d1bf4faaeb9e..458cfa1ddbe968a75d5f95492bafe385a4bb502d 100644
--- a/alfa-client/apps/demo/src/app/app.component.html
+++ b/alfa-client/apps/demo/src/app/app.component.html
@@ -15,6 +15,28 @@
     </div>
     <main class="flex-auto bg-background-50 p-6">
       <form id="antrag_bescheiden_form" [formGroup]="exampleForm">
+        <div class="mb-6">
+          <label
+            for="default-input"
+            class="mb-2 block text-sm font-medium text-gray-900 dark:text-white"
+            >Default input</label
+          >
+          <input
+            type="text"
+            id="default-input"
+            class="block w-full rounded-lg border border-gray-300 bg-background-50 p-2.5 text-base text-text focus:border-blue-500 focus:ring-blue-500"
+          />
+        </div>
+        <div>
+          <ods-text-input
+            id="test-input-id"
+            label="Betreff"
+            placeholder="hier muss der Betreff rein"
+          />
+        </div>
+        <div>
+          <ods-textarea />
+        </div>
         <div class="my-10 flex gap-8">
           <ods-radio-button-card
             label="bewilligt"
diff --git a/alfa-client/apps/demo/src/app/app.component.ts b/alfa-client/apps/demo/src/app/app.component.ts
index 634638e05608dc3ad2c0552701d228bc43bde39f..35c94d3162ac39e8ef00fd349a9a0c2ade313733 100644
--- a/alfa-client/apps/demo/src/app/app.component.ts
+++ b/alfa-client/apps/demo/src/app/app.component.ts
@@ -11,6 +11,8 @@ import {
   IconComponent,
   RadioButtonCardComponent,
   SpinnerIconComponent,
+  TextInputComponent,
+  TextareaComponent,
 } from '@ods/system';
 
 import { BescheidDialogExampleComponent } from './components/bescheid-dialog/bescheid-dialog.component';
@@ -36,6 +38,8 @@ import { CustomStepperComponent } from './components/cdk-demo/custom-stepper.com
     ReactiveFormsModule,
     IconComponent,
     SpinnerIconComponent,
+    TextareaComponent,
+    TextInputComponent,
   ],
   selector: 'app-root',
   templateUrl: './app.component.html',
diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts
index f7dfe57c3c143a8bc2a794e782028532c578adda..00e8a89ec69168de4e4c66e0293a146c9cdfe629 100644
--- a/alfa-client/libs/design-system/src/index.ts
+++ b/alfa-client/libs/design-system/src/index.ts
@@ -3,6 +3,8 @@ export * from './lib/button-card/button-card.component';
 export * from './lib/button/button.component';
 export * from './lib/form/file-upload-button/file-upload-button.component';
 export * from './lib/form/radio-button-card/radio-button-card.component';
+export * from './lib/form/text-input/text-input.component';
+export * from './lib/form/textarea/textarea.component';
 export * from './lib/icon/icon.component';
 export * from './lib/icons/bescheid-generate-icon/bescheid-generate-icon.component';
 export * from './lib/icons/bescheid-upload-icon/bescheid-upload-icon.component';
diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e154ebed4a0f1796a5134ed7606e09ccb72ff7bf
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TextInputComponent } from './text-input.component';
+
+describe('TextInputComponent', () => {
+  let component: TextInputComponent;
+  let fixture: ComponentFixture<TextInputComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TextInputComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TextInputComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..634781aaefeb341fc1b4b2a723969085b5f06abe
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts
@@ -0,0 +1,29 @@
+import { CommonModule } from '@angular/common';
+import { Component, Input } from '@angular/core';
+
+@Component({
+  selector: 'ods-text-input',
+  standalone: true,
+  imports: [CommonModule],
+  template: `
+    <div>
+      <label [for]="id" class="block text-sm font-medium leading-6 text-gray-900">{{
+        label
+      }}</label>
+      <div class="mt-2">
+        <input
+          type="text"
+          name="email"
+          [id]="id"
+          class="block w-full rounded-lg border border-gray-300 bg-background-50 p-2.5 text-base text-text focus:border-blue-500 focus:ring-blue-500"
+          [placeholder]="placeholder"
+        />
+      </div>
+    </div>
+  `,
+})
+export class TextInputComponent {
+  @Input({ required: true }) id!: string;
+  @Input() label: string = '';
+  @Input() placeholder: string = '';
+}
diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..31abe191e8f969714c9a83ab054546d0cb05007b
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TextareaComponent } from './textarea.component';
+
+describe('TextareaComponent', () => {
+  let component: TextareaComponent;
+  let fixture: ComponentFixture<TextareaComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TextareaComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TextareaComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ec25e20a3281e068323d2fe34d51f86d114d8c4
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts
@@ -0,0 +1,31 @@
+import { CommonModule } from '@angular/common';
+import { Component, Input } from '@angular/core';
+
+@Component({
+  selector: 'ods-textarea',
+  standalone: true,
+  imports: [CommonModule],
+  template: `
+    <div class="mt-2">
+      <textarea
+        rows="4"
+        name="comment"
+        id="comment"
+        class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
+      ></textarea>
+      <label for="description" class="sr-only">Description</label>
+      <textarea
+        rows="2"
+        name="description"
+        id="description"
+        class="block w-full resize-none border-0 py-0 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6"
+        placeholder="Write a description..."
+      ></textarea>
+    </div>
+  `,
+})
+export class TextareaComponent {
+  @Input() label!: string;
+  @Input() placeholder: string = '';
+  @Input() value!: string;
+}
diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json
index 485fa33d9e73493edfbf2a27dcdea991191ad1f8..b8645da774def8753885d8a14cfd87a1e8f887eb 100644
--- a/alfa-client/tsconfig.base.json
+++ b/alfa-client/tsconfig.base.json
@@ -53,9 +53,9 @@
       "@alfa-client/vorgang-shared-ui": ["libs/vorgang-shared-ui/src/index.ts"],
       "@alfa-client/wiedervorlage": ["libs/wiedervorlage/src/index.ts"],
       "@alfa-client/wiedervorlage-shared": ["libs/wiedervorlage-shared/src/index.ts"],
-      "authentication": ["libs/authentication/src/index.ts"],
       "@ods/component": ["libs/design-component/src/index.ts"],
-      "@ods/system": ["libs/design-system/src/index.ts"]
+      "@ods/system": ["libs/design-system/src/index.ts"],
+      "authentication": ["libs/authentication/src/index.ts"]
     }
   },
   "exclude": ["node_modules", "tmp"]