diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000000000000000000000000000000000000..44f6ca88858a96d618ac605bb8bfa598de9e98bb
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,2 @@
+cd todo-workspace/frontend
+pnpm run format
\ No newline at end of file
diff --git a/node_modules/.bin/husky b/node_modules/.bin/husky
new file mode 100755
index 0000000000000000000000000000000000000000..20fe3b377a42a1cbbb96d911389d85f48dd2917f
--- /dev/null
+++ b/node_modules/.bin/husky
@@ -0,0 +1,17 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -z "$NODE_PATH" ]; then
+  export NODE_PATH="/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/node_modules"
+else
+  export NODE_PATH="/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/node_modules:$NODE_PATH"
+fi
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../.pnpm/husky@9.1.7/node_modules/husky/bin.js" "$@"
+else
+  exec node  "$basedir/../.pnpm/husky@9.1.7/node_modules/husky/bin.js" "$@"
+fi
diff --git a/node_modules/.modules.yaml b/node_modules/.modules.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0497d246fa43eef9e8c200fc354c37a65731918c
--- /dev/null
+++ b/node_modules/.modules.yaml
@@ -0,0 +1,20 @@
+hoistPattern:
+  - '*'
+hoistedDependencies: {}
+included:
+  dependencies: true
+  devDependencies: true
+  optionalDependencies: true
+injectedDeps: {}
+layoutVersion: 5
+nodeLinker: isolated
+packageManager: pnpm@10.4.1
+pendingBuilds: []
+prunedAt: Fri, 21 Feb 2025 15:11:16 GMT
+publicHoistPattern: []
+registries:
+  default: https://registry.npmjs.org/
+skipped: []
+storeDir: /home/thib/.local/share/pnpm/store/v10
+virtualStoreDir: .pnpm
+virtualStoreDirMaxLength: 120
diff --git a/node_modules/.pnpm-workspace-state.json b/node_modules/.pnpm-workspace-state.json
new file mode 100644
index 0000000000000000000000000000000000000000..2cb4e164f5142ee46dee2a7fb7278934a886a046
--- /dev/null
+++ b/node_modules/.pnpm-workspace-state.json
@@ -0,0 +1,25 @@
+{
+  "lastValidatedTimestamp": 1740150676134,
+  "projects": {},
+  "pnpmfileExists": false,
+  "settings": {
+    "autoInstallPeers": true,
+    "dedupeDirectDeps": false,
+    "dedupeInjectedDeps": true,
+    "dedupePeerDependents": true,
+    "dev": true,
+    "excludeLinksFromLockfile": false,
+    "hoistPattern": [
+      "*"
+    ],
+    "hoistWorkspacePackages": true,
+    "injectWorkspacePackages": false,
+    "linkWorkspacePackages": false,
+    "nodeLinker": "isolated",
+    "optional": true,
+    "preferWorkspacePackages": false,
+    "production": true,
+    "publicHoistPattern": []
+  },
+  "filteredInstall": false
+}
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/LICENSE b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..049c9dc4e89fd8fbe1ca07d8ccbc0a8ce28f98b9
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 typicode
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/README.md b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..405cda7dab3dc59734133b6df48b3eff15fe6367
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/README.md
@@ -0,0 +1 @@
+https://typicode.github.io/husky
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/bin.js b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/bin.js
new file mode 100755
index 0000000000000000000000000000000000000000..244311baa08bcb859bc8f06333fed8e86260dca1
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/bin.js
@@ -0,0 +1,26 @@
+#!/usr/bin/env node
+import f, { writeFileSync as w } from 'fs'
+import i from './index.js'
+
+let p, a, n, s, o, d
+
+p = process
+a = p.argv[2]
+
+if (a == 'init') {
+	n = 'package.json'
+	s = f.readFileSync(n)
+	o = JSON.parse(s)
+	;(o.scripts ||= {}).prepare = 'husky'
+	w(n, JSON.stringify(o, 0, /\t/.test(s) ? '\t' : 2) + '\n')
+	p.stdout.write(i())
+	try { f.mkdirSync('.husky') } catch {}
+	w('.husky/pre-commit', (p.env.npm_config_user_agent?.split('/')[0] ?? 'npm') + ' test\n')
+	p.exit()
+}
+
+d = c => console.error(`husky - ${c} command is DEPRECATED`)
+if (['add', 'set', 'uninstall'].includes(a)) { d(a); p.exit(1) }
+if (a == 'install') d(a)
+
+p.stdout.write(i(a == 'install' ? undefined : a))
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/husky b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/husky
new file mode 100644
index 0000000000000000000000000000000000000000..bf7c8964081d7b5bf726888b67ad93b7586d022c
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/husky
@@ -0,0 +1,22 @@
+#!/usr/bin/env sh
+[ "$HUSKY" = "2" ] && set -x
+n=$(basename "$0")
+s=$(dirname "$(dirname "$0")")/$n
+
+[ ! -f "$s" ] && exit 0
+
+if [ -f "$HOME/.huskyrc" ]; then
+	echo "husky - '~/.huskyrc' is DEPRECATED, please move your code to ~/.config/husky/init.sh"
+fi
+i="${XDG_CONFIG_HOME:-$HOME/.config}/husky/init.sh"
+[ -f "$i" ] && . "$i"
+
+[ "${HUSKY-}" = "0" ] && exit 0
+
+export PATH="node_modules/.bin:$PATH"
+sh -e "$s" "$@"
+c=$?
+
+[ $c != 0 ] && echo "husky - $n script failed (code $c)"
+[ $c = 127 ] && echo "husky - command not found in PATH=$PATH"
+exit $c
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.d.ts b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..72a5495a823e1cee4843542ce1532f66546b01ac
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.d.ts
@@ -0,0 +1 @@
+export default function (dir?: string): string;
\ No newline at end of file
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.js b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bebf0d50dc52548ab0cb2d937fffdd0e3de0bd15
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/index.js
@@ -0,0 +1,25 @@
+import c from 'child_process'
+import f, { readdir, writeFileSync as w } from 'fs'
+import p from 'path'
+
+let l = [ 'pre-commit', 'pre-merge-commit', 'prepare-commit-msg', 'commit-msg', 'post-commit', 'applypatch-msg', 'pre-applypatch', 'post-applypatch', 'pre-rebase', 'post-rewrite', 'post-checkout', 'post-merge', 'pre-push', 'pre-auto-gc' ],
+	msg = `echo "husky - DEPRECATED\n\nPlease remove the following two lines from $0:\n\n#!/usr/bin/env sh\n. \\"\\$(dirname -- \\"\\$0\\")/_/husky.sh\\"\n\nThey WILL FAIL in v10.0.0\n"`
+
+export default (d = '.husky') => {
+	if (process.env.HUSKY === '0') return 'HUSKY=0 skip install'
+	if (d.includes('..')) return '.. not allowed'
+	if (!f.existsSync('.git')) return `.git can't be found`
+
+	let _ = (x = '') => p.join(d, '_', x)
+	let { status: s, stderr: e } = c.spawnSync('git', ['config', 'core.hooksPath', `${d}/_`])
+	if (s == null) return 'git command not found'
+	if (s) return '' + e
+
+	f.rmSync(_('husky.sh'), { force: true })
+	f.mkdirSync(_(), { recursive: true })
+	w(_('.gitignore'), '*')
+	f.copyFileSync(new URL('husky', import.meta.url), _('h'))
+	l.forEach(h => w(_(h), `#!/usr/bin/env sh\n. "\$(dirname "\$0")/h"`, { mode: 0o755 }))
+	w(_('husky.sh'), msg)
+	return ''
+}
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules/.bin/husky b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules/.bin/husky
new file mode 100755
index 0000000000000000000000000000000000000000..af271bc35432ca9934eb4bd4f3bb7ed8bc1fcfd8
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules/.bin/husky
@@ -0,0 +1,17 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -z "$NODE_PATH" ]; then
+  export NODE_PATH="/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/node_modules"
+else
+  export NODE_PATH="/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules/husky/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/husky@9.1.7/node_modules:/home/thib/hepia/capt-24-25/node_modules/.pnpm/node_modules:$NODE_PATH"
+fi
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../../bin.js" "$@"
+else
+  exec node  "$basedir/../../bin.js" "$@"
+fi
diff --git a/node_modules/.pnpm/husky@9.1.7/node_modules/husky/package.json b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b9d3810bd03383dc259d7dcc2443c49d3ac2efe9
--- /dev/null
+++ b/node_modules/.pnpm/husky@9.1.7/node_modules/husky/package.json
@@ -0,0 +1,25 @@
+{
+	"name": "husky",
+	"version": "9.1.7",
+	"type": "module",
+	"description": "Modern native Git hooks",
+	"keywords": [
+		"git",
+		"hooks",
+		"pre-commit"
+	],
+	"repository": {
+		"type": "git",
+		"url": "git+https://github.com/typicode/husky.git"
+	},
+	"funding": "https://github.com/sponsors/typicode",
+	"license": "MIT",
+	"author": "typicode",
+	"bin": {
+		"husky": "bin.js"
+	},
+	"exports": "./index.js",
+	"engines": {
+		"node": ">=18"
+	}
+}
diff --git a/node_modules/.pnpm/lock.yaml b/node_modules/.pnpm/lock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a177305d1ac48459ba1ec8d80c1c7b6647dfaa7b
--- /dev/null
+++ b/node_modules/.pnpm/lock.yaml
@@ -0,0 +1,24 @@
+lockfileVersion: '9.0'
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
+importers:
+
+  .:
+    devDependencies:
+      husky:
+        specifier: ^9.1.7
+        version: 9.1.7
+
+packages:
+
+  husky@9.1.7:
+    resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
+    engines: {node: '>=18'}
+    hasBin: true
+
+snapshots:
+
+  husky@9.1.7: {}
diff --git a/node_modules/husky b/node_modules/husky
new file mode 120000
index 0000000000000000000000000000000000000000..69c483c52d44c587ec333d83bb661c51bcdfc4ce
--- /dev/null
+++ b/node_modules/husky
@@ -0,0 +1 @@
+.pnpm/husky@9.1.7/node_modules/husky
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9a87dc3207b4ed7967d125fd85bd697918cd7ca1
--- /dev/null
+++ b/package.json
@@ -0,0 +1,8 @@
+{
+	"devDependencies": {
+		"husky": "^9.1.7"
+	},
+	"scripts": {
+		"prepare": "husky"
+	}
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a177305d1ac48459ba1ec8d80c1c7b6647dfaa7b
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,24 @@
+lockfileVersion: '9.0'
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
+importers:
+
+  .:
+    devDependencies:
+      husky:
+        specifier: ^9.1.7
+        version: 9.1.7
+
+packages:
+
+  husky@9.1.7:
+    resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
+    engines: {node: '>=18'}
+    hasBin: true
+
+snapshots:
+
+  husky@9.1.7: {}
diff --git a/todo-workspace/frontend/src/app/core/models/builder/todo.builder.ts b/todo-workspace/frontend/src/app/core/models/builder/todo.builder.ts
index 2a7a6e1cf0c122a3a7402396ddae29951a105285..7bc86fabc7c9ec0e43c933aee35f9b6fce3bfe7e 100644
--- a/todo-workspace/frontend/src/app/core/models/builder/todo.builder.ts
+++ b/todo-workspace/frontend/src/app/core/models/builder/todo.builder.ts
@@ -1,3 +1,4 @@
+
 import { Todo } from '@core/models/todo';
 
 export class TodoBuilder {