diff --git a/todo-workspace/frontend/src/app/app.component.html b/todo-workspace/frontend/src/app/app.component.html
index c272e07014fcdff25bf420099352dd85044f08d2..98f3b93574fc62d8a788d6e416ab2183ce184f6d 100644
--- a/todo-workspace/frontend/src/app/app.component.html
+++ b/todo-workspace/frontend/src/app/app.component.html
@@ -1 +1 @@
-<h1 class="text-3xl font-bold underline">Hello world!</h1>
+<app-todo-list />
\ No newline at end of file
diff --git a/todo-workspace/frontend/src/app/app.component.ts b/todo-workspace/frontend/src/app/app.component.ts
index e603cb48da5c2063d7b10797984f8d2069c6b38f..1c3a4866e83aff7f1f91f4997ea2ae9e804b3098 100644
--- a/todo-workspace/frontend/src/app/app.component.ts
+++ b/todo-workspace/frontend/src/app/app.component.ts
@@ -1,8 +1,11 @@
 import { Component } from '@angular/core';
+import {TodoListComponent} from "@features/todo-list/todo-list.component";
 
 @Component({
   selector: 'app-root',
-  imports: [],
+  imports: [
+    TodoListComponent
+  ],
   templateUrl: './app.component.html',
   styleUrl: './app.component.scss',
 })
diff --git a/todo-workspace/frontend/src/app/app.config.ts b/todo-workspace/frontend/src/app/app.config.ts
index 62aa0aecefb27a1bcb35a84e688e3a11465ea50b..0a0318a55cd34ad9dca24dea58448aac1ea4ae00 100644
--- a/todo-workspace/frontend/src/app/app.config.ts
+++ b/todo-workspace/frontend/src/app/app.config.ts
@@ -1,9 +1,24 @@
-import {ApplicationConfig, provideZoneChangeDetection} from '@angular/core';
-import {provideRouter} from '@angular/router';
+import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import { provideRouter } from '@angular/router';
 
-import {routes} from './app.routes';
-import {provideHttpClient} from "@angular/common/http";
+import { routes } from './app.routes';
+import { provideHttpClient } from '@angular/common/http';
+import { TodoService } from '@core/ports/todo.service';
+import { InMemoryTodoService } from '@core/adapters/in-memory-todo.service';
 
 export const appConfig: ApplicationConfig = {
-  providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideHttpClient()],
+  providers: [
+    provideZoneChangeDetection({ eventCoalescing: true }),
+    provideRouter(routes),
+    provideHttpClient(),
+    {
+      provide: TodoService,
+      useFactory: () =>
+        new InMemoryTodoService().withTodos([
+          { id: 1, title: 'Apprendre Angular 19', completed: false },
+          { id: 1, title: 'Apprendre Java Spring Boot', completed: false },
+          { id: 1, title: 'Apprendre PostgreSQL', completed: false },
+        ]),
+    },
+  ],
 };
diff --git a/todo-workspace/frontend/src/app/core/adapters/in-memory-todo.service.ts b/todo-workspace/frontend/src/app/core/adapters/in-memory-todo.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7152499bba9e4f5e9365e4ab97cce2da5b12f822
--- /dev/null
+++ b/todo-workspace/frontend/src/app/core/adapters/in-memory-todo.service.ts
@@ -0,0 +1,16 @@
+import { of } from 'rxjs';
+import { TodoService } from '@core/ports/todo.service';
+import { Todos } from '@core/models/todo';
+
+export class InMemoryTodoService extends TodoService {
+  private todos: Todos = [];
+
+  withTodos(todos: Todos): this {
+    this.todos = todos;
+    return this;
+  }
+
+  getAll() {
+    return of(this.todos);
+  }
+}
diff --git a/todo-workspace/frontend/src/app/core/models/todo.ts b/todo-workspace/frontend/src/app/core/models/todo.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c36bcc50f395a1d0293d2cb28570bddbfa21a20b
--- /dev/null
+++ b/todo-workspace/frontend/src/app/core/models/todo.ts
@@ -0,0 +1,7 @@
+export interface Todo {
+  id: number;
+  title: string;
+  completed: boolean;
+}
+
+export type Todos = Todo[];
diff --git a/todo-workspace/frontend/src/app/core/ports/todo.service.ts b/todo-workspace/frontend/src/app/core/ports/todo.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..81c4c8dc2e2c35f84d15e4b65c5d0809ca737127
--- /dev/null
+++ b/todo-workspace/frontend/src/app/core/ports/todo.service.ts
@@ -0,0 +1,6 @@
+import { Observable } from 'rxjs';
+import { Todos } from '@core/models/todo';
+
+export abstract class TodoService {
+  abstract getAll(): Observable<Todos>;
+}
diff --git a/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.html b/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..6e1f28e166be814cf89f0c37f16cab1588227487
--- /dev/null
+++ b/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.html
@@ -0,0 +1,34 @@
+<div class="flex items-center justify-center min-h-screen bg-gray-100">
+  <div class="w-full max-w-md bg-white p-6 rounded-lg shadow-lg">
+    <h1 class="text-center text-3xl font-bold mb-4">Check-list</h1>
+    <!-- Input et bouton -->
+    <div class="flex space-x-2">
+      <input class="input input-bordered w-full" placeholder="Ex : Tourner une vidéo sur Angular" type="text" />
+      <button class="btn btn-neutral">Ajouter</button>
+    </div>
+
+    <!-- Texte centré -->
+    <div class="flex-grow flex items-center justify-center py-5">
+      @if (todos()?.length == 0) {
+        <p class="text-gray-600 text-lg">Ajoute ta première tâche 👆</p>
+      } @else {
+        <ul class="list bg-base-100 rounded-box shadow-md">
+          <li class="list-row">
+            <div class="text-4xl font-thin opacity-30 tabular-nums">01</div>
+            <div class="list-col-grow">
+              <div>Dio Lupa</div>
+              <div class="text-xs uppercase font-semibold opacity-60">Remaining Reason</div>
+            </div>
+            <button class="btn btn-square btn-ghost">
+              <svg class="size-[1.2em]" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+                <g stroke-linejoin="round" stroke-linecap="round" stroke-width="2" fill="none" stroke="currentColor">
+                  <path d="M6 3L20 12 6 21 6 3z"></path>
+                </g>
+              </svg>
+            </button>
+          </li>
+        </ul>
+      }
+    </div>
+  </div>
+</div>
diff --git a/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.scss b/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.ts b/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c2d6f19b8637a8e56a836ff5149a463ab207b80
--- /dev/null
+++ b/todo-workspace/frontend/src/app/features/todo-list/todo-list.component.ts
@@ -0,0 +1,14 @@
+import { Component, inject } from '@angular/core';
+import { TodoService } from '@core/ports/todo.service';
+import { toSignal } from '@angular/core/rxjs-interop';
+
+@Component({
+  selector: 'app-todo-list',
+  imports: [],
+  templateUrl: './todo-list.component.html',
+  styleUrl: './todo-list.component.scss',
+})
+export class TodoListComponent {
+  private readonly todoService = inject(TodoService);
+  todos = toSignal(this.todoService.getAll());
+}