diff --git a/app/.prettierignore b/app/.prettierignore
new file mode 100644
index 0000000..a36da8f
--- /dev/null
+++ b/app/.prettierignore
@@ -0,0 +1 @@
+data/**/*.md
\ No newline at end of file
diff --git a/app/data/certifications/dwwm/at1/cp1/page.md b/app/data/certifications/dwwm/at1/cp1/page.md
index 6861f52..ad8994d 100644
--- a/app/data/certifications/dwwm/at1/cp1/page.md
+++ b/app/data/certifications/dwwm/at1/cp1/page.md
@@ -1,7 +1,7 @@
---
-title: DWWM CP 1 - Installer et configurer son environnement de travail en fonction du projet web ou web mobile
-description: Synthèse et explications des attentes relatives à la compétence professionnelle 1 du titre professionnel DWWM (01280m04).
-tags: [DWWM]
+title: CP 1 - Installer et configurer son environnement de travail en fonction du projet web ou web mobile
+description: Synthèse et explications des attentes relatives à la compétence professionnelle 1 du titre professionnel Développeur Web et Web Mobile (DWWM-01280m04).
+tags: [DWWM, Environnement de développement]
---
## 📚 Références
diff --git a/app/data/certifications/dwwm/at1/cp2/page.md b/app/data/certifications/dwwm/at1/cp2/page.md
index 5ece525..6ffa438 100644
--- a/app/data/certifications/dwwm/at1/cp2/page.md
+++ b/app/data/certifications/dwwm/at1/cp2/page.md
@@ -1,7 +1,7 @@
---
-title: DWWM CP 2 - Maquetter des interfaces utilisateur web ou web mobile
-description: Synthèse et explications des attentes relatives à la compétence professionnelle 2 du titre professionnel DWWM (01280m04).
-tags: [DWWM]
+title: CP 2 - Maquetter des interfaces utilisateur web ou web mobile
+description: Synthèse et explications des attentes relatives à la compétence professionnelle 2 du titre professionnel Développeur Web et Web Mobile (DWWM-01280m04).
+tags: [DWWM, Éco-conception, Accessibilité, SEO, Maquettage, UX, UI, Zoning, Wireframe, Prototypage, Design, Frontend]
---
## 📚 Références
diff --git a/app/data/certifications/dwwm/at1/cp3/page.md b/app/data/certifications/dwwm/at1/cp3/page.md
index d01a183..22705a1 100644
--- a/app/data/certifications/dwwm/at1/cp3/page.md
+++ b/app/data/certifications/dwwm/at1/cp3/page.md
@@ -1,7 +1,23 @@
---
-title: DWWM CP 3 - Réaliser des interfaces utilisateur statiques web ou web mobile
-description: Synthèse et explications des attentes relatives à la compétence professionnelle 3 du titre professionnel DWWM (01280m04).
-tags: [DWWM]
+title: CP 3 - Réaliser des interfaces utilisateur statiques web ou web mobile
+description: Synthèse et explications des attentes relatives à la compétence professionnelle 3 du titre professionnel Développeur Web et Web Mobile (DWWM-01280m04).
+tags:
+ [
+ DWWM,
+ Intégration,
+ Responsive,
+ HTML,
+ CSS,
+ Accessibilité,
+ Éco-conception,
+ UX,
+ UI,
+ SEO,
+ Déploiement,
+ Reverse Proxy,
+ Frontend,
+ Serveur Web,
+ ]
---
## 📚 Références
diff --git a/app/data/certifications/dwwm/at1/cp4/page.md b/app/data/certifications/dwwm/at1/cp4/page.md
index 4dde6e8..4d4d8a8 100644
--- a/app/data/certifications/dwwm/at1/cp4/page.md
+++ b/app/data/certifications/dwwm/at1/cp4/page.md
@@ -1,6 +1,6 @@
---
-title: DWWM CP 4 - Développer la partie dynamique des interfaces utilisateur web ou web mobile
-description: Synthèse et explications des attentes relatives à la compétence professionnelle 4 du titre professionnel DWWM (01280m04).
+title: CP 4 - Développer la partie dynamique des interfaces utilisateur web ou web mobile
+description: Synthèse et explications des attentes relatives à la compétence professionnelle 4 du titre professionnel Développeur Web et Web Mobile (DWWM-01280m04).
tags: [DWWM]
---
@@ -11,16 +11,172 @@ tags: [DWWM]
## 📋 En résumé
+Ça y est, on commence à parler développement pour de vrai maintenant ! On quitte doucement l'intégration pour maintenant rajouter de l'interactivité à nos interfaces utilisateur, ce qui veut dire "utilisation d'un langage script côté client", soit...
+
+{% iframe src="https://giphy.com/embed/SvFocn0wNMx0iv2rYz" width="480" height="480" className="mx-auto" /%}
+
+C'est le meilleur moment pour parler de nombreuses fonctionnalités implémentées sur ton application avec JavaScript, comme :
+
+- Les formulaires dynamiques _(ajout/suppression de champs, vérification des données, etc.)_
+- Les animations _(chargement d'un témoin de chargement, apparition/disparition d'éléments, etc.)_
+- Les interactions avec l'utilisateur _(drag and drop, ouverture de fenêtre modale, etc.)_
+- Les appels à des services web _(API REST, etc.)_
+
+{% callout type="note" title="Consommation d'API" %}
+Bien que j'ai mentionné le fait que faire des appels à des services web corresponde entièrement à cette CP, il est important de noter que la consommation d'API est une compétence à part entière, qui sera abordée dans la CP 7 qui correspond à la mise en place de services web et composants métier.
+
+Ne te focalise donc pas sur ce que fait l'API en arrière plan, concentre toi sur comment configurer tes requêtes et comment traiter les réponses obtenues !
+{% /callout %}
+
+{% callout type="question" title="Mon site est fait avec React/Angular/Vue.js, donc je valide automatiquement cette CP ?" %}
+Pas si vite ! 😏
+Effectivement, ton site répond _(en théorie)_ en tous points pour la compétence actuelle, mais il est important de montrer que tu sais comment fonctionne le JavaScript "vanilla" _(c'est-à-dire sans framework ou bibliothèque)_.
+
+Si tu as utilisé un framework, tu peux tout à fait montrer des extraits de code en JavaScript pur pour montrer que tu sais comment ça fonctionne "sous le capot" !
+
+Mais on ne va pas se le cacher, si tu as réussi à réaliser un projet avec un framework, c'est déjà un très bon point pour toi qui permet de démontrer que tu as de bonnes connaissances en JavaScript.
+Cependant il va potentiellement y avoir un défaut majeur sur ton projet : le référencement naturel _(SEO)_.
+{% /callout %}
+
## ➕ Informations complémentaires
+### 🌐 Référencement d'un site généré côté client
+
+Les sites web générés côté client _(**CSR**, ou "client-side rendering")_ ont un défaut majeur : ils ne sont pas très bien référencés par les moteurs de recherche.
+
+En effet, les moteurs de recherche ont du mal à lire le contenu d'un site généré côté client, car ils n'exécutent pas le JavaScript.
+C'est pour cela qu'il est recommandé de mettre en place un rendu côté serveur _(**SSR**, ou "server-side rendering")_ pour améliorer le référencement naturel de ton site.
+
+Si tu veux en savoir plus sur le sujet, tu peux consulter [cet article de Google](https://web.dev/articles/rendering-on-the-web?hl=fr#rendering-terminology).
+
+De mon côté, je recommande énormément de passer par le framework [Vike](https://vike.dev/) qui permet de générer des sites web ultra-rapides avec un rendu côté serveur et un rendu côté client, le tout en utilisant Vue.js, React ou _(presque)_ n'importe quel autre framework front-end JavaScript !
+
+Tu as aussi la possibilité d'utiliser [Next.js](https://nextjs.org/) pour React, [Nuxt.js](https://nuxtjs.org/) pour Vue.js ou [SvelteKit](https://kit.svelte.dev/) pour Svelte qui permettent de faire du rendu côté serveur.
+
+### 👴 jQuery
+
+Je me permets également de lâcher une bombe sur une certaine techno JS : **jQuery**.
+Bon sang, celui-là il me fait penser à un vieux pote qui a pris un coup de vieux... 😅
+
+{% callout type="question" title="jQuery, c'est quoi ?" %}
+jQuery est une bibliothèque JavaScript qui a été très populaire dans les années 2000 et 2010.
+Elle a été créée pour simplifier l'écriture de scripts JavaScript et pour faciliter la manipulation du DOM.
+
+jQuery a été très utilisée pour les animations, les requêtes AJAX, la manipulation du DOM, etc.
+Mais depuis l'arrivée des frameworks front-end comme React, Angular ou Vue.js, jQuery a perdu de sa superbe et est de moins en moins utilisée.
+
+Cependant, il est toujours bon de connaître jQuery, car il est possible que tu tombes sur un projet qui l'utilise encore, comme sur des templates Wordpress qui commencent à dater par exemple.
+{% /callout %}
+
+Mais alors, pourquoi je te parle de jQuery ?
+
+Eh bien.. pour faire simple, aujourd'hui jQuery est relativement obsolète et surtout très lourd pour ce que ça rajoute à un projet.
+Dans la mesure du possible, il est recommandé de ne pas utiliser jQuery pour un nouveau projet, et de préférer JavaScript "vanilla" ou un framework ou bibliothèque front-end comme React, Angular ou Vue.js _(attention, d'un point de vue éco-conception l'utilisation d'un framework n'est pas forcément la meilleure solution)_.
+
+{% callout type="question" title="Mais comment je vais faire pour mes consommations d'API, vu que j'utilisais `jQuery.ajax()` ?!" %}
+
+Tout doux, tout doux, il existe une solution ! 😎
+
+Si je te parle des requêtes XHR _(XMLHttpRequest)_ tu me dis... ?
+
+> Mais c'est vieux ça, c'est pas du tout à la mode !
+
+Et tu as raison, mais si maintenant je te dis qu'il y a une autre solution, native, plus moderne et plus performante, tu me dis... ?
+
+> Fetch !
+
+**Et sinon, pour faire simple :**
+
+Fetch est une API plus moderne et plus simple à utiliser que les requêtes XHR, et elle est supportée par tous les navigateurs modernes.
+Elle permet de faire des requêtes HTTP de manière asynchrone et de gérer les réponses de manière plus simple.
+
+{% tabs defaultSelectedTab="xhr" %}
+{% tab value="xhr" label="🥉 XHR" %}
+{% snippet path="js/xhr/xhr.js" language="js" showLineNumbers=true /%}
+{% /tab %}
+
+{% tab value="jquery" label="🥈 jQuery" %}
+{% snippet path="js/xhr/jquery-ajax.js" language="js" showLineNumbers=true /%}
+{% /tab %}
+
+{% tab value="fetch" label="🥇🏆 Fetch" %}
+{% snippet path="js/xhr/fetch.js" language="js" showLineNumbers=true /%}
+{% /tab %}
+{% /tabs %}
+
+Non seulement `fetch` est plus simple à utiliser et comprendre _(contrairement à XMLHttpRequest)_ mais elle est également plus légère que `jQuery.ajax()` puisqu'elle est native au navigateur ! Alors pourquoi s'en priver ? 😉
+
+{% /callout %}
+
## 🛠️ Ressources conseillées
_En cours de rédaction..._
## 🎯 Critères d'évaluation
+- L'interface utilisateur est conforme au dossier de conception
+- L'interface est dynamique et l'expérience utilisateur est améliorée, y compris pour les personnes en situation de handicap
+- Les recommandations de sécurité liées aux applications web et web mobile sont respectées
+- La règlementation en vigueur sont respectées, y compris celle relative à l'accessibilité
+- Le code est documenté, y compris en anglais _(niveau B1 CECRL pour l'anglais)_
+- Le jeu d'essai fonctionnel est complet et les tests unitaires sont réalisés pour les composants concernés
+- Les tests de sécurité sont réalisés
+
## 🤯 Aller plus loin
+Plus tôt, dans la CP 3, je t'ai parlé d'une astuce d'éco-conception pour différer le chargement des images avec l'attribut `loading="lazy"` sur les balises `
`. Mais on peut aller encore plus loin que simplement différer le chargement des images !
+
+On peut également différer le chargement des scripts JavaScript avec l'attribut defer sur les balises `