diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f498cbc681a89874f4790f3f342cdaf038925960..0c4d4a71f0b0c0e2a8aa30e97e8c3d00b3d59a9f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,6 +71,13 @@ build:book:
     - mdbook test
     - mdbook build
   
+build:exercises:
+  stage: build
+  script:
+    - cd exercises
+    - mdbook test
+    - mdbook build
+  
 build:slides:
   stage: build
   script:
@@ -87,6 +94,16 @@ deploy:book:
     - mdbook build
     - rsync -avz book/html/* ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/rust-101/book/
 
+deploy:exercises:
+  stage: deploy
+  only:
+    - main
+    - merge_request
+  script:
+    - cd exercises
+    - mdbook build
+    - rsync -avz book/html/* ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/rust-101/exercises/
+
 deploy:slides:
   stage: deploy
   only:
diff --git a/exercises/book.toml b/exercises/book.toml
new file mode 100644
index 0000000000000000000000000000000000000000..864668ee2c9167b2b7fe257c3c1e03d3890be390
--- /dev/null
+++ b/exercises/book.toml
@@ -0,0 +1,29 @@
+[book]
+authors = ["Orestis Malaspinas, Michaël El Kharroubi"]
+language = "fr"
+multilingual = false
+src = "src"
+title = "Rust-101: Université d'automne"
+
+[output.html]
+mathjax-support = true
+
+[output.html.playground]
+editable = true
+
+[output.html.print]
+enable = true
+
+[output.pdf]
+
+[output.linkcheck]
+# Should we check links on the internet? Enabling this option adds a
+# non-negligible performance impact
+follow-web-links = false
+# How should warnings be treated?
+#
+# - "warn" will emit warning messages
+# - "error" treats all warnings as errors, failing the linkcheck
+# - "ignore" will ignore warnings, suppressing diagnostic messages and allowing
+#   the linkcheck to continuing
+warning-policy = "warn"
diff --git a/exercises/src/SUMMARY.md b/exercises/src/SUMMARY.md
new file mode 100644
index 0000000000000000000000000000000000000000..4df173f425927aaefdc9fd3588a29b95bbe0b37b
--- /dev/null
+++ b/exercises/src/SUMMARY.md
@@ -0,0 +1,19 @@
+# Résumé des exercices
+
+- [Exercices introductuifs](exercices_intro.md)
+- [Exercices avancés](exercices_avances.md)
+
+<!-- - [Les bases du Rust 1](./bases1.md) -->
+<!-- - [Les bases du Rust 2](./bases2.md) -->
+<!-- - [Les types avancés](./types_avances.md) -->
+<!-- - [La généricité et des types composés](./gen_types_composes.md) -->
+<!-- - [La propriété](./propriete.md) -->
+<!-- - [Modules et visibilité](./modules_visibilite.md) -->
+<!-- - [Les petits trucs sympas qui aident au développement](./tooling.md) -->
+<!-- - [La gestion des erreurs en Rust](./gestion_erreurs.md) -->
+<!-- - [Les closures](./closures.md) -->
+<!-- - [Les itérateurs](./iterateurs.md) -->
+<!-- - [Les collections](./collections.md) -->
+<!-- - [Lifetimes](./lifetimes.md) -->
+<!-- - [CLI](./cli.md) -->
+<!-- - [Unsafe](./unsafe.md) -->
diff --git a/exercises/src/exercices_avances.md b/exercises/src/exercices_avances.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd844fb1a878005e0426f1475d03685ae43d7756
--- /dev/null
+++ b/exercises/src/exercices_avances.md
@@ -0,0 +1,30 @@
+# Exercices avancés
+
+Les exercices que nous proposons ici sont très vagues. L'objectif est de vous donner des thèmes,
+de choses que vous connaissez du cours de programmation et d'algorithmique de l'année passée
+et de les implémenter un peu comme vous voulez sans contraintes particulières pour
+que vous expérimentiez avec le langage (oui vous êtes des grand·e·s maintenant).
+
+Essayez au maximum d'utiliser les concepts de Rust vus en classe.
+
+Vous trouverez une liste ci-dessous, avec un degré de difficulté croissant (plus ou moins).
+L'idée est d'avancer à votre rythme (ce qui n'est pas équivalent à regarder le plafond
+en attendant que ça passe) et vous donner des idées d'exercices devenant plus complexes
+au fur et à mesure de votre périple.
+
+- Le nombre secret: implémenter le jeu du nombre secret qui serait joué par des IAs utilisant des stratégies différentes.
+- Calculer pi: avec la méthode des fléchettes.
+- Une pile simple: implémenter une pile utilisant un tableau statique comme structure de données.
+- Un tri: un tri à bulles, tri à deux piles et/ou un quicksort ça fait l'affaire.
+- Couverture de la reine: écrire un code qui permet de trouver pour une position de départ aléatoire toutes les solutions de couverture de la reine pour un tableau 8x8.
+- Les fractions: écrire une librairie de fractions en utilisant les trait `Add`, `Sub`, etc.
+- Les vecteurs: écrire une librairie de vecteurs en utilisant les trait `Add`, `Sub`, etc.
+- Le jeu du pendu: implémenter le jeu du pendu où les mots sont des chaînes de caractères aléatoires et les lettres tirées sont également tirées au hasard.
+- Compter différemment: écrire un programme qui permet de compter comme au tennis où chaque joueur gagne un point avec une probabilité donnée.
+- Le puissance 4: simulez le jeu du puissance 4.
+- Le jeu de la bataille: simulez le jeu de carte de la bataille entre deux machines.
+
+## Aller plus haut
+
+- Ascii art: écrire un convertisseur d'image en ASCII art.
+- Simulation du système solaire: écrire un simulateur de système solaire.
diff --git a/exercises/exercices.md b/exercises/src/exercices_intro.md
similarity index 56%
rename from exercises/exercices.md
rename to exercises/src/exercices_intro.md
index 1f8b4159dc4abb864ac5c51a1140f85992d5a7bd..a7ce96c7b9dcc013fb655c2ed112c5e0b5e0c402 100644
--- a/exercises/exercices.md
+++ b/exercises/src/exercices_intro.md
@@ -20,10 +20,10 @@ Un nombre Armstrong est un nombre qui est la somme de ses propres chiffres, chac
 
 Par exemple, un nombre d'Armstrong est un nombre qui est la somme de ses propres chiffres :
 
-* $9$ est un nombre d'Armstrong, car $9 = 9^1 = 9$,
-* $10$ n'est pas un nombre Armstrong, car $10 \neq 1^2 + 0^2 = 1$,
-* $153$ est un nombre Armstrong, car : $153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153$,
-* $154$ n'est pas un nombre d'Armstrong, car : $154 \neq 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190$
+* \\(9\\) est un nombre d'Armstrong, car \\(9 = 9^1 = 9\\),
+* \\(10\\) n'est pas un nombre Armstrong, car \\(10 \neq 1^2 + 0^2 = 1\\),
+* \\(153\\) est un nombre Armstrong, car : \\(153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153\\),
+* \\(154\\) n'est pas un nombre d'Armstrong, car : \\(154 \neq 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190\\)
 
 Écrivez un programme qui détermine si un nombre est un nombre d'Armstrong.
 
@@ -100,33 +100,3 @@ Quels sont les facteurs premiers de 60 ?
 Nos diviseurs réussis dans ce calcul représentent la liste des facteurs premiers de 60 : 2, 2, 3 et 5.
 Si cela vous amuse vous pouvez vérifier qu'ils sont bien premiers en utilisant l'exercice précédent.
 
-# Exercices avancés
-
-Les exercices que nous proposons ici sont très vagues. L'objectif est de vous donner des thèmes,
-de choses que vous connaissez du cours de programmation et d'algorithmique de l'année passée
-et de les implémenter un peu comme vous voulez sans contraintes particulières pour
-que vous expérimentiez avec le langage (oui vous êtes des grand·e·s maintenant).
-
-Essayez au maximum d'utiliser les concepts de Rust vus en classe.
-
-Vous trouverez une liste ci-dessous, avec un degré de difficulté croissant (plus ou moins).
-L'idée est d'avancer à votre rythme (ce qui n'est pas équivalent à regarder le plafond
-en attendant que ça passe) et vous donner des idées d'exercices devenant plus complexes
-au fur et à mesure de votre périple.
-
-- Le nombre secret: implémenter le jeu du nombre secret qui serait joué par des IAs utilisant des stratégies différentes.
-- Calculer pi: avec la méthode des fléchettes.
-- Une pile simple: implémenter une pile utilisant un tableau statique comme structure de données.
-- Un tri: un tri à bulles, tri à deux piles et/ou un quicksort ça fait l'affaire.
-- Couverture de la reine: écrire un code qui permet de trouver pour une position de départ aléatoire toutes les solutions de couverture de la reine pour un tableau 8x8.
-- Les fractions: écrire une librairie de fractions en utilisant les trait `Add`, `Sub`, etc.
-- Les vecteurs: écrire une librairie de vecteurs en utilisant les trait `Add`, `Sub`, etc.
-- Le jeu du pendu: implémenter le jeu du pendu où les mots sont des chaînes de caractères aléatoires et les lettres tirées sont également tirées au hasard.
-- Compter différemment: écrire un programme qui permet de compter comme au tennis où chaque joueur gagne un point avec une probabilité donnée.
-- Le puissance 4: simulez le jeu du puissance 4.
-- Le jeu de la bataille: simulez le jeu de carte de la bataille entre deux machines.
-
-## Aller plus haut
-
-- Ascii art: écrire un convertisseur d'image en ASCII art.
-- Simulation du système solaire: écrire un simulateur de système solaire.