sysdm.cpl
in the Run dialog (screenshot)
+
` anstelle von `<0>0>` sehen kannst.
+
+## Lehrplan übersetzen
+
+
+
+Crowdin trennt ein Dokument in übersetzbare "Strings", normalerweise Sätze. Jeder String wird einzeln übersetzt. Siehe Bild oben:
+
+1. Eine grün hervorgehobene Zeichenfolge hat bereits eine vorgeschlagene Übersetzung.
+2. Eine rot markierte Zeichenfolge hat _keine_ vorgeschlagene Übersetzung.
+3. Ein String mit ausgegrautem Text kann nicht übersetzt werden. Dies ist der Fall bei Codeblöcken und anderen Inhalten, die nicht übersetzt werden dürfen. Du wirst diese Zeichenfolgen im Editor nicht auswählen können.
+4. Wenn ein Mitwirkender eine Übersetzung für einen String vorgeschlagen hat, zeigt Crowdin den Vorschlag hier an. Du kannst eine identische Übersetzung nicht speichern - stattdessen solltest du, wenn eine Übersetzung korrekt ist, auf das `+` Symbol klicken, um sie "hochzuvoten". Eine ungenaue Übersetzung kann mit dem `-` Icon "heruntergevoted" werden.
+5. Crowdin empfiehlt Übersetzungen, die auf Translation Memory (TM) oder Machine Translation (MT) basieren. Translation Memory bezieht sich auf ähnliche oder identische Strings, die wir in anderen Dateien übersetzt/freigegeben haben. Machine Translation bezieht sich auf Übersetzungen, die von der in Crowdin integrierten Bibliothek empfohlen werden.
+6. Dies ist der Editorbereich, in dem du deinen Übersetzungsvorschlag für den ausgewählten String schreiben kannst.
+7. Der aktuell im Editor ausgewählte String wird gelb hervorgehoben.
+8. Hier siehst du Tags, die den Zustand des Strings anzeigen. `Done` bedeutet, dass der String mindestens eine vorgeschlagene Übersetzung hat. `Todo` bedeutet, dass der String keine Übersetzungsvorschläge hat.
+9. Hier siehst du das Fenster für die Kommentare. Wenn du Fragen oder Bedenken zu einem bestimmten String hast, kannst du hier einen Kommentar zu dem String hinterlassen, den andere Übersetzer sehen können.
+10. Diese beiden Buttons blenden die linke (Dokument-) und rechte (Kommentar-) Ansicht aus.
+
+> [!NOTE] Wenn du einen versteckten String siehst, die Übersetzungen enthält, teile uns dies bitte im [Discord](https://discord.gg/PRyKn3Vbay) mit, damit wir die Übersetzung aus dem Speicher entfernen können.
+
+Wenn du eine Übersetzung für einen String fertiggestellt hast, wähle den `Save` Button, um deine Übersetzung auf Crowdin zu speichern. Andere Mitwirkende können dann über deine Übersetzung abstimmen und Korrekturleser können sie genehmigen.
+
+Du kannst so viele Strings übersetzen, wie du möchtest - es sind keine zusätzlichen Schritte erforderlich, wenn du eine vollständige Datei fertigstellst oder eine neue Übersetzung vorschlägst. Ein Klick auf den `Save` Button ist alles, was nötig ist, um eine Übersetzung zu speichern.
+
+> [!NOTE] Wenn du in der englischen Quelldatei etwas siehst, das ungenau oder falsch ist, korrigiere es bitte nicht im Rahmen des Übersetzungsprozesses. Hinterlasse stattdessen einen Kommentar zu dem String, um uns auf die Unstimmigkeit hinzuweisen, oder erstelle ein Issue auf GitHub.
+
+## Die Lernoberfläche übersetzen
+
+Unsere `/learn`-Oberfläche basiert auf JSON-Dateien, die in ein i18n-Plugin geladen werden, um übersetzten Text zu erzeugen. Diese Übersetzungsarbeit verteilt sich sowohl auf Crowdin als auch auf GitHub.
+
+### Auf GitHub
+
+Die Dateien `links.json`, `meta-tags.json`, `motivation.json` und `trending.json` enthalten Informationen, die an deine Sprache angepasst werden müssen. Wir können diese jedoch nicht in Crowdin laden, da der Inhalt nicht eins zu eins übersetzt werden kann.
+
+Diese Dateien werden höchstwahrscheinlich von deinem Sprachverantwortlichen (Language Lead) gepflegt, aber du kannst gerne [nachlesen, wie du sie übersetzen kannst](language-lead-handbook).
+
+### Auf Crowdin
+
+:::danger
+Bearbeite die folgenden Dateien nicht über einen GitHub-PR.
+:::
+
+Die Dateien `intro.json` und `translations.json` werden beide auf Crowdin im Projekt "Learn User Interface" übersetzt. Diese zu übersetzen kann etwas knifflig sein, da jeder einzelne JSON-Wert als eigener String erscheint und manchmal der Kontext fehlt.
+
+Die `Context`-Informationen, die Crowdin bereitstellt, können jedoch dabei helfen zu verstehen, wo der String in die größere Struktur eingebunden ist.
+
+
+
+Wenn du Fragen dazu hast, wo der zu übersetzende String verwendet wird, frage bitte im [contributor chat](https://discord.gg/PRyKn3Vbay) nach.
+
+## Dokumentation übersetzen
+
+Die Übersetzung der Dokumentation für die Mitarbeit ist ein ähnlicher Prozess wie die Übersetzung der Lehrplandateien.
+
+> [!NOTE] Unsere Dokumentation wird von `docsify` unterstützt, und wir haben ein spezielles Parsing für Nachrichtenboxen wie diese hier. Wenn du Strings siehst, die mit `[!NOTE]`, `[!WARNING]` oder `[!TIP]` beginnen, solltest du diese Wörter NICHT übersetzen.
+
+### How to Translate Documentation with Internal Links
+
+Wenn du an der Übersetzung der Dokumentation arbeitest, achte auf interne Links, die auf einen anderen Teil der Dokumentation verweisen.
+
+Achte darauf, dass du die ID des Zielabschnitts (der Teil nach `#`) durch die ID des übersetzten Dokuments ersetzt. Auf Japanisch sieht es zum Beispiel so aus:
+
+Vor der Übersetzung
+
+```
+// in HTML
+Link text
+Link text
+
+// in Markdown
+[Link text](target-file-name#target-section-heading-id)
+[Link text](#target-section-heading-id)
+```
+
+Nach der Übersetzung
+
+```
+// in HTML
+翻訳後のリンクテキスト
+翻訳後のリンクテキスト
+
+// in Markdown
+[翻訳後のリンクテキスト]($1#$2)
+[翻訳後のリンクテキスト](#翻訳後の-id)
+```
+
+Die eigentlichen Dateien in der Dokumentation sind in Markdown geschrieben, aber sie erscheinen als HTML-Tags auf Crowdin.
+
+Du kannst herausfinden, wie `docsify` einen String in deiner Sprache in eine ID umwandelt, indem du dir die übersetzten Seiten ansiehst. Wenn die Übersetzung noch nicht bereitgestellt wurde, kannst du dir eine Vorschau anzeigen lassen, indem du [die Dokumentseite lokal aufrufst](how-to-work-on-the-docs-theme.md#Lokale Bereitstellung der Dokumentationsseite).
+
+Du kannst [ hier ](how-to-work-on-the-docs-theme.md#Wie man einen internen Link erstellt) mehr über interne Links in unserer Dokumentation erfahren.
+
+## Übersetze das LearnToCode RPG
+
+Das LearnToCode RPG läuft auf Ren'Py, das eine spezielle Syntax für übersetzte Strings verwendet: (Siehe [Ren'Py Text Dokumentation](https://www.renpy.org/doc/html/text.html))
+
+- Die zu übersetzenden Sätze stehen immer zwischen `""`. Dies sind Dialoge oder Strings der Benutzeroberfläche. Die Schlüsselwörter, die vor oder nach dem Dialog stehen, sind Schlüsselwörter zur Steuerung der Spiel-Engine und werden in den nachfolgenden Regeln genauer erklärt. Beachte, dass diese erste Regel für alle nachfolgenden Regeln gilt.
+- Im Falle von `new "..."` übersetze nicht das Schlüsselwort `new`.
+- Präfixe wie `player`, `annika`, `layla`, `marco` (oder Varianten wie `player happy`, `player @ happy`) sollten nicht übersetzt werden. Dies sind Steuerschlüsselwörter, um das Charakter-Sprite im Spiel korrekt anzuzeigen.
+- Postfixe wie `nointeract` sollten nicht übersetzt werden.
+- Übersetze keine Dinge zwischen `[]` und `{}`. Dies sind variable Interpolationen und Text-Tags. Diese müssen in halber Breite Klammern `[]` und `{}` bleiben, anstatt ihrer Gegenstücke in voller Breite `【】` und `「」`
+- Das Schlüsselwort `nointeract` am Ende des Satzes darf nicht übersetzt werden.
+- Wenn wir versuchen, Klammern in voller Breite `()` zu verwenden, wird eine QA-Warnung angezeigt. Um die QA-Warnung zu vermeiden, verwende Klammern mit halber Breite `()`
+
+### Beispiele
+
+---
+
+#### Vor der Übersetzung
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- Dies ist die Zeile, die übersetzt werden muss. Siehe Übersetzung unten
+```
+
+#### Nach der Übersetzung
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]? Was für ein Zufall! Unser VIP-Teammitglied, {a=[vip_profile_url]}[player_name]{/a} wird sich geehrt fühlen, davon zu hören."
+```
+
+Hinweis: Die Tags `[]` und `{}` sollten intakt bleiben.
+
+---
+
+#### Vor der Übersetzung
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} Skip" <-- übersetze diese Zeile, siehe unten
+```
+
+#### Nach der Übersetzung
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} Überspringen"
+```
+
+Hinweis: Auch hier sollten das Präfix `new` und der Tag `{icon=icon-fast-forward}` intakt bleiben.
+
+---
+
+#### Vor der Übersetzung
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+```
+
+#### Nach der Übersetzung
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "Ha ha, [player_name],Du bist so witzig. Ich bin sicher, dass dir die Arbeit als Entwickler Spaß machen wird."
+```
+
+Hinweis: `layla @ neutral` und `[player_name]` bleiben unverändert.
+
+---
+
+#### Vor der Übersetzung
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "Maybe this is all a dream?" nointeract
+```
+
+#### Nach der Übersetzung
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "Vielleicht ist das alles nur ein Traum?" nointeract
+```
+
+---
+
+### Ein Hinweis dazu, wie Crowdin einen Satz unterteilt
+
+Achte darauf, wie Crowdin eine Dialogzeile zwischen öffnenden und schließenden Anführungszeichen `""` unterteilt. Bei der Übersetzung des Dialogs müssen wir darauf achten, dass die einleitenden und abschließenden Anführungszeichen beibehalten werden, auch wenn die Anführungszeichen in verschiedenen Abschnitten vorkommen.
+
+Dies ist die zu übersetzende Zeile:
+
+```renpy
+player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
+```
+
+Crowdin unterteilt es in drei Teile wie unten dargestellt:
+
+`-Tags geändert und Crowdin hat dies erkannt.
+
+> [!WARNING] Du hast die Möglichkeit, eine Übersetzung trotz Fehlern zu speichern. Wenn du dies tust, indem du auf "Save Anyway" klickst, solltest du auch einen Korrekturleser oder Projektmanager markieren und erklären, warum die QS-Meldung in diesem Fall ignoriert werden muss.
+
+## Bewährte Praktiken bei der Übersetzung
+
+Befolge diese Richtlinien, um sicherzustellen, dass unsere Übersetzungen so genau wie möglich sind:
+
+- Übersetze nicht den Inhalt innerhalb der ``-Tags. Diese Tags kennzeichnen Text, der im Code vorkommt und in Englisch belassen werden sollte.
+- Füge keine zusätzlichen Inhalte hinzu. Wenn du der Meinung bist, dass eine Aufgabe Änderungen am Textinhalt oder zusätzliche Informationen erfordert, solltest du die Änderungen in einem Issue auf GitHub oder in einem Pull Request vorschlagen, der die englische Datei ändert.
+- Ändere nicht die Reihenfolge des Inhalts.
+
+Wenn du Fragen hast, kannst du uns gerne in unserem [Discord](https://discord.gg/PRyKn3Vbay) ansprechen und wir helfen dir gerne weiter.
diff --git a/src/content/docs/de/how-to-use-docker-on-windows-home.md b/src/content/docs/de/how-to-use-docker-on-windows-home.md
new file mode 100644
index 00000000..86f553f7
--- /dev/null
+++ b/src/content/docs/de/how-to-use-docker-on-windows-home.md
@@ -0,0 +1,17 @@
+---
+title: So verwendest du Docker unter Windows Home
+---
+
+Bei der Einrichtung von Docker unter Windows Home gibt es einige Fallstricke, die du vermeiden solltest. Als erstes musst du die [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) als Administrator verwenden. Leider unterstützt Windows Home kein Docker für Windows Desktop, sodass stattdessen Toolbox verwendet werden muss. Es muss als Administrator ausgeführt werden, da die Installation Symlinks verwendet, die sonst nicht erstellt werden können.
+
+Sobald du die Toolbox installiert hast, führe das Docker Quickstart Terminal als Administrator aus. Damit wird eine `default` virtuelle Maschine erstellt, wenn sie noch nicht existiert. Wenn das geschehen ist, schließe das Terminal und öffne VirtualBox (wieder als Administrator). Du solltest die `default` Maschine sehen können. Die Website ist ziemlich ressourcenintensiv, also halte die virtuelle Maschine an und erhöhe die Einstellungen so weit wie möglich - vor allem den Arbeitsspeicher. It has been confirmed to work with 4GB of RAM.
+
+Wenn du sicher bist, dass Docker funktioniert, klone das freeCodeCamp Repository in ein Verzeichnis innerhalb von `C:\Users`. Diese Verzeichnisse werden gemeinsam genutzt, so dass Docker Zugriff auf die lokalen Verzeichnisse hat, die es während der Installation benötigt.
+
+Wenn du Meldungen siehst wie
+
+```shell
+bash: change_volumes_owner.sh: No such file or directory
+```
+
+when you `pnpm run docker:init` this is likely the culprit.
diff --git a/src/content/docs/de/how-to-work-on-coding-challenges.md b/src/content/docs/de/how-to-work-on-coding-challenges.md
new file mode 100644
index 00000000..206e3f8b
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-coding-challenges.md
@@ -0,0 +1,737 @@
+---
+title: Wie man an Programmieraufgaben arbeitet
+---
+
+Unser Ziel ist es, ein unterhaltsames und voll interaktives Lernerlebnis zu entwickeln.
+
+Sich interaktive Programmieraufgaben auszudenken ist schwierig. Es wäre viel einfacher, eine ausführliche Erklärung zu schreiben oder ein Video-Tutorial zu erstellen. Aber für unseren Hauptstudienplan bleiben wir bei dem, was für die meisten Menschen am besten funktioniert - ein vollständig interaktives, videospielähnliches Erlebnis.
+
+Wir wollen, dass die Teilnehmer einen Flow-Zustand erreichen. Wir wollen, dass sie in Schwung kommen und so schnell wie möglich Fortschritte in unserem Studienplan machen. We want them to go into the projects with confidence and gain wide exposure to programming concepts.
+
+Beachte, dass wir für Version 7.0 des freeCodeCamp-Studienplan zu einem [vollständig projektorientierten Modell mit viel mehr Wiederholungen](https://www.freecodecamp.org/news/python-curriculum-is-live/) übergehen.
+
+Um diese Aufgaben zu lösen, braucht es viel Kreativität und Liebe zum Detail. Es gibt viele Möglichkeiten, dir zu helfen. Du bekommst Unterstützung von einem ganzen Team von Mitwirkenden, an die du deine Ideen weitergeben und deine Aufgaben demonstrieren kannst.
+
+Und wie immer kannst du deine Fragen in der [Kategorie "Contributors" in unserem Forum](https://forum.freecodecamp.org/c/contributors) oder im ["Contributors"-Chatraum](https://discord.gg/PRyKn3Vbay) stellen.
+
+Mit deiner Hilfe können wir einen interaktiven Studienplan entwickeln, der Millionen von Menschen dabei helfen wird, in den nächsten Jahren das Programmieren zu lernen.
+
+Der Inhalt jeder Aufgabe wird in einer eigenen Markdown-Datei gespeichert. Diese Markdown-Datei wird später mit unseren Tools in HTML umgewandelt, um interaktive Webseiten zu erstellen.
+
+Du kannst alle Studienplaninhalte von freeCodeCamp.org im [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges) Verzeichnis finden.
+
+## Richte die Hilfsmittel für den Studienplan ein
+
+Bevor du an dem Studienplan arbeitest, musst du einige Hilfsmittel einrichten, mit denen du deine Änderungen testen kannst. Du kannst jede der unten aufgeführten Optionen verwenden:
+
+- Du kannst [das freeCodeCamp lokal einrichten](how-to-setup-freecodecamp-locally). Das ist **sehr empfehlenswert** für regelmäßige/wiederholte Beiträge. Mit diesem Setup kannst du arbeiten und deine Änderungen testen.
+- Verwende Gitpod, eine kostenlose Online-Entwicklungsumgebung. Wenn du auf den Button unten klickst, wird eine programmierfertige Entwicklungsumgebung für das freeCodeCamp in deinem Browser gestartet. Es dauert nur wenige Minuten.
+
+ [](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
+
+### Wie man an Praxisprojekten arbeitet
+
+Die Praxisprojekte haben einige zusätzliche Werkzeuge, die dir helfen, neue Projekte und Schritte zu erstellen. Näheres dazu findest du in [diesen Dokumenten](how-to-work-on-practice-projects).
+
+## Aufgabenvorlage
+
+````md
+---
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: 'Challenge Title'
+challengeType: Integer, defined in `client/utils/challenge-types.js`
+videoUrl: 'url of video explanation'
+forumTopicId: 12345
+---
+
+# --description--
+
+Challenge description text, in markdown
+
+```html
+example code
+```
+````
+
+# --instructions--
+
+Anweisungstext für die Aufgabe, in Markdown
+
+# --hints--
+
+Tests, die gegen Benutzercode laufen, in Paaren von Markdown-Text und Codeblock-Testcode.
+
+```js
+Code für den ersten Test
+```
+
+Wenn eine dynamische Ausgabe basierend auf dem Code des Benutzers erforderlich ist, werden --fcc-expected-- und --fcc-actual-- durch die erwarteten und tatsächlichen Werte der Testaussagen ersetzt. Sei vorsichtig, wenn du mehrere Aussagen hast, da die erste Aussage, bei der ein Fehler auftritt, die Werte von --fcc-expected-- und --fcc-actual-- bestimmt.
+
+```js
+assert.equal(
+ 'this will replace --fcc-actual--',
+ 'this will replace --fcc-expected--'
+);
+```
+
+# --notes--
+
+Zusätzliche Informationen für eine Aufgabe, in Markdown
+
+# --seed--
+
+## --before-user-code--
+
+```lang
+Der Code wird vor dem Code des Nutzers ausgewertet.
+```
+
+## --after-user-code--
+
+```lang
+Code, der nach dem Code des Nutzers und kurz vor den Tests ausgewertet wird
+```
+
+## --seed-contents--
+
+Boilerplate-Code, der im Editor angezeigt wird. Dieser Abschnitt sollte nur Code innerhalb von Backticks enthalten, wie den folgenden:
+
+```html
+
+ Hello world!
+
+```
+
+```css
+body {
+ margin: 0;
+ background-color: #3a3240;
+}
+
+.main-text {
+ color: #aea8d3;
+}
+```
+
+```js
+console.log('freeCodeCamp is awesome!');
+```
+
+# --solutions--
+
+Lösungen werden für die CI-Tests verwendet, um sicherzustellen, dass Änderungen an den Hinweisen (hints) weiterhin wie vorgesehen funktionieren
+
+```js
+// erste Lösung - die Sprache(n) sollte(n) mit dem Startwert übereinstimmen.
+```
+
+---
+
+```js
+// zweite Lösung - also wenn der Startwert in HTML geschrieben ist...
+```
+
+---
+
+```js
+// dritte Lösung usw. - Ihre Lösungen sollten in HTML geschrieben sein.
+```
+
+# --assignments--
+
+This will show a checkbox that campers have to check before completing a challenge
+
+---
+
+This will show another checkbox that campers have to check before completing a challenge
+
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+### --feedback--
+
+This will be shown as feedback when campers guess this answer
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
+# --fillInTheBlank--
+
+These are for the English curriculum challenges.
+
+## --sentence--
+
+Sentence to be shown with with blanks that campers have to fill in. Example:
+
+`Hello, You _ the new graphic designer, _?`
+
+The two underscores will show up as blanks. The sentence must be surrounded in backticks.
+
+## --blanks--
+
+The solution for the first blank in the sentence above. Example:
+
+`are`
+
+### --feedback--
+
+Feedback shown when campers input the wrong solution for this blank.
+
+---
+
+Solution for the second blank. Example:
+
+`right`
+
+If no feedback is here, a generic "wrong answer" message will be shown.
+
+# --scene--
+
+```json
+// # --scene-- can only consist of a single json object
+{
+ // Setup the scene. Properties not marked optional are required.
+ "setup": {
+ // Background file to start the scene. A list of scene asset filenames can be found here: https://github.com/freeCodeCamp/cdn/pull/233/files
+ "background": "company2-center.png",
+ // Array of all characters that will appear in the scene
+ "characters": [
+ {
+ // Name of character. See list of available characters in scene-assets.tsx
+ "character": "Maria",
+ // Where to start the character. Maria will start off screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 }
+ },
+ {
+ "character": "Tom",
+ // Tom will start 70% from the left of the screen and 1.5 times regular size
+ "position": { "x": 70, "y": 0, "z": 1.5 },
+ // Optional, defaults to 1. Tom will start invisible
+ "opacity": 0
+ }
+ ],
+ "audio": {
+ // Audio filename
+ "filename": "1.1-1.mp3",
+ // Seconds after the scene starts before the audio starts playing
+ "startTime": 1.3,
+ // Optional. Timestamp of the audio file where it starts playing from.
+ "startTimestamp": 0,
+ // Optional. Timestamp of the audio file where is stops playing. If these two aren't used, the whole audio file will play.
+ "finishTimestamp": 8.4
+ },
+ // Optional, defaults to false. Use this for the long dialogues. It stops the accessibility icon from showing which gives campers the option to show or hide the dialogue text
+ "alwaysShowDialogue": true
+ },
+ // Array of commands that make up the scene
+ "commands": [
+ {
+ // Character that will have an action for this command
+ "character": "Maria",
+ // Optional, defaults to previous value. Maria will move to 25% from the left of the screen. The movement takes 0.5 seconds
+ "position": { "x": 25, "y": 0, "z": 1 },
+ // When the command will start. Zero seconds after the camper presses play
+ "startTime": 0
+ },
+ {
+ "character": "Tom",
+ // Optional, defaults to previous value. Tom will fade into view. The transition take 0.5 seconds. Movement and Opacity transitions take 0.5 seconds
+ "opacity": 1,
+ // Tom will fade into view 0.5 seconds into the scene (immediately after Maria finishes moving on screen)
+ "startTime": 0.5
+ },
+ {
+ "character": "Maria",
+ // When the command starts: Maria will start saying this line 1.3 seconds into the scene. Note that this is the same time as the audio.startTime above. It doesn't have to match that (maybe there's a pause at the beginning of the audio or something)
+ "startTime": 1.3,
+ // The character will stop moving their mouth at the finishTime
+ "finishTime": 4.95,
+ "dialogue": {
+ // Text that will appear if the dialogue is visible
+ "text": "Hello! You're the new graphic designer, right? I'm Maria, the team lead.",
+ // Where the dialogue text will be aligned. Can be 'left', 'center', or 'right'
+ "align": "left"
+ }
+ },
+ {
+ // background will change to this at 5.4 seconds into the scene
+ "background": "company2-breakroom.png",
+ "character": "Tom",
+ "startTime": 5.4,
+ "finishTime": 9.4,
+ "dialogue": {
+ "text": "Hi, that's right! I'm Tom McKenzie. It's a pleasure to meet you.",
+ // Tom's text will be aligned to the right since he is on the right side of the screen
+ "align": "right"
+ }
+ },
+ {
+ "character": "Tom",
+ // Tom will fade to 0 opacity
+ "opacity": 0,
+ // I like to move characters off screen or fade them 0.5 second after the last talking command
+ "startTime": 9.9
+ },
+ {
+ "character": "Maria",
+ // Maria will slide back off the screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 },
+ // The animation will stop playing 0.5 seconds after the 'finishTime' of the last command - or 0.5 seconds after 'startTime' if 'finishTime' isn't there.
+ "startTime": 10.4
+ }
+ ]
+}
+```
+
+````
+
+> [!NOTE]
+>
+> 1. In den obigen Abschnitten sind Beispiele für `lang`:
+>
+> - `html` - HTML/CSS
+> - `js` - JavaScript
+> - `jsx` - JSX
+
+## Nummerierung der Aufgabe
+
+Jede Aufgabe benötigt eine `id`. Wenn du keine angibst, erstellt MongoDB eine neue, zufällige ID, wenn es die Daten speichert. Das wollen wir aber nicht, denn wir wollen, dass die Aufgaben-IDs in verschiedenen Umgebungen (Staging, Produktion, viele verschiedene Entwickler usw.) konsistent sind.
+
+Um eine neue in einer Shell zu erstellen (vorausgesetzt, MongoDB wird separat ausgeführt):
+
+1. Führe den Befehl 'mongo' aus.
+2. Führe den Befehl `ObjectId()` aus.
+
+Zum Beispiel:
+
+```bash
+$ mongo
+MongoDB shell version v3.6.1
+connecting to: mongodb://127.0.0.1:27017
+MongoDB server version: 3.4.10
+...
+$ ObjectId()
+ObjectId("5a474d78df58bafeb3535d34")
+````
+
+The result is a new id, for example, `5a474d78df58bafeb3535d34` above.
+
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
+
+```yml
+---
+id: 5a474d78df58bafeb3535d34
+title: Aufgabentitel
+```
+
+## Aufgaben benennen
+
+Naming things is hard. We've made it easier by imposing some constraints.
+
+All challenge titles should be explicit and should follow this pattern:
+
+\[verb\]\[object clause\]
+
+Here are some example challenge names:
+
+- Verwende die Uhrzeiger-Notation, um das Padding eines Elements festzulegen
+- Arrays mit .reduce komprimieren
+- Verwende die Klammer-Notation, um das erste Zeichen in einem String zu finden
+
+## Aufgabenbeschreibungen/ Instruktionen
+
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
+
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
+
+Use american english, e.g., use `labeled` instead of `labelled`.
+
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
+
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
+
+You can add diagrams if necessary.
+
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
+
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
+
+- JavaScript (Großbuchstaben bei "J" und "S" und keine Abkürzungen)
+- Node.js
+- Obwohl sie manchmal ungenau sind, sollten die nicht mit Bindestrichen versehenen Formen von "Back-End" und "Front-End" verwendet werden, da sie weiter verbreitet sind.
+
+### The 2-minute rule
+
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
+
+If it takes longer than two minutes to complete the challenge, you have two options:
+
+- vereinfache die Aufgabe, oder
+- Teile die Aufgabe in zwei Aufgaben auf.
+
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straightforward.
+
+We track how long it takes for campers to solve challenges and use this information to identify challenges that need to be simplified or split.
+
+### Modularity
+
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
+
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
+
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
+
+### Formatting challenge text
+
+Here are specific formatting guidelines for challenge text and examples:
+
+- Sprachliche Schlüsselwörter stehen in `` \` `` Backticks. Zum Beispiel HTML-Tag-Namen oder CSS-Eigenschaftsnamen.
+- Verweise auf Codeteile (d. h. Funktions-, Methoden- oder Variablennamen) sollten in `` \` ``-Backticks eingeschlossen werden. Siehe untenstehendes Beispiel:
+
+```md
+Verwende `parseInt`, um die Variable `realNumber` in eine Integerzahl umzuwandeln.
+```
+
+- Verweise auf Dateinamen und Pfadverzeichnisse (z. B. `package.json`, `src/components`) sollten in `` \` ``-Backticks eingeschlossen werden.
+- Mehrzeiligen Codeblöcken **muss eine Leerzeile vorangestellt werden**. Die nächste Zeile muss mit drei Backticks beginnen, unmittelbar gefolgt von einer der [unterstützten Sprachen](https://prismjs.com/#supported-languages). To complete the code block, you must start a new line that only has three backticks and **another empty line**. Siehe untenstehendes Beispiel:
+- Whitespace ist in Markdown wichtig, deshalb empfehlen wir, ihn in deinem Editor sichtbar zu machen.
+
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+
+The following is an example of code:
+
+````md
+```{Sprache}
+
+[HIER DEIN CODE]
+```
+````
+
+````
+
+- Zusätzliche Informationen in Form einer Anmerkung sollten von Leerzeilen umgeben sein und wie folgt formatiert werden: "**Note:** Rest des Anmerkungstextes...".
+- Wenn mehrere Notizen erforderlich sind, listest du alle Notizen in separaten Sätzen auf und verwendest das Format: **Notes:** Erster Text der Notiz. Second note text.`
+- Use single quotes where applicable
+
+**Note:** The equivalent _Markdown_ should be used in place of _HTML_ tags.
+
+## Tests schreiben
+
+Aufgaben sollten so viele Tests enthalten, wie nötig sind, um zu überprüfen, ob ein Teilnehmer ein Konzept verstanden hat.
+
+Unser Ziel ist es, den einzelnen Aspekt der Aufgabe zu vermitteln und zu prüfen, ob die Teilnehmer/innen diesen Aspekt verstanden haben.
+
+Aufgabentests können die Assertion-Bibliotheken von Node.js und Chai.js nutzen. Außerdem kann bei Bedarf auf den vom Benutzer erstellten Code in der Variable `code` zugegriffen werden. Zusätzlich stellt das Objekt `__helpers` mehrere Funktionen zur Verfügung, die das Schreiben von Tests vereinfachen. The available functions are defined in the [curriculum-helpers](https://github.com/freeCodeCamp/curriculum-helpers/blob/main/lib/index.ts) repo.
+
+## Formatting Seed Code
+
+Here are specific formatting guidelines for the challenge seed code:
+
+- Use two spaces to indent
+- JavaScript statements end with a semicolon
+- Use double quotes where applicable
+
+### Seed Code Comments
+
+We have a [comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) that contains the only comments that can be used within the seed code. Die Groß- und Kleinschreibung und die Abstände des Kommentarwörterbuchs müssen eingehalten werden. Das Kommentarwörterbuch sollte nicht ohne vorherige Absprache mit dem Entwicklungsteam erweitert werden.
+
+Die verwendeten Kommentare sollten ein Leerzeichen zwischen den Kommentarzeichen und dem eigentlichen Kommentar enthalten. Im Allgemeinen sollten Kommentare sparsam verwendet werden. Überlege dir immer, ob du die Beschreibung oder die Instruktionen einer Aufgabe umschreiben kannst, wenn du dadurch einen Kommentar im Startcode vermeiden kannst.
+
+Example of a valid single-line JavaScript comment:
+
+```js
+// Only change code below this line
+````
+
+Example of a valid CSS comment:
+
+```css
+/* Only change code above this line */
+```
+
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
+
+```js
+var a = 3;
+var b = 17;
+var c = 12;
+
+// Only change code below this line
+a = a + 12;
+b = 9 + b;
+c = c + 7;
+```
+
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
+
+```jsx
+class MyComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ text: 'Hello'
+ };
+ // Change code below this line
+
+ // Change code above this line
+ }
+ handleClick() {
+ this.setState({
+ text: 'You clicked!'
+ });
+ }
+ render() {
+ return (
+
+ {/* Change code below this line */}
+
+ {/* Change code above this line */}
+ {this.state.text}
+
+ );
+ }
+}
+```
+
+### Translation of Seed Code Comments
+
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.json`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
+
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
+
+```text
+Deklariere die Variable myGlobal unterhalb dieser Zeile
+```
+
+> [!NOTE]
+>
+> Wir arbeiten an einer Integration, die die Arbeit an i18n für das Kommentarwörterbuch ermöglicht.
+
+## Hinweise und Lösungen
+
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
+
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
+
+### Adding new Challenge hints/solutions Topics
+
+Take the following steps when adding a new challenge hints/solutions-related topic.
+
+1. Beginne mit den gleichen Schritten wie beim Erstellen eines neuen Themas, aber schau dir die nächsten Schritte zum Erstellen des Titels an.
+2. Der Titel des Themas sollte mit `freeCodeCamp Challenge Guide:` beginnen und mit dem eigentlichen Titel der Studienplanaufgabe verkettet werden. Wenn die Aufgabe zum Beispiel "`Chunky Monkey`" heißt, würde der Titel des Themas lauten "`freeCodeCamp Challenge Guide: Chunky Monkey`".
+3. `camperbot` sollte der Eigentümer dieser Themen/Posts sein. Du musst also einen Admin bitten, den Eigentümer des Hauptposts auf `camperbot` zu ändern.
+4. Sobald das neue Thema erstellt ist, wird eine Forenthemen-ID erstellt. Sie befindet sich am Ende der URL des Forenthemas. Diese ID muss dem Frontmatter der Studienplanaufgabendatei über den normalen Pull-Request-Prozess hinzugefügt werden, damit der `Erhalte einen Tipp` Button auf das Thema verlinkt.
+
+### Guidelines for Content of Hints and Solutions Topics
+
+When proposing a solution for a curriculum challenge-related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
+
+````md
+# Aufgabentitel hier eintragen
+
+---
+
+## Problemerläuterung
+
+Hier wird zusammengefasst, was zu tun ist, ohne die Aufgabenbeschreibung und/oder die Instruktionen einfach zu wiederholen. Dies ist ein optionaler Abschnitt
+
+#### relevante Links
+
+- [Linktext](Link_url_hier eintragen)
+- [Linktext](Link_url_hier eintragen)
+
+---
+
+## Hinweise
+
+### Hinweis 1
+
+Hinweis hier eintragen
+
+### Hinweis 2
+
+Hinweis hier eintragen
+
+---
+
+## Lösungen
+
+Lösung 1 (Klicken zum Anzeigen/Verbergen)
+
+```js
+function myFunc() {
+ console.log('Hello World!');
+}
+```
+````
+
+#### Erklärung des Codes
+
+- Erklärung des Codes hier eintragen
+- Erklärung des Codes hier eintragen
+
+#### Relevante Links
+
+- [Linktext](link_url_goes_here)
+- [Linktext](link_url_goes_here)
+
+
+````
+
+## Testen von Aufgaben
+
+Bevor du [einen Pull-Request](how-to-open-a-pull-request) für deine Änderungen erstellst, musst du überprüfen, ob die von dir vorgenommenen Änderungen nicht versehentlich Probleme mit der Aufgabe verursachen.
+
+1. Um alle Aufgaben zu testen, führe den folgenden Befehl im Stammverzeichnis aus
+
+````
+pnpm run test:curriculum
+```
+
+2. To test single challenge, you can use it challenge id with following command
+
+```
+FCC_CHALLENGE_ID=646cf6cbca98e258da65c979 pnpm run test:curriculum
+```
+
+3. You can also test a block or a superblock of challenges with these commands
+
+```
+FCC_BLOCK='Basic HTML and HTML5' pnpm run test:curriculum
+```
+
+```
+FCC_SUPERBLOCK='responsive-web-design' pnpm run test:curriculum
+```
+
+You are also able to test challenges by title by performing the following steps:
+
+1. Switch to the `curriculum` directory:
+
+ ```
+ cd curriculum
+ ```
+
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
+
+ ```
+ pnpm run test -- -g challenge-title-goes-here
+ ```
+
+> [!TIP]
+> You can set the environment variable `LOCALE` in the `.env` to the language of the challenge(s) you need to test.
+>
+> The currently accepted values are `english` and `chinese`, with `english` being set by default.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Useful Links
+
+Creating and Editing Challenges:
+
+1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - what the numeric challenge type values mean (enum).
+
+2. [Contributing to FreeCodeCamp - Writing ES6 Challenge Tests](https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s) - a video following [Ethan Arrowood](https://twitter.com/ArrowoodTech) as he contributes to the old version of the curriculum.
+
+## Helper Scripts
+
+> [!NOTE]
+> If you are working with the step-based challenges, refer to the [Work on Practice Projects](how-to-work-on-practice-projects) section.
+
+There are a few helper scripts that can be used to manage the challenges in a block. Note that these commands should all be run in the block directory. For example:
+
+```bash
+cd curriculum/challenges/english/02-javascript-algorithms-and-data-structures/basic-algorithm-scripting
+```
+
+### Add New Challenge
+
+To add a new challenge at the end of a block, call the script:
+
+```bash
+pnpm run create-next-challenge
+```
+
+This will prompt you for the challenge information and create the challenge file, updating the `meta.json` file with the new challenge information.
+
+### Delete a Challenge
+
+To delete a challenge, call the script:
+
+```bash
+pnpm run delete-challenge
+```
+
+This will prompt you to select which challenge should be deleted, then delete the file and update the `meta.json` file to remove the challenge from the order.
+
+### Insert a Challenge
+
+To insert a challenge before an existing challenge, call the script:
+
+```bash
+pnpm run insert-challenge
+```
+
+This will prompt you for the challenge information, then for the challenge to insert before. For example, if your choices are:
+
+```bash
+a
+b
+c
+```
+
+If you choose `b`, your new order will be:
+
+```bash
+a
+new challenge
+b
+c
+```
+
+### Update Challenge Order
+
+If you need to manually re-order the challenges, call the script:
+
+```bash
+pnpm run update-challenge-order
+```
+
+This will take you through an interactive process to select the order of the challenges.
+
+## Troubleshooting
+
+### Infinite Loop Detected
+
+If you see the following error in the console while previewing a challenge:
+
+```text
+Potential infinite loop detected on line ...
+```
+
+This means that the loop-protect plugin has found a long-running loop or recursive function. If your challenge needs to do that (e.g. it contains an event loop that is supposed to run indefinitely), then you can prevent the plugin from being used in the preview. To do so, add `disableLoopProtectPreview: true` to the block's `meta.json` file.
+
+If your tests are computationally intensive, then you may see this error when they run. If this happens then you can add `disableLoopProtectTests: true` to the block's `meta.json` file.
+
+It's not typically necessary to have both set to true, so only set them as needed.
+````
diff --git a/src/content/docs/de/how-to-work-on-localized-client-webapp.md b/src/content/docs/de/how-to-work-on-localized-client-webapp.md
new file mode 100644
index 00000000..f0cd11f9
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-localized-client-webapp.md
@@ -0,0 +1,284 @@
+---
+title: How to Work on Localized Client Webapp
+---
+
+The React-based client web app that powers our learning platform is built using Gatsby. Sie wird mit [react-i18next](https://react.i18next.com/) und [i18next](https://www.i18next.com/) in verschiedene Weltsprachen übersetzt.
+
+Du kannst mehr darüber erfahren, wie du die Client-Anwendung lokal für die Entwicklung einrichtest, indem du [unseren Leitfaden zur lokalen Einrichtung](how-to-setup-freecodecamp-locally) liest. By default, the application is available only in English.
+
+Once you have set up the project locally you should be able to follow this documentation to run the client in the language of your choice from the list of available languages.
+
+Das kann hilfreich sein, wenn du an einem Feature arbeitest, das speziell auf die Lokalisierung abzielt und du zum Beispiel die Beschriftung eines Buttons in einer anderen Sprache validieren musst.
+
+:::tip
+You do not need to follow this document to translate freeCodeCamp's curriculum or contributing documentation. Lies stattdessen [diesen Leitfaden hier](how-to-translate-files).
+:::
+
+Wir wollen verstehen, wie die i18n-Frameworks und -Werkzeuge funktionieren.
+
+## Dateistruktur
+
+Most of the files for translating the platform are located in the [`client/i18n`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/client/i18n) folder. Each language has a directory that contains JSON files with the translations.
+
+```bash
+ config
+ └── i18n.ts
+ ...
+ client/i18n
+ ├── configForTests.js
+ ├── config.js
+ ├── locales
+ │ ├── chinese
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── dothraki
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── english
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ │ └── espanol
+ │ ├── intro.json
+ │ ├── links.json
+ │ ├── meta-tags.json
+ │ ├── motivation.json
+ │ └── translations.json
+ ├── locales.test.js
+ ├── schema-validation.js
+ └── validate-keys.ts
+```
+
+Some of these files are translated on our translation platform (Crowdin) and some are translated or created via PRs on GitHub.
+
+**Dateien, die auf unserer Übersetzungsplattform übersetzt wurden:**
+
+- Die Datei `translations.json` enthält den Großteil des Textes, der auf den Elementen der Benutzeroberfläche erscheint. Die Schlüssel werden in der Codebasis verwendet, um den richtigen Text für die eingestellte Sprache zu erhalten. This file needs to have the same keys in all languages.
+
+- Die Datei `intro.json` enthält die Schlüssel-Werte-Paare für den Einleitungstext auf den Zertifikatseiten.
+
+ Wenn du Übersetzungen für die Schlüssel hinzufügen/aktualisieren willst, lies bitte [diesen Leitfaden hier](how-to-translate-files).
+
+**Dateien, die NICHT auf unserer Übersetzungsplattform übersetzt wurden:**
+
+- Die `motivation.json` Dateien müssen nicht die gleichen Zitate, Komplimente oder Array-Längen haben. Nur die gleiche JSON-Struktur.
+
+- The `meta-tags.json` file contains the information for our website's meta tag information.
+
+ Changes to these files are typically done by the staff team. If you see something out of the ordinary we recommend you reach us in the [contributors chat room](https://discord.gg/PRyKn3Vbay).
+
+## Testing the Client App in a World Language
+
+You can test the client app in any language available in the [list of `availableLangs` here](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts).
+
+```js
+export const availableLangs = {
+ client: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Italian,
+ Languages.Portuguese,
+ Languages.Ukrainian,
+ Languages.Japanese,
+ Languages.German,
+ Languages.Arabic
+ ],
+ ...
+};
+```
+
+Wenn du eine neue Sprache testest, erstelle einen Ordner mit dem Namen der Sprache als Titel neben den anderen Sprachen und kopiere die JSON-Dateien aus einer anderen Sprache in deinen neuen Ordner.
+
+Add the new language to the `Languages` enum and the `client` array at the top of the [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file.
+
+Befolge dann die Anweisungen in den Kommentaren in derselben Datei, um die restlichen Variablen nach Bedarf hinzuzufügen/zu aktualisieren.
+
+Finally, set the `CLIENT_LOCALE` variable in your `.env` file to the string of the locale you want to build from the `Languages` enum in the above file.
+
+## Wie du Komponenten strukturierst
+
+Wenn du an einer Funktion oder einem Fehler für die Client-Webanwendung arbeitest, z. B. wenn du neue Elemente auf der Einstellungsseite hinzufügst, solltest du die folgenden Richtlinien befolgen. Sie helfen dir, die Komponenten für die Lokalisierung in alle unterstützten Weltsprachen vorzubereiten.
+
+### Funktionelle Komponente
+
+```js
+import { useTranslation } from 'react-i18next';
+
+// in der Rendermethode:
+const { t } = useTranslation();
+
+// Aufruf der Funktion "t" mit einem Key aus der JSON-Datei:
+{t('key')}
; // weitere Details unten
+```
+
+### Klassenkomponente
+
+```js
+import { withTranslation } from 'react-i18next';
+
+// withTranslation fügt die Funktion "t" zu props hinzu:
+const { t } = this.props;
+
+// Aufruf der Funktion "t" mit einem Key aus der JSON-Datei:
+{t('key')}
// weitere Details unten
+
+// Export ohne redux:
+export default withTranslation()(Component);
+
+// oder mit redux:
+export default connect(...)(withTranslation()(Component));
+```
+
+## Übersetzen mit Hilfe der "t"-Funktion
+
+### Grundlegende Übersetzung
+
+```js
+// in der Komponente:
+{t('p1')}
+
+// in der JSON Datei:
+{
+ "p1": "My paragraph"
+}
+
+// Output:
+My paragraph
+```
+
+### Mit dynamischen Daten
+
+```js
+// in der Komponente:
+const username = 'moT';
+
+{t('welcome', { username: username })}
+
+// in der JSON Datei:
+{
+ "welcome": "Welcome {{username}}"
+}
+
+// Output:
+Welcome moT
+```
+
+Das obige Beispiel übergibt der Funktion `t` ein Objekt mit einer Variablen `username`. Die Variable wird im JSON-Wert verwendet, wo `{{username}}` steht.
+
+## Übersetzen mit der `Trans`-Komponente
+
+Generell gilt: Verwende die "t"-Funktion, wenn du kannst. Es gibt aber eine `Trans`-Komponente für den Fall, dass das nicht ausreicht, z. B. wenn du Elemente in den Text eingebettet hast. Du kannst die `Trans`-Komponente mit jeder Art von React-Komponente verwenden.
+
+### Verschachtelte Grundelemente
+
+```js
+// in der Komponente:
+import { Trans } from 'react-i18next'
+
+
+ fcc.greeting
+
+
+// in der JSON Datei:
+{
+ "fcc": {
+ "greeting": "Welcome to freeCodeCamp"
+ }
+}
+
+// Output:
+Welcome to freeCodeCamp
+```
+
+You can place the key inside the component tags like in the above example if the text contains "simple" tags with no attributes. `br`, `strong`, `i` und `p` sind die Standardwerte, aber diese Liste kann in der i18n-Konfiguration erweitert werden.
+
+### Verschachtelte komplexe Elemente
+
+In anderen Fällen möchtest du einen bestimmten Text innerhalb eines anderen Elements platzieren, ein Anker-Tag ist ein gutes Beispiel dafür:
+
+```js
+// in der Komponente:
+
+
+ placeholder
+
+
+
+// in der JSON Datei:
+{
+ "check-forum": "Check out <0>our forum0>."
+}
+
+// Output:
+Check out our forum
+```
+
+Im obigen Beispiel wird der Schlüssel in den Attributen der `Trans`-Komponente gesetzt. Die `<0>` und `0>` im JSON stehen für das erste Kindelement der Komponente, in diesem Fall das Ankerelement. Wenn es mehr Kindelemente gäbe, würden sie einfach von dort aus weiterzählen und dabei dieselbe Syntax verwenden. Du kannst die Kindelemente einer Komponente in den React Dev Tools finden, indem du sie inspizierst. `placeholder` ist einfach da, weil der Linter sich über leere ``-Elemente beschwert.
+
+### Mit einer Variablen
+
+```js
+// in der Komponente:
+const email = 'team@freecodecamp.org';
+
+
+
+
+ {{ email }}
+
+
+
+
+// in der JSON Datei:
+{
+ "fcc": {
+ "email": "Send us an email at: <0>{{email}}0>"
+ }
+}
+
+// Output:
+Send us an email at: team@freecodecamp.org
+```
+
+Im obigen Beispiel werden der Schlüssel und eine Variable in den Attributen der `Trans`-Komponente festgelegt. `{{ email }}` muss auch irgendwo in der `Trans`-Komponente stehen, es ist egal wo.
+
+## Ändern des Textes
+
+Um den Text auf der Client-Seite zu ändern, gehst du in die entsprechende `.json`-Datei, suchst den Schlüssel, der in der React-Komponente verwendet wird, und änderst den Wert in den gewünschten neuen Text. Du solltest die Codebasis nach diesem Schlüssel durchsuchen, um sicherzustellen, dass er nicht an anderer Stelle verwendet wird. Oder, falls ja, dass die Änderungen an allen Stellen sinnvoll sind.
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Hinzufügen von Text
+
+Wenn der Text, den du dem Client hinzufügen möchtest, bereits in der entsprechenden `.json`-Datei vorhanden ist, verwende den vorhandenen Schlüssel. Andernfalls erstellst du einen neuen Schlüssel.
+
+Die englische Datei ist die "Quelle der Wahrheit" für alle `.json`-Dateien, die den gleichen Namen haben. Wenn du einen neuen Schlüssel hinzufügen musst, füge ihn dort ein. Dann fügst du den Schlüssel zu **allen** `translations.json`-Dateien hinzu.
+
+> [!NOTE] Verwende englischen Text für alle Sprachen, wenn die Datei über Crowdin übersetzt wird. Andernfalls werden die Tests fehlschlagen.
+
+Es wäre auch schön, wenn die Schlüssel in allen Dateien die gleiche Reihenfolge hätten. Also, try to put all punctuation, spacing, quotes, etc. in the JSON files and not in the components or server files.
+
+> [!NOTE] The underscore (`_`) is a reserved character for keys in the client-side files. In der [Dokumentation](https://www.i18next.com/translation-function/plurals) erfährst du, wie sie verwendet werden.
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Helpful Documentation
+
+- [react-i18next Dokumente](https://react.i18next.com/latest/usetranslation-hook)
+- [i18next Dokumente](https://www.i18next.com/translation-function/essentials)
diff --git a/src/content/docs/de/how-to-work-on-practice-projects.md b/src/content/docs/de/how-to-work-on-practice-projects.md
new file mode 100644
index 00000000..4cff3871
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-practice-projects.md
@@ -0,0 +1,155 @@
+---
+title: Wie man an Übungsprojekten arbeitet
+---
+
+Our practice projects use a step-based approach to teach concepts to campers. Ein Projekt besteht aus mehreren Dateien, die wir als **"Schritte"** bezeichnen. Diese Dateien werden nach der Challenge-ID benannt, um Probleme mit dem Übersetzungsablauf zu vermeiden. Das macht es leider schwierig, die zu einem bestimmten Schritt gehörende Datei zu finden.
+
+Wir haben ein Editor-Tool für Aufgaben entwickelt, das hier Abhilfe schafft. Mit diesem Tool kannst du durch die verfügbaren Projekte und die Schritte für jedes Projekt (in der richtigen Reihenfolge) navigieren. Außerdem gibt es einen eingebetteten Code-Editor, mit dem du die Dateien direkt bearbeiten kannst.
+
+## Den Aufgaben-Editor verwenden
+
+In dieser Anleitung erfährst du, wie du mit unserem Aufgaben-Editor an den Übungsprojekten arbeiten kannst.
+
+### Starten des Editors
+
+To start the editor, make sure you are in the root freeCodeCamp directory. Then, run `pnpm run challenge-editor` to start both the client and the API that powers the editor.
+
+Der Client läuft auf Port `3300`, so dass du ihn unter `http://localhost:3300` erreichen kannst. Die API läuft auf Port `3200`, um Konflikte mit dem Lernclient und dem Server zu vermeiden. Dies ermöglicht es dir, die freeCodeCamp-Anwendung gleichzeitig mit dem Editor laufen zu lassen, so dass du deine Änderungen lokal testen kannst.
+
+### Navigating the Editor
+
+The default view will list the available `superblocks` - these are the certifications. Click on the certification link you want to work on.
+
+This will take you to the list of blocks. These are the practice projects. Click on the project link you want to work on.
+
+This will take you to a list of steps for the project. If you are working on an existing step, you can click on the step link to open the editor. If you are adding or removing steps, click the `Use the step tools` link to switch to the step tools for that challenge.
+
+### Editing Steps
+
+When you click on a step, you'll be taken to the editor. This is a basic text editor that offers syntax highlighting.
+
+After you have made your changes, click the `Save Changes` button to save your changes. You will get a browser alert letting you know that your changes are ready to commit. Note that you'll need to use `git` manually to stage and commit your files - this tool will not do that for you.
+
+### Step Tools
+
+When you click the `Use the step tools` link, you'll be taken to the step tools page. This allows you to add or remove steps from the project.
+
+#### Create Next Step
+
+Clicking this button will add a new step at the end of the project. This step will use the previous step's code as the seed.
+
+#### Create Empty Steps
+
+Enter the number of steps you want to add in the input. Then, clicking the button will create many empty steps at the end of the project.
+
+#### Insert Step
+
+Enter the step number that you want to add. Then, click the `Insert Step` button to add the step. The following steps will be re-ordered.
+
+#### Delete Step
+
+Enter the step number you want to delete. Then click the `Delete Step` button to remove that step. This will automatically update the step numbers for the remaining steps.
+
+#### Update Step Titles
+
+You should not have to use this tool unless you've manually deleted or added steps. This tool will reorder the step numbers.
+
+## Using the Scripts Manually
+
+If you want to work on the steps manually, in your local IDE, you can run the step management scripts directly.
+
+The `tools/challenge-helper-scripts` folder contains tools to help facilitate the creation and maintenance of the freeCodeCamp project-based curriculum.
+
+### Create a New Project
+
+Change directory to `tools/challenge-helper-scripts` and run `pnpm run create-project`. This opens up a command line UI that guides you through the process. Once that has finished, there should be a new challenge in the English curriculum that you can use for the first step of the project. For example, if you created a project called `test-project` in the Responsive Web Design certification, it would be in `curriculum/challenges/english/01-responsive-web-design/test-project`.
+
+If you want to create new steps, the following tools simplify that process.
+
+### create-next-step
+
+A one-off script that will automatically add the next step based on the last step in the project. The challenge seed code will use the previous step's challenge seed code.
+
+#### How to Run the Script
+
+1. Wechsle in das Verzeichnis des Projekts.
+2. Run the following command:
+
+```bash
+pnpm run create-next-step
+```
+
+### create-empty-steps
+
+A one-off script that automatically adds a specified number of steps. The challenge seed code for all steps created will be empty.
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Wechsle in das Verzeichnis des Projekts.
+2. Run the following command:
+
+```bash
+pnpm run create-empty-steps X # where X is the number of steps to create.
+```
+
+### insert-step
+
+A one-off script that automatically adds a new step at a specified position, incrementing all subsequent steps (both their titles and in their meta.json). The challenge seed code will use the previous step's challenge seed code with the editable region markers (ERMs) removed.
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Wechsle in das Verzeichnis des Projekts.
+2. Run the following command:
+
+```bash
+pnpm run insert-step X # where X is the position to insert the new step.
+```
+
+### delete-step
+
+A one-off script that deletes an existing step, decrementing all subsequent steps (both their titles and in their meta.json)
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Wechsle in das Verzeichnis des Projekts.
+2. Run the following command:
+
+```bash
+pnpm run delete-step X # where X is the step number to be deleted.
+```
+
+### update-step-titles
+
+A one-off script that automatically updates the frontmatter in a project's markdown files so that they are consistent with the project's meta.json. It ensures that each step's title (and dashedName) matches the meta's `challengeOrder`.
+
+#### How to Run the Script
+
+1. Wechsle in das Verzeichnis des Projekts.
+2. Run the following command:
+
+```bash
+pnpm run update-step-titles
+```
+
+### repair-meta
+
+One-off script to parse the step names from the project and update the meta.json order to reflect those steps. Useful if you've accidentally lost the changes to the meta.json file when adding/removing steps.
+
+#### How to Run the Script
+
+1. Change to the directory of the project.
+2. Run the following command:
+
+```bash
+pnpm run repair-meta
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/de/how-to-work-on-the-component-library.md b/src/content/docs/de/how-to-work-on-the-component-library.md
new file mode 100644
index 00000000..ed433453
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-the-component-library.md
@@ -0,0 +1,113 @@
+---
+title: How to Work on the Component Library
+---
+
+Welcome to freeCodeCamp's `ui-components` library. The components are built mostly from scratch with basic HTML elements and [Tailwind CSS](https://tailwindcss.com/).
+
+> [!NOTE]
+>
+> freeCodeCamp has been using Bootstrap components in the UI. However, we are moving away from it and building our own component library, which helps standardize our UX/UI patterns and improve accessibility. The project is tracked in [this GitHub issue](https://github.com/freeCodeCamp/freeCodeCamp/issues/44668).
+
+The following steps are recommended when working on a new component:
+
+- Research and planning
+- Implement the component
+- Display the use cases on Storybook
+- Write unit tests
+
+## Researching and Planning
+
+Before building a component, you need to research and document on how the existing version behaves and looks, to ensure that the new one has matching styles and supports all the current usages. In order to meet the web accessibility requirements, you should also pay attention to the accessibility aspect of the component, see which HTML elements and ARIA attributes are used under the hood.
+
+Once you have gathered enough information about the component, you can start thinking about the props interface. Ideally, the interface should be as similar to the current version as possible, to ease the adoption later on. Since we are using Bootstrap components, the simplest approach is to mimic [their implementation](https://github.com/react-bootstrap/react-bootstrap/tree/master/src).
+
+We prefer smaller pull requests rather than a large one, because they speed up the review time and reduce cognitive overload for the reviewers. For that reason, you should think about how you would break down the implementation and come up with a delivery plan.
+
+We recommend opening a separate GitHub issue for each component and include all the notes in the issue description. It can be used as a place to host all of your working notes, as well as a way to communicate the approach with the reviewers. We will use the issue thread for further discussion if needed. [The issue for Button component](https://github.com/freeCodeCamp/freeCodeCamp/issues/45357) can be used as a reference.
+
+## Implementing the Component
+
+A new component can be created using the following command from the root directory:
+
+```bash
+cd tools/ui-components
+
+pnpm run gen-component MyComponent
+```
+
+The command will generate a new folder inside the `ui-components` directory, with the following files:
+
+| File name | Purpose |
+| -------------------------- | ---------------------------------------------------------- |
+| `index.ts` | It is used for exporting the component and its types. |
+| `my-component.stories.tsx` | It is used for demoing the component on Storybook. |
+| `my-component.test.tsx` | It is a test file. |
+| `my-component.tsx` | It is where we implement the component. |
+| `types.ts` | It is where we locate the component's interface and types. |
+
+Each component is different, but in general, a component should:
+
+- Support forwarding ref
+- Be styled for both light and dark themes
+- Be styled internally based on their props (the consumers should not need to restyle the component with the `className` prop)
+- Utilize the built-in styling system from Tailwind instead of having custom styles
+
+### Using Colors
+
+There are two color "layers" in the component library:
+
+- The base layer, where the color names describe what the colors are, e.g. `gray00`, `blue50`
+- The semantic layer, where the color names describe what the colors are for, e.g. `foreground-primary`, `background-danger`
+
+Generally, when using colors in a component, you should choose semantic variables over the base ones. There are exceptions, however, specifically when you are styling the component's states such as hover, active, disabled, etc. In these cases, we recommend using the base variables directly instead of creating new semantic variables, since each component can have different styles for its states.
+
+> [!NOTE] Color definition can be found in the [`colors.css` file](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/src/colors.css). A color is only available for use if it is added to the [`tailwind.config.js` file](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/tailwind.config.js) under the `colors` property.
+
+### Useful Links
+
+- [Tailwind CSS Configuration](https://tailwindcss.com/docs/configuration)
+- [React Bootstrap v0.33 Docs](https://react-bootstrap-v3.netlify.app)
+- [Bootstrap 3.3.7 stylesheet](https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css)
+- [React Bootstrap current implementation](https://github.com/react-bootstrap/react-bootstrap/tree/master/src)
+- [React Bootstrap current tests](https://github.com/react-bootstrap/react-bootstrap/tree/master/test)
+
+## Displaying the Use Cases on Storybook
+
+Use cases of the component should be added to the Storybook file (`.stories.tsx`).
+
+To start Storybook, run the following command from the root directory:
+
+```bash
+pnpm run storybook
+```
+
+The Storybook page is available on [http://localhost:6006](http://localhost:6006).
+
+## Writing Unit Tests
+
+We use [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) to write unit tests. The tests should assert that the components behave as expected and are accessible.
+
+To run tests against the component library, run the following command from the root directory:
+
+```bash
+pnpm run test-ui-components
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Adding Packages to the UI-Component Library
+
+We restrict adding new packages to the UI Components to help with the project's maintainability. In the rare chance that you think a dependency is needed, please check with the maintainers first and then use the following command to add a package:
+
+```bash
+cd tools/ui-components
+pnpm add package_name
+```
+
+## Useful Links
+
+- [Testing for Accessibility](https://testing-library.com/docs/dom-testing-library/api-accessibility)
+- [Order of priority of React Testing Library's queries](https://testing-library.com/docs/queries/about/#priority)
+- [Common mistakes with React Testing Library](https://kentcdodds.com/blog/common-mistakes-with-react-testing-library)
diff --git a/src/content/docs/de/how-to-work-on-the-docs-theme.md b/src/content/docs/de/how-to-work-on-the-docs-theme.md
new file mode 100644
index 00000000..13d696a3
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-the-docs-theme.md
@@ -0,0 +1,60 @@
+---
+title: How to Work on Documentation
+---
+
+## Work on the Content of the Docs
+
+To work on the contributing guidelines, you can edit or add files in the `docs` directory [available here](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/docs). When your changes are merged, they will be made available automatically at the documentation site.
+
+When adding a new file to the `docs` directory, you should evaluate if the file should also be added to the sidebar navigation. We typically create a link in the [`_sidebar.md`](_sidebar) file for new and independent guides. Alternatively, You may follow the instructions below on creating an internal link for supporting guides.
+
+### How to Create an Internal Link
+
+If you want to create a link targeting a different section of the contributing guidelines, follow this format:
+
+```md
+[Link text](target-file-name#target-section-heading-id)
+
+// If the target section is within the same page, you can omit the file name
+[Link text](#target-section-heading-id)
+```
+
+Make sure you include the file extension (`.md`). Don't specify the full URL or append `/` before the file name.
+
+This is necessary to make these links work for the translated version of the document. Otherwise, they will redirect to the English version of the page regardless of the language.
+
+#### Translating docs with internal links
+
+When you work on translating docs on Crowdin, make sure to replace the `#target-section-heading-id` with the id on the translated document. [Learn more about translating docs here](how-to-translate-files#translate-documentation).
+
+## Work on the Docs Theme
+
+> [!NOTE] A quick reminder that you do not need to set up anything for working on the content for the documentation site.
+>
+> To work on the contributing guidelines, see [work on the docs content](#work-on-the-docs-content) section.
+
+### Structure of the Docs Website
+
+The site is generated using [`docsify`](https://docsify.js.org) and served using GitHub pages.
+
+Typically you would not need to change any configuration or build the site locally. In case you are interested, here is how it works:
+
+- Der Quelltext der Homepage ist in [`docs/index.html`](index.html) zu finden.
+- Wir stellen diese Datei als SPA (Single Page Application) mit `docsify` und GitHub Pages bereit.
+- The `docsify` script generates the content of `markdown` files in the `docs` directory on demand.
+- Die Homepage wird aus der [`_coverpage.md`](_coverpage) erstellt.
+- The sidebar navigation is generated from [`_sidebar.md`](_sidebar).
+
+### Serving the Documentation Site Locally
+
+Install freeCodeCamp locally ([see the local setup guide](how-to-setup-freecodecamp-locally)), we bundled the CLI with the development tools so you can run the command below as needed from the root of the repo:
+
+```bash
+pnpm run docs:serve
+```
+
+> The documentation site should be available at
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/de/how-to-work-on-the-news-theme.md b/src/content/docs/de/how-to-work-on-the-news-theme.md
new file mode 100644
index 00000000..dc88d705
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-the-news-theme.md
@@ -0,0 +1,102 @@
+---
+title: Wie man am FreeCodeCamp.orgs Entwickler-News-Theme arbeitet
+---
+
+Die Entwicklernews, auch bekannt als [`/news`](https://www.freecodecamp.org/news) Seite, wird mit [Ghost](https://ghost.org/) betrieben. Wir verwenden ein individuelles Theme für das Erscheinungsbild der Website. Der Quellcode des Themes ist hier verfügbar: .
+
+## Das Theme
+
+Ghost verwendet eine einfache Templating-Sprache namens [Handlebars](http://handlebarsjs.com/) für seine Themes. Das Theme, das auf `/news` verwendet wird, basiert auf dem Standard-Theme [casper](https://github.com/TryGhost/Casper).
+
+Das Standard-Theme ist ziemlich ausführlich kommentiert, so dass es relativ einfach sein sollte, durch Lesen des Codes und der Kommentare herauszufinden, was vor sich geht. Wenn du dich mit der Funktionsweise vertraut gemacht hast, findest du in Ghost auch eine vollständige [Theme-API-Dokumentation](https://themes.ghost.org), in der alle möglichen Handlebars-Helfer und Vorlagen erklärt werden.
+
+**Die Hauptdateien sind:**
+
+- `default.hbs` - Die Hauptvorlagen-Datei
+- `index.hbs` - Wird für die Startseite verwendet
+- `post.hbs` - Wird für einzelne Beiträge (posts) verwendet
+- `page.hbs` - Wird für einzelne Seiten verwendet
+- `tag.hbs` - Wird für Tag-Archive verwendet
+- `author.hbs` - Wird für Autorenarchive verwendet
+
+Ein wirklich toller Trick ist, dass du auch benutzerdefinierte, einmalige Vorlagen erstellen kannst, indem du einfach den Slug einer Seite in eine Vorlagendatei einfügst. Zum Beispiel:
+
+- `page-about.hbs` - Benutzerdefinierte Vorlage für die `/about/` Seite
+- `tag-news.hbs` - Benutzerdefinierte Vorlage für `/tag/news/` Archiv
+- `author-ali.hbs` - Benutzerdefinierte Vorlage für `/author/ali/` Archiv
+
+## Entwicklung
+
+1. Installiere Ghost lokal.
+
+ ```sh
+ npm install -g ghost-cli@latest
+ mkdir ghost-local-site
+ cd ghost-local-site
+ ```
+
+ ```sh
+ ghost install local
+ ghost start
+ ```
+
+ > Hinweis: Derzeit verwendet freeCodeCamp die Ghost-Version `2.9.0`, also stelle sicher, dass du eine höhere Version verwendest.
+
+ Achte darauf, dass du die `ghost`-Befehle aus dem `ghost-local-site`-Verzeichnis ausführst. Folge den zusätzlichen Anweisungen in [der offiziellen Dokumentation von Ghost](https://docs.ghost.org), wenn du mit der Benutzeroberfläche nicht vertraut bist.
+
+2. Forke und klone das Repository in deinem Theme-Verzeichnis (ersetze `YOUR_USERNAME` durch deinen GitHub Benutzernamen):
+
+ ```sh
+ cd content/themes/
+ git clone https://github.com/YOUR_USERNAME/news-theme.git
+ ```
+
+3. Stelle sicher, dass du alle Voraussetzungen erfüllst.
+
+ Die Stile des Themes werden mit Gulp/PostCSS kompiliert, um zukünftige CSS-Spezifikationen zu erfüllen. Du benötigst [Node.js](https://nodejs.org/). Stelle sicher, dass deine Node.js-Version mit `ghost` kompatibel ist.
+
+4. Abhängigkeiten (Dependencies) installieren und das Theme entwickeln
+
+ ```sh
+ npm ci
+ npm run develop
+ ```
+
+5. Jetzt kannst du `/assets/css/`-Dateien bearbeiten, die automatisch zu `/assets/built/` kompiliert werden.
+
+6. Zugriff auf die Entwicklungsseite.
+
+ a. Gib `http://localhost:2368/ghost/` in deine Adressleiste ein. Fahre mit dem Setup fort, zu dem du auf der Seite aufgefordert wirst (wenn du Ghost zum ersten Mal ausführst).
+
+ b. _(Einmalig, während des Setups)_ Starte Ghost einmal an einem separaten Terminal neu, um sicherzustellen, dass das Theme verfügbar ist.
+
+ ```sh
+ cd ghost-local-site
+ ghost restart
+ ```
+
+ c. _(Einmalig, während des Setups)_ Wenn du das getan hast, gehst du auf `http://localhost:2368/ghost/#/settings/design` und scrollst bis zum Ende. Stelle sicher, dass du auf `freecodecamp-news-theme` aktivieren klickst.
+
+7. Zippe den endgültigen Code und erstelle einen Pull-Request
+
+ Die `zip` Gulp-Aufgabe verpackt die Themedateien in `dist/.zip`, die wir dann auf die Produktionsseite hochladen können.
+
+ Wenn du einen PR erstellst, stelle bitte sicher, dass du das folgende Skript ausgeführt hast, bevor du den Code committest und einen PR sendest.
+
+ ```sh
+ npm run zip
+ ```
+
+## Andere Referenzen und Ressourcen
+
+### Verwendete PostCSS-Funktionen
+
+- Autoprefixer - Mach dir keine Gedanken über das Schreiben von Browser-Präfixen, das wird alles automatisch erledigt, mit Unterstützung für die letzten 2 Hauptversionen eines jeden Browsers.
+- Variablen - Einfache reine CSS-Variablen
+- [Farbfunktion](https://github.com/postcss/postcss-color-function)
+
+### SVG-Symbole
+
+Das Theme verwendet Inline-SVG-Symbole, die über Partials von Handlebars eingebunden werden. Du kannst alle Symbole (Icons) innerhalb von `/partials/icons` finden. Um ein Icon zu verwenden, gib einfach den Namen der entsprechenden Datei an, z. B. Um das SVG-Symbol in `/partials/icons/rss.hbs` einzubinden - verwende `{{> "icons/rss"}}`.
+
+Du kannst deine eigenen SVG-Icons auf dieselbe Art und Weise hinzufügen.
diff --git a/src/content/docs/de/how-to-work-on-tutorials-that-use-coderoad.md b/src/content/docs/de/how-to-work-on-tutorials-that-use-coderoad.md
new file mode 100644
index 00000000..1026a361
--- /dev/null
+++ b/src/content/docs/de/how-to-work-on-tutorials-that-use-coderoad.md
@@ -0,0 +1,142 @@
+---
+title: How to work on CodeRoad
+---
+
+Diese Seite beschreibt, wie du zu den freeCodeCamp-Tutorials und -Projekten beitragen kannst, die mit der CodeRoad VS Code-Erweiterung durchgeführt werden.
+
+## How the Tutorials Work
+
+Each of the freeCodeCamp tutorials that use CodeRoad has its own repo under the freeCodeCamp GitHub organization. Sie beginnen alle mit `learn-`. Zum Beispiel: `https://github.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/`.
+
+Jedes Tutorial-Repo hat einen `main`-Branch und einen „Version“-Branch, z.B. `v1.0.0`.
+
+Die beiden wichtigsten Dateien im `main`-Branch sind `TUTORIAL.md` und `coderoad.yaml`. `TUTORIAL.md` enthält alle Anweisungen, Hinweise, Titel und so weiter für das Tutorial. `coderoad.yaml` enthält Anweisungen für CodeRoad, z.B. welche Befehle wann ausgeführt werden sollen, welche Dateien auf Änderungen zu beobachten sind und welcher Versionsbranch für die Schritte zu verwenden ist.
+
+Der „Version“-Branch enthält die Commits, die bei jedem Schritt eines Tutorials geladen werden. Die Commit-Nachrichten für diesen Branch müssen präzise sein. Der erste Commit benötigt `INIT` für seine Nachricht und enthält alle Dateien, die vor der ersten Lektion geladen werden sollen.
+
+Nachfolgende Commit-Nachrichten müssen mit der Schrittnummer in `TUTORIAL.md` aus dem `main`-Branch übereinstimmen. Zum Beispiel wird der Commit mit der Nachricht `10.1` geladen, wenn ein Benutzer zum Schritt `10.1` geht.
+
+Um Änderungen an den Commits in einem Versionsbranch vorzunehmen, musst du die Commits, die du ändern willst, rebasen und bearbeiten. Dadurch wird die Git-Historie umgeschrieben, sodass wir keine PRs für diese Art von Branch akzeptieren können. Sobald ein Versionsbranch im freeCodeCamp-Repository vorhanden ist, sollte er sich nicht mehr ändern.
+
+> [!WARNING]
+>
+> Nimm niemals Änderungen an einem Versionsbranch vor, der sich in einem der freeCodeCamp-Repos befindet. Erstelle immer einen Neuen.
+
+## How to Contribute
+
+### Voraussetzungen
+
+Installiere die [CodeRoad CLI Tools](https://www.npmjs.com/package/@coderoad/cli) mit `npm install -g @coderoad/cli`.
+
+Es gab einige Probleme mit der neuesten Version. Wenn `coderoad --version` nach der Installation nicht funktioniert, mache ein Downgrade auf `0.7.0` mit `npm install -g @coderoad/cli@0.7.0`.
+
+### Arbeiten an `main`
+
+Diese Anleitung ist für PRs, die nur kleine Änderungen an `main` zu **bestehenden Lektionen** vornehmen. Dabei handelt es sich hauptsächlich um Änderungen oder Korrekturen von Tippfehlern, Grammatik, Hinweisen und Anleitungen in der Datei `TUTORIAL.md`.
+
+Für alles andere, einschließlich des Hinzufügens oder Löschens von Lektionen, befolge den [Leitfaden zum Arbeiten an einem Versionsbranch](#working-on-version-branch). Du musst dafür keinen neuen Versionsbranch erstellen - du kannst einen PR erstellen, indem du den Anweisungen unten folgst.
+
+> [!NOTE]
+>
+> Diese Änderungen werden den bestehenden Versionsbranch verwenden. Wenn sie besonders wichtig sind, kannst du sie gerne in die `CHANGELOG.md` aufnehmen. In den meisten Fällen sollte eine gute Commit-Nachricht ausreichen.
+
+Du musst die Datei `tutorial.json` nie direkt ändern. Diese wird mit den CLI-Tools erstellt.
+
+Wenn du nur geringfügige Änderungen vornimmst, wie z. B. das Ausbessern eines Schreib- oder Grammatikfehlers, musst du deine Änderungen nicht testen.
+
+Befolge diese Anweisungen, um einen PR zu erstellen. Beachte dabei, dass die Anweisungen normalerweise die Lektionen um sie herum als Kontext verwenden:
+
+- Erstelle eine Kopie des neuesten Versionsbranch mit `git branch vX.X.X upstream/vX.X.X` - du musst diesen Branch nicht auschecken, er muss nur existieren.
+- Erstelle einen neuen Branch von `main` und checke ihn aus.
+- Mache deine Änderungen und führe einen **Commit** durch. Zur Erinnerung: Du musst nichts in der Datei `tutorial.json` ändern. Wahrscheinlich musst du nur Änderungen an der `TUTORIAL.md` vornehmen
+- Führe `coderoad build` aus, um die Datei `tutorial.json` neu zu erstellen
+- Übertrage deine Änderungen mit `update json` als Nachricht
+- Erstelle einen PR
+
+### Testing Changes on `main`
+
+Wenn du deine Änderungen an `main` nach den obigen Anweisungen testen willst, befolge diese Anweisungen:
+
+- Befolge die Anweisungen auf dem [rdb-alpha Repo](https://github.com/freeCodeCamp/rdb-alpha), um einen Container zu starten
+- Starte das Tutorial mit der `tutorial.json` Datei auf dem neuen Branch
+
+### Reviewing PRs to `main`
+
+Wenn du einen PR überprüfst, der nur `main` ändert und dabei wie oben beschrieben didaktische oder grammatikalische Probleme behandelt, sollten die Änderungen in `TUTORIAL.md` mit den Änderungen in `tutorial.json` übereinstimmen.
+
+Die Datei `tutorial.json` sollte keine Änderungen an Commit-Hashes oder Step/Level-Ids enthalten. Start- oder Level-Befehle oder Datei-Überwachungen sollten wahrscheinlich auch nicht geändert werden. Es gibt Ausnahmen, wenn es ein Problem mit einer Stufe gibt, aber die sollten mit mehr Vorsicht behandelt werden.
+
+Denke auch daran, dass die Anleitungen in der Regel die Lektionen um sie herum als Kontext verwenden, also achte darauf, dass sie sinnvoll sind.
+
+### Working on Version Branch
+
+> [!WARNING]
+>
+> Zur Erinnerung: Nimm niemals Änderungen an einem Versionsbranch vor, der sich in einem der freeCodeCamp-Repos befindet. Erstelle immer einen Neuen.
+
+Es gibt keine einfache Möglichkeit, genau zu sehen, was sich zwischen den Versionsbranches geändert hat, da die Git-Historie neu geschrieben wird. Die Verwendung neuer Versionsbranches muss sorgfältig abgewogen und getestet werden.
+
+Diese Anweisungen gelten für alle Änderungen in einem "Versions"-Branch, wie z. B. Tests, Testtexte, Zurücksetzen von Dateien, Hinzufügen und Löschen von Schritten und vieles mehr.
+
+Befolge diese Anweisungen, um eine neue Version zu erstellen:
+
+- Checke den **letzten** Versionsbranch mit `git checkout -b vX.X.X upstream/vX.X.X` aus
+- Erstelle einen neuen Branch davon, indem du die Version mit `git checkout -b vX.X.Y` erhöhst
+- Nimm deine Änderungen an dem Versionsbranch vor. Weitere Informationen zur Arbeit mit Tutorials findest du in der [CodeRoad Dokumentation](https://coderoad.github.io/docs/edit-tutorial)
+- Schiebe den neuen Branch zu deinem Fork mit `git push -u origin vX.X.Y`
+- Schau dir den `main`-Branch an
+- Erstelle einen neuen Branch von `main`. z.B. `feat/version-X.X.Y`
+- Ändere die `uri` in `coderoad.yaml` zu deinem Fork des Repos. So können du und die Prüfer sie testen, bevor sie in das freeCodeCamp-Repository gestellt wird. Ändere die Version auf den neuen Branch an den beiden Stellen der Datei. Füge deine Änderungen für die neue Version in die `CHANGELOG.md` ein. Nimm alle anderen Änderungen vor, die du benötigst.
+- Bestätige (Commit) deine Änderungen mit der Nachricht `Feat: Release Version X.X.Y - `
+- Starte `coderoad build`, um eine neue `tutorial.json`-Datei zu erstellen
+- Füge die Datei hinzu und übertrage sie
+- Schiebe die Änderungen in deinen Fork
+- Teste deine Änderungen gemäß der [Testanweisungen unten](#testing-changes-to-a-version-branch). Nimm weitere Änderungen vor und übertrage sie, wie du es soeben getan hast, oder befolge den Rest der Anweisungen, wenn du zufrieden bist
+- Erstelle einen PR für `main` mit deinem neuen `feat/version-X.X.Y`-Branch. Gib ihm einen Titel wie `Version X.X.Y ready for review`. Dies wird nicht zusammengeführt (merged), sondern dient nur dazu, die Prüfer wissen zu lassen, dass eine neue Version bereitsteht
+- Danach werden deine Änderungen überprüft
+
+### Testing Changes to a Version Branch
+
+- Befolge die Anweisungen auf dem [rdb-alpha Repo](https://github.com/freeCodeCamp/rdb-alpha), um einen Container zu starten
+- Starte das Tutorial mit der Datei `tutorial.json` in dem Fork, in dem sich die Änderungen befinden. Achte darauf, dass du die Datei im `feat: Version-X.X.Y`-Branch verwendest und nicht im `main`-Branch
+
+### Pushing a New Version
+
+Bevor du eine neue Version veröffentlichst, schau dir den neuen `feat/version-vX.X.Y`-Branch (wird mit `main` zusammengeführt) auf dem Fork des Benutzers an. Vergewissere dich, dass die Datei `CHANGELOG.md` um die neuen Änderungen ergänzt wurde und dass die Version an den beiden Stellen der `coderoad.yaml` mit dem neuen Versionsbranch übereinstimmt.
+
+Wenn du Schreibzugriff auf das freeCodeCamp-Repository hast, die Dateien `CHANGELOG` und `coderoad.yaml` überprüft hast, die Änderungen anhand der obigen Anweisungen getestet hast und eine neue Version eines Tutorials pushen möchtest:
+
+> [!WARNING]
+>
+> Zur Erinnerung: Nimm niemals Änderungen an einem Versionsbranch vor, der sich in einem der freeCodeCamp-Repos befindet. Erstelle immer einen Neuen.
+
+- Wenn du keinen Remote-Zugang zu dem Ort hast, an dem die neuen Änderungen existieren, erstelle einen Remote-Zugang zum Fork des Benutzers mit `git remote add `
+- Lösche alle **lokalen** Branches, die den gleichen Namen haben wie die neuen Branches. Wahrscheinlich heißen sie entweder `vX.X.Y` oder `feat/version-X.X.Y`
+- Checke den neuen Versionsbranch mit `git checkout -b vX.X.Y /vX.X.Y` aus
+- Schiebe den neuen Versionszweig mit `git push -u upstream/vX.X.Y` in das freeCodeCamp Repo. Du musst den neuen Branch pushen, bevor du `main` mit der neuen `tutorial.json`-Datei aktualisierst
+- Checke den Benutzerbranch aus, der mit `main` zusammengeführt werden soll, mit `git checkout -b feat/version-X.X.Y /feat/version-X.X.Y`
+- Ändere die `uri` in `coderoad.yaml` zurück auf das freeCodeCamp Repo
+- Füge die Änderungen hinzu und übertrage sie
+- Starte `coderoad build`, um die neue `tutorial.json`-Datei zu erstellen
+- Füge die Datei hinzu und übertrage sie
+- Schiebe die Änderungen in deinen Fork mit `git push -u origin/feat/version-X.X.Y`
+- Erstelle einen PR zu `main` auf dem freeCodeCamp Repo
+- Wenn du zufrieden bist, füge es zusammen oder lass es und bitte um eine Überprüfung von jemandem
+- Nachdem der PR zusammengeführt wurde, öffne das Tutorial, indem du den Anweisungen im [rdb-alpha repo](https://github.com/freeCodeCamp/rdb-alpha) folgst, um sicherzustellen, dass es richtig geladen wird und du einige Schritte durchlaufen kannst
+- Finally, if any PRs for this version exist, close them
+
+### How to Revert to a Previous Version
+
+- Create a new branch off of the latest `main` with `git checkout -b revert/to-version-X.X.X`
+- Mach alle Commits in diesem Branch rückgängig, bis einschließlich des Commits der Version, die auf die Version folgt, zu der du zurückkehren willst. Du könntest zum Beispiel Commits haben, die wie folgt aussehen:
+
+```
+fix: typo
+release: version 1.0.1
+fix: typo
+release: version 1.0.0
+```
+
+Wenn du zu v1.0.0 zurückkehren willst, nimm alle Commits ab `Release: Version 1.0.1` und danach zurück
+
+- Erstelle einen PR. Gib ihm einen Titel wie `revert: to version X.X.X`
diff --git a/src/content/docs/de/intro.md b/src/content/docs/de/intro.md
new file mode 100644
index 00000000..d1a4f949
--- /dev/null
+++ b/src/content/docs/de/intro.md
@@ -0,0 +1,49 @@
+---
+title: Contribute to the freeCodeCamp.org Community
+---
+
+Die [freeCodeCamp.org](https://freecodecamp.org)-Community ist dank tausender freundlicher Freiwilliger wie dir möglich. Wenn Du deine Zeit und dein Fachwissen einbringen möchtest, würden wir uns freuen, dich an Bord begrüßen zu dürfen.
+
+> [!NOTE] Bevor du fortfährst, nimm dir bitte kurz 2 Minuten Zeit, um unseren [Verhaltenskodex (Code of Conduct)](https://www.freecodecamp.org/code-of-conduct) zu lesen. Wir setzen Ihn in unserer Community strikt durch, damit das Mitwirken bei freeCodeCamp.org für alle eine sichere, inklusive Erfahrung ist.
+
+Du bist herzlich eingeladen, Inhalte für unseren [Studienplan](#curriculum) zu erstellen, zu aktualisieren und Fehler zu beheben. Du kannst uns helfen, Fehler in der [Lernplattform](#learning-platform) von freeCodeCamp.org zu beheben, oder uns helfen, freeCodeCamp.org in verschiedene Weltsprachen zu[ übersetzen](#translations).
+
+Wir beantworten die häufigsten Fragen zum Thema Mithilfe [ in unseren FAQ für Mitwirkende](FAQ).
+
+Fröhliches Mitmachen.
+
+---
+
+## Studienplan
+
+Unser Studienplan wird von der weltweiten freeCodeCamp-Community zusammengestellt. Auf diese Weise können wir das Fachwissen von Freiwilligen wie dir einfließen lassen.
+
+Du kannst helfen, den Studienplan zu erweitern und zu verbessern. Du kannst auch die User Stories der Projekte aktualisieren, um die Konzepte besser zu erklären. Und du kannst unsere automatisierten Tests verbessern, damit wir den Code der Teilnehmer/innen noch genauer testen können.
+
+**Wenn du daran interessiert bist, unseren Studienplan zu verbessern, erfährst du hier [wie du zum Studienplan beitragen kannst](how-to-work-on-coding-challenges).**
+
+## Übersetzungen
+
+Wir lokalisieren freeCodeCamp.org in die wichtigsten Sprachen der Welt.
+
+Die Zertifizierungen sind bereits in einigen wichtigen Weltsprachen, wie unten zu sehen, verfügbar:
+
+- [Chinesisch (中文)](https://www.freecodecamp.org/chinese/learn)
+- [Spanisch (Español)](https://www.freecodecamp.org/espanol/learn)
+- [Italienisch (Italiano)](https://www.freecodecamp.org/italian/learn)
+- [Portugiesisch (Português)](https://www.freecodecamp.org/portuguese/learn)
+- [Ukrainisch (Українська)](https://www.freecodecamp.org/ukrainian/learn)
+- [Japanisch (日本語)](https://www.freecodecamp.org/japanese/learn)
+- [German (Deutsch)](https://www.freecodecamp.org/german/learn)
+
+Wir möchten dich dazu ermutigen, die [Ankündigung hier](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/) zu lesen und sie an deine Freunde weiterzuleiten, um sie für dieses Thema zu begeistern.
+
+**Wenn du daran interessiert bist, zu übersetzen, findest du hier [eine Anleitung zum Übersetzen der freeCodeCamp-Ressourcen](how-to-translate-files).**
+
+## Lernplattform
+
+Unsere Lernplattform läuft auf einem modernen JavaScript-Stack. Es umfasst verschiedene Komponenten, Werkzeuge und Bibliotheken. Dazu gehören Node.js, MongoDB, OAuth 2.0, React, Gatsby, Webpack und mehr.
+
+Im Großen und Ganzen haben wir einen Node.js-basierten API-Server, eine Reihe von React-basierten Client-Anwendungen, Testskripte, um die von Teilnehmer:innen eingereichten Studienplanprojekten zu bewerten, und einiges mehr. Wenn du einen produktiven Beitrag zur Lernplattform leisten willst, empfehlen wir dir, dich mit diesen Werkzeugen etwas vertraut zu machen.
+
+**If you want to help us improve our codebase here's [how to set up freeCodeCamp](how-to-setup-freecodecamp-locally).**
diff --git a/src/content/docs/de/language-lead-handbook.md b/src/content/docs/de/language-lead-handbook.md
new file mode 100644
index 00000000..37ee0386
--- /dev/null
+++ b/src/content/docs/de/language-lead-handbook.md
@@ -0,0 +1,376 @@
+---
+title: Das offizielle freeCodeCamp-Language Lead-Handbuch
+---
+
+Dieses Handbuch hilft dir dabei, die Tools für deine Lokalisierungsvorhaben einzurichten und zu nutzen.
+
+## How to Invite New Contributors to Ghost
+
+Ghost allows you to set contributors with different levels of authorization.
+
+Die meisten Ihrer Einladungen werden für die Stufe "Contributor " sein. Auf dieser Ebene kann der Benutzer Entwürfe erstellen. Wähle diese Rolle, wenn du einen neuen Übersetzer einlädst.
+
+Die Stufe "Author" ermöglicht es dem Benutzer, Entwürfe zu erstellen und diese zu veröffentlichen.
+
+Auf der Ebene "Editor" hat der Benutzer Zugriff auf alle Entwürfe und kann sie veröffentlichen. Wähle diese Rolle, wenn du einen neuen Korrekturleser (proofreader) einlädst.
+
+Die Stufe "Administrator" ist für freeCodeCamp-Mitarbeiter und Language Leads reserviert.
+
+### How are the Articles Built
+
+Wir verwenden einen [JAMStack](https://www.google.com/search?q=what+is+jamstack)-basierten Ansatz zur Erstellung und Bereitstellung der Artikel. Diese Strategie sorgt für eine schnelle statische Website, die von einem CDN zwischengespeichert und bereitgestellt wird.
+
+[Ghost](https://ghost.org) fungiert als unsere Content-Management-Plattform, und [11ty](https://11ty.dev) erstellt aus den Artikeln statische Inhalte - einfaches HTML, JavaScript und CSS. Nur diese statischen Inhalte werden auf unseren Servern bereitgestellt.
+
+Dieser Prozess ist automatisiert und läuft regelmäßig ab. Wenn du jetzt etwas veröffentlichst, wird es in ein paar Stunden auf der Nachrichtenseite verfügbar sein.
+
+Die aktuellen Zeitpläne und den Status kannst du hier einsehen: https://github.com/freeCodeCamp/news#build
+
+## How to Mention the Original Author of a Translated Article
+
+The original author and the original article are linked automatically adding this code to the Code Injection -> head section in the Draft Settings on Ghost.
+
+```html
+
+```
+
+`Link` ist der Link zum Originalartikel.
+
+## How to Update Trending Articles
+
+:::tip
+Changing the articles in the footer at least once a month means giving a boost to the linked articles on Google results.
+:::
+
+To update the trending articles in the footer, you need to update the [yaml file in the CDN repository](https://github.com/freeCodeCamp/cdn/tree/main/build/universal/trending) for your language. Both the curriculum and the publication reference this file.
+
+For example, here is the file content for the first 6 articles:
+
+```yaml
+article0
+title: "Unire CSV con Python"
+article0link: "https://www.freecodecamp.org/italian/news/come-combinare-file-multipli-in-formato-csv-con-8-righe-di-codice/"
+article1
+title: "Il comando Git push"
+article1link: "https://www.freecodecamp.org/italian/news/il-comando-git-push-spiegato/"
+article2
+title: "Centrare immagini in CSS"
+article2link: "https://www.freecodecamp.org/italian/news/come-centrare-un-immagine-usando/"
+article3
+title: "I codici Alt"
+article3link: "https://www.freecodecamp.org/italian/news/codici-alt/"
+article4
+title: "Tenere a bada il footer"
+article4link: "https://www.freecodecamp.org/italian/news/come-mantenere-il-footer-al-suo-posto/"
+article5
+title: "Cosa è API?"
+article5link: "https://www.freecodecamp.org/italian/news/cose-un-api-in-italiano-per-favore/"
+```
+
+Each number represents one of the 30 articles in the footer. Achte darauf, dass der Titel und der Link richtig zugeordnet sind.
+
+For each article, you will need to create a shorter title to use in the footer. Jeder Titel muss in einer einzigen Zeile bleiben und darf nicht in eine neue Zeile übergehen.
+
+Du solltest [den übersetzten Client lokal einrichten](how-to-enable-new-languages), um zu sehen, ob die Titel die richtige Länge haben. You can preview the changes by editing the `trending.json` file in your local environment:
+
+1. Update your `.env` file to use your language for `CLIENT_LOCALE` and `CURRICULUM_LOCALE`.
+
+2. Run `pnpm run create:shared`. This will automatically generate the `trending.json` file for your language under the `/client/i18n/locales/` directory.
+
+3. Start the server by running `pnpm run develop:server` in one terminal window.
+
+4. Edit the `trending.json` to contain the titles you want to preview. You may want to convert your `.yaml` file into JSON format with an automatic tool.
+
+5. In another terminal window, run `pnpm run clean:client`, and then `pnpm run develop:client`
+
+## How to Translate Articles in the Footer Links
+
+There are some links listed at the bottom of the footer (About, Alumni Network, Open Source, etc.) and some of them can be translated into your language in the same way as other articles.
+
+Articles that can be translated:
+
+- About
+- Support
+- Academic Honesty
+- Code of Conduct
+
+The following articles should **not** be translated:
+
+- Shop
+- Sponsors
+- Privacy Policy
+- Terms of Service
+- Copyright Policy
+
+The following links are pointing to external sites and cannot be translated:
+
+- Alumni Network
+- Open Source
+
+### Change the Footer Links in the News
+
+Once you have translated and published the articles listed as "can be translated" above, you can update the links in the footer for `/news` by editing the file at `news/config/i18n/locales//links.json` in the [freeCodeCamp/news](https://github.com/freeCodeCamp/news) repository.
+
+> [!NOTE] Pull requests to this repository are currently limited to staff only. If you want to update this file, ask someone on the staff team for help.
+
+Update the following part in the file:
+
+```json
+{
+ ...
+ "footer": {
+ "about": "https://www.freecodecamp.org/news/about/",
+ "support": "https://www.freecodecamp.org/news/support/",
+ "honesty": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc": "https://www.freecodecamp.org/news/code-of-conduct/"
+ }
+}
+```
+
+### Change the Footer Links in the Curriculum
+
+When you have translated and published the articles listed as "can be translated" above, as well as when the curriculum in your language is ready for launch, you can update the links in the footer for `/learn` by editing the file at `client/i18n/locales//links.json` in the [freeCodeCamp/freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp) repository.
+
+> [!WARNING] Only "About", "Support", "Academic Honesty", and "Code of Conduct" can be translated. Leave other URLs unchanged.
+
+Update the following part in the file:
+
+```json
+{
+ ...
+ "footer": {
+ "about-url": "https://www.freecodecamp.org/news/about/",
+ "shop-url": "https://www.freecodecamp.org/shop/",
+ "support-url": "https://www.freecodecamp.org/news/support/",
+ "sponsors-url": "https://www.freecodecamp.org/news/sponsors/",
+ "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/",
+ "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/",
+ "tos-url": "https://www.freecodecamp.org/news/terms-of-service/",
+ "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
+ },
+ ...
+}
+```
+
+## How to Translate the Info Boxes Headers in the Documentation
+
+Du findest diese Boxen überall in der Dokumentation:
+
+> [!NOTE] Ich bin eine Notizbox
+
+:::tip
+Ich bin eine Tippbox
+:::
+
+> [!WARNING] Ich bin eine Warnbox
+
+:::danger
+Ich bin eine Aufmerksamkeitsbox
+:::
+
+Standardmäßig erscheinen die Kopfzeilen auch in den übersetzten Dokumenten auf Englisch.
+
+Du kannst die Kopfzeilen in den Dokumenten in deine Sprache übersetzen lassen, indem du die Datei `docs/index.html` auf diese Weise änderst:
+
+Innerhalb des `script` Elements gibt es ein Objekt, die `flexibleAlerts` Eigenschaft, die diese Form hat:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+Innerhalb des Objekts der Label-Eigenschaft, vor der `'/'`-Eigenschaft, fügst du eine neue Eigenschaft für deine Sprache hinzu, wie `/i18n//`.
+
+Das Hinzufügen der Übersetzungen für Portugiesisch würde zum Beispiel so aussehen:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/i18n/portuguese/': 'Observação',
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/i18n/portuguese/': 'Dica',
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/i18n/portuguese/': 'Aviso',
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/i18n/portuguese/': 'Atenção',
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+## How to Translate the Motivational Quotes
+
+Die motivierenden Zitate befinden sich im [Curriculum-Repository](https://github.com/freeCodeCamp/freeCodeCamp/) in der Datei `/client/i18n/locales//motivation.json`.
+
+Diese Datei hat folgende allgemeine Struktur:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": []
+}
+```
+
+Die Komplimente sind die kurzen Sätze, die am Ende einer Aufgabe erscheinen.
+
+Du musst die Sätze nicht direkt aus dem Englischen übersetzen, sondern kannst eine Reihe von kurzen Sätzen schreiben, die sich eignen, um sie am Ende einer Aufgabe zu zeigen.
+
+The `compliments` array is an array of strings. So, for example, you would write:
+
+```json
+{
+ "compliments": ["A tutta birra!", "Pikachu, scelgo te!"],
+ "motivationalQuotes": []
+}
+```
+
+:::tip
+Du solltest mit mindestens einem Dutzend Komplimenten beginnen, um eine gewisse Abwechslung zu schaffen, wenn die Benutzer die Aufgaben abschließen.
+:::
+
+Die Motivationszitate sind die Zitate, die auf https://freecodecamp.org/learn erscheinen.
+
+Das `motivationalQuotes`-Array ist ein Array aus Objekten. Diese Objekte sollten eine `quote`-Eigenschaft und eine `author`-Eigenschaft enthalten. Wie hier:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": [
+ {
+ "quote": "Se i costruttori costruissero come i programmatori programmano, il primo picchio che passa potrebbe distruggere la civiltà.",
+ "author": "Artur Bloch, Seconda legge di Weinberg"
+ },
+ {
+ "quote": "I bravi programmatori sanno cosa scrivere. I migliori sanno cosa riscrivere.",
+ "author": "Eric Steven Raymond"
+ }
+ ]
+}
+```
+
+:::tip
+Du solltest mit mindestens einem Dutzend Zitaten beginnen, um eine gewisse Vielfalt zu haben. A new quote is shown every time the user reloads the page.
+:::
+
+## How to Update the Common Links
+
+In der Datei `/client/i18n/locales//links.json` wird eine Datei mit allgemeinen Links geführt, die auf unserer [Lehrplan-Website](https://github.com/freecodecamp/freecodecamp) verwendet wird.
+
+Einige dieser Links werden sich nicht ändern - aber du solltest die `/news`-Artikel-Links aktualisieren, damit sie auf die übersetzte Version des Artikels in deiner Sprache verweisen, wenn er veröffentlicht wird.
+
+Du solltest auch die `help`-Kategorien aktualisieren, um auf das Unterforum deiner Sprache zu verweisen (normalerweise `language/category`, wie `Italiano/HTML-CSS`). Dies ermöglicht es freeCodeCamp-Benutzern, 'Hilfeanfragen' im richtigen Forum zu erstellen.
+
+## How to Update the Site Meta-Data
+
+Die Metadaten der Website befinden sich in der Datei `/client/i18n/locales//meta-tags.json`. Diese Datei hat 5 Schlüssel:`title`, `description`, `social-description`, `keywords`, und `youre-unsubscribed`.
+
+Der Wert `youre-unsubscribed` sollte direkt übersetzt werden. Die anderen Werte müssen so genau wie möglich übersetzt werden, wobei auch die in deiner Sprache üblichen Suchbegriffe und Phrasen berücksichtigt werden müssen.
+
+Wenn du dabei Hilfe benötigst, wende dich an uns im ["Contributor" Chat](https://discord.gg/PRyKn3Vbay)
+
+## Vorübersetzungs-Workflow auf Crowdin
+
+Der Vorübersetzungs-Workflow kann verwendet werden, um Übersetzungen aus dem Translation Memory auf Strings anzuwenden.
+
+:::tip
+Diese Funktion ist sehr nützlich, um viele Übersetzungen aus dem Translation Memory in großen Mengen wiederherzustellen, wenn viele Dateien aktualisiert worden sind.
+:::
+
+Du findest den Vorübersetzungs-Workflow oben auf der Seite in der Konsole eines Projekts. Wenn du in der oberen rechten Ecke "Go to console" siehst, klicke zuerst darauf.
+
+
+
+
+
+Du kannst "From Machine Translation" oder "From Translation Memory" wählen. Wähle "Translation Memory", um Übersetzungen aus dem Speicher wiederherzustellen.
+
+Dann sind drei Schritte zu absolvieren:
+
+1. Dateien. Choose which files to translate, you can do all the projects, or specific folders or files.
+2. Sprachen. Stelle hier deine Sprache ein.
+3. Vorhandene Übersetzungen. Die beste Kombination ist hier "100% match" und "Apply to untranslated strings only". Genehmige nicht automatisch, denn es ist immer besser, ein menschliches Auge auf die Dinge zu werfen.
+
+
+
+Wenn du diese Einstellung abgeschlossen hast, drücke den Button Pre-Translate und warte. Sobald der Vorgang abgeschlossen ist, wirst du benachrichtigt. Wie lange das dauert, hängt davon ab, wie viele unübersetzte Strings in den ausgewählten Dateien enthalten sind.
+
+## How to Update Crowdin Glossary
+
+:::tip
+An updated glossary helps in having a homogeneous translation of technical terms.
+:::
+
+Das Crowdin-Glossar wird im [crowdin-glossaries](https://github.com/freeCodeCamp/crowdin-glossaries)-Repository aufbewahrt.
+
+In the `glossaries` folder, there are various `*.csv` (comma,separated values) files, one for each of the crowdin projects that have a glossary that can be updated from this workflow.
+
+Die `client.csv`-Datei ist für das Projekt "Learn User Interface", die `curriculum.csv`-Datei ist für das Projekt "Coding Curriculum", die `docs.csv`-Datei ist für das Projekt "Contributing Documentation".
+
+To update the Crowdin Glossaries, you need to clone this repo locally. Open the `.csv` file with an appropriate program, for example, Microsoft Excel.
+
+In der `.csv`-Datei siehst du, dass die englische Sprache die ersten drei Spalten belegt, `Term:English` ist die Spalte für den englischen Begriff, `Description:English` ist die Spalte für die englische Beschreibung, und `Part:English` steht für die Wortart (z. B. Substantiv, Verb usw.) des Begriffs.
+
+Dann hat jede Zielsprache zwei Spalten. Wenn du ins Dothrakische übersetzt, wirst du an den Spalten `Term:Dothraki` und `Description:Dothraki` interessiert sein. Die Spalte `Term:Dothraki` ist für die Übersetzung des Begriffs in Dothraki, und die Spalte `Description:Dothraki` ist für die Beschreibung des Begriffs in Dothraki.
+
+:::tip
+In programs like Microsoft Excel, you can hide the columns of the other languages to free up screen real-estate and see the English columns and the target language columns near each other.
+:::
+
+Nachdem du die Änderungen vorgenommen und die Datei gespeichert hast, musst du einen PR mit den vorgeschlagenen Änderungen erstellen. Nachdem der PR angenommen wurde, musst du den GitHub Action-Workflow ausführen, um das Crowdin-Glossar zu aktualisieren. Deine Änderungen im Glossar werden sich nicht sofort auswirken, aber sie werden kommen.
+
+## Wie man einen Mitwirkenden zum Korrekturleser (Proofreader) befördert
+
+If you consider that a contributor could become a Crowdin Proofreader, you can give the proofreader role to them this way:
+
+In Crowdin, individuate the `User management` on the left-hand side menu.
+
+Dadurch wird die Benutzerverwaltung geöffnet, in der du die Liste aller Benutzer sehen kannst.
+
+Search for the user who will become a proofreader. Verwende das Menü mit den drei Punkten in der Benutzerzeile, um ein Menü zu öffnen und wähle "Add to team". Die Korrekturleserteams haben den Standardnamen `Proof Readers()`, du kannst das Team über den Namen der Sprache suchen. Wenn du das Team ausgewählt hast, benutze den Button "ADD" unten auf der Seite, um den Vorgang abzuschließen.
+
+Der Benutzer ist jetzt ein Korrekturleser.
+
+:::tip
+Der neu beförderte Korrekturleser könnte vom Lesen der [Korrekturlesen von Übersetzungen](how-to-proofread-files)-Dokumentation profitieren.
+:::
+
+## How to Add or Update a Language
+
+Check out the [how to enable new language](how-to-enable-new-languages) docs. If you are updating a language the section on [set translated superblocks](how-to-enable-new-languages#set-translated-superblocks) should be helpful.
diff --git a/src/content/docs/de/moderator-handbook.md b/src/content/docs/de/moderator-handbook.md
new file mode 100644
index 00000000..5058d67a
--- /dev/null
+++ b/src/content/docs/de/moderator-handbook.md
@@ -0,0 +1,376 @@
+---
+title: Das offizielle freeCodeCamp Moderator Handbuch
+---
+
+Dieses Handbuch hilft dir, verschiedene Orte in unserer Community zu moderieren. This covers conversations and interactions in issues and pull request threads on GitHub, the community forum, the chat rooms, and other official communities that we foster.
+
+:::note
+Alle freeCodeCamp-Moderatoren sind Community-weite Moderatoren. That means we trust you to oversee any of these places.
+:::
+
+Du kannst auf jeder der Plattformen, die dich am meisten interessieren, als Moderator/in tätig sein. Einige Moderatoren helfen nur auf GitHub, während andere nur im Forum helfen. Einige Moderatoren sind überall aktiv.
+
+Unterm Strich wollen wir, dass es dir Spaß macht, Moderator/in zu sein, und dass du deine knappe Zeit in Dinge investierst, die dich interessieren.
+
+> "Mit großer Macht kommt große Verantwortung" - Uncle Ben
+
+Als Moderator/in ist das Temperament wichtiger als die technischen Fähigkeiten.
+
+Hör zu. Be helpful. Missbrauche deine Macht nicht.
+
+Das freeCodeCamp ist eine inklusive Community, und das soll auch so bleiben.
+
+We have a single [Code of Conduct](https://code-of-conduct.freecodecamp.org) that governs our entire community. Je weniger Regeln, desto einfacher ist es, sich sie zu merken. Du kannst die Regeln [hier](https://code-of-conduct.freecodecamp.org) lesen und sie dir einprägen.
+
+:::note
+As a moderator, we would add you to one or more teams on GitHub, our community forums & chat servers. If you are missing access to a platform that you would like to moderate, please [reach out to a staff member](FAQ#additional-assistance).
+:::
+
+## GitHub moderieren
+
+Auf GitHub haben Moderatoren zwei Hauptaufgaben:
+
+1. Triaging and responding to issues.
+2. Reviewing and merging pull requests (aka QA).
+
+### GitHub Issues moderieren
+
+We use our main [`freeCodeCamp/freeCodeCamp`](https://github.com/freeCodeCamp/freeCodeCamp/issues) repository as a common issue tracker for all of our repositories. We get new issues every day, all of which need to be triaged, labeled, and addressed. Das ist auch ein guter Ort, um mit Beiträgen zur Open-Source-Codebasis anzufangen.
+
+#### Triage von Issues
+
+[Triaging](https://en.wikipedia.org/wiki/Triage) ist ein Prozess, bei dem die Aufmerksamkeit für jeden neuen Issue Report priorisiert wird. Wir haben eine umfangreiche Liste von Labels, die wir verwenden, um die Priorität, Kategorie, Status und Umfang jedes Problems zu kennzeichnen.
+
+Du kannst uns helfen, die Issues zu ordnen und einzuteilen, indem du Labels aus [dieser Liste](https://github.com/freeCodeCamp/freeCodeCamp/labels) anwendest. Normalerweise ist neben dem Label eine Beschreibung verfügbar, in der die Bedeutung erläutert wird.
+
+Bitte achte besonders auf die Label `"help wanted"` und `"first timers only"`. Diese sollen zu Threads hinzugefügt werden, von denen du denkst, dass sie für potenzielle Mitwirkende geöffnet werden können, um einen Pull-Request zu erstellen.
+
+For triaging a trivial issue such as a typo fix, it is recommended to apply a "first timers only" label along with additional information. You can utilize the [reply template](reply-templates#first-timer-only-issues) provided for this purpose.
+
+#### Schließen veralteter, inaktiver Issues und Pull-Requests
+
+- Veraltete Issues oder PRs sind solche, die seit 21 Tagen (3 Wochen nach der letzten Aktivität) keine Aktivität vom Autor erfahren haben, aber erst nachdem ein Moderator weitere Informationen/Änderungen angefordert hat.
+
+- Activity is defined as: Comments requesting an update on the PR and triages like `status: update needed` label, etc.
+
+- Wenn der Beitragende um zusätzliche Hilfe oder sogar Zeit bittet, kann das oben Gesagte gelockert und nach einer Antwort erneut überprüft werden. In jedem Fall sollten die Moderatoren nach bestem Wissen und Gewissen den Status der ausstehenden PR klären.
+
+:::tip
+We recommend you use this list of standard [reply templates](reply-templates) while triaging issues.
+:::
+
+### Pull-Requests moderieren
+
+Pull Requests (PRs) sind die Art und Weise, wie Mitwirkende Änderungen an das freeCodeCamp-Repository übermitteln. Wir müssen eine Qualitätssicherung (QA) für Pull-Requests durchführen, bevor wir entscheiden, ob wir sie zusammenführen, Änderungen beantragen oder schließen.
+
+#### Arten von Pull Requests
+
+1. **Challenge instruction edits**
+
+ These are changes to the text of challenges - the description, instructions, or test text.
+
+ Du kannst sie auch direkt auf GitHub überprüfen und entscheiden, ob du sie zusammenführen möchtest. Wir müssen hier etwas vorsichtiger sein, denn Millionen von Menschen werden diesem Text begegnen, wenn sie den freeCodeCamp-Studienplan durcharbeiten. Macht der Pull-Request den Text klarer, ohne ihn viel länger zu machen? Sind die Änderungen relevant und nicht übermäßig pedantisch? Denke daran, dass unser Ziel ist, dass die Aufgaben so deutlich und so kurz wie möglich sind. Sie sind nicht der Ort für unklare Details. Die Mitwirkenden könnten versuchen, Links zu Ressourcen zu den Aufgaben hinzuzufügen.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ If the changes look good, please ensure to leave an approval with a "LGTM" (Looks Good To Me) comment. Sobald ein Pull Request mindestens zwei Genehmigungen (einschließlich deiner) von den Moderatoren oder dem Entwicklungsteam erhält, kannst du ihn zusammenführen.
+
+2. **Challenge code edits**
+
+ These are changes to the code in a challenge - the challenge seed, challenge solution, and test strings.
+
+ These pull requests need to be pulled down from GitHub and tested on your local computer or Gitpod to make sure the challenge tests can still be passed with the current solution and to make sure the new code doesn't introduce any errors.
+
+ Einige Mitwirkende werden versuchen, zusätzliche Tests hinzuzufügen, um spitzfindige Sonderfälle abzudecken. Wir müssen aufpassen, dass wir die Aufgabe nicht zu kompliziert machen. Diese Aufgaben und ihre Tests sollten so einfach und intuitiv wie möglich sein. Abgesehen von den Algorithmusaufgaben und dem Abschnitt zur Interviewvorbereitung sollten die Teilnehmer/innen in der Lage sein, jede Aufgabe innerhalb von etwa 2 Minuten zu lösen.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ If the changes look good, please ensure to leave an approval with an "LGTM" comment. Sobald ein Pull-Request mindestens zwei Genehmigungen (einschließlich deiner) von den Moderatoren oder dem Entwicklungsteam erhält, kannst du ihn zusammenführen.
+
+3. **Platform changes**
+
+ Diese Code-Bearbeitungen ändern die Funktionalität der freeCodeCamp-Plattform selbst.
+
+ Manchmal versuchen Mitwirkende, Änderungen ohne große Erklärungen vorzunehmen, aber bei Codeänderungen müssen wir sicherstellen, dass es einen echten Bedarf für die Änderung gibt. Diese Pull-Requests sollten auf ein bestehendes GitHub Issue verweisen, in dem die Gründe für die Änderung erläutert werden. Dann kannst du die Pull-Request auf deinem Computer öffnen und sie lokal testen.
+
+ Wenn du das getan hast und die Änderungen gut aussehen, solltest du sie noch nicht zusammenführen. Du kannst den Pull-Request mit "LGTM" kommentieren und dann **"@freeCodeCamp/dev-team"** erwähnen, damit sie einen letzten Blick darauf werfen können.
+
+4. **Automatisierte PRs (Dependabot)**
+
+ Einige PRs sind automatische Aktualisierungen von Abhängigkeiten, die über eine Integration vorgenommen werden. Du solltest diese PRs nicht zusammenführen oder genehmigen. Ein Mitglied des Entwicklerteams kümmert sich um die Überprüfung und Zusammenführung solcher automatischen PRs.
+
+#### How to Review, Merge, or Close Pull Requests
+
+##### Assign yourself to a Pull Request:
+
+Wenn du einen Pull-Request zum Überprüfen auswählst, solltest du dich diesem zunächst selbst zuweisen. Du kannst dies tun, indem du in der rechten Spalte der GitHub-Benutzeroberfläche auf den Link "assign yourself" unter dem Bereich "assignees" klickst.
+
+Je nachdem, um welche Art von Pull-Request es sich handelt, befolge die entsprechenden Regeln, die zuvor aufgelistet wurden.
+
+##### Ensure the CI Checks are Passing:
+
+Vergewissere dich vor dem Zusammenführen eines Pull Requests, dass GitHub alle Prüfungen für die Pull-Requests als bestanden meldet (grüne Häkchen). Wenn du feststellst, dass eine der Prüfungen fehlschlägt, untersuche bitte die Ursache und kläre sie. Führt die Änderung dazu, dass unsere Tests nicht mehr funktionieren? Wird die Seite korrekt aufgebaut, wenn der PR zusammengeführt wird? Diese Kontrollen sind entscheidend für die Stabilität der Plattform.
+
+:::caution
+Das Zusammenführen eines PRs, der die CI/CD-Prüfungen nicht besteht, kann für alle Beteiligten, einschließlich des Entwicklungsteams und der Mitwirkenden, zu Schwierigkeiten führen.
+:::
+
+##### Handling Merge Conflicts:
+
+Sometimes there will be a merge conflict.
+
+Das bedeutet, dass ein anderer Pull-Request eine Änderung an demselben Teil der Datei vorgenommen hat. GitHub hat ein Tool, mit dem du diese Merge-Konflikte direkt auf GitHub lösen kannst. Du kannst versuchen, diese Konflikte zu lösen. Use your best judgment.
+
+Die Änderungen des Pull-Requests stehen oben und die des main-Branch unten. Manchmal gibt es dort überflüssige Informationen, die gelöscht werden können. Bevor du fertig bist, stelle sicher, dass du die `<<<<<`, `======` und `>>>>>>` löschst, die Git hinzufügt, um Merge-Konflikte anzuzeigen.
+
+Wenn du dir unsicher bist, frag bitte einen der anderen Moderatoren oder das Entwicklerteam um Hilfe.
+
+##### Merging a Valid Pull Request:
+
+Wenn der Pull-Request so aussieht, dass er zusammengeführt werden kann (und keine weiteren Genehmigungen benötigt - denk daran, dass wir mindestens zwei benötigen), kannst du ihn zusammenführen. Achte darauf, dass du die Standardoption **"Squash and Merge"** verwendest. Dadurch werden alle Pull-Request-Commits zu einem einzigen Commit zusammengefasst, wodurch die Git-Historie viel einfacher zu lesen ist.
+
+> You should then comment on the pull request, thanking the contributor in your own personal way!
+
+Wenn der Autor des Pull-Requests zum ersten Mal beiträgt, solltest du ihm auch zu seinem ersten zusammengefassten Pull-Request für das Repository gratulieren. Du kannst in der oberen rechten Ecke des PR-Body nachsehen, ob es sich um einen "first-time" Mitwirkenden handelt. Es wird `First-time contributor` angezeigt, wie unten dargestellt:
+
+
+
+ First-time contributor badge on pull requests (screenshot)
+
+
+
+
+
+
+Wenn der Pull-Request nicht bereit zum Zusammenführen zu sein scheint, kannst du dem Autor höflich antworten und ihm sagen, was er tun sollte, um ihn fertigzustellen. Wir hoffen, dass sie antworten und ihr Pull-Request bald fertig ist.
+
+Wenn du eine zweite Meinung zu einem Pull-Request benötigst, hinterlasse deine Kommentare zu dem Pull-Request und füge dann das Label "discussing" zu dem Pull-Request hinzu.
+
+##### Closing an Invalid Pull Request:
+
+Oft ist ein Pull-Request mit wenig Aufwand verbunden. You can usually tell this immediately when the contributor didn't bother checking the checkboxes in the Pull Request Template or used a generic pull request title like "Made changes" or "Update index.md".
+
+Es gibt auch Situationen, in denen der/die Mitwirkende versucht, einen Link zu seiner/ihrer Website hinzuzufügen, eine von ihm/ihr erstellte Bibliothek einzubinden oder eine unseriöse Bearbeitung vorzunehmen, die niemandem außer ihm/ihr selbst hilft.
+
+You can close these invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+#### Filtering Pull Requests
+
+To sort Pull Requests for Quality Assurance for quick access to PRs that are ready for review, do not have a merge conflict, are not blocked, and have all status checks in green, use the following link to apply the filters:
+
+[Direct link with filter applied](https://github.com/freeCodeCamp/freeCodeCamp/pulls?q=is%3Aopen+is%3Apr+-label%3A%22status%3A+blocked%22+-label%3A%22status%3A+merge+conflict%22+status%3Asuccess+draft%3Afalse)
+
+#### Other Guidelines for Moderators on GitHub
+
+Though you will have write access to freeCodeCamp's repository, **you should never push code directly to freeCodeCamp repositories**. All code should enter freeCodeCamp's codebase in the form of a pull request from a fork of the repository.
+
+Also, you should never accept your own PRs. They must be reviewed by another moderator, just like any other PR.
+
+If you notice anyone breaking the [Code of Conduct](https://code-of-conduct.freecodecamp.org) on GitHub issues, or opening pull requests with malicious content or code, email `support[at]freecodecamp.org` with a link to the offending pull request, and we can consider banning them from freeCodeCamp's GitHub organization entirely.
+
+## Das Forum moderieren
+
+As a moderator, you help keep our community an enjoyable place for anyone to learn and get help. You will deal with flagged posts and handle spam, off-topic, and other inappropriate conversations.
+
+Note that once you are a moderator on the forum, you will start to see blue moderator hints about forum members, like "this is the first time [person] has posted - let's welcome them to the community!" or "[person] hasn't posted in a long time - let's welcome them back."
+
+![A blue text message saying "This is the first time [person] has posted - let's welcome them to the community!](https://i.imgur.com/mPmVgzK.png)
+
+These are opportunities for you to welcome them and make them feel extra special. You never know which person who's marginally involved may become our next super-helper, helping many other people in their coding journey. Even the slightest kindness may trigger a cascade of good deeds.
+
+### Deleting Forum Posts
+
+Forum moderators can delete users' posts. You should only do this for the following instances:
+
+1. Jemand hat ein pornografisches oder grafisch gewalttätiges Bild gepostet.
+2. Jemand hat einen Link oder Code gepostet, der bösartig ist und anderen Teilnehmern, die darauf klicken, schaden könnte.
+3. Someone has flooded a thread with a lot of spam messages.
+4. An account has been created, beyond a reasonable doubt, to spam.
+
+### Dealing with Spam
+
+For the first spam post of a legitimate user (ie. whose intent isn't to spam the forum but to learn/contribute to the forum), send them a message explaining the problem, and remove the link or post as appropriate. Leave a note on the user's profile explaining the action you have taken. If the problem persists, then quietly block the user from posting (using the silence option on the User Admin panel). Send the user a warning with the [Code of Conduct](https://code-of-conduct.freecodecamp.org). Check the box in the private message indicating that your message is a "formal warning."
+
+As a moderator, you can ask questions and report incidents in the [mod-team forum section](https://forum.freecodecamp.org/c/mod-team/4).
+
+### Dealing with Off-Topic Conversations
+
+Posts or topics that seem to be in the wrong place can be recategorized or renamed to whatever would be appropriate.
+
+In exceptional circumstances, it may be appropriate for a moderator to fork a discussion into multiple threads.
+
+Again, if you have any problems or questions, make a post with your actions in the `"Staff"` category, and tag another moderator if you want them to review your moderating actions.
+
+### Dealing with Posted Solutions
+
+If a user replies in a help thread for the freeCodeCamp curriculum with a solution, remove it and use the **Solution Instead of Help** canned reply (or a similar response in your own words).
+
+If the OP (Original Poster) replies within a freeCodeCamp curriculum help thread with their final solution, blur it, and use the **Blurred Spoiler Solution** canned reply.
+
+If a user creates a thread asking for feedback on a solution, move the thread to the feedback subforum and blur the solution, as necessary. If the user is only posting the solution to show it off, then unlist the thread and use the **Solutions Thread** canned reply.
+
+### Underage Users
+
+Our [Terms of Service](https://freecodecamp.org/terms) require that freeCodeCamp users be at least 13 years of age. If a user reveals that they are under the age of 13, send them the message below, suspend their account, then email the link of their forum account to `support[at]freecodecamp.org` for their freeCodeCamp /learn and forum accounts removal.
+
+```markdown
+SUBJECT: Users under 13 are not allowed to use the forum per our Terms of Service.
+
+It has come to our attention that you are under 13 years of age. Per the [freeCodeCamp Terms of Service](https://freecodecamp.org/terms), you must be at least 13 years old to use the site or the forum. We will be deleting both your freeCodeCamp account and your forum account. This restriction keeps us in compliance with United States laws.
+
+Please rejoin once you have reached at least 13 years of age.
+
+Thank you for understanding.
+```
+
+### Account Deletion Requests
+
+If a user requests their account to be deleted, send the following:
+
+```markdown
+Deleting an account with many posts disrupts the flow of conversation, and could remove helpful information for other Campers.
+
+We can anonymize your account, which will remove your username along with any other public information associated with your forum account. Your posts will remain, but will be attributed to an anonymous user, and you will be unable to log in to the account, as it will no longer be associated with an email address.
+
+If you would like to proceed with this, please reply to this message with your consent.
+```
+
+If a user insists on having their account deleted, ask them to email `support[at]freecodecamp.org` with a link to their forum account.
+
+### Moderating Via Cell Phone
+
+Moderating the forum is possible via a cell phone but you may encounter some usage quirks. This is not an exhaustive list.
+
+- When trying to include a "Canned reply" in a response, if the menu doesn't open (after clicking on the gear), click on the text area first then try it again.
+- The moderator's 'wrench' is at the bottom of the view-port but if you click it and cannot see the "Select Posts" button because it has scrolled out of view, you may need to try to scroll to it, though sometimes that doesn't work in which case moving to a desktop/laptop monitor may be needed.
+- Sometimes clicking on the three-dot menu below a post can hide the reply icon. Reload the page to get it back.
+
+## Facebook moderieren
+
+If you see anything that seems to break our [Code of Conduct](https://code-of-conduct.freecodecamp.org/), you should delete it immediately.
+
+Sometimes people will post things that they think are funny. They don't realize that what they said or what they shared could be interpreted as offensive. You should delete such posts, but not necessarily ban the person. Hopefully, the user will come to understand that what they posted was inappropriate because the post was deleted.
+
+But if it is an egregious offense that can't reasonably be attributed to a cultural difference or a misunderstanding of the English language. In that case, you should strongly consider blocking the member from the Facebook group.
+
+## Moderating Discord
+
+Here's how moderators deal with violations of our [Code of Conduct](https://code-of-conduct.freecodecamp.org/) on our chat server:
+
+> [!NOTE] Camperbot serves as our moderation bot, and all of the commands use Discord's native slash command interface. You can see a list of all of the commands by typing `/` in any channel.
+
+1. **Make sure the user intended to violate the [Code of Conduct](https://code-of-conduct.freecodecamp.org).**
+
+ Not all violations of the [Code of Conduct](https://code-of-conduct.freecodecamp.org) were intended as such. A new camper might post a large amount of code for help, unaware that this can be disruptive to the conversation. In diesen Fällen kannst du sie einfach bitten, ihren Code mit Diensten wie CodePen oder Pastebin einzufügen.
+
+2. **If the camper clearly and intentionally violates the [Code of Conduct](https://code-of-conduct.freecodecamp.org), the moderator will proceed as follows:**
+
+ For minor offences, a warning may be issued with the `/warn` command. For more egregious offences, you can remove the member from the server temporarily with the `/kick` command, or permanently with the `/ban` command. In some cases, a member may just need some time to cool off and collect their thoughts - the `/mute` command allows you to prevent them from engaging with our community for a set period of time. A muted member can see the conversation, but cannot post messages or add reactions.
+
+ All moderation commands will take a `reason` parameter, which should be a short explanation of why the action was taken. Moderation actions done with the bot will be logged in `#mod-actions`, which allows us all to stay on the same page. As such, we should avoid using Discord's built-in moderation tools, as they will not be logged.
+
+ > [!WARNING] The reason provided to a moderation command will also be included in the DM notification to the camper. Please remember to be professional here.
+
+3. **Creating a private discussion**
+
+ Es kann Situationen geben, in denen du ein Anliegen mit einem Teilnehmer unter vier Augen besprechen musst. Dies sollte nicht über DMs geschehen, da dies zu Situationen führen kann, in denen du eine Sache behauptest und der Teilnehmer eine andere. Nutze stattdessen die Funktionen des Bots, um eine private Diskussion zu führen:
+
+ - Call the `/private` command, where `target` is the camper you want to open a private channel with.
+ - The bot will create a new channel, and add the mentioned camper and all moderators with the `Your Friendly Moderator` role. While all moderators are added to the channel for transparency, the moderator who calls this command should be the only one to interact with the camper unless they request assistance.
+ - When the conversation is complete, click the `❌ Close` button _on the first message in the private channel_ to have the bot close and delete that channel.
+
+4. **Deleting messages**
+
+ Our moderation bot is configured to log deleted messages automatically in the `#mod-actions` channel. If a message is not in line with our Code of Conduct, or otherwise not appropriate for our community, you are generally safe to delete it.
+
+ Note that if the message contains content that violates Discord's terms of service, you'll want to report it via https://dis.gd/report **prior to** deleting it.
+
+5. **Don’t threaten to take action**
+
+ If a camper breaks the [Code of Conduct](https://code-of-conduct.freecodecamp.org), don’t threaten to take moderator action, and never warn them in public. Instead, talk to them privately using the bot's `/private` command, or use the bot's moderation commands.
+
+ If a violation was clearly unintended and doesn't warrant moderation action or private conversation, make the offending camper aware of their actions without making it come across as a warning.
+
+ For example:
+
+ - Camper posts a wall of code to request help:
+
+ Moderator: **@username** Please use CodePen or Pastebin when posting large amounts of code.
+
+ - Or if you really have to explain why:
+
+ Moderator: **@username** Please use CodePen or Pastebin when posting large amounts of code, because it disrupts the chat for everyone and could be considered spamming according to our [Code of Conduct](https://code-of-conduct.freecodecamp.org).
+
+ - For mild and unintentional violations of the [Code of Conduct](https://code-of-conduct.freecodecamp.org):
+
+ Moderator: This is a friendly reminder for everyone to follow the [Code of Conduct](https://code-of-conduct.freecodecamp.org): https://code-of-conduct.freecodecamp.org/
+
+6. **Don’t brag about being a moderator**
+
+ Do not see yourself as above the community. **You are the community.** And the community has trusted you to help protect something rare that we all share - a _welcoming_ place for new developers.
+
+ If you brag about being a moderator, people may feel uneasy around you, in the same way that people may feel uneasy around a police officer, even if they’re doing nothing wrong. This is just human nature.
+
+7. **Don’t contradict other moderators**
+
+ If you disagree with a moderator's action, talk with them in private or bring it up in the #mod-chat channel. Never override a moderator's action, and never contradict the other moderator(s) publicly. Instead, have a cool-headed discussion in `#mod-chat` and convince the moderator that they themselves should reverse their ban or change their PoV (Point of View).
+
+ _Remember: We’re all on the same team. We want to dignify the role of moderators and present a unified front._
+
+8. **Talk with other moderators**
+
+ We have a `#mod-chat` room for moderators only. Use it! If you feel uncomfortable with handling a certain situation, ask other moderators for help. If you think something should be discussed, do it. You're part of the team, and we value every team member's input! Even if you totally disagree with anything in these guidelines or the [Code of Conduct](https://code-of-conduct.freecodecamp.org)!
+
+9. **Temporarily inactive**
+
+ If you're not going to be active as a Moderator for a while due to vacation, illness, or any other reason, make sure to let the others know in the `#mod-chat` channel. This is so we know if we can count on you to be regularly active on the server or not.
+
+## How to Become a Moderator
+
+Suppose you are helping people in the community consistently over time. In that case, our moderator team will eventually take notice, and one of them will mention you as a possible moderator to [our staff](https://forum.freecodecamp.org/g/Team). There are no shortcuts to becoming a moderator.
+
+If you are approved, we will add you to our moderator teams on [GitHub](https://github.com/orgs/freeCodeCamp/teams/moderators), [forum](https://forum.freecodecamp.org/g/moderators), chat, etc.
+
+> [!NOTE] For GitHub: After you've been accepted as a moderator, you will receive a Github repository invitation. You'll need to head over towards [freeCodeCamp GitHub Organization Invitation](https://github.com/orgs/freeCodeCamp/invitation) to be able to accept the invitation.
+>
+> This is required for us to be able to give you write access to some of our repositories.
+
+## How Our Contributors Room Works
+
+Anyone is welcome in the [contributors room on our chat server](https://discord.gg/PRyKn3Vbay). It is the designated chat room for moderators and other campers who contribute to our community in any number of ways, including through study groups.
+
+We assume contributors will read anything in this room that directly mentions them with an **@username**. Everything else is optional, but feel free to read anything anyone posts in there and interact.
+
+## Dealing with Solicitors
+
+You may be approached by organizations who want to partner or co-brand with freeCodeCamp somehow. Once you realize that this is what they're after, **please stop talking to them** and tell them to email `team[at]freecodecamp.org`.
+
+We get proposals like this all the time, and the staff are in the best position to judge whether such a relationship will be worth it for our community (and it rarely is).
+
+## Dealing with (Mental) Health Inquiries
+
+You may come across situations where users seek medical advice or are dealing with mental health issues and are looking for support.
+
+As a matter of policy, you should avoid talking privately about these matters. Should the situation reflect back to freeCodeCamp, we want to have the conversation(s) on record. Make it clear that we are not medical professionals and that you encourage the user to find professional help.
+
+As difficult as it sometimes can be, avoid giving any tips or advice and rather point the user in the direction of seeking professional help!
+
+If this happens on our chat server: Create a private channel for the user and the moderator team. This can be done with the bot's `private` command.
+
+- The user is guaranteed some privacy.
+- Public chat is no longer disrupted.
+- Other team members can pitch in, should you feel uncomfortable dealing with the situation yourself.
+
+Helpful URLs:
+
+http://suicide.org/international-suicide-hotlines.html
+
+## A Note on Free Speech
+
+Sometimes people will defend something offensive or incendiary that they said as "free speech."
+
+This XKCD comic summarizes perfectly most communities' thoughts on free speech.
+
+
+
+Thanks for reading this, and thanks for helping the developer community!
diff --git a/src/content/docs/de/moderator-onboarding-guide.md b/src/content/docs/de/moderator-onboarding-guide.md
new file mode 100644
index 00000000..42f86d8c
--- /dev/null
+++ b/src/content/docs/de/moderator-onboarding-guide.md
@@ -0,0 +1,56 @@
+---
+title: Der offizielle freeCodeCamp Moderator Onboarding Leitfaden
+---
+
+This guide will help new moderators get up and running with the processes and procedures followed by experienced moderators on the freeCodeCamp community forum and other official communities we foster.
+
+:::note
+Wenn du [Das Moderatorenhandbuch](https://contribute.freecodecamp.org/#/moderator-handbook) noch nicht gelesen hast, solltest du dort zuerst anfangen.
+:::
+
+## Das Forum
+
+### Erste Schritte
+
+Das erste, was dir auffallen wird, nachdem du den Moderatorenstatus im Forum erhalten hast, ist, dass deine Benutzeroberfläche etwas anders aussehen wird, mit neuen Admin-Tools und Zugang zum Mod-Team-Subforum.
+
+Einige der neuen Werkzeuge werden in einem neuen Menüpunkt erscheinen, der wie ein Schraubenschlüssel aussieht. Einige werden als neue Registerkarten oder Schaltflächen erscheinen oder sogar als neue aktivierte Optionen in den Forenmenüs.
+
+Um dich mit den neuen Werkzeugen und Rechten vertraut zu machen, kannst du in deiner ersten Woche in dieser herausgehobenen Rolle eine oder mehrere der folgenden Methoden kombinieren:
+
+:::tip
+Die ersten beiden sind die wichtigsten.
+:::
+
+### Mach dich mit den Discourse Admin Tools vertraut
+
+The freeCodeCamp forum is a Discourse forum and follows many of the same guidelines of other forums built on Discourse. Um dich mit Discourse und der Moderatorenrolle vertraut zu machen, lies zunächst den [Leitfaden für neue Benutzer](https://meta.discourse.org/t/discourse-new-user-guide/96331) und den [Leitfaden für neue Moderatoren](https://meta.discourse.org/t/discourse-moderation-guide/63116) von Discourse.
+
+### Folge einem Moderator aufmerksam
+
+Alle Aktionen der Moderatoren können in den [Aktionsprotokollen](https://forum.freecodecamp.org/admin/logs/staff_action_logs) nachverfolgt werden. The actions taken by automated tools like `Akismet` or `system` can mostly be ignored until they result in a post that needs to be reviewed. Beiträge, die überprüft werden sollen, werden im Bereich [Review](https://forum.freecodecamp.org/review) des Forums angezeigt.
+
+In der ersten Woche solltest du darauf achten, was markiert und was überprüft wird, und dies mit den Maßnahmen vergleichen, die aufgrund der markierten Beiträge ergriffen werden. Es kann vorkommen, dass das Systemkonto einen Beitrag markiert, weil der Benutzer ihn zu schnell erstellt hat. In vielen Fällen heben die Moderatoren die Markierung des Beitrags auf, indem sie auf die Schaltfläche "Approve Post" klicken oder ihn als "Not Spam" markieren (je nach Art der Markierung).
+
+In der Regel können Spam-Markierungen auch von Mitgliedern oder Moderatoren gesetzt werden. Common duplicitous behavior would involve opening an account, making a post that seems harmless, then editing that post later on to add a link to an external site to advertise it. In this case, the member account is usually fairly new and has only made this one post thus far, which indicates that the account was opened solely for spamming the community. The decision should be made to delete the account after the first offense in this case. The same applies to accounts whose first post is deemed to be spam.
+
+Vielleicht bemerkst du, dass die Moderatoren ein Verfahren namens "Split Topic" anwenden. Dies kann der Fall sein, wenn ein Moderator einen Beitrag, der fälschlicherweise in einem bestehenden Thema verfasst wurde, in ein neues Thema getrennt hat, oder wenn ein Moderator doppelte Themen zusammengeführt hat, die ein einzelner Benutzer für dieselbe Frage erstellt hat. Wenn du dir diesen Vorgang ansiehst, werden verschiedene Aktionen und ihre Ursachen deutlich.
+
+Another useful feature that becomes enabled for all moderators is the ability to post a "Canned Reply" which is a pre-written response that was worked out with the mod team to quickly respond to some well-known and repetitive scenarios. Dazu gehören:
+
+- Begrüßung eines neuen Forumsmitglieds, das Code ohne eine Frage gepostet hat -> " Welcome - remind question"
+- Erinnerung an Mitglieder, keine Code-Lösungen zu posten, sondern stattdessen Hinweise und Tipps zu geben -> " Solutions Instead of Help"
+- Reagiere auf eine Situation, in der der Code von jemandem bei dir funktioniert, bei ihm aber nicht -> " Browser Issues"
+- Ermutigung der Mitglieder, GitHub-Issues zu erstellen, wenn ein möglicher Fehler gefunden wird -> "Bug Report"
+
+Es gibt noch mehr, die du dir durchlesen kannst, um dich mit ihren jeweiligen Einsatzmöglichkeiten vertraut zu machen. You can also find discussions around the templates in the mod-team subforum, and you are welcome to ask questions if you aren't sure how a template should be used.
+
+### Lies die Beiträge des Mod-Teams im Subforum
+
+The Mod-Team subforum contains several posts from past and current moderators discussing the different requirements and/or challenges of moderating the forum.
+
+Reading back through these posts can help uncover some of the underlying goals and processes that concern forum moderators. Some of the threads may also shed some light on the handling of spam and inappropriate content on the forum.
+
+## Wo du um Hilfe bitten kannst
+
+Wenn du Hilfe brauchst, um mit einer Situation umzugehen, die dir unangenehm ist oder bei der du unsicher bist, diskutiere mit deinen Moderationskollegen entweder im [Mod-Team Subforum](https://forum.freecodecamp.org/c/mod-team/4) oder im [#mod-chat](https://discord.com/channels/692816967895220344/693157007418720277) auf Discord.
diff --git a/src/content/docs/de/reply-templates.md b/src/content/docs/de/reply-templates.md
new file mode 100644
index 00000000..43bbabfd
--- /dev/null
+++ b/src/content/docs/de/reply-templates.md
@@ -0,0 +1,255 @@
+---
+title: Reply Templates
+---
+
+These are some of the standard reply templates that you may use while reviewing pull requests and triaging issues/pull requests.
+
+> You can make your own saved replies with GitHub's built-in [saved replies](https://github.com/settings/replies/) feature or use the ones below.
+
+## Thank You
+
+```markdown
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 🎉
+```
+
+## Thank you and congrats
+
+> For thanking and encouraging first-time contributors.
+
+```markdown
+Hi @username. Congrats on your first pull request (PR)! 🎉
+
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 📝
+```
+
+## Build Error
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like there is an error with the CI build. ⚠️
+
+Once you resolve these issues, we will be able to review your PR and merge it. 😊
+
+---
+
+Feel free to reference the [contributing guidelines](https://contribute.freecodecamp.org/#/how-to-work-on-coding-challenges.md?id=testing-challenges) for instructions on running the CI build locally. ✅
+```
+
+## Syncing Fork
+
+> When PR is not up to date with the `main` branch.
+
+````markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like the branch is not up to date. ⚠️
+
+To resolve this error, you will have to sync the latest changes from the `main` branch of the `freeCodeCamp/freeCodeCamp` repo.
+
+Using the command line, you can do this in three easy steps:
+
+```bash
+git remote add upstream git://github.com/freeCodeCamp/freeCodeCamp.git
+
+git fetch upstream
+
+git pull upstream main
+```
+
+If you're using a GUI, you can simply `Add a new remote...` and use the link `git://github.com/freeCodeCamp/freeCodeCamp.git` from above.
+
+Once you sync your fork and pass the build, we will be able to review your PR and merge it. 😊
+
+---==crwdHRulesLBB_2_BBsuleRHdwrc==
+
+Feel free to reference the ["Syncing a fork"](https://help.github.com/articles/syncing-a-fork/) article on GitHub for more insight on how to keep your fork up-to-date with the upstream repository. 🔄
+````
+
+## Merge Conflicts
+
+> When PR has merge conflicts that need to be resolved.¹
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like you have some merge conflicts. ⚠️
+
+Once you resolve these conflicts, we will be able to review your PR and merge it. 😊
+
+---
+
+If you're not familiar with the merge conflict process, feel free to look over GitHub's guide on ["Resolving a merge conflict"](https://help.github.com/articles/resolving-a-merge-conflict-on-github/). 🔍️
+
+Also, it's good practice on GitHub to write a brief description of your changes when creating a PR. 📝
+```
+
+¹ If a first-time-contributor has a merge conflict, maintainers will resolve the conflict for them.
+
+## Duplicate
+
+> When PR is repetitive or a duplicate.
+
+```markdown
+Hey @username
+
+This PR seems to make similar changes as the existing PR <#number>. As such, we are going to close this as a duplicate.
+
+If you feel you have additional changes to expand upon this PR, please feel free to push your commits and request this PR be reopened.
+
+Thanks again! 😊
+
+---
+
+If you have any questions, feel free to ask questions on the ["Contributors" category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+```
+
+## Closing Invalid Pull Requests
+
+> When PR is invalid.
+
+```markdown
+Hey there,
+
+Thank you for opening this pull request.
+
+This is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
+
+Thank you and happy coding.
+```
+
+> When PR adds links to external resources.
+
+```markdown
+Thank you for your pull request.
+
+We are closing this pull request. Please suggest links and other details to add the challenge's corresponding guide post through [a forum topic](https://forum.freecodecamp.org/new-topic?category=Contributors&title=&body=**What%20is%20your%20hint%20or%20solution%20suggestion%3F**%0A%0A%0A%0A%0A**Challenge%3A**%0A%0A%0A**Link%20to%20the%20challenge%3A**) instead.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## Adding Comment About Newbie Mistakes
+
+```markdown
+Hello,
+
+Firstly, thank you for submitting this pull request!
+
+As you navigate through the process, we have a PR checklist to ensure consistency and quality in our contributions. We kindly ask that you genuinely follow through with each point. This not only facilitates the review process but also demonstrates a mutual respect for the community's efforts.
+
+If you're unfamiliar with certain aspects, our [contributing guidelines](https://contribute.freecodecamp.org) are a helpful resource to get you up to speed.
+
+
+**Friendly Pointers (click to expand)**
+
+1. **Editing on GitHub:** While it's possible to edit files directly on GitHub, it's typically better not to. This helps avoid inadvertent mistakes like typos that can disrupt tests.
+
+2. **Pull Request
+ title: ** Please ensure the PR title follows [our convention](https://contribute.freecodecamp.org/#/how-to-open-a-pull-request?id=prepare-a-good-pr-title).
+
+3. **Linking Issues:** Please ensure you link issues using the designated method. Simply update the `XXXXXX` in the PR description to include the issue number. This keeps our records organized and clear.
+
+4. **Engaging with the Team:** We know you're eager, but kindly keep mentions and review requests limited. Our maintainers are always on the lookout and will attend to PRs in the order they come in.
+
+5. **Branch Management:** It's a good practice not to work directly off your `main` branch. Creating separate branches for different changes allows you to smoothly update your PR even as the main repository progresses.
+
+
+
+Please note, there's no need to close this PR. If you have questions or need guidance refining your contribution, don't hesitate to ask. Our community is here to assist.
+
+Thank you for your enthusiasm in contributing to our project. We eagerly await more contributions from you!
+
+**Happy Contributing!** 🌟
+```
+
+## PR Opened While Issue Is Not Triaged
+
+> When a PR is opened for an issue that hasn't been triaged and marked as ready for contribution.
+
+```markdown
+Hi there,
+
+Thanks for creating this pull request.
+
+The linked issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to update this pull request to reflect the issue consensus. Until the issue is open for contribution, we will not be able to review your pull request.
+```
+
+## Closing Invalid Issues
+
+> When an issue relates to the camper's code.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the **"Get Help"** button on the challenge on freeCodeCamp and choose the **"Ask for help"** option, which will help you create a question in the right part of the forum. Volunteers on the forum usually respond to questions within a few hours and can help determine if there is an issue with your code or the challenge's tests.
+
+If the forum members determine there is nothing wrong with your code, you can request this issue to be reopened.
+
+Thank you and happy coding.
+```
+
+> When an issue is a duplicate of an earlier issue.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue appears to be very similar to issue #XXXXX, so we are closing it as a duplicate.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+> When an issue is fixed in staging.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that the problem you mentioned here is present in production, but that it has already been fixed in staging. This means that the next time we push our staging branch to production, this problem should be fixed. Because of this, we're closing this issue.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## `first timer only` Issues
+
+> When an issue is deemed to be eligible for first-time code contributors.
+
+```markdown
+Thanks for opening this issue.
+
+This looks like something that can be fixed by "first-time" code contributors to this repository. Here are the files that you should be looking at to work on a fix:
+
+List of files:
+
+1. ...
+2. ...
+3. ...
+
+Please make sure you read our [guidelines for contributing](https://contribute.freecodecamp.org/#/), we prioritize contributors following the instructions in our guides. Join us in our [chat room](https://discord.gg/PRyKn3Vbay) or our [forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing; our moderators will guide you through this.
+
+Sometimes we may get more than one pull request. We typically accept the most quality contribution followed by the one that is made first.
+
+Happy contributing.
+```
+
+## Requests for Assignment
+
+```md
+We typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+
+Issues labeled with `help wanted` or `first timers only` are open for contributions.
+
+Please make sure you read [our guidelines for contributing](https://contribute.freecodecamp.org/#/). We prioritize contributors following the instructions in our guide. Join us in [our chat room](https://discord.gg/PRyKn3Vbay) or [the forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing - our community will be happy to assist you.
+```
+
+## Requests for Assignment While Issue Is Not Triaged
+
+> When a contributor requests for assignment but the issue hasn't been triaged or marked as ready for contribution.
+
+```md
+Hi there,
+
+Thanks for your interest in contributing.
+
+This issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to create a pull request to reflect the issue consensus. Please also note that we typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+```
diff --git a/src/content/docs/de/security-hall-of-fame.md b/src/content/docs/de/security-hall-of-fame.md
new file mode 100644
index 00000000..15004934
--- /dev/null
+++ b/src/content/docs/de/security-hall-of-fame.md
@@ -0,0 +1,14 @@
+---
+title: Verantwortliche Offenlegung - Hall of Fame
+---
+
+Wir freuen uns über jede verantwortungsvolle Offenlegung von Schwachstellen, die die Integrität unserer Plattformen und Nutzer/innen beeinträchtigen könnten. Wenn du daran interessiert bist, zur Sicherheit unserer Plattform beizutragen, lies bitte unsere [Sicherheitsrichtlinien](security).
+
+Auch wenn wir im Moment keine Belohnungen oder Swags anbieten, sind wir diesen großartigen Menschen dankbar, dass sie uns helfen, die Plattform für alle sicher zu halten:
+
+- Mehul Mohan from [codedamn](https://codedamn.com) ([@mehulmpt](https://twitter.com/mehulmpt)) - [Behebung von Sicherheitslücken](https://github.com/freeCodeCamp/freeCodeCamp/blob/bb5a9e815313f1f7c91338e171bfe5acb8f3e346/client/src/components/Flash/index.js)
+- Peter Samir https://www.linkedin.com/in/peter-samir/
+- Laurence Tennant ([@hyperreality](https://github.com/hyperreality)) arbeitet mit IncludeSecurity.com - [GHSA-cc3r-grh4-27gj](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-cc3r-grh4-27gj)
+- Michal Biesiada ([@mbiesiad](https://github.com/mbiesiad)) - [GHSA-6c37-r62q-7xf4](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-6c37-r62q-7xf4)
+
+> **Thank you for your contributions :pray:**
diff --git a/src/content/docs/de/security.md b/src/content/docs/de/security.md
new file mode 100644
index 00000000..f1234477
--- /dev/null
+++ b/src/content/docs/de/security.md
@@ -0,0 +1,56 @@
+---
+title: freeCodeCamp.org's Security Policy
+---
+
+Dieses Dokument beschreibt unsere Sicherheitsrichtlinien für die Codebases und Plattformen, die wir betreiben, und wie du Schwachstellen melden kannst.
+
+## Eine Schwachstelle melden
+
+> [!NOTE] If you think you have found a vulnerability, **please report it responsibly**. Do not create GitHub issues for security issues. Instead, follow this guide.
+
+### Guidelines
+
+We appreciate responsible disclosure of vulnerabilities that might impact the integrity of our platforms and users. In the interest of saving everyone time, we encourage you to report vulnerabilities with these in mind:
+
+1. Ensure that you are using the **latest**, **stable**, and **updated** versions of the Operating System and Web Browser(s) available to you on your machine.
+2. We consider using tools & online utilities to report issues with SPF & DKIM configs, SSL Server tests, etc., in the category of ["beg bounties"](https://www.troyhunt.com/beg-bounties) and are unable to respond to these reports.
+3. While we do not offer any bounties or swags at the moment, we'll be happy to list your name in our [Hall of Fame](security-hall-of-fame) list, provided the reports are not low-effort.
+
+### Reporting
+
+After confirming the above guidelines, please feel free to send an email to `possible-security-issue [at] freecodecamp.org`. You can also send us a PGP encrypted message at `flowcrypt.com/me/freecodecamp`.
+
+Once you report a vulnerability, we will look into it and ensure that it is not a false positive. If we need to clarify any details, we will get back to you. You can submit separate reports for each issue you find. Please note that we will not be able to respond to any issues that we think are outside the guidelines.
+
+## Platforms and Codebases
+
+Here is a list of the platforms and codebases we are accepting reports for:
+
+### Learn Platform
+
+| Version | Branch | wird unterstützt | aktive Website |
+| ----------- | -------------- | ---------------- | ------------------------ |
+| production | `prod-current` | Ja | `freecodecamp.org/learn` |
+| staging | `prod-staging` | Ja | `freecodecamp.dev/learn` |
+| development | `main` | Nein | |
+
+### Publication Platform
+
+| Version | wird unterstützt | aktive Website |
+| ---------- | ---------------- | ---------------------------------- |
+| production | Ja | `freecodecamp.org/news` |
+| localized | Ja | `freecodecamp.org//news` |
+
+### Mobile App
+
+| Version | wird unterstützt | aktive Website |
+| ---------- | ---------------- | ---------------------------------------------------------------- |
+| production | Ja | `https://play.google.com/store/apps/details?id=org.freecodecamp` |
+
+### Other Platforms
+
+Apart from the above, we are also accepting reports for repositories hosted on GitHub under the freeCodeCamp organization.
+
+### Other Self-hosted Applications
+
+We self-host some of our platforms using open-source software like Ghost & Discourse. If you are reporting a vulnerability, please ensure that it is not a bug in the upstream software.
diff --git a/src/content/docs/de/troubleshooting-development-issues.md b/src/content/docs/de/troubleshooting-development-issues.md
new file mode 100644
index 00000000..3d8984d7
--- /dev/null
+++ b/src/content/docs/de/troubleshooting-development-issues.md
@@ -0,0 +1,95 @@
+---
+title: Troubleshooting Development Issues
+---
+
+If you are facing an issue, there is a high chance that the resolution is in this documentation.
+
+## Issues with Installing the Recommended Prerequisites
+
+We regularly develop on the latest or most popular operating systems like macOS 10.15 or later, Ubuntu 18.04 or later, and Windows 10 (with WSL2).
+
+It is recommended to research your specific issue on resources such as Google, Stack Overflow, and Stack Exchange. There is a good chance that someone has faced the same issue and there is already an answer to your specific query.
+
+If you are on a different OS or are still facing issues, see [getting help](#getting-help).
+
+:::warning
+Please avoid creating GitHub issues for problems with the prerequisite technologies. They are out of the scope of this project.
+:::
+
+## Issues with Missing UI, Fonts, Language Strings, or Build Errors
+
+When you build the client, Gatsby will cache the fonts, language strings, and UI. If one of them isn't cached, run the following:
+
+```bash
+pnpm run clean
+pnpm install
+pnpm run seed
+pnpm run develop
+```
+
+OR
+
+Use the shortcut
+
+```
+pnpm run clean-and-develop
+```
+
+If you continue to face issues with the build, cleaning up the workspace is recommended.
+
+Use `git clean` in interactive mode:
+
+```
+git clean -ifdX
+```
+
+
+
+ How to clean git untracked files (screenshot)
+
+
+
+
+
+
+## Issues with API, login, Challenge Submissions, etc.
+
+If you can't sign in, and instead you see a banner with an error message saying that the error will be reported to freeCodeCamp, please double-check that your local port `3000` is not in use by a different program.
+
+#### **From Terminal:**
+
+```bash
+netstat -a | grep "3000"
+
+tcp4 0 0 0.0.0.0:3000 DESKTOP LISTEN
+```
+
+## Issues Signing Out while Navigating
+
+While in development, your session is stored as cookies. Clearing them will sign you out of your development account.
+
+Running `pnpm run seed:certified-user` will log you out, too. It will overwrite the development user in your local database.
+
+## Issue Getting 404 when Navigating Profile Page
+
+When you try to navigate to http://localhost:8000/developmentuser to view the profile page, Gatsby takes over serving the client-side pages and hence you will get a 404 page for the user profile when working.
+
+There is a "Preview Custom 404 Page" button, click it to see the profile.
+
+## Issues Installing Dependencies
+
+If you get errors while installing the dependencies, please make sure that you are not in a restricted network or your firewall settings do not prevent you from accessing resources.
+
+The first time setup can take a while depending on your network bandwidth. Be patient, and if you are still stuck we recommend using Gitpod instead of an offline setup.
+
+> [!NOTE] If you are using Apple Devices with M1 Chip to run the application locally, it is suggested to use Node v14.7 or above. You might run into issues with dependencies like Sharp otherwise.
+
+## Working With Other Languages
+
+To see how the client renders in another language go to [testing the client app in a world language.](how-to-work-on-localized-client-webapp#Testing-the-Client-App-in-a-World-Language)
+
+## Getting Help
+
+If you are stuck and need help, feel free to ask questions in the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+
+There might be an error in the console of your browser or in Bash / Terminal / Command Line that will help identify the problem. Provide this error message in your problem description so others can more easily identify the issue and help you find a resolution.
diff --git a/src/content/docs/de/user-token-workflow.md b/src/content/docs/de/user-token-workflow.md
new file mode 100644
index 00000000..dfe350fa
--- /dev/null
+++ b/src/content/docs/de/user-token-workflow.md
@@ -0,0 +1,17 @@
+---
+title: So funktioniert der Benutzer-Token-Workflow
+---
+
+Benutzer-Tokens werden verwendet, um die Benutzer/innen gegenüber Dritten zu identifizieren, damit Aufgaben, die bei diesen Diensten erledigt werden, im Konto der Benutzer/innen gespeichert werden können.
+
+## How they are Created
+
+Im Moment werden die Token nur für die Einreichung der Aufgaben für relationale Datenbanken verwendet. A token gets created when a signed-in user clicks the "Click here to start the course" or "Click here to start the project" buttons to start one of the Relational Database courses or projects.
+
+## When they Get Deleted
+
+Ein Benutzer-Token wird gelöscht, wenn sich ein Benutzer aus dem freeCodeCamp abmeldet, seinen Fortschritt zurücksetzt, sein Konto löscht oder den Token manuell über das Widget auf der Einstellungsseite löscht.
+
+## How they Work
+
+Token werden in einer `UserToken`-Sammlung in der Datenbank gespeichert. Jeder Datensatz hat eine eindeutige `_id`, die der Token ist, und eine `user_id`, die auf das Konto des Benutzers aus der `user`-Sammlung verweist. Das Token wird mit JWT kodiert und an den Client gesendet, wenn es erstellt wird. That encoded token is then given to third-party services that need it and sent to our API by them when a challenge is completed. Wenn unsere API sie erhält, wird sie dekodiert, damit wir den Benutzer, der eine Aufgabe einreicht, identifizieren und die abgeschlossene Aufgabe in seinem `completedChallenges` speichern können.
diff --git a/src/content/docs/es/authors-analytics-manual.md b/src/content/docs/es/authors-analytics-manual.md
new file mode 100644
index 00000000..109b49ad
--- /dev/null
+++ b/src/content/docs/es/authors-analytics-manual.md
@@ -0,0 +1,29 @@
+---
+title: Manual para Autores de Google Analytics
+---
+
+If you are an author with access to the publication's Google Analytics Property (News), you can use this guide to view your article engagement and search for articles by publication language.
+
+## Búsqueda por Idioma
+
+To search for engagement reports in a specific language:
+
+
+
+1. En el menú desplegable de arriba, seleccione `News`.
+1. En la barra lateral, haga clic en `Report`.
+1. En la barra lateral secundaria, seleccione `Compromiso`.
+1. Haga clic en `Pages and Screens`.
+1. En la barra de búsqueda, escriba la subruta para el idioma deseado.
+1. En el menú desplegable que esta por debajo de la barra de búsqueda, eliga `Page path and screen class`.
+
+## Filtrar Informes por el Autor
+
+Después de encontrar los informes de `Pages and Screens` mencionados anteriormente, utilice los siguientes pasos para filtrar los resultados de autores específicos.
+
+
+
+1. Haga clic en el botón `Add filter`.
+1. En el apartado de navegación incluyen `Author`.
+1. En el menú desplegable `Dimensions values`, eliga un nombre de autor.
+1. Haga clic en boton `Apply` para aplicar los cambios.
diff --git a/src/content/docs/es/codebase-best-practices.md b/src/content/docs/es/codebase-best-practices.md
new file mode 100644
index 00000000..aa1914c8
--- /dev/null
+++ b/src/content/docs/es/codebase-best-practices.md
@@ -0,0 +1,192 @@
+---
+title: Las mejores prácticas de la base de código
+---
+
+## Dándole estilo a un componentes
+
+Recomendamos dar estilo a los componentes usando nuestra [guía de estilo de diseño](https://design-style-guide.freecodecamp.org/).
+
+Los colores están definidos en [`variable.css`](/client/src/components/layouts/variables.css)y las fuentes están en [`fonts.css`](/client/src/components/layouts/fonts.css).
+
+Somos muy obstinados sobre la adición de nuevas variables/tokens a los colores. Después de una cuidadosa investigación, los colores han sido elegidos para respetar la identidad de la marca freeCodeCamp y la experiencia del desarrollador y accesibilidad.
+
+La palabra clave `!important` puede utilizarse para sobrescribir valores en algunos casos (por ejemplo, problemas de accesibilidad). Debería añadir un comentario describiendo el problema, para que no se elimine en futuras refactorizaciones.
+
+### Soporte RTL
+
+We are striving to support right-to-left (RTL) layout in the codebase for languages that are read in this direction. For this, you need to be mindful of how to style components. Here are some quick rules of thumb to follow:
+
+- Don't use `float` properties
+ - Use Flexbox and Grid layouts instead, as they have RTL support already built-in, and those will be easier to maintain and review.
+- Don't define the direction while using `margin` and `padding`: it may seem harmless to use `padding-right` and `margin-left`, but these directions aren't mirrored when the layout changes to RTL, and adding counter values for them in the RTL file makes maintaining the codebase harder.
+ - Use logical properties for them: You can add the same spacing by using `padding-inline-end` and `margin-inline-start`, and you won't need to worry about RTL layout, as they follow where the line starts and ends, and you won't need to add any extra values in the RTL files, so people won't need to remember to change the same values in two files.
+- Don't use `!important` in `font-family`: RTL layout uses different fonts compared to the LTR layout, when you add `!important` in the `font-family` property it affects the RTL layout too.
+
+## General JavaScript
+
+In most cases, our [linter](how-to-setup-freecodecamp-locally#follow-these-steps-to-get-your-development-environment-ready) will warn of any formatting which goes against this codebase's preferred practice.
+
+It is encouraged to use functional components over class-based components.
+
+## Specific TypeScript
+
+### Migrating a JavaScript File to TypeScript
+
+#### Retención del historial de archivos Git
+
+Sometimes changing the file from `.js` to `.ts` (or `.tsx`) causes the original file to be deleted, and a new one created, and other times the filename just changes - in terms of Git. Ideally, we want the file history to be preserved.
+
+The best bet at achieving this is to:
+
+1. Renombrar el archivo
+2. Comenta con la etiqueta `--no-verify` para evitar que Husky se queje de los errores de lint
+3. Refactoriza a TypeScript para la migración, en un commit separado
+
+:::note
+Es probable que los editores como VSCode te muestren que el archivo se ha eliminado y que se ha creado uno nuevo. Si utilizas CLI para `git add .`, entonces VSCode mostrará el archivo como renombrado en stage
+:::
+
+### Naming Conventions
+
+#### Interfaces y Tipos
+
+For the most part, it is encouraged to use interface declarations over type declarations.
+
+React Component Props - suffix with `Props`
+
+```typescript
+interface MyComponentProps {}
+// type MyComponentProps = {};
+const MyComponent = (props: MyComponentProps) => {};
+```
+
+React Stateful Components - suffix with `State`
+
+```typescript
+interface MyComponentState {}
+// type MyComponentState = {};
+class MyComponent extends Component {}
+```
+
+Default - object name in PascalCase
+
+```typescript
+interface MyObject {}
+// type MyObject = {};
+const myObject: MyObject = {};
+```
+
+
+
+
+
+## Redux
+
+### Action Definitions
+
+```typescript
+enum AppActionTypes = {
+ actionFunction = 'actionFunction'
+}
+
+export const actionFunction = (
+ arg: Arg
+): ReducerPayload => ({
+ type: AppActionTypes.actionFunction,
+ payload: arg
+});
+```
+
+### How to Reduce
+
+```typescript
+// Base reducer action without payload
+type ReducerBase = { type: T };
+// Logic for handling optional payloads
+type ReducerPayload =
+ T extends AppActionTypes.actionFunction
+ ? ReducerBase & {
+ payload: AppState['property'];
+ }
+ : ReducerBase;
+
+// Switch reducer exported to Redux combineReducers
+export const reducer = (
+ state: AppState = initialState,
+ action: ReducerPayload
+): AppState => {
+ switch (action.type) {
+ case AppActionTypes.actionFunction:
+ return { ...state, property: action.payload };
+ default:
+ return state;
+ }
+};
+```
+
+### How to Dispatch
+
+Within a component, import the actions and selectors needed.
+
+```tsx
+// Add type definition
+interface MyComponentProps {
+ actionFunction: typeof actionFunction;
+}
+// Connect to Redux store
+const mapDispatchToProps = {
+ actionFunction
+};
+// Example React Component connected to store
+const MyComponent = ({ actionFunction }: MyComponentProps): JSX.Element => {
+ const handleClick = () => {
+ // Dispatch function
+ actionFunction();
+ };
+ return ;
+};
+
+export default connect(null, mapDispatchToProps)(MyComponent);
+```
+
+
+
+
+## API
+
+### Testing
+
+The `api/` tests are split into two parts:
+
+1. Unit tests
+2. Integration tests
+
+#### Unit Tests
+
+Unit tests isolate a single function or component. The tests do not need mocking, but will require fixtures.
+
+The unit tests are located in a new file adjacent to the file exporting that is being tested:
+
+```text
+api/
+├── src/
+│ ├── utils.ts
+│ ├── utils.test.ts
+```
+
+#### Integration Tests
+
+Integration tests test the API as a whole. The tests will require mocking and should not require fixtures beyond the database seeding data and a method for authentication.
+
+Typically, each integration test file will be directly related to a route. The integration tests are located in the `api/tests/` directory:
+
+```text
+api/
+├── tests/
+│ ├── settings.ts
+```
+
+## Further Literature
+
+- [TypeScript Docs](https://www.typescriptlang.org/docs/)
+- [TypeScript with React CheatSheet](https://github.com/typescript-cheatsheets/react#readme)
diff --git a/src/content/docs/es/courses-vscode-extension.md b/src/content/docs/es/courses-vscode-extension.md
new file mode 100644
index 00000000..9565d258
--- /dev/null
+++ b/src/content/docs/es/courses-vscode-extension.md
@@ -0,0 +1,45 @@
+---
+title: Cursos de extensión de VSCode
+---
+
+Esto detalla las guías de mantenimiento para el repositorio de [freeCodeCamp/courses-vscode-extensión](https://github.com/freeCodeCamp/courses-vscode-extension), el cual contiene el código fuente de la extensión [freeCodeCamp - Courses](https://marketplace.visualstudio.com/items?itemName=freeCodeCamp.freecodecamp-courses).
+
+## Publicando la Extensión
+
+'GitHub Action' publica automáticamente la extensión en el Marketplace de Visual Studio, cada vez que se publica una nueva versión en GitHub.
+
+1. Empaquete una nueva versión de la extensión:
+
+```bash
+npm run pack --
+```
+
+Donde `` es uno de: `mayor`, `menor`, `parchar`.
+
+2. Envía la nueva versión a `main`:
+
+```bash
+git commit -am "(): "
+git push
+```
+
+Opcionalmente puedes empujar directamente al `upstream/main`pero abrir un nuevo PR es recomendado para mejor órden.
+
+3. Cree una nueva versión de GitHub usando la interfaz de usuario de GitHub:
+
+- Incremente correctamente el número de versión al crear una nueva etiqueta.
+- actualizar el archivo `.vsix` con la nueva versión.
+- Publique el lanzamiento y confirme que la acción se realizó correctamente.
+
+:::note
+La creación de una versión requiere acceso de escritura al repositorio `freeCodeCamp/courses-vscode-extension` repositorio.
+:::
+
+## Publicación Manual de la Extensión
+
+Se puede realizar una carga manual en Visual Studio Marketplace siguiendo estos pasos:
+
+1. Visite https://marketplace.visualstudio.com/ e inicie sesión
+2. Vaya a la [página del editor de freeCodeCamp](https://marketplace.visualstudio.com/manage/publishers/freecodecamp)
+3. Seleccione la extensión relevante y seleccione `Actualizar`
+4. Sube el archivo desde tus archivos locales
diff --git a/src/content/docs/es/curriculum-file-structure.md b/src/content/docs/es/curriculum-file-structure.md
new file mode 100644
index 00000000..d751b9b0
--- /dev/null
+++ b/src/content/docs/es/curriculum-file-structure.md
@@ -0,0 +1,111 @@
+---
+title: Estructura de archivos del currículo
+---
+
+Nuestro contenido instructivo principal se encuentra dentro del directorio convenientemente llamado `curriculum`. Esta página desglosará cómo están organizados estos archivos.
+
+## Terminología
+
+Hay algunos términos que utilizamos cuando hablamos del contenido de nuestro currículo.
+
+- `certification` : Cuando se hace referencia a una certificación en este caso, se está hablando del certificado real que los usuarios reclaman. Que es independiente del nombre del súper bloque.
+- `superBlock` : Un súper bloque es la colección de desafíos del nivel superior. Cada súper bloque corresponde a una certificacion en el currículo (p. ej. Diseño Web Responsivo).
+- `block` : Un bloque es una sección dentro de un súper bloque. Un bloque corresponde a un grupo de desafíos en una certificacion determinada (p. ej. HTML Básico y HTML5)
+- `challenge`: Un desafío es una sola lección dentro del currículo (p. ej. Di hola a los Elementos HTML)
+
+## Árbol de archivos
+
+Usando esos términos, así es como se definiría la estructura de archivos:
+
+
+```md
+
+curriculum/
+├─ _meta/
+│ ├─ {block}/
+│ │ ├─ meta.json
+├─ {language}/
+│ ├─ {superBlock}/
+│ │ ├─ {block}/
+│ │ │ ├─ {challenge}.md
+```
+
+## El directorio `_meta`
+
+El directorio `_meta` es un directorio especial que contiene archivos `.json`. Estos archivos corresponden a cada bloque en el currículo y son utilizados para determinar a qué súper bloque pertenece cada bloque y el orden de los desafíos dentro de ese bloque.
+
+## Renombrando archivos
+
+Puede haber ocasiones en las que necesites renombrar un certificado, súper bloque, bloque o desafío. Esta sección describirá los pasos necesarios para evitar errores de compilación al hacerlo.
+
+:::danger
+Renombrar archivos dentro de la estructura del currículo puede cambiar a menudo la ruta (o URL) del contenido en la página web principal. Debe hacerse con cuidado, ya que se deben establecer redireccionamientos para cada cambio que se realice.
+:::
+
+### Renombrando una certificación
+
+Al renombrar una certificación, es probable que desees renombrar el súper bloque asociado junto a ella. Haz lo siguiente para renombrar sólo el certificado:
+
+1. Cambia el nombre de la carpeta `curriculum/challenges/_meta/{superBlock}-certificate` por el nuevo nombre.
+1. En el archivo `meta.json` de esa carpeta, cambia los valores en `name`, `dashedName` y `challengeOrder` al nuevo nombre de certificado.
+1. En `curriculum/challenges/english/12-certificate`, cambia el nombre de la carpeta `{superBlock}-certificate` y el archivo YAML dentro de ella, por el nuevo nombre.
+1. En el archivo YAML, cambia el `title` por el nuevo nombre.
+1. Renombra el archivo y la carpeta del paso 3 para el resto de los lenguajes del currículo.
+1. Actualiza `client/src/redux/index.ts` para que utilice el `title` correcto.
+1. Como alternativa, actualiza el `certSlug` para el súper bloque en el mismo archivo. **Ten en cuenta** que renombrar un `certSlug` cambiará el URL para las certificaciones y solo debe hacerse con consideración.
+1. Actualiza el `title` en `client/src/resources/cert-and-project-map.ts` por el nuevo valor. **Ten en cuenta que** cambiar el `title` aquí **romperá** la página del súper bloque asociada a la certificación. Depende del título del súper Bloque para que coincida con el título de la certificación. Es probable que desees renombrar el súper bloque al mismo tiempo.
+1. Si renombraste `certSlug` en el paso 7, cámbialo aquí para el "cert" y todos los valores de `projects` anidados.
+1. In `shared/config/certification-settings.js`, update the value of `certTypeTitleMap` to the new name.
+1. Si renombraste el `certSlug` en el paso 7, actualiza la clave de `certSlugTypeMap` en el mismo archivo.
+1. Actualiza el nombre del certificado en el arreglo `legacyCerts` dentro del `client/src/client-only-routes/show-project-links.tsx` si es necesario.
+1. Actualiza el archivo principal `README.md` al nuevo nombre.
+
+### Renombrar un súper bloque
+
+:::note
+Cuando renombras un súper bloque, el nuevo nombre de carpeta es usado como la ruta y debe considerarse el nombre "correcto". Todos los demás valores deben actualizarse para reflejar ese cambio.
+:::
+
+Además, es probable que desees renombrar el certificado y el bloque `{superBlock}-projects` cuando renombres un súper bloque, ya que todos comparten un nombre. Para renombrar solamente un súper bloque necesitas:
+
+1. Renombrar la carpeta del super bloque en el directorio `curriculum/challenges/english`.
+1. Renombra la carpeta súper bloque en _todos_ los otros directorios `curriculum/challenges/{language}`.
+1. Para cada bloque dentro del súper bloque, actualice el valor `superBlock` en el archivo `meta.json` a su nombre con guiones. No necesitas renombrar ninguna carpeta aquí. Hazlo cuando renombres un bloque.
+1. Renombra la carpeta súper bloque en `client/src/pages/learn`.
+1. Actualiza el archivo `index.md` en la carpeta superior, cambiado los valores de `title` y `superBlock` al nuevo nombre.
+1. Para cada carpeta de bloque dentro de la superior, actualiza el `index.md` para que utilice el valor de `superBlock` correcto.
+1. En el archivo `cliente/src/recursos/cert-and-project-map.ts`, actualiza la ruta para certificado en la parte superior del archivo y el valor `title` para ese súper bloque. **Ten en cuenta** que cambiar el `title` aquí **interrumpirá** la capacidad de ver la certificación real para este súper bloque. Depende del título del súper Bloque para que coincida con el título de la certificación. Es probable que desees renombrar la certificación al mismo tiempo.
+1. Update the `superBlockCertTypeMap` key in `shared/config/certification-settings.js` to the new superBlock name.
+1. Actualiza el valor de la ruta en `client/src/assets/icons/index.tsx`.
+1. Para cada idioma en `client/i18n/locales`, actualiza el archivo `intro.json` para que utilice el nuevo `dashedName` (nombre con guiones) del súper Bloque. En el archivo en inglés, actualiza también el `title`.
+1. Check the `shared/config/i18n/all-langs.js` file to see if the superBlock is enabled in i18n builds. Actualiza todos los valores donde sea usado.
+1. Actualiza el archivo principal `README.md` al nuevo nombre.
+
+### Renombrando un bloque
+
+Cuando renombras un bloque del currículo, tienes que:
+
+1. Cambiar el nombre de la carpeta del bloque en el directorio `curriculum/challenges/english/{superBlock}`.
+1. Cambiar el nombre de la misma carpeta de bloque en _todos_ los demás directorios de lenguajes para que coincidan. Estos deben ser todos iguales a la estructura en inglés o se producirá un error en la compilación.
+1. Cambiar el nombre de la carpeta del bloque en el directorio `_meta`.
+1. Actualizar las propiedades `nombre` y `dashedName` (nombre con guiones) del archivo `meta.json` de ese bloque.
+1. Update the block folder in `client/src/pages/learn/{superBlock}`.
+1. In the `index.md` file of the above folder, update the `block` value in the frontmatter.
+1. In the `client/i18n/locales/{language}/intro.json` files, update the block name to the new name for all the languages. In the English `intro.json` file, update the `title` as well.
+1. Update the main `README.md` file to the new name.
+
+### Renombrando un desafío
+
+Al renombras un solo archivo de desafío, tienes que:
+
+1. Cambiar el nombre del archivo del desafío en el directorio `curriculum/challenges/english`.
+1. Cambiar el nombre del `title` y de `dashedName` (nombre con guiones) dentro de ese archivo.
+1. Cambiar el nombre del archivo y los `dashedName` en esos archivos para coincidir con _todos_ los demás directorios de idiomas.
+1. Actualizar el nombre del desafío en el archivo `meta.json` correspondiente. Los nombres de los desafíos aquí no se utilizan en la compilación, pero proveen una forma amigable al usuario de identificar el orden de los mismos.
+1. Si el desafío es un proyecto de certificado, actualizar el archivo YAML en `curriculum/english/12-certificates/` con el nuevo nombre.
+1. Si el desafío es un proyecto de certificado, actualizar el `title` y el `link` en `client/src/resources/cert-and-project-map.ts`
+1. Si el desafío es un proyecto de certificado, actualizar el archivo principal `README.md` con el nuevo nombre.
+
+## La propiedad `dashedName`
+
+La propiedad `dashedName` se usa para generar la ruta URL para el súper bloque, el bloque o el desafío. Por lo general, estos deberían coincidir con los nombres que generaría el asistente `/utils/slugs.js` para el nombre del archivo.
diff --git a/src/content/docs/es/curriculum-help.md b/src/content/docs/es/curriculum-help.md
new file mode 100644
index 00000000..82848d65
--- /dev/null
+++ b/src/content/docs/es/curriculum-help.md
@@ -0,0 +1,165 @@
+---
+title: Using the Curriculum Helpers
+---
+
+The test runner has access to a few helpers that can assist with testing campers' code.
+
+## CSS Helper
+
+To instantiate the helper within a test block, use this:
+
+```js
+const helper = new __helpers.CSSHelp(document);
+```
+
+In that example, the `document` variable refers to the document object of the test runner's iframe.
+
+### Methods
+
+There are a few methods available for parsing and testing CSS.
+
+#### `.getStyle()`
+
+The `.getStyle()` method takes a CSS selector and returns a CSS style declaration object.
+
+For example, if the camper has written the following CSS:
+
+```css
+body {
+ background: linear-gradient(45deg, rgb(118, 201, 255), rgb(247, 255, 222));
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+}
+```
+
+You would get an object that looks like this:
+
+```js
+{
+ 0: "background-image",
+ 1: "background-position-x",
+ 2: "background-position-y",
+ 3: "background-size",
+ 4: "background-repeat-x",
+ 5: "background-repeat-y",
+ 6: "background-attachment",
+ 7: "background-origin",
+ 8: "background-clip",
+ 9: "background-color",
+ 10: "margin-top",
+ 11: "margin-right",
+ 12: "margin-bottom",
+ 13: "margin-left",
+ 14: "padding-top",
+ 15: "padding-right",
+ 16: "padding-bottom",
+ 17: "padding-left",
+ 18: "width",
+ 19: "height",
+ 20: "overflow-x",
+ 21: "overflow-y",
+ "accentColor": "",
+ "additiveSymbols": "",
+ "alignContent": "",
+ "alignItems": "",
+ ...
+}
+```
+
+This method allows you to test that specific properties have been set:
+
+```js
+assert.strictEqual(helper.getStyle('body')?.width, '100%');
+```
+
+The helper attaches a `.getPropVal()` method to the style declaration object that allows you to get the value of a specific property:
+
+```js
+assert.strictEqual(helper.getStyle('body').getPropVal('width'), '100%');
+```
+
+#### `.getCSSRules()`
+
+The `.getCSSRules()` takes an at-rule type from the union `media | fontface | import | keyframes`, and returns an array of CSS rules matching that at-rule.
+
+For example, if the camper has written the following code:
+
+```css
+@media (max-width: 100px) {
+ body {
+ background-color: green;
+ }
+}
+```
+
+Then the returned value of `helper.getCSSRules('media')` would be this array:
+
+```js
+[
+ {
+ conditionText: "(max-width: 100px)",
+ cssRules: [
+ selectorText: 'body',
+ style: CSSStyleDeclaration,
+ styleMap: StylePropertyMap,
+ cssRules: CSSRuleList,
+ type: 1,
+ ...
+ ],
+ cssText: "@media (max-width: 100px) {\n body { background-color: green; }\n}",
+ ...
+ }
+]
+```
+
+You can then test that the camper has written the correct media query:
+
+```js
+const hasCorrectHeight = helper
+ .getCSSRules('media')
+ .some(x => x.style.height === '3px');
+assert.isTrue(hasCorrectHeight);
+```
+
+#### `.getRuleListsWithinMedia()`
+
+The `.getRuleListsWithinMedia()` method takes a media text (e.g. `("max-width: 200")`) and returns the CSS rules within that media query.
+
+The return result is the equivalent of that media rule's `cssRules` property from the return value of `.getCSSRules("media")`.
+
+### Less Frequent Methods
+
+These methods are not as commonly used, but are available if needed.
+
+#### `.getStyleDeclarations()`
+
+The `.getStyleDeclarations()` method takes a CSS selector and returns an array of CSS style declaration objects (from the `.getStyle()` method).
+
+#### `.isPropertyUsed()`
+
+The `.isPropertyUsed()` method takes a CSS **property** and checks if it has been set/used anywhere in the camper's CSS.
+
+#### `.getStyleRule()`
+
+The `.getStyleRule()` method takes a CSS selector and returns the CSS Style Declaration, much like `.getStyle()`. However, the declaration returned from this method includes an additional `.isDeclaredAfter()` method which takes a selector and returns whether this rule is declared after the selector passed in.
+
+#### `.getStyleSheet()`
+
+The `.getStyleSheet()` method returns the camper's CSS, parsed into a CSS Style Sheet object.
+
+## Strip Content
+
+There are a few methods on the `__helpers` object to remove content from the camper's code.
+
+These do NOT need to be instantiated they are static methods.
+
+### Removing Comments
+
+Using `__helpers.removeCssComments()`, `__helpers.removeHTMLComments()`, or `__helpers.removeJSComments()` allows you to pass the camper's code (through the `code` variable) to remove comments matching the language's comment syntax.
+
+### Removing Whitespace
+
+Using `__helpers.removeWhitespace()` allows you to pass the camper's code (through the `code` variable) to remove all whitespace.
diff --git a/src/content/docs/es/devops.md b/src/content/docs/es/devops.md
new file mode 100644
index 00000000..e3bb22a0
--- /dev/null
+++ b/src/content/docs/es/devops.md
@@ -0,0 +1,1004 @@
+---
+title: Manual de DevOps
+---
+
+Esta guía te ayudará a comprender nuestra infraestructura y cómo le damos mantenimiento a nuestras plataformas. Si bien esta guía no contiene detalles exhaustivos de todas las operaciones, esta podría utilizarse como referencia para tu comprensión de los sistemas.
+
+Let us know if you have feedback or queries and we will be happy to clarify.
+
+## Flight Manual - Code Deployments
+
+This repository is continuously built, tested, and deployed to **separate sets of infrastructure (Servers, Databases, CDNs, etc.)**.
+
+Esto involucra tres pasos que deben seguirse en secuencia:
+
+1. Los nuevos cambios (tanto correcciones como funcionalidades) se integran en nuestra rama principal de desarrollo (`main`) a través de pull requests.
+2. Estos cambios son ejecutados a través de una serie de pruebas automatizadas.
+3. Una vez que las pruebas se completan de forma satisfactoria, publicamos los cambios (o los actualizamos si es necesario) para desplegarlos en nuestra infraestructura.
+
+### Building the codebase - Mapping Git Branches to Deployments
+
+Normalmente, [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) (la rama de desarrollo por defecto) se integra diariamente en la rama [`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) y se publica en una infraestructura aislada.
+
+Esta es una publicación intermedia para nuestros desarrolladores y colaboradores voluntarios. También es conocida como nuestra publicación "staging" o "beta".
+
+Este es idéntico a nuestro entorno de producción en `freeCodeCamp.org`, excepto que utiliza un conjunto separado de bases de datos, servidores, web-proxies, etc. Este aislamiento nos permite probar el desarrollo y las funcionalidades de manera continua en un escenario similar al de "producción", sin afectar a los usuarios regulares de las principales plataformas de freeCodeCamp.org.
+
+Una vez que el equipo de desarrolladores [`@freeCodeCamp/dev-team`](https://github.com/orgs/freeCodeCamp/teams/dev-team/members) está satisfecho con los cambios en la plataforma de "staging", estos cambios se trasladan cada ciertos días a la rama [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current).
+
+Esta es la versión final que despliega los cambios a nuestras plataformas de producción en freeCodeCamp.org.
+
+### Testing changes - Integration and User Acceptance Testing
+
+Empleamos varios niveles de pruebas de integración y aceptación para verificar la calidad del código. Todas nuestras pruebas se realizan a través de software como [GitHub Actions CI](https://github.com/freeCodeCamp/freeCodeCamp/actions) y [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp).
+
+We have unit tests for testing our challenge solutions, Server APIs, and Client User interfaces. Estas nos ayudan a probar la integración entre diferentes componentes.
+
+:::note
+We are also in the process of writing end user tests which will help in replicating real-world scenarios like updating an email or making a call to the API or third-party services.
+:::
+
+Juntas, estas pruebas ayudan a evitar que los problemas se repitan y garantizan que no introduzcamos un error mientras trabajamos en otro error o en una funcionalidad.
+
+### Deploying Changes - Pushing changes to servers
+
+Hemos configurado un software de entrega continua para publicar los cambios en nuestros servidores de desarrollo y producción.
+
+Una vez que los cambios se envían a las ramas de publicación protegidas, se activa automáticamente un flujo de compilación para la rama. Los flujos de compilación son responsables de construir artefactos y mantenerlos en un almacenamiento en frío para su uso posterior.
+
+El flujo de compilación dispara el flujo de publicación correspondiente si este completa una ejecución exitosa. The release pipelines are responsible for collecting the build artifacts, moving them to the servers, and going live.
+
+The statuses of builds and releases are [available here](#build-test-and-deployment-status).
+
+## Trigger a Build, Test, and Deploy
+
+Currently, only members of the developer team can push to the production branches. Los cambios en las ramas de `production-*` sólo pueden llegar a través de una fusión fast-forward al [`upstream`](https://github.com/freeCodeCamp/freeCodeCamp).
+
+:::note
+In the upcoming days, we would improve this flow to be done via pull requests, for better access management and transparency.
+:::
+
+### Pushing changes to Staging Applications
+
+1. Configura tus repositorios remotos correctamente.
+
+ ```sh
+ git remote -v
+ ```
+
+ **Resultado:**
+
+ ```
+ origin git@github.com:raisedadead/freeCodeCamp.git (fetch)
+ origin git@github.com:raisedadead/freeCodeCamp.git (push)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+2. Asegúrate de que tu rama `main` sea impecable y esté sincronizada con la corriente ascendente.
+
+ ```sh
+ git checkout main
+ git fetch --all --prune
+ git reset --hard upstream/main
+ ```
+
+3. Comprueba que el GitHub CI este aprobado en la rama `main` para el flujo upstream.
+
+ Las pruebas de [integración continua](https://github.com/freeCodeCamp/freeCodeCamp/actions) deben estar en verde y en estado PASSING para la rama `main`. Haz clic en la marca de verificación verde junto al hash del commit si estás viendo el código de la rama `main`.
+
+ Comprobando el estado en GitHub actions (captura de pantalla)
+
+ 
+
+
+ Si esto está fallando debes detenerte e investigar los errores.
+
+4. Confirme que puede crear el repositorio localmente.
+
+ ```
+ pnpm run clean-and-develop
+ ```
+
+5. Mueve los cambios desde `main` a `prod-staging` mediante una fusión fast-forward
+
+ ```
+ git checkout prod-staging
+ git merge main
+ git push upstream
+ ```
+
+:::note
+You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+
+Si esto ocurre, es posible que hayas hecho algo incorrectamente y deberías comenzar de nuevo.
+:::
+
+Los pasos anteriores activarán automáticamente un flujo de compilación para la rama `prod-staging`. Una vez que se completa la compilación, los artefactos se guardan como archivos `.zip` en un almacenamiento en frío para ser recuperados y usados más adelante.
+
+El flujo de publicación se activa automáticamente cuando hay un nuevo artefacto disponible en el flujo de compilación conectado. For staging platforms, this process does not involve manual approval, and the artifacts are pushed to the Client CDN and API servers.
+
+### Pushing changes to Production Applications
+
+El proceso es prácticamente el mismo que el de las plataformas de staging, con algunas comprobaciones adicionales. Esto es solo para asegurarnos de que no rompemos nada en freeCodeCamp.org, el cual puede tener a cientos de usuarios usándolo en cualquier momento.
+
+| NO ejecutes estos comandos a menos que hayas verificado que todo funciona en la plataforma de staging. No debes omitir ni evitar ninguna prueba en staging antes de continuar. |
+| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| |
+
+1. Asegúrate de que tu rama `prod-staging` este sin cambios y sincronizada con el upstream.
+
+ ```sh
+ git checkout prod-staging
+ git fetch --all --prune
+ git reset --hard upstream/prod-staging
+ ```
+
+2. Mueve los cambios de `prod-staging` a `prod-current` mediante una fusión fast-forward
+
+ ```
+ git checkout prod-current
+ git merge prod-staging
+ git push upstream
+ ```
+
+ :::note
+ You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+ :::
+
+ > Si esto ocurre, es posible que hayas hecho algo incorrectamente y deberías comenzar de nuevo.
+
+Los pasos anteriores activarán automáticamente un flujo de compilación para la rama `prod-current`. Una vez que un artefacto de compilación está listo, este activará la ejecución en el flujo de publicación.
+
+**Pasos Adicionales para el Staff Action**
+
+Once a release run is triggered, members of the developer staff team will receive an automated manual intervention email. Pueden _aprobar_ o _rechazar_ la publicación.
+
+Si los cambios funcionan y se han probado en la plataforma de staging, entonces se pueden aprobar. La aprobación debe darse dentro de las 4 horas posteriores a la activación de la publicación antes de sea rechazada automáticamente. Un miembro del personal puede volver a iniciar la ejecución de la publicación de manera manual para publicaciones que fueron rechazados o esperar el siguiente ciclo de publicación.
+
+Para uso del personal:
+
+| Revisa tu correo electrónico para ver si hay un enlace directo o [ve al panel de publicaciones](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) después de que la ejecución de la compilación haya terminado. |
+| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| |
+
+Una vez que uno de los miembros del personal apruebe una publicación, el flujo enviará los cambios a los servidores de API y CDN de producción de freeCodeCamp.org.
+
+## Build, Test and Deployment Status
+
+Aquí está el estado actual de las pruebas, compilación y despliegue del código base.
+
+| Rama | Pruebas de unidad | pruebas de integración | compilación y despliegue |
+| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
+| [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | - |
+| [`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-staging) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-current) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| `prod-next` (experimental, próximamente) | - | - | - |
+
+## Early Access and Beta Testing
+
+Te invitamos a probar estas versiones en un modo **"prueba beta pública"** y obtener acceso anticipado a las próximas funciones de las plataformas. A veces, estas funcionalidades/cambios se denominan **next, beta, staging,** etc. indistintamente.
+
+Your contributions via feedback and issue reports will help us in making the production platforms at `freeCodeCamp.org` more **resilient**, **consistent**, and **stable** for everyone.
+
+Te agradecemos por reportar los errores que encuentres y ayudar a mejorar freeCodeCamp.org. ¡Eres genial!
+
+### Identifying the Upcoming Version of the Platforms
+
+Currently, a public beta testing version is available at:
+
+| Aplicación | Idioma | URL |
+| :--------- | :------ | :--------------------------------------- |
+| Aprende | Inglés | |
+| | Español | |
+| | Chino | |
+| Noticias | Inglés | |
+| Foro | Inglés | |
+| | Chino | |
+| API | - | `https://api.freecodecamp.dev` |
+
+:::note
+El nombre de dominio es diferente a **`freeCodeCamp.org`**. Esto es intencional para evitar la indexación de los motores de búsqueda y evitar confusiones para los usuarios habituales de la plataforma.
+:::
+
+> The above list is not exhaustive of all the applications that we provision. Also, not all language variants are deployed in staging to conserve resources.
+
+### Identifying the Current Version of the Platforms
+
+**La versión actual de la plataforma siempre está disponible en [`freeCodeCamp.org`](https://www.freecodecamp.org).**
+
+El equipo de desarrollo fusiona los cambios de la rama `prod-staging` a `prod-current` cuando publican los cambios. El commit más reciente debe ser lo que ves en vivo en el sitio.
+
+Puedes identificar la versión exacta desplegada visitando los registros de compilación y despliegue disponibles en la sección de estado. Alternatively, you can also ping us in the [contributors chat room](https://discord.gg/PRyKn3Vbay) for a confirmation.
+
+### Known Limitations
+
+Existen algunas limitaciones y problemas conocidos al utilizar la versión beta de la plataforma.
+
+- **All data / personal progress on these beta platforms will NOT be saved or carried over to production**
+
+ **Los usuarios de la versión beta tendrán una cuenta separada a la de producción.** La versión beta usa una base de datos físicamente separada de la de producción. Esto nos da la capacidad de prevenir cualquier pérdida accidental de datos o modificaciones. The dev-team may purge the database on this beta version as needed.
+
+- **The beta platforms do not provide any assurances regarding uptime and reliability**
+
+ Se espera que el despliegue sea frecuente y en iteraciones rápidas, a veces varias veces al día. As a result, there will be unexpected downtime at times or broken functionality on the beta version.
+
+- **To ensure the effectiveness of the fix, it is advised not to direct regular users to this site for verification purposes.**
+
+ El sitio beta es y siempre ha sido para aumentar el desarrollo y las pruebas locales, nada más. No es una promesa de lo que se avecina, sino un vistazo de lo que se está trabajando.
+
+- **Sign in page may look different than production**
+
+ Usamos un entorno de prueba para freeCodeCamp.dev en Auth0 y por lo tanto, no tenemos la capacidad de establecer un dominio personalizado. Esto hace que todas las redirecciones de peticiones y la página de inicio de sesión aparezcan en un dominio predeterminado como: `https://freecodecamp-dev.auth0.com/`. Esto no afecta la funcionalidad y es lo más cercano a la producción que podemos conseguir.
+
+## Reporting issues and leaving feedback
+
+Por favor abre un nuevo reporte (issue) para discusiones e informes de errores.
+
+Puedes enviar un correo electrónico a `dev[at]freecodecamp.org` si tienes alguna consulta. Como siempre, todas las vulnerabilidades de seguridad deben notificarse a `security[at]freecodecamp.org` en lugar del registro público o el foro.
+
+## Flight Manual - Server Maintenance
+
+:::!WARNING
+
+1. La guía se aplica únicamente a los **miembros del personal de freeCodeCamp**.
+2. Estas instrucciones no deben considerarse exhaustivas, por favor ten cuidado.
+ :::
+
+Como miembro del equipo interno, es posible que se te haya dado acceso a nuestros proveedores de servicios en la nube como Azure, Digital Ocean, etc.
+
+Aquí hay algunos comandos útiles que puedes usar para trabajar en las máquinas virtuales (MV), por ejemplo, realizar actualizaciones de mantenimiento o realizar tareas de limpieza general.
+
+## Get a list of the VMs
+
+:::note
+While you may already have SSH access to the VMs, that alone will not let you list VMs unless you have been granted access to the cloud portals as well.
+:::
+
+### Azure
+
+Instala el CLI de Azure `az`: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
+
+> **(Una sola vez) Instalar en macOS con [`homebrew`](https://brew.sh):**
+
+```
+brew install azure-cli
+```
+
+> **(Una sola vez) Inicio de sesión:**
+
+```
+az login
+```
+
+> **Obtener la lista de nombres de las máquinas virtuales y direcciones IP:**
+
+```
+az vm list-ip-addresses --output table
+```
+
+### Digital Ocean
+
+Instalar el CLI de Digital Ocean `doctl`: https://github.com/digitalocean/doctl#installing-doctl
+
+> **(Una sola vez) Instalar en macOS con [`homebrew`](https://brew.sh):**
+
+```
+brew install doctl
+```
+
+> **(Una sola vez) Inicio de sesión:**
+
+Autenticación y cambio de contexto: https://github.com/digitalocean/doctl#authenticating-with-digitalocean
+
+```
+doctl auth init
+```
+
+> **Obtener la lista de nombres de las máquinas virtuales y direcciones IP:**
+
+```
+doctl compute droplet list --format "ID,Name,PublicIPv4"
+```
+
+## Spin New Resources
+
+Estamos trabajando para crear nuestra configuración de "laC", y mientras esta en proceso, puedes usar el portal de Azure o Azure CLI para poner en marcha nuevas maquinas virtuales y otros recursos.
+
+> [!TIP] Independientemente de tu elección de ejecución de recursos, tenemos algunos [ archivos de configuración de inicio útiles en la nube](https://github.com/freeCodeCamp/infra/tree/main/cloud-init) para ayudarte a realizar parte del aprovisionamiento básico, como instalar docker o agregar claves SSH, etc.
+
+## Keep VMs Updated
+
+Debes mantener las máquinas virtuales actualizadas mediante la realización de actualizaciones. This will ensure that the virtual machine is patched with the latest security fixes.
+
+> [!WARNING] Antes de ejecutar estos comandos:
+>
+> - Make sure that the VM has been provisioned completely and that there are no post-install steps running.
+> - Si estás actualizando paquetes en una máquina virtual que ya está sirviendo una aplicación, asegúrate de que la aplicación se ha detenido / guardado. Las actualizaciones de paquetes causarán que el ancho de banda de la red, la memoria y/o CPU tengan picos que pueden ocasionar interrupciones en aplicaciones en ejecución.
+
+Actualizar la información de paquetes
+
+```bash
+sudo apt update
+```
+
+Actualizar los paquetes instalados
+
+```bash
+sudo apt upgrade -y
+```
+
+Limpieza de paquetes no utilizados
+
+```bash
+sudo apt autoremove -y
+```
+
+## Work on Web Servers (Proxy)
+
+Estamos ejecutando instancias de balanceo de cargas (Azure Load Balancer) para nuestros servidores web. Estos servidores ejecutan NGINX como proxy inverso, enrutando hacia freeCodeCamp.org el tráfico de varias aplicaciones que se ejecutan en sus propias infraestructuras.
+
+La configuración de NGINX está disponible en [este repositorio](https://github.com/freeCodeCamp/nginx-config).
+
+### Primera Instalación
+
+Aprovisionamiento de máquinas virtuales con el código
+
+1. Instala NGINX y configúralo desde el repositorio.
+
+ ```bash
+ sudo su
+
+ cd /var/www/html
+ git clone https://github.com/freeCodeCamp/error-pages
+
+ cd /etc/
+ rm -rf nginx
+ git clone https://github.com/freeCodeCamp/nginx-config nginx
+
+ cd /etc/nginx
+ ```
+
+2. Instala los certificados de origen de Cloudflare y la configuración de la aplicación upstream.
+
+ Obtén los certificados de origen de Cloudflare del almacenamiento seguro e instálalos en las ubicaciones requeridas.
+
+ **O**
+
+ Mueve los certificados existentes:
+
+ ```bash
+ # En Local
+ scp -r username@source-server-public-ip:/etc/nginx/ssl ./
+ scp -pr ./ssl username@target-server-public-ip:/tmp/
+
+ # En Remoto
+ rm -rf ./ssl
+ mv /tmp/ssl ./
+ ```
+
+ Actualiza las configuraciones upstream:
+
+ ```bash
+ vi configs/upstreams.conf
+ ```
+
+ Agrega/actualiza las direcciones IP fuente/origen de la aplicación.
+
+3. Set up networking and firewalls.
+
+ Configura los firewalls de Azure y `ufw` según sea necesario para las direcciones de origen de entrada.
+
+4. Agregue la MV al grupo de backend del balanceador de carga.
+
+ Configura y agrega reglas al balanceador de carga si es necesario. Es posible que también necesites agregar las MVs al grupo de backend del balanceador de carga si es necesario.
+
+### Registro de eventos y monitoreo
+
+1. Compruebe el estado del servicio NGINX utilizando el siguiente comando:
+
+ ```bash
+ sudo systemctl status nginx
+ ```
+
+2. El registro de eventos y el monitoreo de los servidores están disponibles en:
+
+ NGINX Amplify: [https://amplify.nginx.com]('https://amplify.nginx.com'), nuestro panel de control básico actual. Estamos trabajando en métricas más granulares para una mejor visibilidad de los datos
+
+### Actualización de las instancias (mantenimiento)
+
+Los cambios en la configuración de nuestras instancias NGINX son mantenidos en GitHub, y se deben desplegar en cada instancia de la siguiente manera:
+
+1. SSH en la instancia y entra en modo sudo
+
+```bash
+sudo su
+```
+
+2. Obtén el código de configuración más reciente.
+
+```bash
+cd /etc/nginx
+git fetch --all --prune
+git reset --hard origin/main
+```
+
+3. Prueba y recarga la configuración [con Signals](https://docs.nginx.com/nginx/admin-guide/basic-functionality/runtime-control/#controlling-nginx).
+
+```bash
+nginx -t
+nginx -s reload
+```
+
+## Work on API Instances
+
+1. Instala las herramientas de compilación para archivos binarios de Node (`node-gyp`) etc.
+
+```bash
+sudo apt install build-essential
+```
+
+### Primera instalación
+
+Aprovisionamiento de MVs con el código
+
+1. Install Node LTS.
+
+2. Install pnpm globally.
+
+```bash
+npm install -g pnpm
+```
+
+3. Install pm2 globally.
+
+```bash
+npm install -g pm2
+```
+
+4. Clone freeCodeCamp, set up env, and keys.
+
+```bash
+git clone https://github.com/freeCodeCamp/freeCodeCamp.git
+cd freeCodeCamp
+git checkout prod-current # or any other branch to be deployed
+```
+
+5. Create the `.env` from the secure credentials storage.
+
+6. Install dependencies
+
+```bash
+pnpm install
+```
+
+7. Setup pm2 `logrotate` and startup on boot
+
+```bash
+pm2 install pm2-logrotate
+pm2 startup
+```
+
+8. Build the server
+
+```bash
+pnpm prebuild && pnpm build:curriculum && pnpm build:server
+```
+
+9. Start Instances
+
+```bash
+pnpm start:server
+```
+
+### Registro de eventos y monitoreo
+
+```bash
+pm2 logs
+```
+
+```bash
+pm2 monit
+```
+
+### Actualización de las instancias (mantenimiento)
+
+Los cambios en el código deben desplegarse en las instancias de la API cada tanto. Esto puede ser una actualización continua o una actualización manual. The latter is essential when changing dependencies or adding environment variables.
+
+> [!ATTENTIÓN] Los flujos automáticos no están manejando actualizaciones de dependencias en el momento. Necesitamos realizar una actualización manual antes de que se ejecute cualquier flujo de despliegue.
+
+#### 1. Manual Updates - Used for updating dependencies, env variables.
+
+1. Stop all instances
+
+```bash
+pm2 stop all
+```
+
+2. Install dependencies
+
+```bash
+pnpm install
+```
+
+3. Build the server
+
+```bash
+pnpm prebuild && pnpm build:curriculum && pnpm build:server
+```
+
+4. Start Instances
+
+```bash
+pnpm start:server && pm2 logs
+```
+
+#### 2. Rolling updates - Used for logical changes to code.
+
+```bash
+pnpm reload:server && pm2 logs
+```
+
+:::note
+We are handling rolling updates to code and logic via pipelines. No debes tener que ejecutar estos comandos. Estos están aquí para documentación.
+:::
+
+#### 3. Updating Node
+
+1. Install new Node version
+
+2. Update pm2 to use the new version
+
+```bash
+pm2 update
+```
+
+## Work on Client Instances
+
+1. Install build tools for node binaries (`node-gyp`) etc.
+
+```bash
+sudo apt install build-essential
+```
+
+### Primera Instala
+
+Aprovisionamiento de MVs con el código
+
+1. Install Node LTS.
+
+2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
+
+ ```bash
+ npm i -g npm@8
+ npm i -g pm2@4
+ npm install -g serve@13
+ pm2 install pm2-logrotate
+ pm2 startup
+ ```
+
+3. Clone client config, setup env and keys.
+
+ ```bash
+ git clone https://github.com/freeCodeCamp/client-config.git client
+ cd client
+ ```
+
+ Start placeholder instances for the web client, these will be updated with artifacts from the Azure pipeline.
+
+ > Todo: This setup needs to move to S3 or Azure Blob storage
+ >
+ > ```bash
+ > echo "serve -c ../serve.json -p 50505 www" > client-start-primary.sh
+ > chmod +x client-start-primary.sh
+ > pm2 delete client-primary
+ > pm2 start ./client-start-primary.sh --name client-primary
+ > echo "serve -c ../serve.json -p 52525 www" > client-start-secondary.sh
+ > chmod +x client-start-secondary.sh
+ > pm2 delete client-secondary
+ > pm2 start ./client-start-secondary.sh --name client-secondary
+ > ```
+
+### Registro de eventos y monitoreo
+
+```bash
+pm2 logs
+```
+
+```bash
+pm2 monit
+```
+
+### Actualización de las instancias (mantenimiento)
+
+Los cambios en el código deben desplegarse en las instancias del API cada cierto tiempo. Esto puede ser una actualización continua o una actualización manual. La última es esencial al cambiar dependencias o al agregar variables de entorno.
+
+:::danger
+Los flujos automáticos no están manejando actualizaciones de dependencias en el momento. Necesitamos realizar una actualización manual antes de que se ejecute cualquier flujo de despliegue.
+:::
+
+#### 1. Actualizaciones Manuales: Utilizadas para actualizar dependencias, variables de entorno.
+
+1. Stop all instances
+
+ ```bash
+ pm2 stop all
+ ```
+
+2. Install or update dependencies
+
+3. Start Instances
+
+ ```bash
+ pm2 start all --update-env && pm2 logs
+ ```
+
+#### 2. Actualizaciones continuas: Utilizadas para cambios lógicos en el código.
+
+```bash
+pm2 reload all --update-env && pm2 logs
+```
+
+:::note
+Estamos manejando actualizaciones continuas de código, lógica, a través de flujos. No necesitarás aplicar estos comandos. Estos están por la documentación.
+:::
+
+## Work on Chat Servers
+
+Nuestros servidores de chat están disponibles con una configuración HA [recomendada en la documentación de Rocket.Chat](https://docs.rocket.chat/installation/docker-containers/high-availability-install). El archivo `docker-compose` para esto está [disponible aquí](https://github.com/freeCodeCamp/chat-config).
+
+Aprovisionamos instancias NGINX redundantes que a su vez tienen equilibrio de carga (Azure Load Balancer) frente al clúster Rocket.Chat. El archivo de configuración de NGINX está [disponible aquí](https://github.com/freeCodeCamp/chat-nginx-config).
+
+### First Install
+
+Aprovisionamiento de MVs con el código
+
+**Clúster NGINX:**
+
+1. Install NGINX and configure from repository.
+
+ ```bash
+ sudo su
+
+ cd /var/www/html
+ git clone https://github.com/freeCodeCamp/error-pages
+
+ cd /etc/
+ rm -rf nginx
+ git clone https://github.com/freeCodeCamp/chat-nginx-config nginx
+
+ cd /etc/nginx
+ ```
+
+2. Install Cloudflare origin certificates and upstream application config.
+
+ Get the Cloudflare origin certificates from the secure storage and install at required locations.
+
+ **OR**
+
+ Move over existing certificates:
+
+ ```bash
+ # Local
+ scp -r username@source-server-public-ip:/etc/nginx/ssl ./
+ scp -pr ./ssl username@target-server-public-ip:/tmp/
+
+ # Remote
+ rm -rf ./ssl
+ mv /tmp/ssl ./
+ ```
+
+ Update Upstream Configurations:
+
+ ```bash
+ vi configs/upstreams.conf
+ ```
+
+ Add/update the source/origin application IP addresses.
+
+3. Set up networking and firewalls.
+
+ Configure Azure firewalls and `ufw` as needed for ingress origin addresses.
+
+4. Add the VM to the load balancer backend pool.
+
+ Configure and add rules to load balancer if needed. You may also need to add the VMs to load balancer backend pool if needed.
+
+**Clúster de Docker:**
+
+1. Install Docker and configure from the repository
+
+ ```bash
+ git clone https://github.com/freeCodeCamp/chat-config.git chat
+ cd chat
+ ```
+
+2. Configure the required environment variables and instance IP addresses.
+
+3. Run rocket-chat server
+
+ ```bash
+ docker-compose config
+ docker-compose up -d
+ ```
+
+### Logging and Monitoring
+
+1. Check status for NGINX service using the below command:
+
+ ```bash
+ sudo systemctl status nginx
+ ```
+
+2. Check status for running docker instances with:
+
+ ```bash
+ docker ps
+ ```
+
+### Updating Instances (Maintenance)
+
+**Clúster NGINX:**
+
+Los cambios de configuración a nuestras instancias NGINX se mantienen en GitHub, estos se deben implementar en cada instancia de la siguiente manera:
+
+1. SSH into the instance and enter sudo
+
+ ```bash
+ sudo su
+ ```
+
+2. Get the latest config code.
+
+ ```bash
+ cd /etc/nginx
+ git fetch --all --prune
+ git reset --hard origin/main
+ ```
+
+3. Test and reload the config [with Signals](https://docs.nginx.com/nginx/admin-guide/basic-functionality/runtime-control/#controlling-nginx).
+
+ ```bash
+ nginx -t
+ nginx -s reload
+ ```
+
+**Clúster de Docker:**
+
+1. SSH into the instance and navigate to the chat config path
+
+ ```bash
+ cd ~/chat
+ ```
+
+2. Get the latest config code.
+
+ ```bash
+ git fetch --all --prune
+ git reset --hard origin/main
+ ```
+
+3. Pull down the latest docker image for Rocket.Chat
+
+ ```bash
+ docker-compose pull
+ ```
+
+4. Update the running instances
+
+ ```bash
+ docker-compose up -d
+ ```
+
+5. Validate the instances are up
+
+ ```bash
+ docker ps
+ ```
+
+6. Cleanup extraneous resources
+
+ ```bash
+ docker system prune --volumes
+ ```
+
+ Output:
+
+ ```bash
+ WARNING! This will remove:
+ - all stopped containers
+ - all networks not used by at least one container
+ - all volumes not used by at least one container
+ - all dangling images
+ - all dangling build cache
+
+ Are you sure you want to continue? [y/N] y
+ ```
+
+ Select yes (y) to remove everything that is not in use. This will remove all stopped containers, all networks and volumes not used by at least one container, and all dangling images and build caches.
+
+## Work on Contributor Tools
+
+### Deploy Updates
+
+ssh en la máquina virtual (alojada en Digital Ocean).
+
+```bash
+cd tools
+git pull origin master
+pnpm install
+pnpm run build
+pm2 restart contribute-app
+```
+
+## Updating Node.js Versions on VMs
+
+Lista las versiones instaladas de node y npm
+
+```bash
+nvm -v
+node -v
+npm -v
+
+nvm ls
+```
+
+Instala el último Node.js LTS y reinstala cualquier paquete global
+
+```bash
+nvm install --lts --reinstall-packages-from=default
+```
+
+Verifica los paquetes instalados
+
+```bash
+npm ls -g --depth=0
+```
+
+Alias the `default` Node.js version to the current LTS (pinned to the latest major version)
+
+```bash
+nvm alias default 16
+```
+
+(Opcional) Desinstalar versiones antiguas
+
+```bash
+nvm uninstall
+```
+
+:::danger
+Para las aplicaciones cliente, el script de shell no se puede resucitar entre las versiones de Node.js con `pm2 resurrect`. En su lugar, despliega procesos desde cero. This should become nicer when we move to a docker-based setup.
+:::
+
+> Si utilizas PM2 para procesos, también deberás abrir las aplicaciones y guardar la lista de procesos para la recuperación automática en los reinicios.
+
+Obtén las instrucciones/comandos de desinstalación con el comando `unstartup` y usa la salida para eliminar los servicios de systemctl
+
+```bash
+pm2 unstartup
+```
+
+Obtén las instrucciones/comandos de instalación con el comando `startup` y usa la salida para agregar los servicios de systemctl
+
+```bash
+pm2 startup
+```
+
+Comandos rápidos para que PM2 enumere, reviva procesos guardados, etc.
+
+```bash
+pm2 ls
+```
+
+```bash
+pm2 resurrect
+```
+
+```bash
+pm2 save
+```
+
+```bash
+pm2 logs
+```
+
+## Installing and Updating Azure Pipeline Agents
+
+See: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-linux?view=azure-devops and follow the instructions to stop, remove, and reinstall agents. En términos generales, puedes seguir los pasos que se enumeran aquí.
+
+Necesitarás una PAT, que puedes obtener desde aquí: https://dev.azure.com/freeCodeCamp-org/_usersSettings/tokens
+
+### Installing Agents on Deployment targets
+
+Navega a [Azure Devops](https://dev.azure.com/freeCodeCamp-org) y registra el agente desde cero en el requisito [deployment groups](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_machinegroup).
+
+:::note
+Debes ejecutar los scripts en el directorio de inicio, y asegurarte de que no existe ningún otro directorio `azagent`.
+:::
+
+### Updating Agents
+
+Actualmente actualizar los agentes requiere que sean eliminados y reconfigurados. Esto es necesario para que recojan correctamente los valores `PATH` y otras variables de entorno del sistema. Necesitamos hacer esto, por ejemplo, para actualizar Node.js en nuestras MV objetivo de implemetación.
+
+1. Navigate and check status of the service
+
+ ```bash
+ cd ~/azagent
+ sudo ./svc.sh status
+ ```
+
+2. Stop the service
+
+ ```bash
+ sudo ./svc.sh stop
+ ```
+
+3. Uninstall the service
+
+ ```bash
+ sudo ./svc.sh uninstall
+ ```
+
+4. Remove the agent from the pipeline pool
+
+ ```bash
+ ./config.sh remove
+ ```
+
+5. Remove the config files
+
+ ```bash
+ cd ~
+ rm -rf ~/azagent
+ ```
+
+Una vez que hayas completado los pasos de arriba, puedes repetir los mismos pasos que para instalar el agente.
+
+## Flight Manual - Email Blast
+
+Utilizamos [una herramienta CLI](https://github.com/freecodecamp/sendgrid-email-blast) para enviar el boletín semanal. Para actualizar y comenzar el proceso:
+
+1. Sign in to DigitalOcean, and spin up new droplets under the `Sendgrid` project. Use the Ubuntu Sendgrid snapshot with the most recent date. This comes pre-loaded with the CLI tool and the script to fetch emails from the database. With the current volume, three droplets are sufficient to send the emails in a timely manner.
+
+2. Set up the script to fetch the email list.
+
+ ```bash
+ cd /home/freecodecamp/scripts/emails
+ cp sample.env .env
+ ```
+
+ You will need to replace the placeholder values in the `.env` file with your credentials.
+
+3. Run the script.
+
+ ```bash
+ node get-emails.js emails.csv
+ ```
+
+ This will save the email list in an `emails.csv` file.
+
+4. Break the emails down into multiple files, depending on the number of droplets you need. This is easiest to do by using `scp` to pull the email list locally and using your preferred text editor to split them into multiple files. Each file will need the `email,unsubscribeId` header.
+
+5. Switch to the CLI directory with `cd /home/sendgrid-email-blast` and configure the tool [per the documentation](https://github.com/freeCodeCamp/sendgrid-email-blast/blob/main/README).
+
+6. Run the tool to send the emails, following the [usage documentation](https://github.com/freeCodeCamp/sendgrid-email-blast/blob/main/docs/cli-steps).
+
+7. When the email blast is complete, verify that no emails have failed before destroying the droplets.
+
+## Flight Manual - Adding news instances for new languages
+
+### Theme Changes
+
+Utilizamos un [tema](https://github.com/freeCodeCamp/news-theme) personalizado para nuestra publicación de noticias. Los siguientes cambios en el tema permiten añadir nuevos idiomas.
+
+1. Include an `else if` statement for the new [ISO language code](https://www.loc.gov/standards/iso639-2/php/code_list.php) in [`setup-locale.js`](https://github.com/freeCodeCamp/news-theme/blob/main/assets/config/setup-locale.js)
+2. Create an initial config folder by duplicating the [`assets/config/en`](https://github.com/freeCodeCamp/news-theme/tree/main/assets/config/en) folder and changing its name to the new language code. (`en` —> `es` for Spanish)
+3. Inside the new language folder, change the variable names in `main.js` and `footer.js` to the relevant language short code (`enMain` —> `esMain` for Spanish)
+4. Duplicate the [`locales/en.json`](https://github.com/freeCodeCamp/news-theme/blob/main/locales/en.json) and rename it to the new language code.
+5. In [`partials/i18n.hbs`](https://github.com/freeCodeCamp/news-theme/blob/main/partials/i18n.hbs), add scripts for the newly created config files.
+6. Add the related language `day.js` script from [cdnjs](https://cdnjs.com/libraries/dayjs/1.10.4) to the [freeCodeCamp CDN](https://github.com/freeCodeCamp/cdn/tree/main/build/news-assets/dayjs/1.10.4/locale)
+
+### Ghost Dashboard Changes
+
+Actualice los recursos de la publicación yendo al panel de Ghost > ajustes > generales y subiendo el icono [de las publicaciones](https://github.com/freeCodeCamp/design-style-guide/blob/master/assets/fcc-puck-500-favicon.png), [logo](https://github.com/freeCodeCamp/design-style-guide/blob/master/downloads/fcc_primary_large.png)y [portada](https://github.com/freeCodeCamp/design-style-guide/blob/master/assets/fcc_ghost_publication_cover.png).
diff --git a/src/content/docs/es/faq.md b/src/content/docs/es/faq.md
new file mode 100644
index 00000000..107c913e
--- /dev/null
+++ b/src/content/docs/es/faq.md
@@ -0,0 +1,113 @@
+---
+title: Frequently Asked Questions ---
+---
+
+Answers to common questions.
+
+## I am new to GitHub and Open Source. Where should I start?
+
+Read our ["How to Contribute to Open Source Guide"](https://github.com/freeCodeCamp/how-to-contribute-to-open-source). It's a comprehensive reference for first-timer-friendly projects. And it includes a lot of open-source contribution tips.
+
+## What do I need to know to contribute to the codebase?
+
+freeCodeCamp runs on a modern JavaScript stack. If you're interested in contributing to our codebase, you will need some familiarity with JavaScript and some of the technologies we use like Node.js, MongoDB, OAuth 2.0, React, Gatsby, and Webpack.
+
+## Can I translate freeCodeCamp's resources?
+
+Yes - You can contribute to any of the 30+ languages we have enabled on our translation platform.
+
+We have user-contributed translations live in some languages. We intend to localize freeCodeCamp into several major world languages. You can read all about this in our [announcement here](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/).
+
+If you are interested in contributing to translations please make sure you [read this guide](how-to-translate-files.md) first.
+
+## Can I contribute articles to freeCodeCamp News or videos to freeCodeCamp's YouTube channel?
+
+Yes - you can contribute to our publication blog and YouTube channel.
+
+If you're interested in writing articles for freeCodeCamp News, please visit this [publication guide](https://www.freecodecamp.org/news/how-to-write-for-freecodecamp/). In addition, please read our [style guide](https://www.freecodecamp.org/news/developer-news-style-guide/) as this will help you write stronger and more effective articles.
+
+To help us make educational videos for our YouTube channel, you can follow the [YouTube channel guide here](https://www.freecodecamp.org/news/how-to-contribute-to-the-freecodecamp-community-youtube-channel-b86bce4c865/).
+
+## How can I report a new bug?
+
+If you think you've found a bug, first read the ["How to Report a Bug"](https://www.freecodecamp.org/news/how-to-report-a-bug-to-freecodecamp/) article and follow its instructions.
+
+If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so that we can reproduce the bug. We have a pre-defined issue template to help you through this.
+
+Please note that these GitHub issues are for codebase-related issues and discussions – not for getting help with learning to code. Whenever in doubt, you should [seek assistance on the forum](https://forum.freecodecamp.org) before creating a GitHub issue.
+
+## How can I report a security issue?
+
+Please don't create GitHub issues for security issues. Instead, please [follow our security policy](https://contribute.freecodecamp.org/#/security).
+
+## I am a student. Can I work on a feature for academic credits?
+
+Yes. Please note we are unable to commit to any timelines or paperwork that may be a requirement by your college or university. We receive many pull-requests and code contributions from volunteer developers, and we respect their time and efforts. Out of respect for all of our other contributors, we will not give any PR special priority just because it happens to be school-related.
+
+We request you to plan ahead and work on code contributions with this in mind.
+
+## What do these different labels that are tagged on issues mean?
+
+The code maintainers [triage](https://en.wikipedia.org/wiki/Software_bug#Bug_management) issues and pull requests based on their priority, severity, and other factors. You can [find a complete glossary of their meanings here](https://github.com/freecodecamp/freecodecamp/labels).
+
+## Where do I start if I want to work on an issue?
+
+You should go through [**`help wanted`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [**`first timers only`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) issues for a quick overview of what is available for you to work on.
+
+> [!TIP] Los temas de **`se busca ayuda`** están en marcha y no es necesario pedir permiso antes de trabajar en ellos. Sin embargo, temas con la etiqueta **`solo principiantes`** son temas especiales que están diseñados para personas que no han contribuido a la base de código de freeCodeCamp antes.
+
+## I found a typo. Should I report an issue before I can make a pull request?
+
+For typos and other wording changes, you can directly open pull requests without creating an issue first. Please be sure to mention details in the pull request description to help us understand and review your contribution – even if it's just a minor change.
+
+Please do create an issue if you want to discuss bigger aspects of the codebase or curriculum.
+
+## How can I get an issue assigned to me?
+
+We typically do not assign issues to anyone other than long-time contributors. Instead, we follow the below policy to be fair to everyone:
+
+1. Lo más probable es que fusionemos el primer pull request que aborde el tema o problema.
+2. En el caso de múltiples colaboradores abriendo un pull request para el mismo problema más o menos al mismo tiempo, daremos prioridad al pull request que aborde mejor la cuestión. Algunas de las cosas que consideramos:
+ - ¿Has incluido pruebas?
+ - ¿Entendiste todos los casos de uso?
+ - ¿Te aseguraste de que pasaran todas las pruebas, y confirmaste que todo funciona localmente?
+3. Por último, damos prioridad a los pull requests que siguen nuestras directrices recomendadas.
+ - ¿Has seguido la lista de verificación de pull request?
+ - ¿Has dado a tu pull request un título significativo?
+
+## I am interested in being a moderator at freeCodeCamp. Where should I start?
+
+Our community moderators are our heroes. Their voluntary contributions make freeCodeCamp a safe and welcoming community.
+
+First and foremost, we would need you to be an active participant in the community, and live by our [code of conduct](https://www.freecodecamp.org/news/code-of-conduct/) (not just enforce it).
+
+Here are some recommended paths for some of our platforms:
+
+- To be a **Discord/Chat** moderator, have an active presence in our chat and have positive engagements with others, while also learning and practicing how to deal with potential conflicts that may arise.
+- To be a **Forum** moderator, similar to a chat moderator, have an active presence and engage with other forum posters, supporting others in their learning journey, and even giving feedback when asked. Take a look at [The Subforum Leader Handbook](https://forum.freecodecamp.org/t/the-subforum-leader-handbook/326326) for more information.
+- To be a **GitHub** moderator, help process GitHub issues that are brought up to see if they are valid and (ideally) try to propose solutions for these issues to be picked up by others (or yourself).
+
+Altogether, be respectful to others. We are humans from all around the world. With that in mind, please also consider using encouraging or supportive language and be mindful of cross-cultural communication.
+
+If you practice the above **consistently for a while** and our fellow moderator members recommend you, a staff member will reach out and onboard you to the moderators' team. Open source work is voluntary work and our time is limited. We acknowledge that this is probably true in your case as well. So we emphasize being **consistent** rather than engaging in the community 24/7.
+
+Take a look at our [Moderator Handbook](moderator-handbook.md) for a more exhaustive list of other responsibilities and expectations we have of our moderators.
+
+## I am stuck on something that is not included in this documentation.
+
+**Feel free to ask for help in:**
+
+- La categoria de `Contributors` de [nuestro foro de comunidad](https://forum.freecodecamp.org/c/contributors).
+- El canal `#Contributors` de
+
+nuestro servidor de chat<1>.
+
+We are excited to help you contribute to any of the topics that you would like to work on. If you ask us questions on the related issue threads, we will be glad to clarify. Be sure to search for your question before posting a new one.
+
+Thanks in advance for being polite and patient. Remember – this community is run mainly by volunteers.
+
+## Additional Assistance
+
+If you have queries about the stack, architecture of the codebase, translations, or anything else, feel free to reach out to our staff team [on the forum](https://forum.freecodecamp.org/g/team).
+
+**You can email our developer staff at: `dev[at]freecodecamp.org`**
diff --git a/src/content/docs/es/how-to-add-cypress-tests.md b/src/content/docs/es/how-to-add-cypress-tests.md
new file mode 100644
index 00000000..613d253e
--- /dev/null
+++ b/src/content/docs/es/how-to-add-cypress-tests.md
@@ -0,0 +1,124 @@
+---
+title: Cómo agregar pruebas de Cypress
+---
+
+Al realizar cambios en JavaScript, CSS o HTML que podrían cambiar la funcionalidad o el diseño de una página, es importante agregar una prueba de integración de [Cypress](https://docs.cypress.io) correspondiente.
+
+Para aprender como escribir pruebas de Cypress, o especificaciones, observa la [documentación](https://docs.cypress.io/guides/getting-started/writing-your-first-test.html) oficial de Cypress.
+
+## Where to Add a Test
+
+- Las pruebas de Cypress están en el directorio `./cypress`.
+
+- Las pruebas de Cypress para un módulo curricular están en el directorio curricular correspondiente, por ejemplo: `cypress/integration/learn/responsive-web-design/basic-css/index.js`.
+
+## How to Run Tests
+
+:::note
+If using Gitpod, please see [Cypress-Gitpod Setup](how-to-add-cypress-tests#cypress-gitpod-setup)
+:::
+
+### 1. Ensure that MongoDB and Client Applications are Running
+
+- [Inicia MongoDB y propaga la base de Datos](how-to-setup-freecodecamp-locally#step-3-start-mongodb-and-seed-the-database)
+
+- [Inicia la aplicación de cliente de freeCodeCamp y el servidor API](how-to-setup-freecodecamp-locally#step-4-start-the-freecodecamp-client-application-and-api-server)
+
+### 2. Run the Cypress Tests
+
+Para ejecutar pruebas en las compilaciones de producción, reemplaza `dev` con `prd` abajo.
+
+- Para ejecutar todas las pruebas en el directorio `./cypress`:
+
+ ```bash
+ pnpm run cypress:dev:run
+ ```
+
+- Para ejecutar una sola prueba:
+
+ ```bash
+ pnpm run cypress run --spec=cypress/
+ ```
+
+ For example:
+
+ ```bash
+ pnpm run cypress run --spec=cypress/e2e/default/landing.ts
+ ```
+
+- Para crear una compilación de desarrollo, inicia el servidor de desarrollo y ejecuta todas las pruebas de cypress existentes de extremo a extremo:
+
+ ```bash
+ pnpm run e2e:dev:run
+ ```
+
+## Cypress-Gitpod Setup
+
+### 1. Asegúrate de que el entorno de desarrollo se esté ejecutando
+
+If starting the Gitpod environment did not automatically develop the environment:
+
+- Follow the [MongoDB installation guide](https://www.mongodb.com/basics/get-started).
+- Create a config file.
+
+```bash
+pnpm run create:shared
+```
+
+- Propaga la base de datos
+
+```bash
+pnpm run seed
+```
+
+- Inicia el servidor de desarrollo y cliente
+
+```bash
+pnpm run develop
+```
+
+### 2. Instala las herramientas de compilación de Cypress
+
+```bash
+pnpm run cypress:install-build-tools
+```
+
+- Cuando se te solicite en la terminal, selecciona la distribución de tu teclado por idioma / área
+
+Ahora, [Cypress puede ser ejecutado](how-to-add-cypress-tests#_2-run-the-cypress-tests)
+
+## Troubleshooting
+
+### Unable to Connect to Port 8000
+
+If Cypress fails to run with the following error:
+
+```
+CypressError: `cy.visit()` failed trying to load:
+
+http://localhost:3000/signin
+
+We attempted to make an http request to this URL but the request failed without a response.
+
+We received this error at the network level:
+
+ > Error: connect ECONNREFUSED 127.0.0.1:8000
+
+Common situations why this would fail:
+ - you don't have internet access
+ - you forgot to run / boot your web server
+ - your web server isn't accessible
+ - you have weird network configuration settings on your computer
+
+This error occurred while creating the session. Because the session setup failed, we failed the test.
+```
+
+You can resolve the issue by:
+
+- Going to the root `package.json` file and adding `--host 0.0.0.0` to the `develop:client` command:
+ ```json
+ "scripts": {
+ "develop:client": "cd ./client && pnpm run develop --host 0.0.0.0"
+ }
+ ```
+- Then, re-running `pnpm run develop`
diff --git a/src/content/docs/es/how-to-add-playwright-tests.md b/src/content/docs/es/how-to-add-playwright-tests.md
new file mode 100644
index 00000000..38b58b7c
--- /dev/null
+++ b/src/content/docs/es/how-to-add-playwright-tests.md
@@ -0,0 +1,349 @@
+---
+title: How to add Playwright tests
+---
+
+## Installation
+
+To install Playwright run:
+
+```bash
+pnpm run playwright:install-build-tools
+```
+
+Alternatively you can follow official documentation referenced below:
+
+To install and configure Playwright on your machine check out this [documentation](https://playwright.dev/docs/intro#installing-playwright).
+
+To learn how to write Playwright tests, or 'specs', please see Playwright's official [documentation](https://playwright.dev/docs/writing-tests).
+
+## Where to Add a Test
+
+- Playwright tests are in the `./e2e` directory.
+
+- Playwright test files are always with a `.spec.ts` extension.
+
+## Best Practices for writing E2E tests
+
+This section will explain in detail about best practices for writing and documenting E2E tests based on Playwright documentation and our community code-style.
+
+### - Imports
+
+Always start with necessary imports at the beginning of the file.
+
+For example:
+
+```ts
+import { test, expect, type Page } from '@playwright/test';
+```
+
+### - Identifying a DOM element
+
+Playwright comes with [multiple built-in locators](https://playwright.dev/docs/locators#quick-guide), but we recommend prioritizing the following locators:
+
+- `getByRole` for querying semantic elements, whose role is important and allows assistive technology to perceive the page correctly.
+- `getByText` for querying non-semantic elements such as `div`, `span`, or `p`.
+
+For example:
+
+```ts
+await expect(page.getByRole('heading', { name: 'Sign up' })).toBeVisible();
+await expect(page.getByText('Hello World')).toBeVisible();
+```
+
+In cases where the elements cannot be queried using the above-mentioned locators, you can use the `data-playwright-test-label` attribute as the last resort. This attribute is used to identify elements in the DOM for testing with playwright only. It is not used for styling or any other purpose.
+
+For example:
+
+```html
+
+
+
+```
+
+In the test file, you can use the `getByTestId` method to identify the element.
+
+For example:
+
+```ts
+await expect(page.getByTestId('landing-page-figure')).toBeVisible();
+```
+
+### - Constants
+
+Define any constant elements, data sets, or configurations used throughout your tests for easy reference.
+
+For example:
+
+```ts
+const landingPageElements = { ... };
+const superBlocks = [ ... ];
+```
+
+### - Shared Context
+
+If tests depend on a shared context (like a loaded web page), use beforeAll and afterAll hooks to set up and tear down that context.
+
+For example:
+
+```ts
+let page: Page;
+
+beforeAll(async ({ browser }) => {
+ page = await browser.newPage();
+});
+
+afterAll(async () => {
+ await page.close();
+});
+```
+
+### - Descriptive test names
+
+Each test block should have a clear and concise name describing exactly what it's testing.
+
+For example:
+
+```ts
+test('The component landing-top renders correctly', async ({ page }) => {
+ // ...
+});
+```
+
+### - Human readable assertions
+
+Each assertion should be as human readable as possible. This makes it easier to understand what the test is doing and what it's expecting.
+
+For example:
+
+```ts
+await expect(landingHeading1).toHaveText('Learn to code — for free.');
+```
+
+### - Keep it DRY
+
+Make sure that the tests are not repeating the same code over and over again. If you find yourself repeating the same code, consider refactoring it as a loop or a function.
+
+For example:
+
+```ts
+for (const logo of await logos.all()) {
+ await expect(logo).toBeVisible();
+}
+```
+
+### - Tests for mobile screens
+
+Use the `isMobile` argument to run tests that include logic that varies for mobile screens.
+
+For example:
+
+```ts
+test('The campers landing page figure is visible on desktop and hidden on mobile view', async ({
+ isMobile
+}) => {
+ const landingPageImage = page.getByTestId('landing-page-figure');
+
+ if (isMobile) {
+ await expect(landingPageImage).toBeHidden();
+ } else {
+ await expect(landingPageImage).toBeVisible();
+ }
+});
+```
+
+### - Group related tests
+
+Group related tests together using describe blocks. This makes it easier to understand what the tests are doing and what they're testing.
+
+For example:
+
+```ts
+describe('The campers landing page', () => {
+ test('The campers landing page figure is visible on desktop and hidden on mobile view', async ({
+ isMobile
+ }) => {
+ // ...
+ });
+
+ test('The campers landing page figure has the correct image', async () => {
+ // ...
+ });
+});
+```
+
+## How to Run Tests
+
+### 1. Ensure that MongoDB and Client Applications are Running
+
+- [Start MongoDB and seed the database](how-to-setup-freecodecamp-locally#step-3-start-mongodb-and-seed-the-database). In order for Playwright tests to work, be sure that you use the `pnpm run seed:certified-user` command.
+
+- [Start the freeCodeCamp client application and API server](how-to-setup-freecodecamp-locally#step-4-start-the-freecodecamp-client-application-and-api-server)
+
+### 2. Run the Playwright Tests
+
+To run tests with Playwright check the following below
+
+- Make sure you navigate to the e2e repo first
+
+ ```bash
+ cd e2e
+ ```
+
+- To run tests in UI helper mode:
+
+ ```bash
+ npx playwright test --ui
+ ```
+
+- To run a single test:
+
+ ```bash
+ npx playwright test
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test landing-page.spec.ts
+ ```
+
+- Run a set of test files in respective folders:
+
+ ```bash
+ npx playwright test
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test tests/todo-page/ tests/landing-page/
+ ```
+
+- Run the test with the title:
+
+ ```bash
+ npx playwright test -g
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test -g "add a todo item"
+ ```
+
+### 3. Debugging Tests
+
+Since Playwright runs in Node.js, you can debug it with your debugger of choice e.g. using console.log or inside your IDE
+
+- Debugging all tests:
+
+ ```bash
+ npx playwright test --debug
+ ```
+
+- Debugging one test file:
+
+ ```bash
+ npx playwright test example.spec.ts --debug
+ ```
+
+### 4. Generate Test Reports
+
+The HTML Reporter shows you a full report of your tests allowing you to filter the report by browsers, passed tests, failed tests, skipped tests and flaky tests.
+
+```bash
+npx playwright show-report
+```
+
+### 5. Troubleshooting
+
+Playwright is generally a solid bullet-proof tool. The contributor has already configured the tests to run on all OS machines, including major distributions of Windows, MacOS and Linux.
+
+- (MacOs and Linux) If running Playwright results in an error due to kernel dependencies, run the following command:
+
+ ```bash
+ pnpm run playwright:install-build-tools-linux
+ ```
+
+- A common error seen in playwright is as follows:
+
+ ```bash
+ Error: page.goto: Could not connect: Connection refused
+ =========================== logs ===========================
+ navigating to "https://127.0.0.1:8000/", waiting until "load"
+ ============================================================
+ ```
+
+ You can fix the above error with the following steps:
+
+ 1. **Check the URL:** Ensure that the URL you're trying to navigate to is correct and properly formatted. Make sure there are no typos in the URL.
+
+ 2. **Server Status:** Check whether the server at the URL is running and accessible. You might encounter this error if the server is not running or is not accessible.
+
+ 3. **Port Availability:** Verify that the port mentioned in the URL (8000 in this case) is the correct port and is available for use. Make sure no other process is already using that port.
+
+ 4. **Firewall or Security Software:** Sometimes, firewall or security software can block connections to specific ports. Check your firewall settings to ensure that the port is allowed.
+
+ 5. **Network Connectivity:** Ensure that your system has a working network connection and can access external resources.
+
+- Another common error seen in playwright is as follows:
+
+ ```bash
+ Protocol error (Network.getResponseBody): Request content was evicted from inspector cache
+ ```
+
+ 1. The network request was made using a method that does not include a response body, such as HEAD or CONNECT.
+ 2. The network request was made over a secure (HTTPS) connection, and the response body is not available for security reasons.
+ 3. The network request was made by a third-party resource (such as an advertisement or a tracking pixel) that is not controlled by the script.
+ 4. The network request was made by a script that has been paused or stopped before the response was received.
+
+**For more insights on issues visit the official documentation.**
+
+## Playwright-Gitpod Setup
+
+### 1. Ensure Development Environment is Running
+
+If starting the Gitpod environment did not automatically develop the environment:
+
+- Follow the [MongoDB installation guide](https://www.mongodb.com/basics/get-started).
+
+- Create the .env
+
+ ```bash
+ cp sample.env .env
+ ```
+
+- Create a config file.
+
+ ```bash
+ pnpm run create:shared
+ ```
+
+- Seed the database
+
+ ```bash
+ pnpm run seed:certified-user
+ ```
+
+- Develop the server and client
+
+ ```bash
+ pnpm run develop
+ ```
+
+### 2. Install Playwright Build Tools
+
+To install necessary dependencies for running Playwright run the following command:
+
+```bash
+pnpm run playwright:install-build-tools
+```
+
+### 3. Run the Playwright Tests on Gitpod
+
+To run all Playwright tests, run the following command:
+
+```bash
+cd e2e
+npx playwright test
+```
diff --git a/src/content/docs/es/how-to-catch-outgoing-emails-locally.md b/src/content/docs/es/how-to-catch-outgoing-emails-locally.md
new file mode 100644
index 00000000..28628a2f
--- /dev/null
+++ b/src/content/docs/es/how-to-catch-outgoing-emails-locally.md
@@ -0,0 +1,117 @@
+---
+title: Catching emails locally
+---
+
+:::note
+Este es un **paso opcional** y es necesario solo cuando se trabaja con flujos de trabajo de correo electrónico
+:::
+
+- [Introducción](#introduction)
+- [Instalando MailHog](#installing-mailhog)
+- [Usando MailHog](#using-mailhog)
+- [Enlaces útiles](#useful-links)
+
+## Introducción
+
+Some email workflows, like updating a user's email, require the back-end API server to send outgoing emails. MailHog es una alternativa al uso de un proveedor de servicios de correo electrónico para enviar correos electrónicos reales. Es una herramienta de desarrollo para pruebas de correo electrónico que capturará los mensajes de correo electrónico enviados por tu instancia de freeCodeCamp.
+
+## Instalando MailHog
+
+MailHog can be installed on macOS, Windows, and Linux or used via Docker.
+
+Instalando MailHog con Docker
+
+Si ya tienes Docker instalado puedes usar
+
+```bash
+docker run -d --name mailhog --network host --rm mailhog/mailhog
+```
+
+Para iniciar MailHog en segundo plano y
+
+```bash
+docker stop mailhog
+```
+
+Para frenarlo.
+
+Cuando la instalación finalice, puedes comenzar a [usar MailHog](#using-mailhog).
+
+
+
+Instalando MailHog en macOS
+
+Instalando MailHog en macOS con [Homebrew](https://brew.sh/):
+
+```bash
+brew install mailhog
+brew services start mailhog
+```
+
+The above commands will start a MailHog service in the background.
+
+Cuando la instalación finalice, puedes comenzar a [usar MailHog](#using-mailhog).
+
+
+
+Instalando MailHog en Windows
+
+Descarga la última versión de MailHog del [repositorio oficial de MailHog](https://github.com/mailhog/MailHog/releases). Locate and click on the link for your Windows version (32 or 64 bit) and a `.exe` file will be downloaded to your computer.
+
+Cuando la descarga finalice, haz clic en el archivo para abrirlo. Puede aparecer una notificación del cortafuegos de Windows solicitando permiso de acceso para MailHog. Se abrirá una línea de comandos estándar de Windows donde se ejecutará MailHog una vez que se le otorgue el permiso del cortafuegos.
+
+Detén MailHog cerrando la ventana de comandos. To start MailHog again, click on the MailHog executable (`.exe`) file that was downloaded initially - it is not necessary to download a new MailHog installation file.
+
+Comienza a [usar MailHog](#using-mailhog).
+
+
+
+Instalando MailHog en Linux
+
+Primero, instala [Go](https://golang.org).
+
+Ejecuta los siguientes comandos para instalar GO en sistemas basados en Debian como Ubuntu y Linux Mint.
+
+```bash
+sudo apt-get install golang
+```
+
+Ejecuta los siguientes comandos para instalar GO en sistemas basados en RPM como CentOS, Fedora, Red Hat Linux, etc.
+
+```bash
+sudo dnf install golang
+```
+
+Alternativamente, ejecuta los siguientes comandos para instalar GO.
+
+```bash
+sudo yum install golang
+```
+
+Ahora establece la ruta para Go con los siguientes comandos.
+
+```bash
+echo "export GOPATH=$HOME/go" >> ~/.profile
+echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.profile
+source ~/.profile
+```
+
+Finalmente, ingresa los siguientes comandos para instalar y ejecutar MailHog.
+
+```bash
+go get github.com/mailhog/MailHog
+sudo cp /home/$(whoami)/go/bin/MailHog /usr/local/bin/mailhog
+mailhog
+```
+
+Comienza a [usar MailHog](#using-mailhog).
+
+
+
+## Usando MailHog
+
+Open a new browser tab or window and navigate to [http://localhost:8025](http://localhost:8025) to open your MailHog inbox when the MailHog installation has been completed and MailHog is running.
+
+## Enlaces útiles
+
+- Revisa el repositorio de [MailHog](https://github.com/mailhog/MailHog) para más información relacionada con MailHog. También está disponible información adicional sobre configuraciones personalizadas de MailHog.
diff --git a/src/content/docs/es/how-to-contribute-to-the-codebase.md b/src/content/docs/es/how-to-contribute-to-the-codebase.md
new file mode 100644
index 00000000..7c5e787c
--- /dev/null
+++ b/src/content/docs/es/how-to-contribute-to-the-codebase.md
@@ -0,0 +1,220 @@
+---
+title: Contribute to the Codebase
+---
+
+Sigue estas recomendaciones para poder contribuir a la base del código. Es recomendable que lo hagas si quieres contribuir de forma regular.
+
+Ignorar estos pasos puede empobrecer tu copia lo que hara que el proceso de contribución, revisión y mantenimiento sea dificultoso.
+
+## Contribuir a la base del código
+
+You can now make changes to files and commit your changes to your fork, which you can prepare by reading [how to set up freeCodeCamp locally](how-to-setup-freecodecamp-locally).
+
+Sigue estos pasos:
+
+1. 1. Utiliza el siguiente comando para confirmar que estes en la rama `main`:
+
+ ```bash
+ git status
+ ```
+
+ el comando debería devolverte el siguiente resultado:
+
+ ```bash
+ On branch main
+ Your branch is up-to-date with 'origin/main'.
+
+ nothing to commit, working directory clean
+ ```
+
+ If you got a different message, then you aren't on main or your working directory isn't clean, resolve any outstanding files/commits and checkout `main`:
+
+ ```bash
+ git checkout main
+ ```
+
+2. Copia las ultimas modificaciones de la rama `main` del upstream de freeCodeCamp a la rama `main ` de tu bifurcación:
+
+ > [!WARNING] Si tenes alguna pull request pendiente que hiciste desde la rama `main` de tu bifurcación, cuando realices este paso se perderán.
+ >
+ > Siempre debes asegurarte que tu pull request haya sido fusionada por un moderador antes de realizar este paso. Para evitar esta situación, **siempre** deberías trabajar en una rama distinta a la `main`.
+
+ Este paso ** obtendrá los cambios más recientes** del repositorio principal de freeCodeCamp.
+
+ Actualizar tu copia del repositorio principal de freeCodeCamp:
+
+ ```bash
+ git fetch upstream
+ ```
+
+ Formatea tu rama main con la rama main de freeCodeCamp:
+
+ ```bash
+ git reset --hard upstream/main
+ ```
+
+ Hace push de tu rama main a tu bifurcación original para limpiar tu historial en GitHub:
+
+ ```bash
+ git push origin main --force
+ ```
+
+ You can validate that your current main matches the upstream/main by performing a diff:
+
+ ```bash
+ git diff upstream/main
+ ```
+
+ El resultado debería ser que el directorio de trabajo está limpio. This process is important, because you will be rebasing your branch on top of the latest `upstream/main` as often as possible to avoid conflicts later.
+
+3. Crea una nueva rama:
+
+ Trabajar en una rama separada para cada incidente ayuda a que tu copia del trabajo se muestre ordenada. Nunca deberías trabajar en `main`. Esto hará que tu copia de freeCodeCamp quede desordenada y podrá ser necesario que tengas que empezar de nuevo con una copia nueva o bifurcación.
+
+ Verificá que estás en `main` siguiendo los pasos ya explicados y empezá desde ahí:
+
+ ```bash
+ git checkout -b fix/update-guide-for-xyz
+ ```
+
+ El nombre de tu rama debería comenzar con `fix/`, `feat/`, `docs/`, etc. Evita usar números de incidentes en las ramas. Deberían ser cortos, significativos y únicos.
+
+ Algunos ejemplos de buenos nombres para ramas son:
+
+ ```md
+ fix/update-challenges-for-react
+ fix/update-guide-for-html-css
+ fix/platform-bug-sign-in-issues
+ feat/add-guide-article-for-javascript
+ translate/add-spanish-basic-html
+ ```
+
+4. Edita la páginas y trabaja en el código en tu editor de texto favorito.
+
+5. Una vez que estes conforme con los cambios realizados, de manera opcional, deberías ejectuar freeCodeCamp para previsualizar los cambios.
+
+6. Asegurate de corregir cualquier error que pueda aparecer y comprabar el formato de tus cambios.
+
+7. Comprobá y confirmá los archivos que estás actualizando:
+
+ ```bash
+ git status
+ ```
+
+ Este comando debería mostrar una lista de los archivos `unstaged` que editaste.
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes were not staged for commit:
+ (use "git add/rm ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in the working directory)
+
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
+ ...
+ ```
+
+8. Organizar los cambios y hacer un commit:
+
+ En este paso, sólo deberías marcar los archivos que has editado o añadido tu mismo. Puede realizar un reseteo y resolver archivos que no tenías intención de cambiar si es necesario.
+
+ ```bash
+ git add path/to/my/changed/file.ext
+ ```
+
+ O puedes añadir todos los archivos que no estén `unstaged` al área de staging:
+
+ ```bash
+ git add .
+ ```
+
+ Sólo los archivos que fueron movidos al área de staging serán añadidos cuando hagas un commit.
+
+ ```bash
+ git status
+ ```
+
+ Resultado:
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes to be committed:
+ (use "git reset HEAD ..." to unstage)
+
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
+ ```
+
+ Ahora, puedes confirmar tus cambios con un mensaje corto así:
+
+ ```bash
+ git commit -m "fix: my short commit message"
+ ```
+
+ Algunos ejemplos:
+
+ ```md
+ fix: add test for JavaScript - for loop step
+ feat: add link for article for alexa skills
+ ```
+
+ Escribe un mensaje commit convencional. This is a good practice as a developer, and you will be following standard practices.
+
+ Algunos ejemplos de mensajes de commits convencionales son:
+
+ ```md
+ fix: improve HTML step
+ fix: fix build scripts for Travis-CI
+ feat: add link to JavaScript hoisting article
+ docs: update contributing guidelines
+ ```
+
+ Manténlos cortos, no más de 50 caracteres. Siempre puedes añadir información adicional en la descripción del mensaje del commit.
+
+ Esto no toma más tiempo que un mensaje no convencional como 'actualizar archivo' o 'añadir index.md'
+
+ Puedes aprender más sobre por qué deberías usar commits convencionales [aquí](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
+
+9. Si te das cuenta de que necesitas editar un archivo o actualizar el mensaje de confirmación después de hacer un commit puedes hacerlo después de editar los archivos con:
+
+ ```bash
+ git commit --amend
+ ```
+
+ Esto abrirá un editor de texto predeterminado como `nano` o `vi` donde puedes editar el título del mensaje de confirmación y añadir/editar la descripción.
+
+10. A continuación, puedes enviar tus cambios a tu bifurcación:
+
+ ```bash
+ git push origin branch/name-here
+ ```
+
+## Proponer una Pull Request (PR)
+
+Después de que hayas cofirmado tus cambios, consulta aquí sobre [cómo abrir una Pull Request](how-to-open-a-pull-request).
+
+## Referencia de comandos rápidos
+
+Una referencia rápida a los comandos que necesitarás cuando trabajes.
+
+| comando | descripción |
+| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
+| `pnpm test` | Ejecuta todas las pruebas JS en el sistema, incluidas las pruebas de cliente, servidor, lint y pruebas de desafío. |
+| `pnpm run test-client` | Ejecuta el conjunto de pruebas del cliente. |
+| `pnpm run test-client -u` | Run the client test suite, updating the Jest snapshots that are out of sync. |
+| `pnpm run test:curriculum` | Ejecuta el conjunto de pruebas del currículo. |
+| `FCC_BLOCK='Basic HTML and HTML5' pnpm run test:curriculum` | Evalúa un bloque específico. |
+| `FCC_SUPERBLOCK='responsive-web-design' pnpm run test:curriculum` | Evalúa un SuperBlock específico. |
+| `pnpm run test-curriculum-full-output` | Ejecuta el conjunto de pruebas del currículo, sin tener que salir después del primer error |
+| `pnpm run test-server` | Ejecute la suite de pruebas del servidor. |
+| `pnpm run e2e` | Ejecuta los tests end to end de Cypress. |
+| `pnpm run clean` | Desinstala todas las dependencias y limpia las cachés. |
+| `pnpm run storybook` | Inicia Storybook para el desarrollo de la biblioteca de componentes. |
diff --git a/src/content/docs/es/how-to-enable-new-languages.md b/src/content/docs/es/how-to-enable-new-languages.md
new file mode 100644
index 00000000..d2b85e01
--- /dev/null
+++ b/src/content/docs/es/how-to-enable-new-languages.md
@@ -0,0 +1,480 @@
+---
+title: Implementando nuevos idiomas en `/learn`
+---
+
+To enable a new language on `/learn` (curriculum), you need to complete the following steps:
+
+- Complete translating and approving the first 3 certifications on Crowdin. (New Responsive Web Design, JavaScript Algorithms and Data Structures, and Front End Development Libraries)
+- Complete translating and approving all strings in Learn UI project on Crowdin.
+- Update Crowdin settings to add a custom language code for the new language.
+- Open the 1st PR to configure GitHub Actions. You need to update 2 files:
+ - `crowdin-download.client-ui.yml`
+ - `crowdin-download.curriculum.yml`
+- Open the 2nd PR to add other configurations. You need to update/add the following files:
+ - Update `i18n.ts`
+ - Update `superblocks.ts`
+ - Update `algolia-locale-setup.ts`
+ - Add `links.json`
+ - Add `meta-tags.json`
+ - Add `motivation.json`
+- Ask infrastructure team to spin up the VM for the new language.
+- Once the VM is ready, open the 3rd PR to show the new language in the navigation menu.
+
+We will explain each step in the following sections.
+
+## Actualizando los ajustes de Crowdin
+
+Antes de poder publicar un nuevo idioma, tendrás que permitir que los idiomas se descarguen de Crowdin. To configure that, you need to add a custom language code for your language.
+
+In the `Curriculum` and `Learn UI` projects on Crowdin, you will need to select `Settings` > `Languages` from the sidebar. Luego, busca la opción `Language Mapping`, donde encontrarás la opción de añadir códigos personalizados para los idiomas. Añade una nueva entrada para el idioma que publicarás: seleccionando `language` como el valor de `Placeholder` e ingresando el nombre del idioma en minúsculas para el valor de `Custom code`. If you aren't sure what to use, or you don't have an admin role and can't see the settings, reach out in our contributor chat and we will assist you.
+
+## Updating Workflows for GitHub Actions
+
+Then you need to configure the syncing between Crowdin and GitHub.
+
+You will need to add a step to the [`crowdin-download.client-ui.yml`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/.github/workflows/crowdin-download.client-ui.yml) and [`crowdin-download.curriculum.yml`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/.github/workflows/crowdin-download.curriculum.yml). Los pasos a seguir en los dos casos son iguales. Por ejemplo, si quisieras habilitar las descargas de Dothraki, la instrucción a añadir en los dos documentos sería:
+
+```yml
+##### Download Dothraki #####
+- name: Crowdin Download Dothraki Translations
+ uses: crowdin/github-action@master
+ # options: https://github.com/crowdin/github-action/blob/master/action.yml
+ with:
+ # uploads
+ upload_sources: false
+ upload_translations: false
+ auto_approve_imported: false
+ import_eq_suggestions: false
+
+ # downloads
+ download_translations: true
+ download_language: mis
+ skip_untranslated_files: false
+ export_only_approved: true
+
+ push_translations: false
+
+ # pull-request
+ create_pull_request: false
+
+ # global options
+ config: './crowdin-config.yml'
+ base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
+
+ # Uncomment below to debug
+ # dryrun_action: true
+```
+
+Ten en cuenta que la opción `download_language` deberá corresponder al código del idioma que aparece en Crowdin.
+
+## Habilitando un idioma
+
+> [!NOTA] La sección anterior con la actualización de los flujos de trabajo debería estar completos antes de continuar, estos deben hacerse en pasos separados o las compilaciones fallarán.
+
+Hay algunos pasos a seguir para permitirle a la base de código compilarse a tu idioma de preferencia.
+
+First, visit the [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file to add the language to the list of available languages and configure the values. Aquí hay varios objetos.
+
+- `Languages`: Add the new language to `Languages` enum, similar to the others. The string value here will be used in the `.env` file to set a build language later.
+- `availableLangs`: Add the new property from the `Languages` enum to both the `client` and `curriculum` arrays.
+- `i18nextCodes`: Estos son los códigos de idioma ISO para cada lenguaje. Necesitarás añadir el código ISO correspondiente para el idioma que estás activando. Estos deben ser únicos para cada lenguaje.
+- `LangNames`: Estos son los nombres mostrados para el selector de idiomas en el menú de navegación.
+- `LangCodes`: Estos son los códigos de idiomas usados para formatear fechas y números. Estos deben ser códigos Unicode CLDR en vez de los códigos ISO.
+- `hiddenLangs`: Estos idiomas no se mostrarán en el menú de navegación. Esto es usado para los idiomas que todavía no están listos para su lanzamiento. Include your language in this array in the first PR and ask staff team to prepare the VM instance for your language. When the VM is ready, make another PR to remove it from the array.
+- `rtlLangs`: These are languages that read from right to left.
+
+As an example, if you wanted to enable Dothraki as a language, your `i18n.ts` objects should look like this:
+
+```js
+export enum Languages {
+ English = 'english',
+ Espanol = 'espanol',
+ Chinese = 'chinese',
+ ChineseTraditional = 'chinese-traditional',
+ Dothraki = 'dothraki'
+}
+
+export const availableLangs = {
+ client: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Dothraki
+ ],
+ curriculum: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Dothraki
+ ]
+};
+
+export const i18nextCodes = {
+ [Languages.English]: 'en',
+ [Languages.Espanol]: 'es',
+ [Languages.Chinese]: 'zh',
+ [Languages.ChineseTraditional]: 'zh-Hant',
+ [Languages.Dothraki]: 'mis'
+};
+
+export enum LangNames = {
+ [Languages.English]: 'English',
+ [Languages.Espanol]: 'Español',
+ [Languages.Chinese]: '中文(简体字)',
+ [Languages.ChineseTraditional]: '中文(繁體字)',
+ [Languages.Dothraki]: 'Dothraki'
+};
+
+export enum LangCodes = {
+ [Languages.English]: 'en-US',
+ [Languages.Espanol]: 'es-419',
+ [Languages.Chinese]: 'zh',
+ [Languages.ChineseTraditional]: 'zh-Hant',
+ [Languages.Dothraki]: 'mis'
+};
+
+export const hiddenLangs = ['dothraki'];
+
+export const rtlLangs = [''];
+```
+
+:::note
+When a language has been set up in the deployment pipeline AND has a public `/learn` instance live, it can be removed from the `hiddenLangs` array and be made available to the public.
+:::
+
+### Set Translated SuperBlocks
+
+In the [shared/config/superblocks.ts](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/superblocks.ts) file, add the new language to the `notAuditedSuperBlocks` object. This lists all the superblocks which are not fully translated. Add an array of superblocks that have not been fully translated to it. For example:
+
+```js
+export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
+ ...
+ [Languages.Dothraki]: [
+ SuperBlocks.DataVis,
+ SuperBlocks.RelationalDb,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy,
+ SuperBlocks.CollegeAlgebraPy,
+ SuperBlocks.FoundationalCSharp,
+ SuperBlocks.CodingInterviewPrep,
+ SuperBlocks.ProjectEuler,
+ SuperBlocks.JsAlgoDataStructNew,
+ SuperBlocks.TheOdinProject
+ ]
+}
+```
+
+Be sure to only add the superblocks that are **not** fully translated and approved. The translated superblocks will be calculated from this object. When a new superblock is finished being fully translated, remove it from the array for that language.
+
+See the `SuperBlocks` enum at the beginning of the same file for the full list of superblocks.
+
+### Configure Search
+
+Next, open the [`client/src/utils/algolia-locale-setup.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/src/utils/algolia-locale-setup.ts) file. Estos datos son utilizados por la barra de búsqueda que carga artículos de `/news`. Si bien es poco probable que vayas a probar esta funcionalidad, lea falta de datos para tu lenguaje puede llevarle a errores al intentar construir el código base localmente.
+
+Agrega un objeto para al objeto `algoliaIndices`. You should use the same values as the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+
+:::note
+Si ya hemos desplegado una instancia de noticias en tu destino de idioma, puedes actualizar los valores para reflejar la instancia real. De lo contracio, use los valores del inglés.
+:::
+
+Si tuvieras que añadir el idioma Dothraki:
+
+```js
+const algoliaIndices = {
+ english: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ },
+ espanol: {
+ name: 'news-es',
+ searchPage: 'https://www.freecodecamp.org/espanol/news/search/'
+ },
+ chinese: {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search/'
+ },
+ 'chinese-traditional': {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search'
+ },
+ dothraki: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ }
+
+ // If we already have /news in the target language up and running, you can update the values like this:
+ // dothraki: {
+ // name: 'news-mis',
+ // searchPage: 'https://www.freecodecamp.org/dothraki/news/search/'
+ // }
+};
+```
+
+### Client UI
+
+Necesitará dar un paso adicional para manejar las traducciones de la interfaz de usuario del cliente.
+
+Los flujos de trabajo de Crowdin bajarán automáticamente _algunas_ traducciones de la interfaz de usuario, pero hay un par de ficheros que necesitan ser movidos manualmente.
+
+You will want to copy the following files from [`/client/i18n/locales/english`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/client/i18n/locales/english) to `/client/i18n/locales/`, and apply translations as needed:
+
+- `links.json`
+- `meta-tags.json`
+- `motivation.json`
+
+You don't have to have everything in these 3 files translated at first. It's possible to translate only the relevant parts and make adjustments later.
+
+#### `links.json`
+
+You can replace any URLs that you have corresponding pages ready in your language.
+
+For example, if you have a publication in your language, you can replace the URL for `"news"`. If you want to translate articles listed in the footer links, see [How to Translate Articles in the Footer Links](language-lead-handbook#how-to-translate-articles-in-the-footer-links).
+
+#### `meta-tags.json`
+
+This file contains metadata for the web page of `/learn` in your language. You can translate the values for `"title"`, `"description"`, and `"social-description"`. The value for `"youre-unsubscribed"` is used when someone unsubscribes from Quincy's weekly email.
+
+Also, you can translate or add relevant keywords in your language to the `"keywords"` array.
+
+#### `motivation.json`
+
+This file contains the compliments that will be displayed to campers when they complete a challenge, and motivational quotes that are displayed on the top page of `/learn`.
+
+You can translate them, or even replace them with relevant compliments/quotes of your choice in your language.
+
+### Enabling Localized Videos
+
+This section is applicable only if you have localized videos in the challenges. Otherwise, you can skip this section.
+
+Para los desafìos de video, debe cambiar algunas cosas. First, add the new locale to the GraphQL query in the [`client/src/templates/Challenges/video/Show.tsx`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/src/templates/Challenges/video/show.tsx) file. Por ejemplo, agregando a Dothraki para la consulta:
+
+```tsx
+ query VideoChallenge($slug: String!) {
+ challengeNode(fields: { slug: { eq: $slug } }) {
+ videoId
+ videoLocaleIds {
+ espanol
+ italian
+ portuguese
+ dothraki
+ }
+ ...
+```
+
+Luego agregue un ID para el nuevo idioma a cualquier desafío de video en un bloque auditado. For example, if `auditedCerts` in `i18n.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. La parte delantera debería verse así:
+
+```yml
+videoLocaleIds:
+ espanol: 3muQV-Im3Z0
+ italian: hiRTRAqNlpE
+ portuguese: AelGAcoMXbI
+ dothraki: new-id-here
+dashedName: introduction-why-program
+---
+```
+
+Actualice la interfaz `VideoLocaleIds` en `client/src/redux/prop-types` para incluir el nuevo idioma.
+
+```ts
+export interface VideoLocaleIds {
+ espanol?: string;
+ italian?: string;
+ portuguese?: string;
+ dothraki?: string;
+}
+```
+
+And finally, update the challenge schema in `curriculum/schema/challengeSchema.js`.
+
+```js
+videoLocaleIds: Joi.when('challengeType', {
+ is: challengeTypes.video,
+ then: Joi.object().keys({
+ espanol: Joi.string(),
+ italian: Joi.string(),
+ portuguese: Joi.string(),
+ dothraki: Joi.string()
+ })
+}),
+```
+
+## Testing Translations Locally
+
+Si desea probar las traducciones localmente, antes de añadirlas a nuestro repositorio principal, salte los cambios del flujo de trabajo de Crowdin. Siga los pasos para activar un idioma, luego descargue las traducciones de Crowdin y cargue las traducciones en su código local.
+
+Como el lenguaje no ha sido aprovado para producción, nuestros scripts aún no descargan las traducciones de manera automática. Only staff have access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://discord.gg/PRyKn3Vbay), or you can translate the English markdown files locally for testing purposes.
+
+Una vez que poseas los archivos, necesitarás colocarlos en el directorio correcto. Para los desafíos de currículum, deberías colocar las carpetas de certificación (i.e. `01-responsive-web-design`) dentro del directorio `curriculum/challenges/{lang}`. Para nuestras traducciones al Dothraki, deberia ser `curriculum/challenges/dothraki`. La traducción del cliente `.json` archivos irá al directorio `client/i18n/locales/{lang}`.
+
+Actualice su archivo `.env` para usar su nuevo idioma para `CLIENT_LOCALE` y `CURRICULUM_LOCALE`.
+
+Once these are in place, you should be able to run `pnpm run develop` to view your translated version of freeCodeCamp.
+
+> [!TIP] If you build the client in one language and then want to build it in a different language, you will need to use the command `pnpm run clean-and-develop` after changing the `.env` file, as Gatsby will cache the first language.
+
+:::danger
+Si bien puedes realizar traducciones localmente con motivos de prueba, le recordamos a todos que las traducciones _no_ deben ser enviadas a través de GitHub, estas deben ser enviadas únicamente a traves de Crowdin. Asegúrate de reestablecer tu base de código local despues de que hayas finalizado con las pruebas.
+:::
+
+## Show the language in the navigation menu
+
+When your prior PR is merged and the VM for your language is ready, make another PR to show your language in the navigation menu.
+
+In [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file, you have included your language in `hiddenLangs` array in the prior PR. Remove it from the array now.
+
+```js
+export const hiddenLangs = []; // Remove your language from the array
+```
+
+When this PR is merged and deployed, the curriculum in your language will be live.
+
+# Deploying New Languages on `/news`
+
+To deploy News for a new language, you'll need to create two PRs. One PR will be to the [CDN repo](https://github.com/freeCodeCamp/cdn), and the other will be to the [News repo](https://github.com/freeCodeCamp/news).
+
+## Prep the CDN Repo for the New Language
+
+News sources trending links and article titles from our CDN during the build and adds them to the footer. News also fetches Day.js files from the CDN during the build to localize dates and times for each language.
+
+### Add a YAML File for Trending Articles
+
+Clone the [CDN repo](https://github.com/freeCodeCamp/cdn) and create a new branch.
+
+In the [`build/universal/trending`](https://github.com/freeCodeCamp/cdn/tree/main/build/universal/trending) directory, create a new file and name it `language.yaml`. For example, if you are launching Dothraki News, name the file `dothraki.yaml`.
+
+Then copy the contents of the [`english.yaml`](https://github.com/freeCodeCamp/cdn/blob/main/build/universal/trending/english.yaml) trending file and paste it into the new YAML file you just created.
+
+The contents will look something like this:
+
+```yaml
+article0
+title: "Learn JavaScript"
+article0link: "https://www.freecodecamp.org/news/learn-javascript-free-js-courses-for-beginners/"
+article1
+title: "Linux ln Example"
+article1link: "https://www.freecodecamp.org/news/linux-ln-how-to-create-a-symbolic-link-in-linux-example-bash-command"
+article2
+title: "JS document.ready()"
+article2link: "https://www.freecodecamp.org/news/javascript-document-ready-jquery-example/"
+article3
+title: ...
+article3link: ...
+ ...
+```
+
+### Add a Day.js Locale File for the New Language
+
+By default, Day.js only includes English as a locale. To enable it to work with other languages, you need to add a new Day.js locale file to the CDN.
+
+In the [`build/news-assets/dayjs//locale`](https://github.com/freeCodeCamp/cdn/tree/main/build/news-assets/dayjs/1.10.4/locale) directory, create a new file and name it `isocode.min.js`. For example, if you are launching Dothraki News, name the file `mis.min.js`.
+
+:::note
+The version number will change as the dependencies are updated.
+:::
+
+Then, visit [this page on cdnjs](https://cdnjs.com/libraries/dayjs/1.10.4) with all available Day.js files for the version we're using, find the `https://cdnjs.cloudflare.com/ajax/libs/dayjs//locale/isocode.min.js` link for the new language, and open it in a new tab.
+
+:::note
+You only need to add the .../dayjs/\/_locale_/isocode.min.js locale file. You do not need to add any other Day.js files.
+:::
+
+Copy the Day.js locale code from the new tab into the new file you created. For example, here is an un-minified version of the English locale code for Day.js:
+
+```js
+!(function (e, n) {
+ 'object' == typeof exports && 'undefined' != typeof module
+ ? (module.exports = n())
+ : 'function' == typeof define && define.amd
+ ? define(n)
+ : (e.dayjs_locale_en = n());
+})(this, function () {
+ 'use strict';
+ return {
+ name: 'en',
+ weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+ '_'
+ ),
+ months:
+ 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+ '_'
+ )
+ };
+});
+```
+
+Then open a PR to the CDN repo to add both the YAML and Day.js files for review.
+
+## Prep the News Repo for the New Language
+
+The [News repo](https://github.com/freeCodeCamp/news) pulls data from a Ghost instance, the files you added to the CDN, builds News, and deploys it.
+
+> [!WARN] Pull requests to the News repo _must_ come from the same repo. You should not work off of a fork for this step.
+
+### Modify the Main Config File
+
+Clone the News repo and create a new branch.
+
+Open the `config/index.js` file to add the new language and configure the necessary values. There are a few objects and arrays to modify:
+
+- `locales`: This array contains the active and upcoming News languages. These are the values that are used in the `.env` file to choose the Ghost instance and UI to use for each build. Add the text name of the new language in lowercase to this array.
+- `localeCodes`: This object is a map of ISO codes for each language, and is used to configure i18next before building the UI. To add a new language, use the lowercase language name as the _key_ and the ISO 639-1 language code as the _value_.
+- `algoliaIndices`: This object is a map of Algolia indices for each language. To add a new language, use the lowercase language name as the _key_, and `news-` followed by the lowercase ISO 639-1 language code as the _value_.
+
+:::note
+If you are unsure about the string to use while setting `algoliaIndices`, send a message to Kris (@scissorsneedfoodtoo), or someone else with access to Algolia, and ask them to check.
+:::
+
+For example, if you are launching Dothraki News, here are what the objects / arrays above should look like:
+
+```js
+const locales = ['arabic', 'bengali', 'chinese', 'english', 'dothraki'];
+
+const localeCodes = {
+ arabic: 'ar',
+ bengali: 'bn',
+ chinese: 'zh',
+ english: 'en',
+ dothraki: 'mis'
+};
+
+const algoliaIndices = {
+ arabic: 'news-ar',
+ bengali: 'news-bn',
+ chinese: 'news-zh',
+ english: 'news',
+ dothraki: 'news-mis'
+};
+```
+
+### Add the i18next JSON Files for the New Language
+
+Next, go to the `shared/config/i18n/locales` directory, create a new folder, and give it the name of the new language you're adding. For example, if you're launching Dothraki News, create a new folder named `dothraki`.
+
+Then copy the JSON files from the `english` directory to your new folder.
+
+In your new folder, open the `redirects.json` file and replace its contents with an empty array:
+
+```json
+[]
+```
+
+Then commit and push your branch directly to the News repo.
+
+:::note
+You need to be on one of the teams with access to the News repo to push branches directly to News. Currently, only the dev, i18n, and staff teams are allowed to do this.
+:::
+
+Finally, open a PR for review.
+
+Once both your PRs to the CDN and News repo have been approved, they can be merged.
+
+:::note
+Deployment will be handled subsequently by the staff. Here is a sample PR: [freeCodeCamp/news#485](https://github.com/freeCodeCamp/news/pull/485) of how they do it and more details are available in the [staff-wiki](https://staff-wiki.freecodecamp.org/docs/flight-manuals/news-instances#jamstack---news--assets).
+:::
diff --git a/src/content/docs/es/how-to-help-with-video-challenges.md b/src/content/docs/es/how-to-help-with-video-challenges.md
new file mode 100644
index 00000000..f8521b48
--- /dev/null
+++ b/src/content/docs/es/how-to-help-with-video-challenges.md
@@ -0,0 +1,214 @@
+---
+title: How to Help with Video Challenges
+---
+
+Los retos en vídeo son un nuevo tipo de desafío en el currículo de freeCodeCamp.
+
+Un desafío de vídeo es una pequeña sección de un curso de vídeo completo sobre un tema en particular. Una página de desafío de vídeo inserta un vídeo de YouTube. Cada página de desafío tiene una única pregunta de selección múltiple relacionada con el vídeo. El usuario deberá responder correctamente la pregunta antes de avanzar al siguiente desafío de video en el curso.
+
+Las páginas de desafío de vídeo son creadas por miembros del equipo de freeCodeCamp. Los vídeos de YouTube también son subidos por miembros del equipo de freeCodeCamp. Muchos de los desafíos de video todavía no tienen preguntas asociadas a ellos.
+
+Puedes ayudar creando preguntas de selección múltiple relacionadas con las secciones de video y agregando las preguntas a los archivos markdown para los desafíos de video.
+
+## Plantilla de desafío
+
+A continuación se muestra una plantilla de cómo se ven los archivos markdown de los desafíos.
+
+```md
+---
+id: Identificador único (alfanumérico, MongoDB_id)
+title: Título del desafío
+challengeType: 11
+videoId: 'Id del video de YouTube del video desafío'
+forumTopicId: 12345
+---
+
+# --descripción--
+
+Texto de descripción del desafío, en markdown
+
+`` `html
+
+código de ejemplo
+```
+
+# --question--
+
+Estos campos se utilizan actualmente para los desafíos de Python de opción múltiple.
+
+## --text--
+
+El texto de la pregunta va aquí.
+
+## --answers--
+
+Respuesta 1
+
+---
+
+Respuesta 2
+
+---
+
+Más respuestas
+
+## --video-solution--
+
+El número para la respuesta correcta va aquí.
+
+```
+
+## Creating Questions for Video Challenges
+
+### Access the Video Challenge Markdown Files
+
+You can find the markdown files for video challenges at the following locations in the curriculum:
+
+- [Data Analysis with Python Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/data-analysis-with-python-course)
+- [TensorFlow 2.0 Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/tensorflow)
+- [Numpy Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/numpy)
+- [How Neural Networks Work Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/how-neural-networks-work)
+
+Pick a challenge markdown file from the options above.
+
+### Skim through the video associated with the challenge and create a multiple-choice question
+
+First, find the `videoId`.
+
+For example, in the following code from the header of a video challenge markdown file, the `videoId` is "nVAaxZ34khk". En GitHub, la información debe ser colocada en un formato de tabla.
+
+```
+
+---
+
+id: 5e9a093a74c4063ca6f7c14d
+title: Data Analysis Example A challengeType: 11
+videoId: nVAaxZ34khk
+
+---
+
+````
+
+A continuación, accede al vídeo de YouTube con esa `videoId`. The URL for the video will be:
+https://www.youtube.com/watch?v=[videoId] (replace `videoId` in the URL with the video's ID - without square brackets)
+
+In the example above, the URL is https://www.youtube.com/watch?v=nVAaxZ34khk
+
+Skim the YouTube video with that `videoId` and think of a multiple-choice question based on the content of the video.
+
+### Add the Question to the Markdown File
+
+You can add the question locally or using the GitHub interface. Para añadir la pregunta localmente, necesitas [configurar freeCodeCamp localmente](how-to-setup-freecodecamp-locally). También puede encontrar el archivo en GitHub y hacer clic en el botón Editar para añadir la pregunta directamente en su navegador.
+
+Si aún no se ha agregado una pregunta a un desafío de video en particular, tendrá la siguiente pregunta predeterminada:
+
+```md
+# --question--
+
+## --text--
+
+Question text
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+1
+````
+
+Agrega/Actualiza el texto de la pregunta debajo de la parte que dice:
+
+```
+# --question--
+
+## --text--
+```
+
+Añade/Actualiza las respuestas (`Answer 1`, `Answer 2`, y así) debajo de `## --answers--`. Asegúrate de actualizar el número debajo de `## --video-solution--` con el número de respuesta correcto. Puede añadir más respuestas posibles usando el mismo formato. The questions and answers can be surrounded with quotation marks.
+
+### Ejemplos de preguntas
+
+````md
+# --pregunta--
+
+## --texto--
+
+Qué muestra este código JavaScript en la consola?
+
+```js
+console.log('hello world');
+```
+````
+
+## --answers--
+
+hola _mundo_
+
+---
+
+**hola** mundo
+
+---
+
+hola mundo
+
+---
+
+## --video-solution--
+
+3
+
+`````
+
+````md
+# --pregunta--
+
+## --texto--
+
+¿Qué se imprimirá después de ejecutar este código?:
+
+```py
+width = 15
+height = 12.0
+print(height/3)
+`````
+
+## --answers--
+
+39
+
+---
+
+4
+
+---
+
+4.0
+
+---
+
+5.0
+
+---
+
+5
+
+## --video-solution--
+
+3 ````
+
+Para más ejemplos, puede ver los archivos de markdown para el siguiente curso de video. Todos los desafíos ya tienen preguntas: [Curso de Python para todos](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/07-scientific-computing-with-python/python-for-everybody)
+
+## Open a Pull Request
+
+Después de crear una o más preguntas, puedes enviar los cambios a una nueva rama y [abrir una pull request](how-to-open-a-pull-request).
diff --git a/src/content/docs/es/how-to-open-a-pull-request.md b/src/content/docs/es/how-to-open-a-pull-request.md
new file mode 100644
index 00000000..d6b031a8
--- /dev/null
+++ b/src/content/docs/es/how-to-open-a-pull-request.md
@@ -0,0 +1,211 @@
+---
+title: Cómo abrir una Pull Request (PR)
+---
+
+A pull request (PR), enables you to send changes from your fork on GitHub to freeCodeCamp.org's main repository. Una vez que haya hecho cambios en el código, puede seguir estas pautas para abrir un PR.
+
+Esperamos que nuestros colaboradores conozcan el proceso específico de este proyecto. Following the guidelines carefully earns you the respect of fellow maintainers and saves everyone time.
+
+Algunos ejemplos de ello son:
+
+1. No edite archivos directamente a través de GitHub – mientras pueda, no es una buena idea.
+2. Make sure the PR title follows [our convention](#prepare-a-good-pr-title).
+3. Asegúrate de seguir la lista de PR y no solo marcar las cosas; de lo contrario, no te tomaremos en serio.
+4. Utilice la forma correcta de vincular problemas en la descripción del PR actualizando el `XXXXX`. No solo añada números de emisión en cualquier lugar y donde le plazca.
+5. No usar "@mention" o solicitar comentarios demasiadas veces.
+
+ Entendemos que está emocionado por contribuir. As much as a maintainer will love to get back to you, they are busy people looking after hundreds of requests just like yours. Be patient, someone will get to you sooner or later.
+
+6. Do not work directly off your `main` branch - create a new branch for the changes you are working on.
+
+:::note
+Your PR should be targeting changes to the English curriculum only. Read [this guide](index#translations) instead for contributing to translations.
+:::
+
+## Prepare a Good PR Title
+
+We use [conventional title and messages](https://www.conventionalcommits.org/) for commits and pull requests. The convention has the following format:
+
+> `([ámbito opcional]): `
+>
+> Por ejemplo:
+>
+> `fix(learn): tests for the do...while loop challenge`
+
+Whenever you open a Pull Request (PR), you can use the below to determine the type, scope (optional), and description.
+
+**Type:**
+
+| Tipo | Cuándo seleccionar |
+| :---- | :----------------------------------------------------------------------------------------- |
+| fix | Changed or updated/improved functionality, tests, the wording of a lesson, etc. |
+| feat | Sólo si está añadiendo nuevas funcionalidades, pruebas, etc. |
+| chore | Cambios que no están relacionados con el código, las pruebas o la redacción de la lección. |
+| docs | Cambios al directorio `/docs` o a las pautas de contribución, etc. |
+
+**Scope:**
+
+You can select a scope from [this list of labels](https://github.com/freeCodeCamp/freeCodeCamp/labels?q=scope).
+
+**Description:**
+
+Keep it short (less than 30 characters) and simple; you can add more information in the PR description box and comments.
+
+Some examples of good PR titles would be:
+
+- `fix(a11y): contraste mejorado en la barra de búsqueda`
+- `feat: se agregan más test a los retos de HTML y CSS`
+- `fix(api,client): evitar errores CORS en el envío de formularios`
+- `docs(i18n): se arreglan los enlaces para que sean relativos en lugar de absolutos`
+
+## Proponer una Pull Request
+
+1. Once the edits have been committed, you will be prompted to create a pull request on your fork's GitHub Page.
+
+
+ See screenshot
+
+ 
+
+
+
+2. By default, all pull requests should be against the freeCodeCamp main repo, `main` branch.
+
+ Make sure that your Base Fork is set to freeCodeCamp/freeCodeCamp when raising a Pull Request.
+
+
+ See screenshot
+
+ 
+
+
+
+3. Submit the pull request from your branch to freeCodeCamp's `main` branch.
+
+4. Include a more detailed summary of the changes you made and how your changes are helpful in the body of your PR.
+
+ - Se le presentará una plantilla de pull request. Esta es una lista de verificación que debería haber seguido antes de abrir la solicitud de pull request.
+
+ - Rellene los detalles como considere oportuno. Ensure that you give the reviewers enough context to review the changes. If the PR makes changes to the UI, be sure to include screenshots of the changes as well. All of this information will be reviewed and the reviewers will decide whether or not your pull request is accepted.
+
+ - Si el PR está pensado para abordar un problema existente de GitHub entonces, al final de el cuerpo de la descripción de su PR, use la palabra clave _Cierra_ con el número de incidencia para [cerrar automáticamente ese problema si se acepta y fusionan las relaciones públicas](https://help.github.com/en/articles/closing-issues-using-keywords).
+
+ > Ejemplo: `Cerrar #123` cerrará el problema 123
+
+5. Indicate if you have tested on a local copy of the site or not.
+
+ - Esto es muy importante cuando se hagan cambios que no sean solo ediciones del contenido de texto como documentación o una descripción de un desafío. Examples of changes that need local testing include JavaScript, CSS, or HTML, which could change the functionality or layout of a page.
+
+ - If your PR affects the behavior of a page, it should be accompanied by corresponding [Playwright integration tests](how-to-add-playwright-tests).
+
+## Feedback on Pull Requests
+
+> :tada: Enhorabuena por hacer una PR y muchas gracias por tomarse el tiempo para contribuir.
+
+Our moderators will now take a look and leave you feedback. Please be patient with the fellow moderators and respect their time. All pull requests are reviewed in due course.
+
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+
+> [!TIP] Si vas a contribuir con más PRs, te recomendamos que leas las directrices ["haciendo cambios y sincronizando"](how-to-setup-freecodecamp-locally#making-changes-locally) para evitar la necesidad de borrar tu bifurcación.
+
+## Conflicts on a Pull Request
+
+Conflicts can arise because many contributors work on the repository, and changes can break your PR which is pending a review and merge.
+
+Since we squash all commits, you may not need to do a rebase. However, if a rebase is requested, check our [For Usual Bug Fixes and Features](#for-usual-bug-fixes-and-features) or [For Upcoming Curriculum and Features](#for-upcoming-curriculum-and-features) guides to learn how to do this process for your corresponding PR.
+
+### For Usual Bug Fixes and Features
+
+When you are working on regular bugs and features on our development branch `main`, you are able to do a simple rebase:
+
+1. Rebase your local copy:
+
+ ```bash
+ git checkout
+ git pull --rebase upstream main
+ ```
+
+2. Resolve any conflicts and add / edit commits
+
+ ```bash
+ # Either
+ git add .
+ git commit -m "chore: resolve conflicts"
+
+ # Or
+ git add .
+ git commit --amend --no-edit
+ ```
+
+3. Push back your changes to the PR
+
+ ```bash
+ git push --force origin
+ ```
+
+### For Upcoming Curriculum and Features
+
+When you are working on features for our upcoming curriculum `next-*` branches, you have to do a `cherry-pick`:
+
+1. Make sure your upstream comes in sync with your local:
+
+ ```bash
+ git checkout main
+ git fetch --all --prune
+ git checkout next-python-projects
+ git reset --hard upstream/next-python-projects
+ ```
+
+2. Take a backup
+
+ a. Either delete your local branch after taking a backup (if you still have it locally):
+
+ ```bash
+ git checkout
+
+ # example:
+ # git checkout feat/add-numpy-video-question
+
+ git checkout -b
+
+ # example:
+ # git checkout -b backup-feat/add-numpy-video-question
+
+ git branch -D
+ ```
+
+ b. Or just a backup of your PR branch (if you do not have it locally):
+
+ ```bash
+ git checkout -b origin/
+
+ # example:
+ # git checkout -b backup-feat/add-numpy-video-question origin/feat/add-numpy-video-question
+ ```
+
+3. Start off with a clean slate:
+
+ ```bash
+ git checkout -b next-python-projects
+ git cherry-pick
+ ```
+
+4. Resolve any conflicts, cleanup, and install dependencies and run tests
+
+ ```bash
+ pnpm run clean
+
+ pnpm install
+ FCC_SUPERBLOCK='' pnpm run test:curriculum
+
+ # example:
+
+ # FCC_SUPERBLOCK='python-for-everybody' pnpm run test:curriculum
+
+ ```
+
+5. If everything looks good, push back to the PR
+
+ ```bash
+ git push --force origin
+ ```
diff --git a/src/content/docs/es/how-to-proofread-files.md b/src/content/docs/es/how-to-proofread-files.md
new file mode 100644
index 00000000..4b8f8714
--- /dev/null
+++ b/src/content/docs/es/how-to-proofread-files.md
@@ -0,0 +1,63 @@
+---
+title: Como revisar traducciones
+---
+
+Nuestro equipo de revisión es responsable de garantizar que las traducciones reflejen con precisión el texto original. Confiamos en nuestro equipo de revisión para asegurarnos de que tenemos traducciones de muy alta calidad.
+
+Todas nuestras traducciones están hechas a mano, por humanos reales. Proofreading ensures that there is a consistent tone across all our translated resources like the curriculum.
+
+Para comenzar a revisar, visita [nuestra plataforma de traducción](https://translate.freecodecamp.org) e inicia sesión. Selecciona "Ir a la consola" en la barra de navegación superior para cambiar de la vista pública a la vista de espacio de trabajo.
+
+## Seleccionar un archivo
+
+Verás la lista de proyectos a los que se le ha otorgado acceso. Selecciona el proyecto que te gustaría revisar y luego selecciona el idioma.
+
+
+
+Ahora podrás ver la lista de archivos disponibles. Elige tu archivo seleccionando el botón `Proofread` a la derecha de ese archivo, luego elige `Proofreading` en el menú desplegable que aparece.
+
+:::note
+Si estás en la vista "workspace" pero quieres trabajar en [traducir un archivo](how-to-translate-files) en lugar de revisar, puedes seleccionar la opción `Crowdsourcing` del menú desplegable.
+:::
+
+## Revisar traducciones
+
+
+
+
+
+Aquí verás la lista de cadenas en el archivo seleccionado, con sus traducciones correspondientes. La traducción que se muestra aquí es la traducción que ha recibido la puntuación más alta (entre votos a favor y en contra) de la comunidad de traducción.
+
+Mientras puedas ver _todas_ las traducciones propuestas para una cadena determinada, las puntuaciones de la comunidad (determinadas por los votos a favor y en contra) deben tenerse en cuenta al elegir cuál traducción aprobar. La comunidad puede revisar las traducciones propuestas y recomendar cuál es la más clara y precisa.
+
+1. Este es el segmento original (en inglés).
+2. Este es el segmento traducido que le corresponde. Aquí se mostrará la traducción propuesta más popular, según sus votos positivos y negativos.
+3. Al hacer clic en este botón de tilde aprobarás esa traducción.
+4. Crowdin mostrará el estado de cada segmento. `Done` (listo) significa que una traducción ha sido aprobada y que será descargada en el próximo pull de Crowdin. `Todo` (por hacer o "to do") significa que el segmento aún no ha sido revisado. `Hidden` (Oculto) significa que la cadena está bloqueada y _no debe traducirse_. `Comment` significa que la cadena de texto incluye un comentario.
+5. Puedes usar las casillas de verificación para seleccionar varias traducciones y aprobarlas en un solo paso.
+6. Aquí puedes ver las traducciones propuestas por la comunidad, sus puntajes de popularidad y las traducciones sugeridas por Crowdin.
+7. Este botón muestra/oculta el panel del lado derecho, donde puedes ver traducciones, comentarios, la memoria de traducciones y el glosario de términos.
+8. Crowdin muestra aquí los mensajes de error de las verificaciones de calidad (QA / quality assurance). En otras palabras, Crowdin te notificará si algo en la traducción no parece estar correcto. Estas traducciones deberían ser aprobadas cuidadosamente.
+
+No se requieren acciones adicionales una vez que el archivo ha sido revisado.
+
+:::note
+Aprobar una cadena en la vista de revisión la marcará como completa y se descargará en nuestra próxima extracción de Crowdin a GitHub.
+:::
+
+## Becoming a Proofreader
+
+Si tiene alguna pregunta o le interesa colaborar en el equipo de revisión, sientase libre de contactarnos en nuestra [sala de chat de contribuidores](https://discord.gg/PRyKn3Vbay). Generalmente, le concederemos acceso a la corrección si ha estado contribuyendo a freeCodeCamp durante un tiempo.
+
+Nuestro equipo de personal y de moderadores de la comunidad buscan constantemente voluntarios amables como tú que nos ayuden a poner a disposición del mundo traducciones de alta calidad.
+
+:::note
+Crowdin te permite aprobar tus propias traducciones. Sin embargo, en general suele ser mejor permitir que otro corrector revise tus traducciones propuestas como medida adicional para asegurarse que no hayan errores.
+:::
+
+## Creating a Channel on Chat for a World Language
+
+For the most part, we encourage you to use the [contributors chat](https://discord.gg/PRyKn3Vbay) room for all correspondence. However if the team of volunteer translators grows for a certain language, we can consider creating an additional break-out channel for the language.
+
+Si ya eres un revisor y estás interesado en tener un canal dedicado en nuestros servidores de chat para un idioma específico, [completa este formulario](https://forms.gle/XU5CyutrYCgDYaVZA).
diff --git a/src/content/docs/es/how-to-setup-freecodecamp-locally.md b/src/content/docs/es/how-to-setup-freecodecamp-locally.md
new file mode 100644
index 00000000..ec03797e
--- /dev/null
+++ b/src/content/docs/es/how-to-setup-freecodecamp-locally.md
@@ -0,0 +1,297 @@
+---
+title: Setup freeCodeCamp locally
+---
+
+Sigue estas directrices para configurar un entorno de desarrollo para freeCodeCamp. Esto es altamente recomendable si desea contribuir regularmente.
+
+## Choose between Gitpod or your Own Machine (local setup)
+
+:::danger
+
+- freeCodeCamp does not build and run natively on Windows, you will [need to use WSL2](how-to-setup-wsl) for a Linux-like setup on Windows. - You can't use Windows Command Prompt, Git Bash or PowerShell to build and run the codebase. - Note that if using Windows, the hardware requirements need to be more than [what we mention](how-to-setup-freecodecamp-locally?id=how-to-prepare-your-local-machine) to accommodate for WSL-based setup.
+ :::
+
+Si deseas hacer una contribución puntual, debes utilizar Gitpod para realizar cambios. La configuración de Gitpod lanza un entorno listo para codificar en pocos minutos en tu navegador web. To contribute long-term, we recommend you set up freeCodeCamp on your local machine.
+
+Estos son algunos pros y contras que deberían ayudarte a decidir cuál es la mejor opción para ti:
+
+| Gitpod | Su propia máquina (configuración local) |
+| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| Sin requisitos mínimos de hardware | Requisitos específicos y mínimos |
+| No es necesario instalar ningún software | Software adicional necesario |
+| Copia del repositorio siempre actualizada | Necesidad de mantener una copia local del repositorio |
+| Más lento y puede tardar unos minutos en iniciarse | Más rápido y puede ponerse en marcha en segundos |
+| Necesita conexión a Internet para funcionar | Requiere una conexión mínima a Internet (una vez configurado) |
+| Algunas tareas, como la compilación y las pruebas, pueden llevar más tiempo | Realización más rápida de las tareas (en función de las capacidades de tu máquina) |
+
+### How to Prepare a Gitpod Workspace
+
+Hemos automatizado el proceso de instalación de todas las dependencias & herramientas que necesitarás. With Gitpod you get a free ready-to-code environment in a few minutes, and is useful if you do not have access to a computer or want to make one-time changes.
+
+There are various ways to launch a Gitpod workspace:
+
+1. **(Más rápido)** Añade `gitpod.io/#` a cualquier URL de GitHub.
+
+ Por ejemplo, si visitas tu fork en `https://github.com/YOUR_USER_NAME/freeCodeCamp.git`, añade `gitpod.io/#` delante de la URL en la barra de direcciones y pulsa enter.
+
+ Es decir, puedes navegar a `gitpod.io/#https://github.com/YOUR_USER_NAME/freeCodeCamp.git` y debes ver un espacio de trabajo creado para ti. Esto funciona para cualquier repositorio o pull-request en GitHub.
+
+2. También puedes instalar una de las siguientes extensiones para tu navegador.
+
+ - [Chrome Webstore](https://chrome.google.com/webstore/detail/gitpod-always-ready-to-co/dodmmooeoklaejobgleioelladacbeki) - funciona con navegadores basados en Chromium como Google Chrome, Brave, Edge, etc.
+ - [Complemento para Firefox](https://addons.mozilla.org/en-US/firefox/addon/gitpod) - Firefox
+
+ Once installed you will see a 'Gitpod' button on every repository, pull-request, etc. as a handy shortcut to launch a workspace from there. Consulta la página de la extensión para más detalles, capturas de pantalla, etc.
+
+That's it, you can now skip to the 'syncing up from parent' section after you have launched a Gitpod workspace. Most parts of this guide applies to Gitpod workspaces, but be mindful of [how the URLs & Ports work within a Gitpod](https://www.gitpod.io/docs/configure/workspaces/ports) workspace.
+
+**Note: Troubleshooting port issues on Gitpod**
+
+Sometimes the service on port `8000` doesn't go live. This is common when you are restarting an inactive workspace.
+
+If the service is not coming up on port `8000`, you can troubleshoot using these steps:
+
+- **Start the server**: Run `pnpm run develop:server` in one terminal window from the root project directory (`/workspace/freeCodeCamp`) to start the server.
+
+- **Start the client**: In another terminal window, run `pnpm run develop -- -H '0.0.0.0'` from the client directory (`/workspace/freeCodeCamp/client`) to start the client.
+
+This should make port `8000` available.
+
+### How to Prepare your Local Machine
+
+Here is a minimum system requirement for running freeCodeCamp locally:
+
+- 8 GB RAM
+- Relatively fast CPU (4+ cores)
+- Windows 10 or 11 (with WSL), macOS, or Linux
+
+Start by installing the prerequisite software for your operating system.
+
+We primarily support development on Linux and Unix-based systems like Ubuntu and macOS. You can develop on Windows 10 or 11 with WSL2 only. You can follow [this guide](how-to-setup-wsl) to set up WSL2. You can't use Command Prompt, Git Bash or PowerShell to run freeCodeCamp natively within windows.
+
+#### Pre-requisitos:
+
+| Pre-requisitos | Versión | Notas |
+| --------------------------------------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------- |
+| [Node.js](http://nodejs.org) | `20.x` | Utilizamos la versión "Active LTS", Ve [LTS Schedule](https://nodejs.org/en/about/releases/). |
+| [pnpm](https://pnpm.io/installation) | `8.x` | - |
+| [MongoDB Community Server](https://docs.mongodb.com/manual/administration/install-community/) | `5.0.x` | - |
+
+:::danger
+Si tienes una versión diferente, instala la versión recomendada. Sólo podemos resolver problemas de instalación de las versiones recomendadas. See [troubleshooting section](troubleshooting-development-issues) for details.
+:::
+
+If Node.js is already installed on your machine, run the following commands to validate the versions:
+
+```bash
+node -v
+pnpm -v
+```
+
+> [!TIP] Recomendamos encarecidamente actualizar a las últimas versiones estables del software mencionado anteriormente, también conocidas como versiones de soporte a largo plazo (LTS).
+
+Once you have the prerequisites installed, you need to prepare your development environment. This is common for many development workflows, and you will only need to do this once.
+
+##### Sigue estos pasos para dejar listo tu entorno de desarrollo:
+
+1. Instala [Git](https://git-scm.com/) o tu cliente Git favorito, si aún no lo has hecho. Actualiza a la última versión; la versión incluida con tu sistema operativo puede estar obsoleta.
+
+2. (Opcional pero recomendado) [Configura una clave SSH](https://help.github.com/articles/generating-an-ssh-key/) para GitHub.
+
+3. Install a code editor of your choice. If you aren't sure which one to use, we recommend [Visual Studio Code](https://code.visualstudio.com/) — it's free and open source.
+
+4. Set up linting for your code editor.
+
+ You should have [ESLint running in your editor](http://eslint.org/docs/user-guide/integrations.html), and it will highlight anything that doesn't conform to [freeCodeCamp's JavaScript Style Guide](http://forum.freecodecamp.org/t/free-code-camp-javascript-style-guide/19121).
+
+ > [!TIP] Please do not ignore any linting errors. They are meant to **help** you and to ensure a clean and simple codebase.
+
+## Fork the Repository on GitHub
+
+[Forking](https://help.github.com/articles/about-forks/) is a step where you get your own copy of freeCodeCamp's main repository (a.k.a _repo_) on GitHub.
+
+This is essential, as it allows you to work on your own copy of freeCodeCamp on GitHub, or to download (clone) your repository to work on locally. Later, you will be able to request changes to be pulled into the main repository from your fork via a pull request (PR).
+
+> [!TIP] The main repository at `https://github.com/freeCodeCamp/freeCodeCamp` is often referred to as the `upstream` repository.
+>
+> Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository. `YOUR_USER_NAME` would be replaced with your GitHub username.
+
+**Follow these steps to fork the `https://github.com/freeCodeCamp/freeCodeCamp` repository:**
+
+1. Go to the freeCodeCamp repository on GitHub:
+
+2. Click the "Fork" Button in the upper right-hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/))
+
+3. After the repository has been forked, you will be taken to your copy of the freeCodeCamp repository at `https://github.com/YOUR_USER_NAME/freeCodeCamp` (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
+
+
+
+ How to fork freeCodeCamp on GitHub (screenshot)
+
+
+
+
+
+
+## Clone your Fork from GitHub
+
+[Cloning](https://help.github.com/articles/cloning-a-repository/) is where you **download** a copy of a repository from a `remote` location that is either owned by you or by someone else. In your case, this remote location is your `fork` of freeCodeCamp's repository that should be available at `https://github.com/YOUR_USER_NAME/freeCodeCamp`. (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
+
+> [!WARNING] If you are working on a WSL2 Linux Distro, you might get performance and stability issues by running this project in a folder which is shared between Windows and WSL2 (e.g. `/mnt/c/Users/`). Therefore we recommend to clone this repo into a folder which is mainly used by your WSL2 Linux Distro and not directly shared with Windows (e.g. `~/PROJECTS/`).
+>
+> See [this GitHub Issue](https://github.com/freeCodeCamp/freeCodeCamp/issues/40632) for further information about this problem.
+
+Run these commands on your local machine:
+
+1. Open a Terminal / Command Prompt / Shell in your projects directory
+
+ _i.e.: `/yourprojectsdirectory/`_
+
+2. Clone your fork of freeCodeCamp, replacing `YOUR_USER_NAME` with your GitHub Username
+
+ ```bash
+ git clone --depth=1 https://github.com/YOUR_USER_NAME/freeCodeCamp.git
+ ```
+
+This will download the entire freeCodeCamp repository to your projects directory.
+
+Note: `--depth=1` creates a shallow clone of your fork, with only the most recent history/commit.
+
+## Set up Syncing from Parent
+
+Now that you have downloaded a copy of your fork, you will need to set up an `upstream` remote to the parent repository.
+
+[As mentioned earlier](#fork-the-repository-on-github), the main repository is referred to as the `upstream` repository. Your fork is referred to as the `origin` repository.
+
+You need a reference from your local clone to the `upstream` repository in addition to the `origin` repository. This is so that you can sync changes from the main repository without the requirement of forking and cloning repeatedly.
+
+1. Change the directory to the new freeCodeCamp directory:
+
+ ```bash
+ cd freeCodeCamp
+ ```
+
+2. Add a remote reference to the main freeCodeCamp repository:
+
+ ```bash
+ git remote add upstream https://github.com/freeCodeCamp/freeCodeCamp.git
+ ```
+
+3. Ensure the configuration looks correct:
+
+ ```bash
+ git remote -v
+ ```
+
+ The output should look something like below (replacing `YOUR_USER_NAME` with your GitHub username):
+
+ ```bash
+ origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (fetch)
+ origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (push)
+ upstream https://github.com/freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream https://github.com/freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+## Running freeCodeCamp Locally
+
+Now that you have a local copy of freeCodeCamp, you can follow these instructions to run it locally. This will allow you to:
+
+- Preview edits to pages as they would appear on the learning platform.
+- Work on UI related issues and enhancements.
+- Debug and fix issues with the application servers and client apps.
+
+If you do run into issues, first perform a web search for your issue and see if it has already been answered. If you cannot find a solution, please search our [GitHub issues](https://github.com/freeCodeCamp/freeCodeCamp/issues) page for a solution and report the issue if it has not yet been reported.
+
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [our chat server](https://discord.gg/PRyKn3Vbay).
+
+### Configuring Dependencies
+
+#### Step 1: Set up the Environment Variable File
+
+The default API keys and environment variables are stored in the file `sample.env`. This file needs to be copied to a new file named `.env` that is accessed dynamically during the installation step.
+
+```bash
+# Crear una copia de la "sample.env" y nombrarla ".env".
+# Populate it with the necessary API keys and secrets
+```
+
+```bash
+cp sample.env .env
+```
+
+The keys in the `.env` file are _not_ required to be changed to run the app locally. You can leave the default values copied over from `sample.env` as-is.
+
+> [!TIP] Keep in mind if you want to use services like Auth0 or Algolia, you'll have to acquire your own API keys for those services and edit the entries accordingly in the `.env` file.
+
+#### Step 2: Install Dependencies
+
+This step will install the dependencies required for the application to run:
+
+```bash
+pnpm install && pnpm run create:shared
+```
+
+#### Step 3: Start MongoDB and Seed the Database
+
+Before you can run the application locally, you will need to start the MongoDB service.
+
+:::note
+Unless you have MongoDB running in a setup different than the default, the URL stored as the `MONGOHQ_URL` value in the `.env` file should work fine. If you are using a custom configuration, modify this value as needed.
+
+If you followed along with the [Windows 10 via WSL2 Setup Guide](how-to-setup-wsl), then you should be able to skip this step if the MongoDB server from that guide is already running. You can confirm this by checking that you can reach `http://localhost:27017` on your local machine.
+:::
+Start the MongoDB server in a separate terminal:
+
+```bash
+mongod
+```
+
+> [!TIP] You can avoid having to start MongoDB every time by installing it as a background service. You can [learn more about it in their documentation for your OS](https://docs.mongodb.com/manual/administration/install-community/)
+
+Next, let's seed the database. In this step, we run the below command that fills the MongoDB server with some initial data sets that are required by services. These include a few schemas, among other things.
+
+```bash
+pnpm run seed
+```
+
+By default, you will be signed in as a new user without any completed certifications. Run the following command if you need to develop with completed certifications or write Playwright tests:
+
+```bash
+pnpm run seed:certified-user
+```
+
+> [!WARNING] Running `pnpm run seed:certified-user` will log you out. You will have to clear your browser cookies and sign in again.
+
+#### Step 4: Start the freeCodeCamp Client Application and API Server
+
+You can now start up the API server and the client applications.
+
+```bash
+pnpm run develop
+```
+
+This single command will fire up all the services, including the API server and the client applications available for you to work on.
+
+Once ready, open a web browser and visit . If the app loads, sign in. Congratulations – you're all set! You now have a copy of freeCodeCamp's entire learning platform running on your local machine.
+
+The API server serves endpoints at `http://localhost:3000`. The Gatsby app serves the client application at `http://localhost:8000`.
+
+While you are logged in, if you visit you should see the available APIs.
+
+> [!WARNING] Clearing your cookies or running `pnpm run seed:certified-user` will log you out, and you will have to sign in again.
+
+If you have issues while installing it, check out the [troubleshooting section](troubleshooting-development-issues).
+
+## Quick Commands Reference
+
+A quick reference to the commands that you will need when working locally.
+
+| command | description |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------- |
+| `pnpm install` | Installs / re-installs all dependencies and bootstraps the different services. |
+| `pnpm run seed` | Creates authorized test users and inserts them into MongoDB. Also runs `seed:exams` and `seed:surveys` below. |
+| `pnpm run seed:certified-user` | Creates authorized test users with certifications fully completed, and inserts them into MongoDB. |
+| `pnpm run seed:exams` | Creates exams and inserts them into MongoDB. |
+| `pnpm run seed:surveys` | Creates surveys for defaults users and inserts them into MongoDB. |
+| `pnpm run develop` | Starts the freeCodeCamp API Server and Client Applications. |
+| `pnpm run clean` | Uninstalls all dependencies and cleans up caches. |
diff --git a/src/content/docs/es/how-to-setup-freecodecamp-mobile-app-locally.md b/src/content/docs/es/how-to-setup-freecodecamp-mobile-app-locally.md
new file mode 100644
index 00000000..ef2a1cc6
--- /dev/null
+++ b/src/content/docs/es/how-to-setup-freecodecamp-mobile-app-locally.md
@@ -0,0 +1,508 @@
+---
+title: Setup freeCodeCamp Mobile App locally
+---
+
+Siga esta guía para establecer la aplicación móvil FreeCodeCamp en su sistema. Es altamente recomentado si se quiere contribuir regularmente.
+
+Some of the contribution workflows – like fixing bugs in the codebase – need you to run the freeCodeCamp app locally.
+
+## How to Prepare your Local Machine
+
+Empezar instalando el software requerido previamente para su sistema operativo.
+
+### Prerequisites
+
+| Requisito | Versión | Notas |
+| ------------------------------- | ------- | ---------------------------------------- |
+| [Flutter](https://flutter.dev/) | `3.x` | - |
+| Dart (viene junto con Flutter) | `3.x` | Usamos la versión que viene con Flutter. |
+
+> [ATENCIÓN!] Si hay una versión diferente, por favor instalar la versión recomendada. Solo daremos soporte a problemas de instalación de versiones recomendadas.
+
+Si Flutter ya está instalado en su equipo, ejecute los siguientes comandos para verificar la versión:
+
+```bash
+flutter --version
+dart --version
+```
+
+> [!TIP] Pedimos encarecidamente actualizar a la última version "stable" del siguiente software.
+
+Una vez que estén instalados los requisitos previos, hay que preparar el entorno de desarrollo. Es muy común para muchos equipos de trabajo, y solo hace falta hacerlo una vez.
+
+#### Follow these steps to get your development environment ready:
+
+1. Instalar [Git](https://git-scm.com/) u otro cliente Git, si todavía no hay ningumo. Acualizar a la versión más reciente. La que viene con el sistema operativo puede estar desactualizada.
+
+2. Set up [Android Studio](https://developer.android.com/studio) and [Android Emulators](https://developer.android.com/studio/run/managing-avds) with the latest released Android version. Recomendamos usar Pixel 3a XL y Nexus One(para emular pantallas más pequeñas).
+
+3. (Optional for MacOS) Set up Xcode and iOS Simulator with the latest released iOS version.
+
+4. (Opcional pero recomendado) [Configurar una clave SSH](https://help.github.com/articles/generating-an-ssh-key/) para GitHub.
+
+5. Instala un editor de código de tu elección.
+
+ Recomendamos utilizar [Visual Studio Code](https://code.visualstudio.com/) o Android Studio. También recomendamos instalar las [extensiones oficiales](https://docs.flutter.dev/get-started/editor?tab=vscode).
+
+## Fork the Repository on GitHub
+
+[Fork](https://help.github.com/articles/about-forks/) es un paso donde consigues tu propia copia del repositorio (conocido como _repo_) en GitHub.
+
+This is essential, as it allows you to work on your own copy of the freeCodeCamp mobile app on GitHub, or to download (clone) your repository to work on locally. Más adelant, podrás solicitar cambios para que se muestren en el repositorio principal de tu "fork" (bifurcación) a través de una "pull request" (PR).
+
+> [!TIP] El repositorio principal en `https://github.com/freeCodeCamp/mobile` es frecuentemente conocido como el repositorio `upstream`.
+>
+> Tu fork en `https://github.com/YOUR_USER_NAME/mobile` suele referirse como el repositorio `origin`. `YOUR_USER_NAME` será remplazado con tu nombre de usuario de GitHub.
+
+**Sigue estos pasos para hacer un for del repositorio `https://github.com/freeCodeCamp/mobile`:**
+
+1. Ve al repositorio freeCodeCamp móvil en GitHub:
+
+2. Haz clic en el botón "Fork" en la esquina superior derecha de la interfaz ([Más detalles aquí](https://help.github.com/articles/fork-a-repo/))
+
+3. Después de haber hecho fork al repositorio, serás llevado a tu copia del repositorio en `https://github. om/NOMBRE_DE_USUARIO/mobile` (`OMBRE_DE_USUARIO` sería reemplazado con tu nombre de usuario de GitHub.)
+
+## Clone your Fork from GitHub
+
+"[Clonar](https://help.github.com/articles/cloning-a-repository/)" es donde tú "**descargas**" una copia de un repositorio desde una localización "`remota`" que es propiedad tuya o de alguien más. In your case, this remote location is your `fork` of freeCodeCamp's repository which should be available at `https://github.com/YOUR_USER_NAME/mobile`. (`TU_NOMBRE_DE_USUARIO` debería ser reemplazado con tu nombre de usuario de GitHub.)
+
+Ejecuta estos comandos en tu máquina local:
+
+1. Abre una Terminal / Símbolo del sistema / Shell en el directorio de proyectos
+
+ _ejemplo: `/directoriodetusproyectos/`_
+
+2. Clona tu fork de freeCodeCamp, reemplazando `TU_NOMBRE_DE_USUARIO` por tu nombre de usuario de GitHub
+
+ ```bash
+ git clon --depth=1 https://github.com/TU_NOMBRE_DE_USUARIO/mobile.git
+ ```
+
+Esto descargará el repositorio entero de freeCodeCamp móvil en tu directorio de proyectos.
+
+Nota: `--depth=1` crea un clon superficial de tu fork con solo la historia/commit más reciente.
+
+## Set up Syncing from Parent
+
+Ahora que has descargado una copia de tu fork, necesitarás configurar un `upstream` remoto en el repositorio padre.
+
+[As mentioned earlier](#fork-the-repository-on-github), the main repository is referred to as the `upstream` repository. Your fork is referred to as the `origin` repository.
+
+Necesitas una referencia de tu clon local al repositorio `upstream` además del repositorio `origin`. Esto es para que puedas sincronizar los cambios desde el repositorio principal sin el requisito de hacer fork y clonar repetidamente.
+
+1. Cambiar el directorio al nuevo directorio `móvil`:
+
+ ```bash
+ cd mobile
+ ```
+
+2. Añadir una referencia remota al repositorio principal de freeCodeCamp móvil:
+
+ ```bash
+ git remote add upstream https://github.com/freeCodeCamp/mobile.git
+ ```
+
+3. Asegúrate de que la configuración se vea correcta:
+
+ ```bash
+ git remote -v
+ ```
+
+ La salida debería verse parecida a como se muestra debajo (remplazando `TU_NOMBRE_DE_USUARIO` con tu usuario de GitHub):
+
+ ```bash
+ origin https://github.com/YOUR_USER_NAME/mobile.git (fetch)
+ origin https://github.com/YOUR_USER_NAME/mobile.git (push)
+ upstream https://github.com/freeCodeCamp/mobile.git (fetch)
+ upstream https://github.com/freeCodeCamp/mobile.git (push)
+ ```
+
+## Running freeCodeCamp Mobile App Locally
+
+Ahora que tienes una copia local de la app móvil de freeCodeCamp, puedes seguir estas instrucciones para ejecutarla localmente.
+
+Si tienes problemas, primero realiza una búsqueda web para tu problema y comprueba si ya ha sido respondida. Si no encuentras una solución, por favor busca en nuestra página [GitHub issues](https://github.com/freeCodeCamp/mobile/issues) para una solución y reporta el problema si aún no ha sido reportado.
+
+Y como siempre, siéntete libre de preguntar en la categoría ['Contribuyentes' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o [nuestro servidor de chat](https://discord.gg/PRyKn3Vbay).
+
+:::note
+El directorio `móvil` contiene dos carpetas, por ejemplo: `mobile-api` y `mobile-app`. `mobile-api` contiene el código API utilizado para ejecutar los podcasts. `mobile-app` contiene la aplicación Flutter que es donde deberías estar cuando siga los pasos siguientes.
+:::
+
+### Configuring Dependencies
+
+#### Step 1: Set Up the Environment Variable File
+
+Las claves de la API por defecto y las variables de entorno se almacenan en el archivo `sample.env`. This file needs to be copied to a new file named `.env` which is accessed dynamically during the installation step. Recuerda cambiar el directorio a `mobile-app` antes de ejecutar los siguientes comandos.
+
+```bash
+# Crear una copia del "sample.env" y nombrarla ".env".
+# Llenarlo con las keys y secrets de la API necesarios:
+```
+
+#### **macOS/Linux**
+
+```bash
+cp sample.env .env
+```
+
+#### **Windows**
+
+```bash
+copy sample.env .env
+```
+
+Las claves dentro del archivo `.env` _no_ requieren ser cambiadas para correr la aplicación de forma local. Puedes dejar los valores por defecto copiados desde `sample.env`.
+
+#### Paso 2: Instalar dependencias
+
+Este paso instalará las dependencias necesarias para que la aplicación se ejecute:
+
+```bash
+flutter pub get
+```
+
+#### Paso 3: Iniciar la app móvil de freeCodeCamp
+
+Inicia el emulador de tu elección (Android o iOS) y espera a que se complete el proceso de arranque.
+
+Ahora puedes iniciar la aplicación ejecutando el siguiente comando:
+
+```bash
+flutter run
+```
+
+> [!TIP] Si estás utilizando VSCode o Android Studio entonces puedes iniciar fácilmente la aplicación sin tener que ejecutar ningún comando en la terminal. Más información [aquí](https://docs.flutter.dev/get-started/test-drive).
+
+## Making Changes Locally
+
+You can now make changes to files and commit your changes to the local clone of your fork.
+
+Sigue estos pasos:
+
+1. Valida que estás en la rama `main`:
+
+ ```bash
+ git status
+ ```
+
+ Deberías obtener una salida como esta:
+
+ ```bash
+ On branch main
+ Your branch is up-to-date with 'origin/main'.
+
+ nothing to commit, working directory clean
+ ```
+
+ Si no estás en main o tu directorio de trabajo no está limpio, resuelve cualquier archivos/commits pendientes y comprueba `main`:
+
+ ```bash
+ git checkout main
+ ```
+
+2. Sincroniza los últimos cambios desde la rama principal `main` a tu rama local main:
+
+ > [!WARNING] Si tienes algún pull request pendiente que hayas hecho desde la rama `main` de tu fork, los perderás al final de este paso.
+ >
+ > Deberías asegurarte de que tu pull request esté hecho merge por un moderador antes de realizar este proceso. Para evitar este escenario, deberías **siempre** trabajar en una rama que no sea `main`.
+
+ Este paso **sincronizará los últimos cambios** desde el repositorio móvil de freeCodeCamp. Es importante que hagas rebase de tu rama sobre la última `principal/main` tan a menudo como sea posible para evitar conflictos más tarde.
+
+ Actualiza tu copia local del repositorio de freeCodeCamp móvil:
+
+ ```bash
+ git fetch upstream
+ ```
+
+ Restablece tu rama main con el main de freeCodeCamp móvil:
+
+ ```bash
+ git reset --hard upstream/main
+ ```
+
+ Has push de tu rama main a tu origen para tener un historial limpio en tu fork en GitHub:
+
+ ```bash
+ git push origin main --force
+ ```
+
+ You can validate that your current main matches the upstream/main by performing a diff:
+
+ ```bash
+ git diff upstream/main
+ ```
+
+ La salida resultante debería estar vacía.
+
+3. Crear una nueva rama:
+
+ Trabajar en una rama separada para cada asunto te ayuda a mantener limpia tu copia de trabajo local. Nunca deberías trabajar en `main`. Esto sumergirá tu copia de freeCodeCamp móvil y puede que tengas que empezar otra vez con un clon o un fork nuevo.
+
+ Comprueba que estás en `main` como se explicó anteriormente, y ramifica desde ahí:
+
+ ```bash
+ git checkout -b fix/update-guide-for-xyz
+ ```
+
+ Tu nombre de rama debería comenzar con `fix/`, `feat/`, `docs/`, etc. Evita el uso de números de incidencia en las ramas. Keep them short, meaningful, and unique.
+
+ Algunos ejemplos de buenos nombres de ramas son:
+
+ ```md
+ fix/update-challenges-for-react
+ fix/update-guide-for-html-css
+ fix/platform-bug-sign-in-issues
+ feat/add-guide-article-for-javascript
+ translate/add-spanish-basic-html
+ ```
+
+4. Edita páginas y trabaja en el código en tu editor de texto favorito.
+
+5. Una vez que estés contento con los cambios, deberías ejecutar la aplicación móvil localmente para previsualizar los cambios (opcional).
+
+6. Asegúrate de corregir los errores y comprobar el formato de tus cambios.
+
+7. Comprueba y confirma los archivos que estás actualizando:
+
+ ```bash
+ git status
+ ```
+
+ Esto debería mostrar una lista de archivos `unstaged` que has editado.
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes were not staged for commit:
+ (use "git add/rm ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in the working directory)
+
+ modified: README.md
+ modified: mobile-app/lib/main.dart
+ ...
+ ```
+
+8. Organizar los cambios y hacer un commit:
+
+ En este paso, sólo deberías marcar los archivos que has editado o añadido tu mismo. Puede realizar un reset y resolver archivos que no tenías intención de cambiar si es necesario.
+
+ ```bash
+ git add ruta/al/archivo/editado.ext
+ ```
+
+ O puedes añadir todos los archivos que no estén `organizados` al área de staging:
+
+ ```bash
+ git add .
+ ```
+
+ Sólo los archivos que fueron movidos al área de staging serán añadidos cuando hagas un commit.
+
+ ```bash
+ git status
+ ```
+
+ Salida:
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes to be committed:
+ (use "git reset HEAD ..." to unstage)
+
+ modified: README.md
+ modified: mobile-app/lib/main.dart
+ ```
+
+ Ahora, puedes hace commit de tus cambios con un mensaje corto, así:
+
+ ```bash
+ git commit -m "fix: mensaje corto"
+ ```
+
+ Algunos ejemplos:
+
+ ```md
+ fix: update guide article for Java - for loop
+ feat: add guide article for alexa skills
+ ```
+
+ Opcional:
+
+ Recomendamos encarecidamente hacer un mensaje de commit convencional. Esta es una buena práctica que verás en algunos de los repositorios de Código Abierto populares. Como desarrollador, esto te anima a seguir las prácticas estándar.
+
+ Algunos ejemplos de mensajes de commits convencionales son:
+
+ ```md
+ fix: update HTML guide article
+ fix: update build scripts for Travis-CI
+ feat: add article for JavaScript hoisting
+ docs: update contributing guidelines
+ ```
+
+ Manténlos cortos, no más de 50 caracteres. Siempre puedes añadir información adicional en la descripción del mensaje del commit.
+
+ Esto no toma más tiempo que un mensaje no convencional como 'actualizar archivo' o 'añadir index.md'
+
+ Puedes aprender más sobre por qué debes usar commits convencionales [aquí](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
+
+9. Si te das cuenta de que necesitas editar un archivo o actualizar el mensaje de confirmación después de hacer un commit puedes hacerlo después de editar los archivos con:
+
+ ```bash
+ git commit --amend
+ ```
+
+ Esto abrirá un editor de texto predeterminado como `nano` o `vi` donde puedes editar el título del mensaje de commit y añadir/editar la descripción.
+
+10. A continuación, puedes enviar tus cambios a tu fork:
+
+ ```bash
+ git push origin nombre/rama-aqui
+ ```
+
+## Running mobile curriculum tests
+
+:::note
+You only need to follow this section if you're modifying the challenge test runner in the mobile app. Otherwise, you can go to the next section on [how to open a pull request](#proposing-a-pull-request-pr).
+:::
+
+1. Clone a copy of the [freeCodeCamp repo](https://github.com/freeCodeCamp/freeCodeCamp) locally outside of your local copy of the freeCodeCamp mobile repo. Your folder structure should look like this:
+
+ ```bash
+ ├── freeCodeCamp
+ ├── mobile
+ ```
+
+2. Change the directory to the freeCodeCamp repo:
+
+ ```bash
+ cd freeCodeCamp
+ ```
+
+3. Make a copy of the `.env` file:
+
+ #### **macOS/Linux**
+
+ ```bash
+ cp sample.env .env
+ ```
+
+ #### **Windows**
+
+ ```bash
+ copy sample.env .env
+ ```
+
+4. Install the dependencies for the freeCodeCamp repo:
+
+ ```bash
+ pnpm install && pnpm run create:shared
+ ```
+
+5. Generate the challenge data JSON file:
+
+ ```bash
+ pnpm run build:curriculum
+ ```
+
+6. Copy the generated JSON file to the mobile app:
+
+ #### **macOS/Linux**
+
+ ```bash
+ cp ./shared/config/curriculum.json ../mobile/mobile-app/curriculum.json
+ ```
+
+ #### **Windows**
+
+ ```bash
+ copy .\shared\config\curriculum.json ..\mobile\mobile-app\curriculum.json
+ ```
+
+7. Change directory to the mobile app:
+
+ ```bash
+ cd ../mobile/mobile-app
+ ```
+
+8. Install the dependencies for the mobile app:
+
+ ```bash
+ flutter pub get
+ ```
+
+9. Update the test file to use the challenge data JSON file:
+
+ ```bash
+ sed -i '' 's/..\/..\/shared\/config\/curriculum.json/.\/curriculum.json/g' test/widget_test.dart
+ ```
+
+10. Generate the challenge files:
+
+ ```bash
+ flutter test test/widget_test.dart
+ ```
+
+11. Start a local server to serve the challenge files with the help of `serve` package:
+
+ ```bash
+ npx serve
+ ```
+
+12. In a different terminal go back to the freeCodeCamp repo:
+
+ ```bash
+ cd ../../freeCodeCamp
+ ```
+
+13. Run the cypress tests:
+
+ ```bash
+ pnpm cypress run --config retries=1,screenshotOnRunFailure=false,video=false,baseUrl=http://localhost:3000/generated-tests/,specPattern=cypress/e2e/mobile-learn/test-challenges.js -s cypress/e2e/mobile-learn/test-challenges.js -b chrome
+ ```
+
+## Proposing a Pull Request (PR)
+
+Después de que hayas hecho commit de tus cambios, consulta aquí [cómo abrir una Pull Request](how-to-open-a-pull-request).
+
+
+
+## Troubleshooting
+
+### Problemas con la instalación de los prerrequisitos recomendados
+
+Regularmente desarrollamos en los últimos o sistemas operativos más populares como macOS 10.15 o posterior, Ubuntu 18.04 o posterior y Windows 10 (con WSL2).
+
+Se recomienda buscar tu problema específico en recursos como Google, Stack Overflow y Stack Exchange. Existe la posibilidad de que alguien haya tenido el mismo problema y ya exista una respuesta a tu pregunta específica.
+
+Si estás en un sistema operativo diferente y/o todavía tienes problemas, consulta [obtener ayuda](#getting-help).
+
+### Problemas con la interfaz de usuario, fuentes, errores de compilación, etc.
+
+If you face issues with the UI, or build errors a cleanup can be useful:
+
+```bash
+flutter clean
+```
+
+### Issues Installing Dependencies
+
+If you get errors while installing the dependencies, please make sure that you are not in a restricted network or that your firewall settings do not prevent you from accessing resources.
+
+Be patient as the first-time setup can take a while depending on your network bandwidth.
+
+## Getting Help
+
+Si estás atascado y necesitas ayuda, siéntete libre de hacer preguntas en la categoría de ['Contribuyentes' en nuestro foro](https://forum.freecodecamp.org/c/contributors) o en [la sala de chat de contribuyentes](https://discord.gg/PRyKn3Vbay).
+
+Puede haber un error en la consola de tu navegador o en Bash / Terminal / Línea de comandos que te ayudará a identificar el problema. Proporciona este mensaje de error en la descripción de tu problema para que otros puedan identificar el problema más fácilmente y ayudarte a encontrar una solución.
diff --git a/src/content/docs/es/how-to-setup-wsl.md b/src/content/docs/es/how-to-setup-wsl.md
new file mode 100644
index 00000000..c872707d
--- /dev/null
+++ b/src/content/docs/es/how-to-setup-wsl.md
@@ -0,0 +1,233 @@
+---
+title: Configurar freeCodeCamp en el subsistema de Windows para Linux (WSL)
+---
+
+:::note
+Before you follow these instructions make sure your system meets the requirements.
+
+**WSL 2**: Windows 10 64-bit (Versión 2004, Build 19041 o superior) - disponible para todas las distribuciones incluyendo Windows 10 Home.
+
+**Docker Desktop para Windows**: Vea los requisitos correspondientes para [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/#system-requirements) y [Windows 10 Home](https://docs.docker.com/docker-for-windows/install-windows-home/#system-requirements)
+:::
+
+Esta guía cubre algunos pasos comunes con la configuración de WSL2. Una vez que algunos de los problemas habituales con WSL2 son solucionados, deberías de ser capaz de seguir [esta guía de configuración local](how-to-setup-freecodecamp-locally)para trabajar con freeCodeCamp en Windows corriendo una distribución WSL como Ubuntu.
+
+## Habilitar WSL
+
+Follow the instructions on the [official documentation](https://docs.microsoft.com/en-us/windows/wsl/install-win10) to install WSL2.
+
+## Instalar Ubuntu
+
+1. Recomendamos usar Ubuntu-18.04 o superior con WSL2.
+
+ > [!NOTE]
+ >
+ > While you may use other non-Debian-based distributions, they all come with their own 'gotchas' that are beyond the scope of this guide.
+
+ As of November 2023, Ubuntu and Debian are the only Linux distributions [officially supported by Playwright](https://playwright.dev/docs/intro#system-requirements), the end-to-end testing library used by freeCodeCamp.
+
+2. Actualizar las dependencias del sistema operativo
+
+ ```bash
+ sudo apt update
+ sudo apt upgrade -y
+
+ # cleanup
+ sudo apt autoremove -y
+ ```
+
+## Configurar Git
+
+Git viene pre-instalado con Ubuntu 18.04, verifica tu versión de Git con `git --version`.
+
+```output
+~
+❯ git --version
+git version 2.25.1
+```
+
+(Opcional, pero recomendado) Ahora puedes proceder a [configurar tus claves ssh](https://help.github.com/articles/generating-an-ssh-key) con GitHub.
+
+## Instalar un editor de código
+
+Recomendamos encarecidamente instalar [Visual Studio Code](https://code.visualstudio.com) en Windows 10. It has great support for WSL and automatically installs all the necessary extensions on your WSL distribution.
+
+Esencialmente, editaras y almacenaras tu código en Ubuntu-18.04 con el VS Code instalado en Windows.
+
+If you use [IntelliJ Idea](https://www.jetbrains.com/idea/), you may need to update your Node interpreter and npm package manager to what is installed on your WSL distro.
+
+You can check these settings by going to Settings > Languages & Frameworks > Node.js and npm.
+
+## Instalando Docker Desktop
+
+**Docker Desktop para Windows** te permite instalar y ejecutar bases de datos como MongoDB y otros servicios como NGNIX y más. Esto sirve para evitar trampas cuando se instala Mongo DB u otros servicios directamente desde Windows o WSL2.
+
+Follow the instructions on the [official documentation](https://docs.docker.com/docker-for-windows/install) and install Docker Desktop for your Windows distribution.
+
+Hay unos requrimientos mínimos de hardware para una mejor experiencia.
+
+## Configurar Docker Desktop para WSL
+
+Una vez instalado Docker Desktop, [sigue estas instrucciones](https://docs.docker.com/docker-for-windows/wsl) y configúralo para usar la instalación de Ubuntu-18.04 como un backend.
+
+Esto hace que los contenedores se ejecuten del lado de WSL en vez de Windows. Serás capaz de acceder a servicios de `http://localhost` tanto en Windows como en Ubuntu.
+
+## Instalar MongoDB desde Docker Hub
+
+Una vez que hayas configurado Docker Desktop para trabajar con WSL2, sigue estos pasos para iniciar un servicio MongoDB:
+
+1. Launch a new Ubuntu terminal
+
+2. Pull MongoDB from Docker Hub. Please refer to the [Prerequisites](how-to-setup-freecodecamp-locally#Prerequisites) table for the current version of MongoDB used by freeCodeCamp. For example, if the version number is `5.0.x`, replace `` with `5.0` in the following two code snippets.
+
+ ```bash
+ docker pull mongo:
+ ```
+
+3. Inicia el servicio MongoDB en el puerto `27017`, y configúralo para que se ejecute automáticamente al reiniciar el sistema
+
+ ```bash
+ docker run -it \
+ -v mongodata:/data/db \
+ -p 27017:27017 \
+ --name mongodb \
+ --restart unless-stopped \
+ -d mongo:
+ ```
+
+4. Ahora puedes acceder al servicio desde Windows o Ubuntu en `mongodb://localhost:27017`.
+
+## Installing Node.js and pnpm
+
+Recomendamos que instales la versión LTS de Node.js con un gestor de versiones de node - [nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
+
+Once installed use this command to install and use the latest Node.js LTS version:
+
+```bash
+nvm install --lts
+```
+
+For instructions on installing and using a different version of Node.js, please refer to the [nvm docs](https://github.com/nvm-sh/nvm#usage).
+
+Node.js comes bundled with `npm`, which you can use to install `pnpm`:
+
+```bash
+npm install -g pnpm
+```
+
+## Set up freeCodeCamp Locally
+
+Now that you have installed the pre-requisites, follow [our local setup guide](how-to-setup-freecodecamp-locally) to clone, install and set up freeCodeCamp locally on your machine.
+
+> [!WARNING]
+>
+> Please note, at this time the setup for Cypress tests (and related GUI needs) is a work in progress. Aún así deberías poder trabajar en la mayor parte del código base.
+
+## Optimize Windows and WSL
+
+> [!NOTE]
+>
+> The following tips were collected from across the web and have not gone through vigorous testing. Your mileage may vary.
+
+### Adjust processor scheduling for background services
+
+This may reduce incidents of Docker containers crashing due to lack of resources.
+
+Open the System Properties control panel by pressing Win + R and entering `sysdm.cpl`
+
+
+
+ Enter sysdm.cpl
in the Run dialog (screenshot)
+
+
+
+
+
+
+
+
+Go to Advanced -> Performance -> Settings…
+
+
+
+ Performance Settings button under Advanced tab in System Properties (screenshot)
+
+
+
+
+
+
+
+
+Under Advanced -> Processor scheduling, choose "Background services". Do not close the window. Continue to the next tip.
+
+
+
+ Background services radio button under Advanced tab in Performance Options (screenshot)
+
+
+
+
+
+
+
+### Increase the size of Windows paging file for the system drive
+
+Under Advanced -> Virtual memory, click "Change…"
+
+
+
+ Change virtual memory button under Advanced tab in Performance Options (screenshot)
+
+
+
+
+
+
+
+
+Choose "Custom size". Set the initial size to 1.5x and the maximum size to 3x of your physical memory. Then click "Set".
+
+
+
+ Set custom size button in Virtual Memory window (screenshot)
+
+
+
+
+
+
+
+### Increase the size of memory allocated to WSL
+
+Create a [`.wslconfig` file](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) in your [`%UserProfile%` directory](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#wslconfig) (typically `C:\Users\\.wslconfig`). Please read the [WSL documentation](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) carefully and replace `x` with values that suit your own needs:
+
+```ini
+# Settings apply across all Linux distros running on WSL 2
+[wsl2]
+
+# How much memory to assign to the WSL 2 VM. The default value might not be enough
+memory=xGB
+
+# How much swap space to add to the WSL 2 VM, default is 25% of available RAM
+swap=xGB
+```
+
+### Increase Node.js max old space size
+
+This fixes the ["JavaScript heap out of memory" error](https://stackoverflow.com/a/54456814) with ESLint. Add the following to your `~/.bashrc` or `~/.zshrc`:
+
+```sh
+export NODE_OPTIONS="--max-old-space-size=4096"
+```
+
+### Avoid `pnpm run test`
+
+Instead, use the script [appropriate to your PR](https://forum.freecodecamp.org/t/wsl-performance-issues-while-working-on-the-codebase/644215/2#:~:text=usually%2C%20you%20just%20want%20to%20test%20something%20specific%20to%20either%20the%20curriculum%20or%20the%20client%20or%20the%20api%20-%20almost%20never%20all%203.); either `pnpm run test:api`, `pnpm run test:curriculum`, or `pnpm run test-client`.
+
+## Useful Links
+
+- [A WSL2 Dev Setup with Ubuntu 20.04, Node.js, MongoDB, VS Code, and Docker](https://hn.mrugesh.dev/wsl2-dev-setup-with-ubuntu-nodejs-mongodb-and-docker) - an article by Mrugesh Mohapatra (Staff Developer at freeCodeCamp.org)
+- Preguntas frecuentes sobre:
+ - [Subsistema de Windows para Linux](https://docs.microsoft.com/en-us/windows/wsl/faq)
+ - [Docker Desktop para Windows](https://docs.docker.com/docker-for-windows/faqs)
diff --git a/src/content/docs/es/how-to-test-translations-locally.md b/src/content/docs/es/how-to-test-translations-locally.md
new file mode 100644
index 00000000..9d67360e
--- /dev/null
+++ b/src/content/docs/es/how-to-test-translations-locally.md
@@ -0,0 +1,225 @@
+---
+title: Cómo probar las traducciones localmente
+---
+
+:::note
+Este proceso no es requerido, pero esta documentado en caso de que quieras previsualizar como lucirán tus traducciones.
+:::
+
+En caso de que quieras probar tus traducciones en una instancia local del sitio `/learn` de freeCodeCamp, primero asegúrate de haber [configurado la base de código](how-to-setup-freecodecamp-locally).
+
+## Habilitando un lenguage
+
+Hay algunos pasos a seguir para permitirle a la base de código compilar en tu lenguaje deseado.
+
+Primero, visita el archivo `config/i18n/all-langs.ts` para agregar el idioma a la lista de lenguajes disponibles y configurar los valores. Hay cuatro objetos aquí.
+
+- `avaliableLangs`: Tanto para el arreglo `client` como para el arreglo `curriculum`, añade el nombre en texto del lenguaje. Este es el valor que se utilizará en el archivo `.env` más tarde.
+- `auditedCerts`: Agrega el nombre del texto como la _clave_, y añade un arreglo de variables de `SuperBlocks.{cert}` como el _value_. Esto le dice al cliente qué certificaciones están totalmente traducidas.
+- `i18nextCodes`: Estos son los codigos de idioma ISO para cada lenguaje. Necesitarás añadir el código ISO apropiado para el idioma que estás activando. Estos deben ser únicos para cada lenguaje.
+- `LangNames`: These are the display names for the language selector in the navigation menu.
+- `LangCodes`: These are the language codes used for formatting dates and numbers. Estos deben ser códigos CLDR Unicode en lugar de códigos ISO.
+
+Por ejemplo, si quisieras habilitar Dothraki como un lenguaje, tus objetos `all-langs.js` deberían verse así:
+
+```js
+export const availableLangs = {
+ client: ['english', 'espanol', 'chinese', 'chinese-traditional', 'dothraki'],
+ curriculum: [
+ 'english',
+ 'espanol',
+ 'chinese',
+ 'chinese-traditional',
+ 'dothraki'
+ ]
+};
+
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
+export const i18nextCodes = {
+ english: 'en',
+ espanol: 'es',
+ chinese: 'zh',
+ 'chinese-traditional': 'zh-Hant',
+ dothraki: 'mis'
+};
+
+export enum LangNames = {
+ english: 'English',
+ espanol: 'Español',
+ chinese: '中文(简体字)',
+ 'chinese-traditional': '中文(繁體字)',
+ dothraki: 'Dothraki'
+};
+
+export enum LangCodes = {
+ english: 'en-US',
+ espanol: 'es-419',
+ chinese: 'zh',
+ 'chinese-traditional': 'zh-Hant',
+ dothraki: 'mis'
+};
+```
+
+A continuación, abre el archivo `client/src/utils/algolia-locale-setup.ts` file. Estos datos son utilizados por la barra de búsqueda que carga artículos de `/news` (noticias). Si bien es poco probable que pruebe esta funcionalidad, la falta de datos para su idioma puede provocar errores al intentar crear la base de código localmente.
+
+Agregue un objeto para su idioma al objeto `algoliaIndices`. You should use the the same values as the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+
+:::note
+Si ya hemos desplegado una instancia de noticias en tu idioma de destino, puedes actualizar los valores para reflejar la instancia real. De lo contrario, utiliza los valores en inglés.
+:::
+
+Si tuvieras que agregar Dothraki:
+
+```js
+const algoliaIndices = {
+ english: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ },
+ espanol: {
+ name: 'news-es',
+ searchPage: 'https://www.freecodecamp.org/espanol/news/search/'
+ },
+ chinese: {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search/'
+ },
+ 'chinese-traditional': {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search'
+ };
+```
+
+Finalmente, en tu archivo `.env`, configura `CLIENT_LOCALE` y `CURRICULUM_LOCALE` a tu nuevo lenguaje (usa el valor `availableLangs`)
+
+```txt
+CLIENT_LOCALE=dothraki
+CURRICULUM_LOCALE=dothraki
+```
+
+### Releasing a Superblock
+
+After a superblock has been fully translated into a language, there are two steps to release it. First add the superblock enum to that language's `auditedCerts` array. So, if you want to release the new Responsive Web Design superblock for Dothraki, the array should look like this:
+
+```ts
+export const auditedCerts = {
+ // other languages
+ dothraki: [
+ SuperBlocks.RespWebDesignNew, // the newly translated superblock
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+```
+
+Finally, the `languagesWithAuditedBetaReleases` array should be updated to include the new language like this:
+
+```ts
+export const languagesWithAuditedBetaReleases: ['english', 'dothraki'];
+```
+
+This will move the new superblock to the correct place in the curriculum map on `/learn`.
+
+## Habilitar Videos Localizados
+
+For the video challenges, you need to change a few things. First add the new locale to the GraphQL query in the `client/src/templates/Challenges/video/Show.tsx` file. For example, adding Dothraki to the query:
+
+```tsx
+ query VideoChallenge($slug: String!) {
+ challengeNode(fields: { slug: { eq: $slug } }) {
+ videoId
+ videoLocaleIds {
+ espanol
+ italian
+ portuguese
+ dothraki
+ }
+ ...
+```
+
+Then add an id for the new language to any video challenge in an audited block. For example, if `auditedCerts` in `all-langs.ts` includes `scientific-computing-with-python` for `dothraki`, then you must add a `dothraki` entry in `videoLocaleIds`. The frontmatter should then look like this:
+
+```yml
+videoLocaleIds:
+ espanol: 3muQV-Im3Z0
+ italian: hiRTRAqNlpE
+ portuguese: AelGAcoMXbI
+ dothraki: new-id-here
+dashedName: introduction-why-program
+---
+```
+
+Update the `VideoLocaleIds` interface in `client/src/redux/prop-types` to include the new language.
+
+```ts
+export interface VideoLocaleIds {
+ espanol?: string;
+ italian?: string;
+ portuguese?: string;
+ dothraki?: string;
+}
+```
+
+And finally update the challenge schema in `curriculum/schema/challengeSchema.js`.
+
+```js
+videoLocaleIds: Joi.when('challengeType', {
+ is: challengeTypes.video,
+ then: Joi.object().keys({
+ espanol: Joi.string(),
+ italian: Joi.string(),
+ portuguese: Joi.string(),
+ dothraki: Joi.string()
+ })
+}),
+```
+
+## Cargando traducciones
+
+Because the language has not been approved for production, our scripts are not automatically downloading the translations yet. Only staff have the access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://discord.gg/PRyKn3Vbay), or you can translate the English markdown files locally for testing purposes.
+
+Once you have the files, you will need to place them in the correct directory. For the curriculum challenges, you should place the certification folders (i.e. `01-responsive-web-design`) within the `curriculum/challenges/{lang}` directory. For our Dothraki translations, this would be `curriculum/challenges/dothraki`. The client translation `.json` files will go in the `client/i18n/locales/{lang}` directory.
+
+Once these are in place, you should be able to run `npm run develop` to view your translated version of freeCodeCamp.
+
+:::danger
+Si bien puedes realizar traducciones localmente con motivos de prueba, le recordamos a todos que las traducciones _no_ deben ser enviadas a través de GitHub, estas deben ser enviadas únicamente a traves de Crowdin. Asegúrate de reestablecer tu base de código local despues de que hayas finalizado con las pruebas.
+:::
diff --git a/src/content/docs/es/how-to-translate-files.md b/src/content/docs/es/how-to-translate-files.md
new file mode 100644
index 00000000..d327dc61
--- /dev/null
+++ b/src/content/docs/es/how-to-translate-files.md
@@ -0,0 +1,351 @@
+---
+title: Cómo traducir recursos de freeCodeCamp
+---
+
+## Prepare yourself for Contributions
+
+> Guía de orientación de freeCodeCamp - Sin límites de velocidad
+
+> [!TIP] Puedes comenzar leyendo [este anuncio](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/). Recomendamos unirte a [nuestro foro de la comunidad](https://forum.freecodecamp.org/c/contributors/3) y al [servidor de Discord](https://discord.gg/PRyKn3Vbay).
+
+Puedes traducir tanto como quieras, y cuando quieras. Es solo cuestión de cuánto tiempo y energía estás dispuesto a invertir como traductor voluntario.
+
+solo queremos que entiendas lo siguiente:
+
+1. **Las traducciones son un esfuerzo de equipo.**
+
+ Traducir los recursos de freeCodeCamp es una de las experiencias más divertidas y gratificantes como colaborador, y funciona mejor si involucras a tus amigos y colegas que hablan el mismo idioma que tú.
+
+ Puedes comenzar leyendo [este anuncio](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/). Recomendamos te unas al [foro de la comunidad](https://forum.freecodecamp.org/c/contributors/3) y al [servidor de Discord](https://discord.gg/PRyKn3Vbay) con tus amigos, y muestres tu interés antes de comenzar a traducir. Crowdin y otras herramientas facilitan contribuir con traducciones, sin embargo, sigue siendo bastante de trabajo.
+
+ Queremos que disfrutes contribuyendo y no te canses o pierdas interés.
+
+ Un grupo pequeño de 4 a 5 personas es un buen tamaño para comenzar tu específico idioma. Y después puedes reclutar aún más amigos para unirse al equipo.
+
+2. **Cuesta bastante girar servidores para cada idioma.**
+
+ En la superficie puede no parecer lo complicado que es la pila técnica, pero cuesta bastante mantener los motores en funcionamiento. Esto incluye el aprovisionamiento de servidores adicionales y la dedicación de personal para cuidarlos.
+
+ freeCodeCamp.org está comprometido a ofrecerlos gratis como siempre. Sin embargo, debemos priorizar los recursos para aquellos que más lo necesitan. Lo último que queremos es cerrar los servidores de un idioma si la actividad de traducción se apaga y las cosas se vuelven obsoletas.
+
+ Al traducir el currículo, una vez que un idioma alcance al menos unas cuantas certificaciones, podremos comenzar a implementar el idioma en [`/learn`](https://www.freecodecamp.org/learn), mientras continúas traduciendo las certificaciones restantes.
+
+ Por ejemplo, nos gustaría implementar al menos toda la suite de certificaciones de front-end cuando enviamos un nuevo idioma por primera vez.
+
+3. **Pero, ¿qué pasa con los idiomas que no figuran en la plataforma de traducción?**
+
+ Hemos revisado nuestra base de usuarios y hemos añadido más de 30 idiomas más hablados a la lista de idiomas habilitados en la plataforma de traducciones. Algunos idiomas como el chino y español ya están implementados en vivo en **"/learn"** en este momento.
+
+ Desafortunadamente, la lista no incluye cientos de idiomas. Recibimos docenas de solicitudes de colaboradores como tú todos los días que quieren ayudar a traducir el sitio a un idioma que hablan.
+
+ Definitivamente estamos deseando agregar más idiomas a la lista, pero como ya puedes adivinar, solo sería factible si obtenemos suficiente impulso alrededor de un idioma.
+
+ Si deseas que incluyamos un nuevo idioma, te recomendamos que entusiasmes a tus amigos con esto.
+
+ Una vez que tengas un pequeño grupo de personas (al menos 4-5) interesadas y comprometidas, podemos llamar. Te explicaremos todos los detalles y te guiaremos a través de algunas de las herramientas y procesos.
+
+## Vista previa de Crowdin
+
+Nuestro sueño es brindate los recursos para aprender, sin importar el idioma que hables. To help us with this massive effort, we have integrated our open-source codebase & curriculum with [Crowdin](https://crowdin.com/) - A tool to help us localize our code-base.
+
+:::note
+Utilizamos una herramienta y un flujo de trabajo diferentes para traducir [artículos de noticias](https://www.freecodecamp.org/news). Si te interesa traducir artículos, lee [este anuncio](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/) y contacta al traductor lider de tu idioma.
+:::
+
+El flujo de trabajo de traducción se divide en dos actividades principales:
+
+- **Traduciendo** archivos de currículo, documentación y elementos de interfaz de usuario como botones, etiquetas, etc.:
+
+ Como traductor puedes registrarte en [nuestra plataforma de traducción](https://translate.freecodecamp.org) y contribuir con las traducciones en cualquiera de los más de 30 idiomas habilitados allí.
+
+- **Revisando** las traducciones de todo lo anterior.
+
+ Los revisores verifican que las traducciones aportadas por la comunidad sean uniformes en el tono y libres de problemas comunes como errores tipográficos, etc. En resumen, aseguran que la calidad de las traducciones sea alta. Ten en cuenta que no utilizamos traducciones automáticas por una razón.
+
+> [!WARNING] Ya no estamos usando GitHub para traducir archivos directamente. Si fuiste colaborador y estás regresando, entonces dirígete a nuestra [plataforma de traducción](https://translate.freecodecamp.org/).
+
+## Getting Started
+
+Primero, asegúrate de decir "Hola" en nuestro [Discord](https://discord.gg/PRyKn3Vbay). Publicamos actualizaciones regulares sobre los recursos de traducción y respondemos a muchas de tus consultas allí.
+
+A continuación, dirígete a nuestro [plataforma de traducción](https://translate.freecodecamp.org/) e inicia sesión (si no has contribuido a traducciones anteriormente, deberás crear una cuenta).
+
+Por último, ve a través del recorrido detallado a continuación para comprender las herramientas de traducción y los flujos de trabajo a tu disposición.
+
+Feliz traducción.
+
+## Selecciona un Proyecto y un Archivo
+
+Una vez que visites la plataforma de traducción, verás varios "proyectos" disponibles para traducción:
+
+1. [Documentación del proyecto de contribución ](https://translate.freecodecamp.org/contributing-docs), el cual contiene los archivos para este sitio de documentación.
+2. [Proyecto de currículo de programación](https://translate.freecodecamp.org/curriculum), el cual contiene nuestros archivos de desafío para nuestro plan de estudios.
+3. [Aprende Interfaz de usuario](https://translate.freecodecamp.org/learn-ui) proyecto que contiene cadenas para elementos de interfaz de usuario como botones, etiquetas, etc. para nuestra plataforma de aprendizaje.
+
+Selecciona cualquier proyecto al que desees contribuir y verás una lista de los idiomas disponibles para la traducción.
+
+
+
+Selecciona el idioma en el que deseas trabajar y verás el árbol de archivos completo.
+
+
+
+Cada archivo y carpeta mostrará una barra de progreso. La parte **azul** de la barra de progreso indica qué porcentaje del archivo se ha traducido, mientras que la parte **verde** de la barra de progreso indica qué porcentaje del archivo ha sido aprobado por el equipo de revisión.
+
+Selecciona un archivo para trabajar y Crowdin abrirá la vista de edición.
+
+:::note
+Cuando se abra la vista de edición, deberás hacer clic en el icono de configuración (que se muestra como un engranaje) y cambiar la configuración ''HTML tags displaying (Mostrar etiquetas HTML)" por "SHOW (Mostrar)". Esto asegurará que puedas ver las etiquetas como `
` en lugar de `<0>0>`.
+:::
+
+## Traducir el Currículo
+
+
+
+Crowdin separa un documento en "cadenas" traducibles, normalmente oraciones. Cada cadena se traduce individualmente. Tomando como referencia la imagen anterior:
+
+1. Una cadena resaltada en verde ya tiene una traducción propuesta.
+2. Una cadena resaltada en rojo _no_ tiene una traducción propuesta.
+3. Una cadena con texto en gris no es traducible. Este es el caso de los bloques de código y otros contenidos que no deben traducirse. No podrás seleccionar estas cadenas en el editor.
+4. Si un contribuyente ha propuesto una traducción a una cadena, Crowdin mostrará esas propuestas aquí. No podrás guardar una traducción idéntica, en su lugar, si una traducción es precisa, debes hacer clic en el ícono `+` para votar a su favor. Puedes votar en contra de una traducción inexacta con el icono `-`.
+5. Crowdin recomendará traducciones basadas en Memoria de Traducción (TM) o Traducción Automática (MT). La memoria de traducción se refiere a cadenas similares o idénticas que hemos traducido / aprobado en otros archivos. La Machine Translation (traducción automática) remite hacia las traducciones recomendadas por su biblioteca integrada.
+6. Este es el panel del editor, donde puedes escribir tu propuesta de traducción para la cadena seleccionada.
+7. La cadena seleccionada actualmente en el editor se resaltará en amarillo.
+8. Aquí verás etiquetas que indican el estado de la cadena. `Done` (hecho) significa que la cadena tiene al menos una traducción propuesta. `Todo` (por hacer) significa que la cadena no tiene ninguna traducción propuesta.
+9. Aquí puedes ver la ventana de comentarios. Si tienes preguntas o inquietudes sobre una cadena en particular, puedes dejar aquí un comentario sobre la cadena para que lo vean otros traductores.
+10. Estos dos botones de "panel" ocultarán las vistas izquierda (documento) y derecha (comentarios).
+
+:::note
+Si observas una cadena oculta que incluye traducciones, por favor notifícanos en el [Discord](https://discord.gg/PRyKn3Vbay) para que podemos eliminar esa traducción de la memoria.
+:::
+
+Cuando hayas completado la traducción de una cadena, pulsa el botón `Save` (guardar) para almacenar tu traducción en Crowdin. Luego, otros contribuyentes podrán votar tu traducción y el equipo de revisores podrán aprobarla.
+
+Eres bienvenido a traducir tantas cadenas como desees, no se requieren pasos adicionales cuando completas todo un archivo o propones una nueva traducción. Hacer clic en el botón `Save` es todo lo que se necesita para almacenar una traducción.
+
+:::note
+Si ves algo en el archivo fuente en inglés que sea inexacto o incorrecto, por favor no lo corrijas a través del flujo de traducción. En su lugar, deja un comentario en la cadena para notificarnos que hay una discrepancia, o crea un issue en GitHub.
+:::
+
+## Traducir la Interfaz de Aprendizaje
+
+Nuestra interfaz `/learn` se basa en archivos JSON cargados en un plugin i18n para generar texto traducido. Este esfuerzo de traducción está dividido entre Crowdin y GitHub.
+
+### En GitHub
+
+Los archivos `links.json`, `meta-tags.json`, `motivación.json` y `trending.json` contienen información que necesita ser actualizada para reflejar tu idioma. Sin embargo, no podemos cargarlos en Crowdin, ya que el contenido no es algo que sea una traducción uno-a-uno.
+
+Estos archivos probablemente serán mantenidos por el líder de tu idioma, pero serás bienvenido a [leer sobre cómo traducirlos](language-lead-handbook).
+
+### En Crowdin
+
+:::danger
+No edites los siguientes archivos a través de un PR de GitHub.
+:::
+
+Los archivos `intro.json` y `translations.json` están traducidos en Crowdin, en el proyecto Learn User Interface. Traducir estos puede ser un poco complicado, ya que cada valor JSON individual aparece como su propia cadena y a veces falta contexto.
+
+Sin embargo, la información de `Contexto` proporcionada en Crowdin puede ayudar a entender dónde se ajusta la cadena a la estructura más grande.
+
+
+
+Si tienes alguna pregunta sobre donde encaja una cadena en el texto, contacta con nosotros en nuestro [chat de colaborador](https://discord.gg/PRyKn3Vbay).
+
+## Traducir la Documentación
+
+Traducir nuestra documentación de contribución es un flujo similar a la traducción de nuestros archivos de currículum.
+
+:::note
+Nuestra documentación de contribución esta basada en `docsify`, y tenemos una forma especial de procesar los cuadros de mensaje como este. Si ves cadenas que comiencen con `[!NOTE]`, `[!WARNING]` o ` [!TIP]`, estas palabras NO deben traducirse.
+:::
+
+### How to Translate Documentation with Internal Links
+
+Cuando trabajes en la traducción de la documentación, ten en cuenta los enlaces internos que apuntan a una sección diferente de la documentación.
+
+Asegúrate de reemplazar el id de la sección de destino (la parte después de `#`) con el id en el documento traducido. Por ejemplo, se verá así en japonés:
+
+Antes de traducir
+
+```
+// in HTML
+Link text
+Link text
+
+// in Markdown
+[Link text](target-file-name#target-section-heading-id)
+[Link text](#target-section-heading-id)
+```
+
+Después de traducir
+
+```
+// in HTML
+翻訳後のリンクテキスト
+翻訳後のリンクテキスト
+
+// in Markdown
+[翻訳後のリンクテキスト]($1#$2)
+[翻訳後のリンクテキスト](#翻訳後の-id)
+```
+
+Los archivos reales de la documentación están escritos en Markdown, pero aparecerán como etiquetas HTML en Crowdin.
+
+Puedes averiguar cómo `docsify` convierte una cadena en tu idioma en un id mirando las páginas traducidas. Si la traducción no está desplegada todavía, puedes previsualizarla [ejecutar el sitio de la documentación localmente]($1#$2).
+
+Puedes obtener más información sobre [enlaces internos en nuestra documentación aquí](how-to-work-on-the-docs-theme#como-crear-un-enlace-interno).
+
+## Traducir el LearnToCode RPG
+
+El LearnToCode RPG se ejecuta en Ren'Py, el cual utiliza una sintaxis especial para las cadenas traducidas: (Ver [ documentación de texto Ren'Py](https://www.renpy.org/doc/html/text.html))
+
+- Las oraciones a traducir están siempre entre `""`. Estos son diálogos o cadenas de interfaz de usuario. Las palabras clave que vienen antes o después del diálogo son palabras clave de control del motor del juego y se explicarán en detalle en las reglas posteriores. Tenga en cuenta que esta primera regla rige todas las reglas posteriores enumeradas.
+- En el caso de `new "..."` No traduzcas la palabra clave `new`.
+- Prefijos como `player`, `annika`, `layla`, `marco` (o variantes como `player happy`, `player @ happy`) no deben traducirse. Estas son palabras clave de control para mostrar correctamente el sprite del personaje en el juego.
+- Postfixes como `nointeract` no deben ser traducidos.
+- No traduzca cosas entre `[]` y `{}`. Estas son interpolaciones variables y etiquetas de texto. Estos deben permanecer entre paréntesis de media anchura `[]` y `{}` en lugar de sus homólogos de ancho completo `【】` y `「」`
+- No traduzca la palabra clave `nointeract` al final de la oración.
+- Si intentamos usar paréntesis de ancho completo `()`, se mostrará una advertencia de QA. Para evitar la advertencia de QA, utilice paréntesis de ancho medio `()`
+
+### Ejemplos
+
+---
+
+#### Antes de traducir
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- esta es la línea que necesita traducirse. ver traducción a continuación
+```
+
+#### Después de traducir
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
+```
+
+Nota: Las etiquetas `[]` y `{}` deben dejarse intactas.
+
+---
+
+#### Antes de traducir
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} Skip" <-- traducir esta línea, ver abajo
+```
+
+#### Después de traducir
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} 跳过"
+```
+
+Nota: De nuevo, el prefijo `new` y la etiqueta `{icon=icon-fast-forward}` deben dejarse intactos.
+
+---
+
+#### Antes de traducir
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+```
+
+#### Después de traducir
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
+```
+
+Nota: `layla @ neutral` y `[player_name]` se quedan sin cambios.
+
+---
+
+#### Antes de traducir
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "Maybe this is all a dream?" nointeract
+```
+
+#### Después de traducir
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "也许这都是一场梦?" nointeract
+```
+
+---
+
+### Una observación sobre cómo Crowdin segmenta una oración
+
+Presta atención a cómo Crowdin segmenta una línea de diálogo envuelta entre comillas de apertura y cierre `""`. Cuando traducimos el diálogo, tenemos que asegurarnos de mantener las comillas de apertura y cierre, incluso si las comillas aparecen en diferentes segmentos.
+
+Esta es la línea a traducir:
+
+```renpy
+player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
+```
+
+Crowdin lo segmenta en tres partes como a continuación:
+
+
+
+```renpy
+# original
+player @ surprised "{b}Full-stack{/b}
+# traducido, manteniendo las comiilas de apertura `"`
+player @ surprised "{b}全栈{/b}
+```
+
+
+
+```renpy
+# original
+What is that?
+# traducido, sin comillas en ninguno de los lados.
+这是什么?
+```
+
+
+
+```renpy
+# original
+I better take notes so I can learn more about it."
+# traducido, manteniendo las comillas de cierre `"`
+我最好做笔记,这样我可以学习更多东西。"
+```
+
+## Calificar traducciones
+
+Crowdin te permite calificar las traducciones propuestas existentes. Si intentas guardar una traducción, es posible que veas un mensaje que indica que no puedes guardar una traducción duplicada, esto significa que otro contribuyente ha propuesto una traducción idéntica. Si estás de acuerdo con esa traducción, haz clic en el botón `+` para votar a favor de la traducción.
+
+Si ves una traducción que es inexacta o no proporciona la misma claridad que la cadena original, haz clic en el botón `-` para votar en contra de la traducción.
+
+Crowdin usa estos votos para dar una puntuación a cada traducción propuesta para una cadena, lo que ayuda al equipo de revisión a determinar qué traducción es la mejor para cada cadena.
+
+## Comprobaciones de aseguración de la calidad
+
+Hemos habilitado algunos pasos de control de la calidad que verificarán que una traducción sea lo más precisa posible, esto ayuda a nuestro equipo de revisión a comprobar las traducciones propuestas.
+
+Cuando intentes guardar una traducción, puede que aparezca un mensaje de advertencia con una notificación con respecto a tu traducción propuesta.
+
+
+
+Este mensaje aparece cuando el sistema de QA de Crowdin ha identificado un posible error en la traducción propuesta. En este ejemplo, hemos modificado el texto de una etiqueta `` y Crowdin lo ha capturado.
+
+> [!WARNING] Tienes la opción de guardar una traducción a pesar de los errores. Si lo haces, al hacer clic en "Save Anyway (Guardar de todos modos)", también debes etiquetar a un miembro del equipo de revisión o encargado del proyecto y explicar por qué el mensaje de QA debe ignorarse en este caso.
+
+## Mejores prácticas de traducción
+
+Sigue estas pautas para asegurarte de que nuestras traducciones sean lo más precisas posible:
+
+- No traduzca el contenido con etiquetas de ``. Estas etiquetas indican texto que se encuentra en código y que debe dejarse en inglés.
+- No agregues contenido adicional. Si sientes que un desafío requiere cambios en el contenido de texto o información adicional, debería proponer los cambios a través de un problema de GitHub o una pull request que modifique el archivo en inglés.
+- No cambiar el orden del contenido.
+
+Si tienes alguna duda, siéntete libre de pedir ayuda en nuestro [Discord](https://discord. gg/PRyKn3Vbay) y con gusto te ayudaremos.
diff --git a/src/content/docs/es/how-to-use-docker-on-windows-home.md b/src/content/docs/es/how-to-use-docker-on-windows-home.md
new file mode 100644
index 00000000..21581ba9
--- /dev/null
+++ b/src/content/docs/es/how-to-use-docker-on-windows-home.md
@@ -0,0 +1,17 @@
+---
+title: Cómo utilizar Docker en Windows Home
+---
+
+Hay unas cuantas dificultades que debes evitar al configurar Docker en Windows Home. En primer lugar, tienes que utilizar [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) como administrador. Desafortunadamente, Windows Home no soporta Docker para Windows Desktop, por lo que se debe utilizar Toolbox en su lugar. Tiene que ejecutarse como Administrador, ya que la instalación utiliza enlaces simbólicos, los cuales no se pueden crear de otra manera.
+
+Una vez instalado Toolbox, ejecute Docker Quickstart Terminal como Administrador. Esto creará una máquina virtual `default` (predeterminada) si no existía anteriormente. Una vez que esto haya ocurrido, cierra la terminal y abre VirtualBox (otra vez como Administrador). Debes ser capaz de ver la máquina `default`. El sitio es bastante intensivo en recursos, así que detén la máquina virtual y aumenta la configuración tanto como puedas, especialmente la memoria. It has been confirmed to work with 4GB of RAM.
+
+Una vez que estés contento de que Docker está funcionando, clona el repositorio freeCodeCamp en un directorio dentro de `C:\Users`. Estos directorios son compartidos dándole acceso a Docker a los directorios locales que necesita durante la instalación.
+
+Si ves mensajes como
+
+```shell
+bash: change_volumes_owner.sh: No such file or directory
+```
+
+when you `pnpm run docker:init` this is likely the culprit.
diff --git a/src/content/docs/es/how-to-work-on-coding-challenges.md b/src/content/docs/es/how-to-work-on-coding-challenges.md
new file mode 100644
index 00000000..47858f80
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-coding-challenges.md
@@ -0,0 +1,739 @@
+---
+title: Cómo trabajar en los desafíos de codificación
+---
+
+Nuestro objetivo es desarrollar una experiencia de aprendizaje interactiva y divertida.
+
+Diseñar desafíos de codificación interactivos es difícil. Sería mucho más fácil escribir una explicación larga o crear un tutorial en vídeo. Pero para nuestro plan de estudios, estamos aferrándonos a lo que mejor funciona para la mayoría de la gente - una experiencia totalmente interactiva y de videojuegos.
+
+Queremos que los campistas entren en un estado de flujo. Queremos que generen impulso y exploten a través de nuestro plan de estudios con el menor número de trabas posible. We want them to go into the projects with confidence and gain wide exposure to programming concepts.
+
+Ten en cuenta que para la versión 7.0 del plan de estudios gratuito, estamos avanzando hacia [un modelo totalmente orientado al proyecto con mucha más repetición](https://www.freecodecamp.org/news/python-curriculum-is-live/).
+
+La creación de estos desafíos requiere una inmensa creatividad y atención al detalle. Hay mucha ayuda disponible. Tendrás el apoyo de todo un equipo de colaboradores a los que podrás comentar tus ideas y demostrar tus desafíos.
+
+Y como siempre, sientase libre de hacer preguntas en la [categoría de 'Contribuidores' de nuestro foro](https://forum.freecodecamp.org/c/contributors) o [en la sala de chat de contribuidores](https://discord.gg/PRyKn3Vbay).
+
+Con tu ayuda, podemos diseñar un currículo de código interactivo que ayudará a millones de personas a aprender a programar en los próximos años.
+
+El contenido para cada desafío está guardado en su archivo de lenguaje de marcado. Este archivo de lenguaje de marcado se convierte más tarde en HTML utilizando nuestras herramientas para crear páginas web interactivas.
+
+Podrás encontrar todo el contenido curricular de freeCodeCamp.org en el directorio [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges).
+
+## Configurar las herramientas para el plan de estudios
+
+Antes de trabajar en el plan de estudios, necesitarás configurar algunas herramientas para ayudarte a probar tus cambios. Puedes utilizar cualquier opción de las siguientes:
+
+- Puedes [configurar freeCodeCamp localmente](how-to-setup-freecodecamp-locally) en tu máquina. Esto es **altamente recomendable** para contribuciones regulares/repetidas. Esta configuración te permite trabajar y probar tus cambios.
+- Utilice Gitpod, un entorno de desarrollo gratuito en línea. Al hacer clic en el botón de abajo se iniciará un entorno de desarrollo listo para freeCodeCamp en su navegador. Sólo toma unos minutos.
+
+ [](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
+
+### Cómo trabajar en proyectos de práctica
+
+Los proyectos de práctica tienen algunas herramientas adicionales para ayudar a crear nuevos proyectos y pasos. Para leer más, consulta [ estos documentos ](how-to-work-on-practice-projects)
+
+## Plantilla de desafío
+
+`````md
+Esto no ha sido finalizado completamente, pero lo siguiente debería estar cerca de la estructura final:
+
+````mdx
+---
+id: Identificador único (alfanumérico, MongoDB_id)
+title: 'Título del Desafío'
+challengeType: Integer, definido en `client/utils/challenge-types.js`
+videoUrl: 'url del video de explicación'
+forumTopicId: 12345
+---
+
+# --descripción--
+
+Texto de descripción, en lenguaje de marcado
+
+```html
+código de ejemplo
+```
+````
+`````
+
+# --instructions--
+
+Texto de instrucción de desafío, en lenguaje de marcado
+
+# --hints--
+
+Pruebas para ejecutar en el código del usuario, en pares de lenguaje de marcado y bloques de código de prueba.
+
+```js
+Código para prueba uno
+```
+
+Si tú buscas una salida basada en el código de usuario, --fcc-expected-- y --fcc-actual-- serán reemplazados con los valores de esperado y actual de la afirmación de la prueba. Ten cuidado si tienes múltiples afirmaciones desde la primera afirmación fallida determinará los valores de --fcc-expected-- y --fcc-actual--.
+
+```js
+assert.equal(
+ 'esto reemplazará --fcc-actual--',
+ 'esto reemplazará --fcc-expected--'
+);
+```
+
+# --notas--
+
+Información adicional para un desafío, en markdown
+
+# --semilla-
+
+## --before-user-code--
+
+```lang
+Código evaluado antes del código del usuario.
+```
+
+## --after-user-code--
+
+```lang
+Código evaluado después del código del usuario, y justo antes de las pruebas
+```
+
+## --seed-contents--
+
+Código repetitivo para renderizar en el editor. Esta sección deberá solo contener código dentro de comillas invertidas, como prosigue:
+
+```html
+
+ Hola Mundo!
+
+```
+
+```css
+body {
+ margin: 0;
+ background-color: #3a3240;
+}
+
+.main-text {
+ color: #aea8d3;
+}
+```
+
+```js
+console.log('freeCodeCamp is awesome!');
+```
+
+# --soluciones--
+
+Las soluciones se utilizan para las pruebas de CI para garantizar que los cambios en las sugerencias seguirán siendo válidos según lo previsto
+
+```js
+// primera solución - la(s) lengua(s) deben coincidir con la semilla.
+```
+
+---
+
+```js
+// segunda solución - así que si la semilla está escrita en HTML...
+```
+
+---
+
+```js
+// tercera solución, etc. - Sus soluciones deben estar en HTML.
+```
+
+# --assignments--
+
+This will show a checkbox that campers have to check before completing a challenge
+
+---
+
+This will show another checkbox that campers have to check before completing a challenge
+
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+### --feedback--
+
+This will be shown as feedback when campers guess this answer
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
+# --fillInTheBlank--
+
+These are for the English curriculum challenges.
+
+## --sentence--
+
+Sentence to be shown with with blanks that campers have to fill in. Example:
+
+`Hello, You _ the new graphic designer, _?`
+
+The two underscores will show up as blanks. The sentence must be surrounded in backticks.
+
+## --blanks--
+
+The solution for the first blank in the sentence above. Example:
+
+`are`
+
+### --feedback--
+
+Feedback shown when campers input the wrong solution for this blank.
+
+---
+
+Solution for the second blank. Example:
+
+`right`
+
+If no feedback is here, a generic "wrong answer" message will be shown.
+
+# --scene--
+
+```json
+// # --scene-- can only consist of a single json object
+{
+ // Setup the scene. Properties not marked optional are required.
+ "setup": {
+ // Background file to start the scene. A list of scene asset filenames can be found here: https://github.com/freeCodeCamp/cdn/pull/233/files
+ "background": "company2-center.png",
+ // Array of all characters that will appear in the scene
+ "characters": [
+ {
+ // Name of character. See list of available characters in scene-assets.tsx
+ "character": "Maria",
+ // Where to start the character. Maria will start off screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 }
+ },
+ {
+ "character": "Tom",
+ // Tom will start 70% from the left of the screen and 1.5 times regular size
+ "position": { "x": 70, "y": 0, "z": 1.5 },
+ // Optional, defaults to 1. Tom will start invisible
+ "opacity": 0
+ }
+ ],
+ "audio": {
+ // Audio filename
+ "filename": "1.1-1.mp3",
+ // Seconds after the scene starts before the audio starts playing
+ "startTime": 1.3,
+ // Optional. Timestamp of the audio file where it starts playing from.
+ "startTimestamp": 0,
+ // Optional. Timestamp of the audio file where is stops playing. If these two aren't used, the whole audio file will play.
+ "finishTimestamp": 8.4
+ },
+ // Optional, defaults to false. Use this for the long dialogues. It stops the accessibility icon from showing which gives campers the option to show or hide the dialogue text
+ "alwaysShowDialogue": true
+ },
+ // Array of commands that make up the scene
+ "commands": [
+ {
+ // Character that will have an action for this command
+ "character": "Maria",
+ // Optional, defaults to previous value. Maria will move to 25% from the left of the screen. The movement takes 0.5 seconds
+ "position": { "x": 25, "y": 0, "z": 1 },
+ // When the command will start. Zero seconds after the camper presses play
+ "startTime": 0
+ },
+ {
+ "character": "Tom",
+ // Optional, defaults to previous value. Tom will fade into view. The transition take 0.5 seconds. Movement and Opacity transitions take 0.5 seconds
+ "opacity": 1,
+ // Tom will fade into view 0.5 seconds into the scene (immediately after Maria finishes moving on screen)
+ "startTime": 0.5
+ },
+ {
+ "character": "Maria",
+ // When the command starts: Maria will start saying this line 1.3 seconds into the scene. Note that this is the same time as the audio.startTime above. It doesn't have to match that (maybe there's a pause at the beginning of the audio or something)
+ "startTime": 1.3,
+ // The character will stop moving their mouth at the finishTime
+ "finishTime": 4.95,
+ "dialogue": {
+ // Text that will appear if the dialogue is visible
+ "text": "Hello! You're the new graphic designer, right? I'm Maria, the team lead.",
+ // Where the dialogue text will be aligned. Can be 'left', 'center', or 'right'
+ "align": "left"
+ }
+ },
+ {
+ // background will change to this at 5.4 seconds into the scene
+ "background": "company2-breakroom.png",
+ "character": "Tom",
+ "startTime": 5.4,
+ "finishTime": 9.4,
+ "dialogue": {
+ "text": "Hi, that's right! I'm Tom McKenzie. It's a pleasure to meet you.",
+ // Tom's text will be aligned to the right since he is on the right side of the screen
+ "align": "right"
+ }
+ },
+ {
+ "character": "Tom",
+ // Tom will fade to 0 opacity
+ "opacity": 0,
+ // I like to move characters off screen or fade them 0.5 second after the last talking command
+ "startTime": 9.9
+ },
+ {
+ "character": "Maria",
+ // Maria will slide back off the screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 },
+ // The animation will stop playing 0.5 seconds after the 'finishTime' of the last command - or 0.5 seconds after 'startTime' if 'finishTime' isn't there.
+ "startTime": 10.4
+ }
+ ]
+}
+```
+
+````
+
+> [!NOTE]
+>
+> 1. En las secciones anteriores, los ejemplos de `lang` son:
+>
+> - `html` - HTML/CSS
+> - `js` - JavaScript
+> - `jsx` - JSX
+
+## Numeración del desafio
+
+Cada reto necesita un `id`. Si no especifica uno, MongoDB creará uno nuevo aleatorio cuando guarde los datos; sin embargo, no queremos que haga eso, ya que queremos que los id de desafío sean consistentes en diferentes entornos (puesta en escena, producción, muchos desarrolladores diferentes, etc.).
+
+Para generar una nueva en un shell (asumiendo que MongoDB se está ejecutando por separado):
+
+1. Ejecute el comando `mongo`.
+2. Ejecute el comando `ObjectId()`.
+
+
+Por ejemplo:
+
+```bash
+$ mongo
+MongoDB shell version v3.6.1
+connecting to: mongodb://127.0.0.1:27017
+MongoDB server version: 3.4.10
+...
+$ ObjectId()
+ObjectId("5a474d78df58bafeb3535d34")
+````
+
+The result is a new id, for example, `5a474d78df58bafeb3535d34` above.
+
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
+
+```yml
+---
+id: 5a474d78df58bafeb3535d34
+título: Título del desafío
+```
+
+## Nombrando desafíos
+
+Naming things is hard. We've made it easier by imposing some constraints.
+
+All challenge titles should be explicit and should follow this pattern:
+
+\[verb\]\[object clause\]
+
+Here are some example challenge names:
+
+- Utilice Notación en sentido de la derecha para especificar el relleno de un elemento
+- Condensa arreglos con ".reduce"
+- Utilice la notación de corchete para encontrar el primer carácter en una cadena
+
+## Descripciones/Instrucciones de Desafíos
+
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
+
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
+
+Use american english, e.g., use `labeled` instead of `labelled`.
+
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
+
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
+
+You can add diagrams if necessary.
+
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
+
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
+
+- JavaScript (mayúsculas en "J" y "S" y sin abreviaturas)
+- Node.js
+- Aunque a veces sea inexacto, se deben utilizar formularios no separados de 'back-end' y 'front end', ya que se usan más ampliamente.
+
+### The 2-minute rule
+
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
+
+If it takes longer than two minutes to complete the challenge, you have two options:
+
+- Simplificar el desafío, o
+- Dividir el desafío en dos desafíos.
+
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straightforward.
+
+We track how long it takes for campers to solve challenges and use this information to identify challenges that need to be simplified or split.
+
+### Modularity
+
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
+
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
+
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
+
+### Formatting challenge text
+
+Here are specific formatting guidelines for challenge text and examples:
+
+- Las palabras clave del lenguaje van en etiquetas ``. Por ejemplo, nombres de etiquetas HTML o nombres de propiedades CSS.
+- Las referencias a las partes del código (es decir, funciones, métodos o nombres de variables) deben estar envueltas en etiquetas ``. Ver el ejemplo a continuación:
+
+```md
+Usa `parseInt` para convertir la variable `realNumber` en un entero.
+```
+
+- Las referencias a los nombres de archivos y directorios de rutas (por ejemplo, `package.json`, `src/components`) deben estar envueltas en etiquetas ``.
+- Los bloques de código de múltiples líneas **deben estar precedidos por una línea vacía**. La siguiente línea debe comenzar con tres backticks seguidos inmediatamente por uno de los [idiomas soportados](https://prismjs.com/#supported-languages). To complete the code block, you must start a new line that only has three backticks and **another empty line**. Ver el ejemplo a continuación:
+- El espacio en blanco es importante en Markdown, por lo que le recomendamos que lo haga visible en su editor.
+
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+
+The following is an example of code:
+
+```md
+`` `{idioma}
+
+[TU CÓDIGO AQUÍ]
+```
+
+````
+
+- La información adicional en forma de una nota debe ser formateada `Nota: El texto restante de la nota...
+- Si se necesitan varias notas. then list all of the notes in separate sentences using the format `Note: First note text. Second note text.`
+- Use single quotes where applicable
+
+**Note:** The equivalent _Markdown_ should be used in place of _HTML_ tags.
+
+## Pruebas de escritura
+
+Los desafíos deben tener el número mínimo de pruebas necesarias para verificar que un campador entienda un concepto.
+
+Nuestro objetivo es comunicar el único punto que el reto está tratando de enseñar y comprobar que han comprendido ese punto.
+
+Las pruebas de desafío pueden hacer uso de las librerías de aserción de Node.js y Chai.js. Además, si es necesario, se puede acceder al código generado por el usuario en la variable `code`. Además, el objeto `__helpers` expone varias funciones que simplifican el proceso de escritura de los test. The available functions are defined in the [curriculum-helpers](https://github.com/freeCodeCamp/curriculum-helpers/blob/main/lib/index.ts) repo.
+
+## Formatting Seed Code
+
+Here are specific formatting guidelines for the challenge seed code:
+
+- Use two spaces to indent
+- JavaScript statements end with a semicolon
+- Use double quotes where applicable
+
+### Seed Code Comments
+
+We have a [comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) that contains the only comments that can be used within the seed code. El caso exacto y el espaciado del comentario del diccionario deben ser utilizados. El diccionario de comentarios no debe ser expandido sin una discusión previa con el equipo de desarrollo.
+
+Los comentarios usados deben tener un espacio entre los caracteres del comentario y los propios comentarios. En general, los comentarios deben usarse con moderación. Siempre considere reescribir la descripción o las instrucciones de un desafío si pudiera evitar usar un comentario de código de semilla.
+
+Example of a valid single-line JavaScript comment:
+
+```js
+// Only change code below this line
+````
+
+Example of a valid CSS comment:
+
+```css
+/* Only change code above this line */
+```
+
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
+
+```js
+var a = 3;
+var b = 17;
+var c = 12;
+
+// Only change code below this line
+a = a + 12;
+b = 9 + b;
+c = c + 7;
+```
+
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
+
+```jsx
+class MyComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ text: 'Hello'
+ };
+ // Cambia el código debajo de esta línea
+
+ // Cambia el código encima de esta línea
+ }
+ handleClick() {
+ this.setState({
+ text: 'You clicked!'
+ });
+ }
+ render() {
+ return (
+
+ {/* Cambiar código debajo de esta línea */}
+
+ {/* Cambiar código sobre esta línea */}
+ {this.state.text}
+
+ );
+ }
+}
+```
+
+### Translation of Seed Code Comments
+
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.json`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
+
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
+
+```text
+Declara la variable myGlobal debajo de esta línea
+```
+
+> [!NOTE]
+>
+> Estamos trabajando en una integración que permita trabajar en i18n para el diccionario de comentarios.
+
+## Consejos y soluciones
+
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
+
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
+
+### Adding new Challenge hints/solutions Topics
+
+Take the following steps when adding a new challenge hints/solutions-related topic.
+
+1. Comience siguiendo los mismos pasos para crear un nuevo tema pero revise el siguiente para crear el título.
+2. El título del tema debe comenzar con `Guía de Desafío gratuita:` concatenada con el título real del desafío curricular. Por ejemplo, si el desafío se llama "`Chunky Monkey`", el título del tema sería "`Guía gratuita del Desafío CodeCamp: Chunky Monkey`".
+3. `camperbot` debe ser el dueño de estos temas/posts, así que necesitarás solicitar a un administrador que cambie la propiedad de la publicación principal a `camperbot`.
+4. Una vez creado el nuevo tema, se crea un identificador del tema del foro. Se encuentra al final de la URL del tema del foro. Este id debe añadirse a la parte frontal del archivo de desafío curriculum a través del proceso normal de pull request para el botón `Obtener una pista` para vincular al tema.
+
+### Guidelines for Content of Hints and Solutions Topics
+
+When proposing a solution for a curriculum challenge-related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
+
+````md
+# El nombre del desafío va aquí
+
+---
+
+## Explicación del problema
+
+Esto resume lo que se debe hacer sin solo repetir la descripción del desafío y / o las instrucciones. #### Enlaces relevantes
+
+- [Texto del enlace](link_url_goes_here)
+- [Link Text](link_url_goes_here)
+
+---
+
+## Pistas
+
+### Pista 1
+
+La pista va aquí
+
+### Pista 2
+
+La pista va aquí
+
+---
+
+## Soluciones
+
+Solución 1 (Haga clic para mostrar/ocultar)
+
+```js
+function miFunc() {
+ console.log('¡Hola Mundo!');
+}
+```
+````
+
+#### Explicación del código
+
+- La explicación del código va aquí
+- La explicación del código va aquí
+
+#### Enlaces relevantes
+
+- [Texto del enlace](link_url_goes_here)
+- [Texto del enlace](link_url_goes_here)
+
+
+````
+
+## desafios de tests
+
+Antes de que tu [hagas un pull request](how-to-open-a-pull-request) para tus cambios, tu necesitas validar que los cambios que has realizado no causan inadvertidamente problemas con el desafío.
+
+1. Para testear todos los desafíos, ejecuta el siguiente comando desde el directorio raíz
+
+````
+pnpm run test:curriculum
+```
+
+2. To test single challenge, you can use it challenge id with following command
+
+```
+FCC_CHALLENGE_ID=646cf6cbca98e258da65c979 pnpm run test:curriculum
+```
+
+3. You can also test a block or a superblock of challenges with these commands
+
+```
+FCC_BLOCK='Basic HTML and HTML5' pnpm run test:curriculum
+```
+
+```
+FCC_SUPERBLOCK='responsive-web-design' pnpm run test:curriculum
+```
+
+You are also able to test challenges by title by performing the following steps:
+
+1. Switch to the `curriculum` directory:
+
+ ```
+ cd curriculum
+ ```
+
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
+
+ ```
+ pnpm run test -- -g challenge-title-goes-here
+ ```
+
+> [!TIP]
+> You can set the environment variable `LOCALE` in the `.env` to the language of the challenge(s) you need to test.
+>
+> The currently accepted values are `english` and `chinese`, with `english` being set by default.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Useful Links
+
+Creating and Editing Challenges:
+
+1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - what the numeric challenge type values mean (enum).
+
+2. [Contributing to FreeCodeCamp - Writing ES6 Challenge Tests](https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s) - a video following [Ethan Arrowood](https://twitter.com/ArrowoodTech) as he contributes to the old version of the curriculum.
+
+## Helper Scripts
+
+> [!NOTE]
+> If you are working with the step-based challenges, refer to the [Work on Practice Projects](how-to-work-on-practice-projects) section.
+
+There are a few helper scripts that can be used to manage the challenges in a block. Note that these commands should all be run in the block directory. For example:
+
+```bash
+cd curriculum/challenges/english/02-javascript-algorithms-and-data-structures/basic-algorithm-scripting
+```
+
+### Add New Challenge
+
+To add a new challenge at the end of a block, call the script:
+
+```bash
+pnpm run create-next-challenge
+```
+
+This will prompt you for the challenge information and create the challenge file, updating the `meta.json` file with the new challenge information.
+
+### Delete a Challenge
+
+To delete a challenge, call the script:
+
+```bash
+pnpm run delete-challenge
+```
+
+This will prompt you to select which challenge should be deleted, then delete the file and update the `meta.json` file to remove the challenge from the order.
+
+### Insert a Challenge
+
+To insert a challenge before an existing challenge, call the script:
+
+```bash
+pnpm run insert-challenge
+```
+
+This will prompt you for the challenge information, then for the challenge to insert before. For example, if your choices are:
+
+```bash
+a
+b
+c
+```
+
+If you choose `b`, your new order will be:
+
+```bash
+a
+new challenge
+b
+c
+```
+
+### Update Challenge Order
+
+If you need to manually re-order the challenges, call the script:
+
+```bash
+pnpm run update-challenge-order
+```
+
+This will take you through an interactive process to select the order of the challenges.
+
+## Troubleshooting
+
+### Infinite Loop Detected
+
+If you see the following error in the console while previewing a challenge:
+
+```text
+Potential infinite loop detected on line ...
+```
+
+This means that the loop-protect plugin has found a long-running loop or recursive function. If your challenge needs to do that (e.g. it contains an event loop that is supposed to run indefinitely), then you can prevent the plugin from being used in the preview. To do so, add `disableLoopProtectPreview: true` to the block's `meta.json` file.
+
+If your tests are computationally intensive, then you may see this error when they run. If this happens then you can add `disableLoopProtectTests: true` to the block's `meta.json` file.
+
+It's not typically necessary to have both set to true, so only set them as needed.
+````
diff --git a/src/content/docs/es/how-to-work-on-localized-client-webapp.md b/src/content/docs/es/how-to-work-on-localized-client-webapp.md
new file mode 100644
index 00000000..d7914030
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-localized-client-webapp.md
@@ -0,0 +1,286 @@
+---
+title: How to Work on Localized Client Webapp
+---
+
+The React-based client web app that powers our learning platform is built using Gatsby. Se traduce a varios idiomas utilizando [react-i18next](https://react.i18next.com/) y [i18next](https://www.i18next.com/).
+
+Puedes obtener más información sobre cómo configurar la aplicación cliente localmente para su desarrollo siguiendo [nuestra guía de configuración local aquí](how-to-setup-freecodecamp-locally). By default, the application is available only in English.
+
+Once you have set up the project locally you should be able to follow this documentation to run the client in the language of your choice from the list of available languages.
+
+Esto podría ser útil cuando se está trabajando en una función que se dirige específicamente a algo que implica la localización, y requiere que valides, por ejemplo, la etiqueta de un botón en un idioma diferente.
+
+> [!TIP] You do not need to follow this document to translate freeCodeCamp's curriculum or contributing documentation. En su lugar, lee [esta guia](how-to-translate-files).
+
+Veamos cómo funcionan los marcos de trabajo y las herramientas de i18n.
+
+## Estructura de archivos
+
+Most of the files for translating the platform are located in the [`client/i18n`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/client/i18n) folder. Each language has a directory that contains JSON files with the translations.
+
+```bash
+ config
+ └── i18n.ts
+ ...
+ client/i18n
+ ├── configForTests.js
+ ├── config.js
+ ├── locales
+ │ ├── chinese
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── dothraki
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── english
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ │ └── espanol
+ │ ├── intro.json
+ │ ├── links.json
+ │ ├── meta-tags.json
+ │ ├── motivation.json
+ │ └── translations.json
+ ├── locales.test.js
+ ├── schema-validation.js
+ └── validate-keys.ts
+```
+
+Some of these files are translated on our translation platform (Crowdin) and some are translated or created via PRs on GitHub.
+
+**Archivos traducidos en nuestra plataforma de traducción:**
+
+- El archivo `translations.json` contiene la mayor parte del texto que aparece en los elementos de la interfaz de usuario. Las claves son usadas en el código base para obtener el texto correcto de cualquier lenguaje que sea seleccionado. This file needs to have the same keys in all languages.
+
+- El archivo `intro.json` contiene los pares clave-valor para el texto de introducción en las páginas de certificación.
+
+ Si quieres añadir/actualizar las traducciones para las claves por favor lee [esta guía aquí.](https://freecodecamp.crowdin.com/how-to-translate-files).
+
+**Archivos que NO son traducidos en nuestra plataforma de traducciones:**
+
+- Los archivos `motivation.json` no requieren que tengan las mismas comillas, complementos o tamaños u orden. Simplemente la misma estructura JSON.
+
+- The `meta-tags.json` file contains the information for our website's meta tag information.
+
+ Changes to these files are typically done by the staff team. If you see something out of the ordinary we recommend you reach us in the [contributors chat room](https://discord.gg/PRyKn3Vbay).
+
+## Testing the Client App in a World Language
+
+You can test the client app in any language available in the [list of `availableLangs` here](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts).
+
+```js
+export const availableLangs = {
+ client: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Italian,
+ Languages.Portuguese,
+ Languages.Ukrainian,
+ Languages.Japanese,
+ Languages.German,
+ Languages.Arabic
+ ],
+ ...
+};
+```
+
+Si estas probando un nuevo idioma, crea una carpeta con el nombre del idioma como titulo junto al otro idioma y copia los archivos JSON desde el otro idioma dentro de la nueva carpeta.
+
+Add the new language to the `Languages` enum and the `client` array at the top of the [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file.
+
+A continuación, sigue las instrucciones en los comentarios en el mismo archivo para agregar/actualizar el resto de las variables tanto como se necesite.
+
+Finally, set the `CLIENT_LOCALE` variable in your `.env` file to the string of the locale you want to build from the `Languages` enum in the above file.
+
+## Como estructurar los componentes
+
+Si estás trabajando en una característica o en un error para el cliente de la app web, por ejemplo agregando unos nuevos elementos UI en la página de configuración, debes seguir las líneas de ayuda siguientes. Te ayudarán a preparar los componentes para localizarlo en todos los idiomas mundiales soportados.
+
+### Componente funcional
+
+```js
+import { useTranslation } from 'react-i18next';
+
+// en el método de renderizado:
+const { t } = useTranslation();
+
+// llamar la función "t" con una clave del archivo JSON:
+{t('key')}
; // más detalles abajo
+```
+
+### Componente de clase
+
+```js
+import { withTranslation } from 'react-i18next';
+
+// withTranslation agregar la función "t" a props:
+const { t } = this.props;
+
+// llamar la función "t" con una clave del archivo JSON:
+{t('key')}
// más detalles abajo
+
+// exportar sin redux:
+export default withTranslation()(Component);
+
+// o con renderizado:
+export default connect(...)(withTranslation()(Component));
+```
+
+## Traducir utilizando la función "t"
+
+### Traducción básica
+
+```js
+// en el componente:
+{t('p1')}
+
+// en el archivo JSON:
+{
+ "p1": "My paragraph"
+}
+
+// salida:
+My paragraph
+```
+
+### Con datos dinámicos
+
+```js
+// en el componente:
+const username = 'moT';
+
+{t('welcome', { username: username })}
+
+// en el archivo JSON:
+{
+ "welcome": "Welcome {{username}}"
+}
+
+// salida:
+Welcome moT
+```
+
+Los ejemplos de arriba pasan un objeto a la función `t` con una variable `username`. La variable deberá ser usada en el valor JSON donde está `{{username}}`.
+
+## Traduce con el Componente `Trans`
+
+La regla general es usar la función "t" cuando puedas. Pero hay un componente `Trans` para cuando eso no sea suficiente, generalmente cuando tienes un elemento insertado dentro del texto. Puedes usar el componente `Trans` con cualquier tipo de componente de react.
+
+### Elementos básicos anidados
+
+```js
+// en el componente
+import { Trans } from 'react-i18next'
+
+
+ fcc.greeting
+
+
+// en el archivo JSON:
+{
+ "fcc": {
+ "greeting": "Welcome to freeCodeCamp"
+ }
+}
+
+// salida:
+Welcome to freeCodeCamp
+```
+
+You can place the key inside the component tags like in the above example if the text contains "simple" tags with no attributes. `br`, `strong`, `i`, and `p` están por defecto, pero esa lista puede ser extendida en la configuración i18n.
+
+### Elementos complejos anidados
+
+En otros tiempos, querrás tener cierto texto dentro de otro elemento, una etiqueta de anclaje es un buen ejemplo:
+
+```js
+// en el componente:
+
+
+ placeholder
+
+
+
+// en el archivo JSON:
+{
+ "check-forum": "Check out <0>our forum0>."
+}
+
+// salida:
+Check out our forum
+```
+
+En el ejemplo de arriba, la clave es colocada en los atributos del componente `Trans`. El `<0>` y `0>` en el JSON representa el primer hijo del componente, en este caso, el elemento ancla. Si hubiera más hijos, podrían contarlos después de que usen la misma sintaxis. Puedes encontrar el hijo de un componente en las herramientas dev de react inspeccionándolos. El `placeholder` están simplemente ahí debido a que el linter busca un elemento vacío ``.
+
+### Con una variable
+
+```js
+// en el componente:
+const email = 'team@freecodecamp.org';
+
+
+
+
+ {{ email }}
+
+
+
+
+// en el archivo JSON:
+{
+ "fcc": {
+ "email": "Send us an email at: <0>{{email}}0>"
+ }
+}
+
+// salida:
+Send us an email at: team@freecodecamp.org
+```
+
+En el ejemplo de arriba, la clave y la variable son establecidas en el atributo del componente `Trans`. El `{{ email }}` necesita estar en algún lado del componente `Trans` tan bien, no importa donde.
+
+## Cambiar texto
+
+Para cambiar el texto de las cosas del lado del cliente, ve al archivo relevante `.json`, encuentra la clave que es usada en el componente React, y cambia el valor al nuevo texto que quieras. Deberías de buscar en la base del código para que esa clave para asegurarte de que no está siendo usada en ningún otro sitio. O, si es así, que el cambio tenga sentido en todos los sitios.
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Agregar texto
+
+Si el texto que quieres añadir al cliente existe en el archivo pertinente, `.json`, usa la clave existente. En el caso contrario, crea una clave nueva.
+
+El archivo English es la "fuente de la verdad" para todos los archivos `.json` que compartan el mismo nombre. Si necesitas añadir una nueva clave, añádela ahí. Después, añade la clave **all** de los archivos `translations.json`.
+
+:::note
+Utiliza texto en inglés para todos los idiomas si el archivo se traduce a través de Crowdin. La prueba se caerá si no lo haces.
+:::
+
+Sería bueno mantener la clave en el mismo orden en todos los archivos también. Also, try to put all punctuation, spacing, quotes, etc. in the JSON files and not in the components or server files.
+
+:::note
+The underscore (`_`) is a reserved character for keys in the client-side files. Vea [the documentation](https://www.i18next.com/translation-function/plurals) de como debe ser usado.
+:::
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Helpful Documentation
+
+- [Documentación de react-i18next ](https://react.i18next.com/latest/usetranslation-hook)
+- [Documentación de i18next](https://www.i18next.com/translation-function/essentials)
diff --git a/src/content/docs/es/how-to-work-on-practice-projects.md b/src/content/docs/es/how-to-work-on-practice-projects.md
new file mode 100644
index 00000000..f6379903
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-practice-projects.md
@@ -0,0 +1,155 @@
+---
+title: Cómo Trabajar en Proyectos de Práctica
+---
+
+Nuestros proyectos de práctica utilizan un enfoque basado en pasos para enseñar conceptos a los campistas. Un proyecto constará de múltiples archivos, a los que nos referimos como **"pasos"**. Estos archivos son nombrados por el ID de desafío, para evitar problemas con el flujo de traducción. Desafortunadamente, esto hace difícil encontrar el archivo asociado a un paso específico.
+
+Hemos creado una herramienta de edición de desafíos que ayuda a remediar eso. Esta herramienta permite navegar los proyectos disponibles y los pasos para cada proyecto (en orden). También hay un editor de código embebido que se puede utilizar para trabajar directamente sobre los archivos.
+
+## Utilizando el editor de desafíos
+
+Estas instrucciones le indicarán cómo utilizar nuestra herramienta de edición de desafíos para trabajar en los proyectos de práctica.
+
+### Iniciar el Editor
+
+To start the editor, make sure you are in the root freeCodeCamp directory. Then, run `pnpm run challenge-editor` to start both the client and the API that powers the editor.
+
+El cliente se ejecutará en el puerto `3300`, por lo que puede acceder a él en `http://localhost:3300`. La API se ejecuta en el puerto `3200` para evitar conflictos con el cliente y el servidor de aprendizaje. Esto le permitirá ejecutar la aplicación freeCodeCamp al mismo tiempo que el editor, para que pueda probar sus cambios localmente.
+
+### Navegando por el Editor
+
+La vista predeterminada mostrará una lista de los `superbloques` disponibles: estas son las certificaciones. Click on the certification link you want to work on.
+
+This will take you to the list of blocks. These are the practice projects. Click on the project link you want to work on.
+
+This will take you to a list of steps for the project. If you are working on an existing step, you can click on the step link to open the editor. If you are adding or removing steps, click the `Use the step tools` link to switch to the step tools for that challenge.
+
+### Editing Steps
+
+When you click on a step, you'll be taken to the editor. This is a basic text editor that offers syntax highlighting.
+
+After you have made your changes, click the `Save Changes` button to save your changes. You will get a browser alert letting you know that your changes are ready to commit. Note that you'll need to use `git` manually to stage and commit your files - this tool will not do that for you.
+
+### Step Tools
+
+When you click the `Use the step tools` link, you'll be taken to the step tools page. This allows you to add or remove steps from the project.
+
+#### Create Next Step
+
+Clicking this button will add a new step at the end of the project. This step will use the previous step's code as the seed.
+
+#### Create Empty Steps
+
+Enter the number of steps you want to add in the input. Then, clicking the button will create many empty steps at the end of the project.
+
+#### Insert Step
+
+Enter the step number that you want to add. Then, click the `Insert Step` button to add the step. The following steps will be re-ordered.
+
+#### Delete Step
+
+Enter the step number you want to delete. Then click the `Delete Step` button to remove that step. This will automatically update the step numbers for the remaining steps.
+
+#### Update Step Titles
+
+You should not have to use this tool unless you've manually deleted or added steps. This tool will reorder the step numbers.
+
+## Using the Scripts Manually
+
+If you want to work on the steps manually, in your local IDE, you can run the step management scripts directly.
+
+The `tools/challenge-helper-scripts` folder contains tools to help facilitate the creation and maintenance of the freeCodeCamp project-based curriculum.
+
+### Create a New Project
+
+Change directory to `tools/challenge-helper-scripts` and run `pnpm run create-project`. This opens up a command line UI that guides you through the process. Once that has finished, there should be a new challenge in the English curriculum that you can use for the first step of the project. For example, if you created a project called `test-project` in the Responsive Web Design certification, it would be in `curriculum/challenges/english/01-responsive-web-design/test-project`.
+
+If you want to create new steps, the following tools simplify that process.
+
+### create-next-step
+
+A one-off script that will automatically add the next step based on the last step in the project. The challenge seed code will use the previous step's challenge seed code.
+
+#### How to Run the Script
+
+1. Redirígete al directorio del proyecto.
+2. Run the following command:
+
+```bash
+pnpm run create-next-step
+```
+
+### create-empty-steps
+
+A one-off script that automatically adds a specified number of steps. The challenge seed code for all steps created will be empty.
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Redirígete al directorio del proyecto.
+2. Run the following command:
+
+```bash
+pnpm run create-empty-steps X # where X is the number of steps to create.
+```
+
+### insert-step
+
+A one-off script that automatically adds a new step at a specified position, incrementing all subsequent steps (both their titles and in their meta.json). The challenge seed code will use the previous step's challenge seed code with the editable region markers (ERMs) removed.
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Redirígete al directorio principal del proyecto.
+2. Run the following command:
+
+```bash
+pnpm run insert-step X # where X is the position to insert the new step.
+```
+
+### delete-step
+
+A one-off script that deletes an existing step, decrementing all subsequent steps (both their titles and in their meta.json)
+
+**Note:** This script also runs [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Redirígete al directorio principal del proyecto.
+2. Run the following command:
+
+```bash
+pnpm run delete-step X # where X is the step number to be deleted.
+```
+
+### update-step-titles
+
+A one-off script that automatically updates the frontmatter in a project's markdown files so that they are consistent with the project's meta.json. It ensures that each step's title (and dashedName) matches the meta's `challengeOrder`.
+
+#### How to Run the Script
+
+1. Redirígete al directorio del proyecto.
+2. Run the following command:
+
+```bash
+pnpm run update-step-titles
+```
+
+### repair-meta
+
+One-off script to parse the step names from the project and update the meta.json order to reflect those steps. Useful if you've accidentally lost the changes to the meta.json file when adding/removing steps.
+
+#### How to Run the Script
+
+1. Change to the directory of the project.
+2. Run the following command:
+
+```bash
+pnpm run repair-meta
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/es/how-to-work-on-the-component-library.md b/src/content/docs/es/how-to-work-on-the-component-library.md
new file mode 100644
index 00000000..5323f96e
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-the-component-library.md
@@ -0,0 +1,115 @@
+---
+title: Cómo trabajar en la biblioteca de componentes
+---
+
+Bienvenido a la librería `ui-components` de freeCodeCamp. Los componentes se construyen principalmente desde cero con elementos HTML básicos y [Tailwind CSS](https://tailwindcss.com/).
+
+> [!NOTE]
+>
+> freeCodeCamp ha estado usando componentes de Bootstrap en la interfaz de usuario. Sin embargo, nos estamos alejando de ella y construyendo nuestra propia biblioteca de componentes, lo que ayuda a estandarizar nuestros patrones UX/UI y a mejorar la accesibilidad. El proyecto está rastreado en [este problema de GitHub](https://github.com/freeCodeCamp/freeCodeCamp/issues/44668).
+
+Se recomiendan los siguientes pasos al trabajar en un nuevo componente:
+
+- Investigación y planificación
+- Implementar el componente
+- Mostrar los casos de uso en el Storybook
+- Escribir pruebas unitarias
+
+## Researching and Planning
+
+Antes de construir un componente, necesita investigar y documentar cómo se comporta y se ve la versión existente, para asegurarse de que el nuevo tiene estilos coincidentes y soporta todos los usos actuales. Para cumplir con los requisitos de accesibilidad web, también debe prestar atención al aspecto de accesibilidad del componente, ver qué elementos HTML y atributos ARIA se utilizan bajo el capó.
+
+Una vez que haya reunido suficiente información sobre el componente, puede empezar a pensar en la interfaz de accesorios. Idealmente, la interfaz debe ser tan similar a la versión actual como sea posible, para facilitar la adopción más adelante. Puesto que estamos utilizando componentes de Bootstrap, el enfoque más simple es imitar [su implementación](https://github.com/react-bootstrap/react-bootstrap/tree/master/src).
+
+Preferimos solicitudes de extracción más pequeñas que grandes porque aceleran el tiempo de revisión y reducen la sobrecarga cognitiva de los revisores. Por este motivo, debería pensar en cómo desglosar la aplicación y elaborar un plan de entrega.
+
+Recomendamos abrir un número separado de GitHub para cada componente e incluir todas las notas en la descripción de incidencias. Se puede utilizar como un lugar para alojar todas sus notas de trabajo, así como una forma de comunicar el enfoque con los revisores. Utilizaremos el tema para seguir debatiendo, si es necesario. [El problema para el componente Button](https://github.com/freeCodeCamp/freeCodeCamp/issues/45357) puede ser utilizado como referencia.
+
+## Implementing the Component
+
+Se puede crear un nuevo componente utilizando el siguiente comando desde el directorio raíz:
+
+```bash
+cd tools/ui-components
+
+pnpm run gen-component MyComponent
+```
+
+El comando generará una nueva carpeta dentro del directorio `ui-components`, con los siguientes archivos:
+
+| Nombre del archivo | Propósito |
+| -------------------------- | ---------------------------------------------------------- |
+| `index.ts` | Se utiliza para exportar el componente y sus tipos. |
+| `my-component.stories.tsx` | Se utiliza para demostrar el componente en Storybook. |
+| `my-component.test.tsx` | Se trata de un archivo de prueba. |
+| `my-component.tsx` | Ahí es donde aplicamos el componente. |
+| `types.ts` | It is where we locate the component's interface and types. |
+
+Each component is different, but in general, a component should:
+
+- Apoyar el reenvío de ref
+- Estilo tanto para temas claros como oscuros
+- Estilo internamente basado en sus accesorios (los consumidores no deben necesitar reponer el componente con el accesorio `className`)
+- Utilizar el sistema de estilo incorporado desde Tailwind, en lugar de tener estilos personalizados
+
+### Using Colors
+
+Hay dos "capas" de color en la biblioteca de componentes:
+
+- La capa base, donde los nombres de los colores describen lo que son los colores, por ejemplo, `gray00`, `blue50`
+- La capa semántica, donde los nombres de los colores describen para qué sirven, por ejemplo, `foreground-primary`, `background-danger`
+
+Generally, when using colors in a component, you should choose semantic variables over the base ones. Sin embargo, hay excepciones, específicamente cuando se estilan los estados del componente, tales como hover, active, disabled, etc. In these cases, we recommend using the base variables directly instead of creating new semantic variables, since each component can have different styles for its states.
+
+:::note
+La definición del color se encuentra en el [archivo `colors.css`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/src/colors.css). Un color sólo está disponible para su uso si se añade al [archivo `tailwind.config.js`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/tailwind.config.js) bajo la propiedad `colors`.
+:::
+
+### Useful Links
+
+- [Configuración del CSS de Tailwind](https://tailwindcss.com/docs/configuration)
+- [Documentación de React Bootstrap v0.33](https://react-bootstrap-v3.netlify.app)
+- [Hoja de estilo de Bootstrap 3.3.7](https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css)
+- [Implementación actual de React Bootstrap](https://github.com/react-bootstrap/react-bootstrap/tree/master/src)
+- [Pruebas actuales de React Bootstrap](https://github.com/react-bootstrap/react-bootstrap/tree/master/test)
+
+## Displaying the Use Cases on Storybook
+
+Los casos de uso del componente deben añadirse al archivo Storybook (`.stories.tsx`).
+
+Para iniciar Storybook, ejecute el siguiente comando desde el directorio raíz:
+
+```bash
+pnpm run storybook
+```
+
+La página Storybook está disponible en [http://localhost:6006](http://localhost:6006).
+
+## Writing Unit Tests
+
+Usamos [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) para escribir pruebas unitarias. Las pruebas deben afirmar que los componentes se comportan como se espera y son accesibles.
+
+Para ejecutar pruebas a la biblioteca de componentes, ejecute el siguiente comando desde el directorio raíz:
+
+```bash
+pnpm run test-ui-components
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Adding Packages to the UI-Component Library
+
+We restrict adding new packages to the UI Components to help with the project's maintainability. In the rare chance that you think a dependency is needed, please check with the maintainers first and then use the following command to add a package:
+
+```bash
+cd tools/ui-components
+pnpm add package_name
+```
+
+## Useful Links
+
+- [Pruebas de Accesibilidad](https://testing-library.com/docs/dom-testing-library/api-accessibility)
+- [Orden de prioridad de las consultas de React Testing Library](https://testing-library.com/docs/queries/about/#priority)
+- [Errores comunes con la biblioteca de pruebas de React](https://kentcdodds.com/blog/common-mistakes-with-react-testing-library)
diff --git a/src/content/docs/es/how-to-work-on-the-docs-theme.md b/src/content/docs/es/how-to-work-on-the-docs-theme.md
new file mode 100644
index 00000000..ce5daf6b
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-the-docs-theme.md
@@ -0,0 +1,62 @@
+---
+title: How to Work on Documentation
+---
+
+## Work on the Content of the Docs
+
+Para trabajar en las pautas de contribución, puedes editar o agregar archivos al directorio `docs`, [disponible aquí](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/docs). Cuando tus cambios se fusionen, automáticamente estarán disponibles en el sitio de documentación.
+
+Cuando se agrega un nuevo archivo al directorio `docs`, deberías evaluar si el archivo también debe ser agregado a la barra lateral de navegación. Normalmente creamos un enlace en el archivo [`_sidebar.md`](_sidebar) para guías nuevas e independientes. Alternativamente, puede seguir las instrucciones de abajo en crear un link interno para guías de soporte.
+
+### How to Create an Internal Link
+
+Si quieres crear un link dirigido a una sección diferente a las pautas de contribución, sigue este formato:
+
+```md
+[Link text](target-file-name#target-section-heading-id)
+
+// Si la sección de destino está dentro de la misma página, puedes omitir el nombre del archivo
+[Link text](#target-section-heading-id)
+```
+
+Asegurate de incluir la extensión del archivo (`.md`). Don't specify the full URL or append `/` before the file name.
+
+Esto es necesario para hacer que estos enlaces fucionen para la versión traducida del ducumento. Otherwise, they will redirect to the English version of the page regardless of the language.
+
+#### Traduciendo archivos con enlaces internos
+
+Cuando estas traduciendo documentos en Crowdin, asegurate de reemplazar el `#target-section-heading-id` con el id en el documento traducido. [Aprende mas sobre como traducir documentos aqui](how-to-translate-files#translate-documentation).
+
+## Work on the Docs Theme
+
+:::note
+Recuerda que no necesitas establecer nada para trabajar en el contenido para el sitio de documentación.
+
+Para trabajar en las directrices de contribución, consulte [trabajar en la sección de contenido de documentos](#work-on-the-docs-content).
+:::
+
+### Structure of the Docs Website
+
+El sitio esta generado usando [`docsify`](https://docsify.js.org) y se esta ejecutado usando Github pages.
+
+Normalmente no vas a necesitar cambiar ninguna configuración o compliar el sitio localmente. En caso de que te interese, asi es como funciona:
+
+- El código de la página de inicio para este sitio está disponible en [`docs/index.html`](index.html).
+- Servimos este archivo como SPA utilizando `docsify` y GitHub Pages.
+- El script `docsify` genera el contenido de los archivos `lenguaje de marcado` en el directorio `docs` en linea.
+- La página de inicio se genera a partir del [`_coverpage.md`](_coverpage).
+- The sidebar navigation is generated from [`_sidebar.md`](_sidebar).
+
+### Serving the Documentation Site Locally
+
+Install freeCodeCamp locally ([see the local setup guide](how-to-setup-freecodecamp-locally)), we bundled the CLI with the development tools so you can run the command below as needed from the root of the repo:
+
+```bash
+pnpm run docs:serve
+```
+
+> The documentation site should be available at
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/es/how-to-work-on-the-news-theme.md b/src/content/docs/es/how-to-work-on-the-news-theme.md
new file mode 100644
index 00000000..fb7c2d80
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-the-news-theme.md
@@ -0,0 +1,102 @@
+---
+title: Cómo trabajar en las noticias para desarrolladores de freeCodeCamp.org
+---
+
+Las noticias del desarrollador también conocidas como el sitio [`/news`](https://www.freecodecamp.org/news) funciona con [Ghost](https://ghost.org/). Utilizamos un tema personalizado para el aspecto del sitio. El código fuente del tema está disponible aquí: .
+
+## El Tema
+
+Ghost utiliza un lenguaje de plantillas sencillo llamado [Handlebars](http://handlebarsjs.com/) para sus temas. El tema usado en `/news` se basa en el tema predeterminado [casper](https://github.com/TryGhost/Casper).
+
+El tema por defecto está fuertemente comentado, por lo que debería ser bastante fácil averiguar lo que está pasando con solo leer el código y los comentarios. Una vez que te sientas cómodo con cómo funciona todo, Ghost también tiene una completa [documentación API de temas](https://themes.ghost.org) que explica todos los posibles ayudantes de Handlebars y plantillas.
+
+**Los archivos principales son:**
+
+- `default.hbs` - El archivo de plantilla principal
+- `index.hbs` - Utilizado para la página de inicio
+- `post.hbs` - Utilizado para publicaciones individuales
+- `page.hbs` - Utilizado para páginas individuales
+- `tag.hbs` - Utilizado para archivos de etiquetas
+- `author.hbs` - Utilizado para archivos de autor
+
+Un truco realmente bueno es que también puede crear plantillas personalizadas sólo añadiendo un trozo pequeño de una página a un archivo de plantilla. Por ejemplo:
+
+- `page-about.hbs` - plantilla personalizada para la página `/about/`
+- `tag-news.hbs` - plantilla personalizada para `/tag/news/` archivo
+- `author-ali.hbs` - plantilla personalizada para `/author/ali/` archivo
+
+## Desarrollo
+
+1. Obtén Ghost instalado localmente.
+
+ ```sh
+ npm install -g ghost-cli@latest
+ mkdir ghost-local-site
+ cd ghost-local-site
+ ```
+
+ ```sh
+ ghost install local
+ ghost start
+ ```
+
+ > Nota: actualmente freeCodeCamp usa la versión Ghost `2.9.0`, así que asegúrate de que estás usando una versión superior a eso.
+
+ Asegúrate de ejecutar los comandos de `ghost` desde el directorio `ghost-local-site`. Siga las instrucciones adicionales de la [documentación oficial de Ghost](https://docs.ghost.org) si no estás familiarizado con su interfaz.
+
+2. Bifurca y clona el repositorio en tu directorio de temas (reemplazando `YOUR_USERNAME` con tu nombre de usuario de GitHub):
+
+ ```sh
+ cd content/themes/
+ git clone https://github.com/YOUR_USERNAME/news-theme.git
+ ```
+
+3. Asegúrese de tener todos los requisitos previos.
+
+ Los estilos de los temas se compilan usando Gulp/PostCSS para polyfill las futuras especificaciones CSS. Necesitará [Node.js](https://nodejs.org/). Asegúrese de que su versión de Node.js es compatible con `ghost`.
+
+4. Instalar dependencias y desarrollar el tema
+
+ ```sh
+ npm ci
+ npm run develop
+ ```
+
+5. Ahora puedes editar los archivos `/assets/css/`, los cuales serán compilados a `/assets/built/` automáticamente.
+
+6. Acceder al sitio de desarrollo.
+
+ a. Introduzca `http://localhost:2368/ghost/` en su barra de direcciones. Continúe con la configuración solicitada en la página (si se ejecuta Ghost por primera vez).
+
+ b. _(Solo una vez, durante la configuración)_ Reinicie Ghost, en una terminal por separado una vez para asegurarse de que el tema está disponible.
+
+ ```sh
+ cd ghost-local-site
+ ghost restart
+ ```
+
+ c. _(Solo una vez, durante la configuración)_ Una vez que hayas hecho esto, ve a `http://localhost:2368/ghost/#/settings/design` y desplázate hacia abajo. Asegúrate de hacer clic en activar en el `freecodecamp-news-theme`.
+
+7. Comprime el código final y crea un pull-request
+
+ El `zip` que Gulp empaqueta son los archivos del tema en `dist/.zip`, los cuales podemos subir al sitio de producción.
+
+ Cuando haga un PR, por favor asegúrese de haber ejecutado el script de abajo antes de confirmar el código y enviar un PR.
+
+ ```sh
+ npm run zip
+ ```
+
+## Otros recursos y referencias
+
+### Funcionalidades utilizadas de PostCSS
+
+- Autoprefixer - No te preocupes por escribir prefijos del navegador de ningún tipo, todo se hace automáticamente con soporte para las 2 versiones más recientes de cada navegador.
+- Variables - Variables CSS simples
+- [Función de color](https://github.com/postcss/postcss-color-function)
+
+### Iconos SVG
+
+El tema utiliza iconos SVG en línea, incluidos a través de parciales de Handlebars. Puedes encontrar todos los iconos dentro de `/partials/icons`. Para usar un icono simplemente incluya el nombre del archivo relevante, por ejemplo. Para incluir el icono SVG en `/partials/icons/rss.hbs` - usa `{{> "icons/rss"}}`.
+
+Puedes añadir tus propios iconos SVG de la misma manera.
diff --git a/src/content/docs/es/how-to-work-on-tutorials-that-use-coderoad.md b/src/content/docs/es/how-to-work-on-tutorials-that-use-coderoad.md
new file mode 100644
index 00000000..24ece0f9
--- /dev/null
+++ b/src/content/docs/es/how-to-work-on-tutorials-that-use-coderoad.md
@@ -0,0 +1,142 @@
+---
+title: How to work on CodeRoad
+---
+
+Esta página describe cómo contribuir a los tutoriales y proyectos de freeCodeCamp que se complementan usando la extensión CodeRoad de VS Code.
+
+## How the Tutorials Work
+
+Each of the freeCodeCamp tutorials that use CodeRoad has its own repo under the freeCodeCamp GitHub organization. Todos comienzan con `learn-`. Por ejemplo, `https://github.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/`.
+
+Cada repositorio tiene una rama principal `main` y una "versión" de rama, por ejemplo. `v1.0.0`.
+
+Los dos archivos principales en la rama `main` son `TUTORIAL.md` y `coderoad.yaml`. `TUTORIAL.md` contiene todas las instrucciones, pistas, títulos y todo lo necesario para el tutorial. `coderoad.yaml` contiene instrucciones para CodeRoad, tales como qué comandos correr y cuándo, qué archivos visualizar para cambios, y qué rama de versiones utilizar para los pasos.
+
+La rama de "versión" contiene los commits que serán cargados en cada paso de un tutorial. Los mensajes de commit en esta rama deben ser específicos. El primer commit necesita `INIT` para su mensaje y contiene todos los archivos a cargar antes de la primera lección.
+
+Los mensajes de commit subsecuentes deben coincidir con el número de pasos en `TUTORIAL.md` de la rama `main`. Por ejemplo, el commit con el mensaje `10.1` será cargado cuando un usuario va al paso `10.1`.
+
+Para realizar cambios a los commits en una rama de versión, necesitaría realizar un rebase y editar los commits que desea cambiar. Esto sobreescribirá la historia del Git, por lo que no podemos aceptar PRs a ese tipo de ramas. Una vez que una rama de versión está en el repositorio de freeCodeCamp, no debería cambiar nunca.
+
+> [!WARNING]
+>
+> Nunca realice o envíe cambios a una rama de versión que se encuentre en uno de los repositorios de freeCodeCamp. Siempre cree una nueva
+
+## How to Contribute
+
+### Requisitos previos
+
+Instala [CodeRoad CLI tools](https://www.npmjs.com/package/@coderoad/cli) con `npm install -g @coderoad/cl`.
+
+Ha habido algunos problemas con la última versión. Si `coderoad --version` no funciona después de instalar, baje a la versión `0.7.0` con `npm install -g @coderoad/cli@0.7.0`.
+
+### Trabajando en `main`
+
+Este conjunto de instrucciones es para PRs que sólo realizan cambios minor (menores) en `main` a **lecciones existentes**. Eso se constituye principalmente de cambios de errores de tipografía, gramática, indicios e instructivos o arreglos en el archivo `TUTORIAL.md`.
+
+Para todo lo demás, incluyendo agregando y eliminando lecciones, siga las [instrucciones para trabajar en una rama de versión](#working-on-version-branch). No necesitará crear una nueva rama de versión para esto - puedes crear una PR siguiendo las instrucciones anteriores.
+
+> [!NOTE]
+>
+> Estos cambios utilizarán la rama de versión existente. Si son sustanciales, siéntase libre de agregarlos a `CHANGELOG.md`. La mayor parte del tiempo, un buen mensaje de commit debería funcionar
+
+Nunca necesitas modificar directamente el archivo `tutorial.json`. Esto se creará con las herramientas CLI.
+
+Si sólo está haciendo cambios menores como corregir un error tipográfico o gramatical, no tiene que probar los cambios.
+
+Siga estas instrucciones para hacer un PR, teniendo en cuenta que las instrucciones usualmente usan las lecciones a su alrededor para el contexto:
+
+- Crea una copia de la última rama de la versión con `git branch vX.X.X upstream/vX.X.X` - no necesitas verificarla, solo debe existir.
+- Crea y consulta una nueva bifurcación de `main`
+- Haz **y envía** tus cambios. Recordatorio: No necesitas cambiar nada en el archivo `tutorial.json`. Es probable que sólo necesite hacer cambios en `TUTORIAL.md`
+- Ejecute `coderoad build` para recrear el archivo `tutorial.json`
+- Confirme los cambios con `update json` como mensaje
+- Hacer un PR
+
+### Testing Changes on `main`
+
+Si deseas probar sus cambios en `main` después de seguir las instrucciones anteriores, sigue estas instrucciones:
+
+- Siga las instrucciones del [rdb-alpha repo](https://github.com/freeCodeCamp/rdb-alpha) para ejecutar un contenedor
+- Comienza el tutorial usando el archivo `tutorial.json` en la nueva rama
+
+### Reviewing PRs to `main`
+
+Si revisa un PR que solo cambia `main` con problemas de instrucción o gramática como se describe anteriormente, los cambios en `TUTORIAL.md` deberían coincidir con los cambios en `tutorial.json`.
+
+El archivo `tutorial.json` no debería tener cambios para los hash de commit, o ids de paso/nivel. Los comandos de inicio o de nivel o los monitores de archivos probablemente no deberían cambiarse. Hay excepciones si hay un problema con un paso, pero deben ser tratados con más precaución.
+
+Además, ten en cuenta que las instrucciones usualmente usan las lecciones a su alrededor para el contexto, así que asegúrate de que tienen sentido.
+
+### Working on Version Branch
+
+> [!ADVERTENCIA]
+>
+> Recordatorio: Nunca hacer o enviar cambios a una rama de versión que esté en uno de los repos de freeCodeCamp. Siempre crea una nueva
+
+No hay una manera fácil de ver exactamente qué cambió entre las ramas de versiones ya que la historia de Git será reescrita. Aceptar nuevas ramas de versión para usar tendrá que hacerse con una cuidadosa consideración y pruebas.
+
+Estas instrucciones son para cambiar cualquier cosa en una rama de "versión", como pruebas, texto de prueba, archivos de reinicio, añadiendo y eliminando pasos, entre otras cosas.
+
+Sigue estas instrucciones para crear una nueva versión:
+
+- Echa un vistazo a la rama de **última versión** con `git checkout -b vX.X.X upstream/vX.X.X`
+- Crea una nueva rama de eso, incrementando la versión, con `git checkout -b vX.X.Y`
+- Haga sus cambios en la rama de versiones. Ver más información en la [Documentación de CodeRoad](https://coderoad.github.io/docs/edit-tutorial) para saber cómo trabajar con tutoriales
+- Empuja la nueva rama a tu bifurcación con `git push -u origin vX.X.Y`
+- Compruebe la rama `main`
+- Crea una nueva rama de `main`. ej. `feat/version-X.X.Y`
+- Cambia el `uri` en `coderoad.yaml` a tu bifurcación del repositorio. Esto es así que tú y los revisores pueden probarlo antes de empujarlo al repositorio freeCodeCamp. Cambie la versión a la nueva rama en los dos puntos de ese archivo. Añade tus cambios para la nueva versión a `CHANGELOG.md`. Haz cualquier otros cambios que necesites.
+- Comprueba tus cambios con el mensaje `feat: release version X.X.Y - `
+- Ejecute `coderoad build` para crear un nuevo archivo `tutorial.json`
+- Agregar y confirmar el archivo
+- Enviar los cambios a tu bifurcación
+- Prueba tus cambios siguiendo las [instrucciones de prueba a continuación](#testing-changes-to-a-version-branch). Haga cualquier cambio adicional y confirme los cambios como acaba de hacer o, si está satisfecho, siga el resto de las instrucciones
+- Hacer un PR a `principal` usando su nueva rama `feat/version-X.X.Y`. Dale un título de `versión X.X.Y lista para la revisión`. Esto no se fusionará, es sólo para hacer saber a los revisores que hay una nueva versión lista
+- Déjalo aquí para revisores
+
+### Testing Changes to a Version Branch
+
+- Sigue las instrucciones en el repositorio [rdb-alpha](https://github.com/freeCodeCamp/rdb-alpha) para ejecutar un contenedor
+- Comience el tutorial utilizando el archivo `tutorial.json` en cualquier bifurcación en la que estén los cambios. Asegúrate de usar el archivo en la rama `feat: version-X.X.Y` y no la rama `main`
+
+### Pushing a New Version
+
+Antes de empujar una nueva versión, ver la nueva `feat/version-vX.X.Y` (se fusionará a `main`) rama en el fork del usuario. Asegúrese de que hay adiciones al `CHANGELOG. d` archivo que incluye los nuevos cambios, y la versión en los dos manchas de la carga de código `. aml` coincide con la nueva rama de versión.
+
+Si tienes acceso de escritura al repo de freeCodeCamp, has verificado los archivos `CHANGELOG` y `coderoad.yaml`, has probado los cambios usando las instrucciones anteriores, y quieres empujar una nueva versión de un tutorial:
+
+> [!WARNING]
+>
+> Recordatorio: Nunca hacer o enviar cambios a una rama de versión que esté en uno de los repos de freeCodeCamp. Siempre cree una nueva
+
+- Si no tiene un control remoto a donde existen los nuevos cambios, crear un control remoto a la bifurcación del usuario con `git remote add `
+- Elimina cualquier **ramas** locales que compartan un nombre con las nuevas ramas. Probablemente llamado `vX.X.Y` o `feat/version-X.X.Y`
+- Echa un vistazo a la nueva rama de versión con `git checkout -b vX.X.Y /vX.X.Y`
+- Empuja la nueva rama de versión al repositorio freeCodeCamp con `git push -u upstream/vX.X.Y`. Necesitas empujar la nueva rama antes de actualizar `main` con el nuevo archivo `tutorial.json`
+- Compruebe la rama de usuarios que se fusionará en `main` con `git checkout -b feat/version-X.X.Y /feat/version-X.X.Y`
+- Cambie el `uri` en `coderoad.yaml` de vuelta al repositorio freeCodeCamp
+- Agregar y confirmar los cambios
+- Ejecute `coderoad build` para crear el nuevo archivo `tutorial.json`
+- Añadir y confirmar el archivo
+- Empuja los cambios a su bifurcación con `git push -u origin/feat/version-X.X.Y`
+- Hacer un PR a `main` en el repositorio freeCodeCamp
+- Si estás satisfecho, fusionalo o déjalo y pide una reseña a alguien
+- Después de fusionar las relaciones públicas, abra el tutorial siguiendo las instrucciones en el repositorio [rdb-alpha](https://github.com/freeCodeCamp/rdb-alpha) para asegurarse de que está cargando correctamente, y que usted puede pasar unos pasos
+- Finally, if any PRs for this version exist, close them
+
+### How to Revert to a Previous Version
+
+- Create a new branch off of the latest `main` with `git checkout -b revert/to-version-X.X.X`
+- Revertir todos los commits en esta rama hasta e incluyendo el commit de la versión después del que desea revertir. Por ejemplo, puede haber commits que se vean así:
+
+```
+fix: typo
+release: version 1.0.1
+fix: typo
+release: version 1.0.0
+```
+
+Si quieres revertir a v1.0.0, revertir todos los commits de `release: version 1.0.1` y después
+
+- Crea una PR. Dale un título de `revertir: a la versión X.X.X`
diff --git a/src/content/docs/es/intro.md b/src/content/docs/es/intro.md
new file mode 100644
index 00000000..f71f4994
--- /dev/null
+++ b/src/content/docs/es/intro.md
@@ -0,0 +1,51 @@
+---
+title: Contribute to the freeCodeCamp.org Community
+---
+
+La comunidad [freeCodeCamp.org](https://freecodecamp.org) es posible gracias a miles de buenos voluntarios como tú. Si quieres contribuir con tu tiempo y experiencia, estaremos encantados de darte la bienvenida.
+
+:::note
+Antes de continuar, por favor tómate 2 minutos para leer nuestro [Código de Conducta](https://www.freecodecamp.org/code-of-conduct). Lo hacemos cumplir estrictamente en toda nuestra comunidad para que contribuir a freeCodeCamp.org sea una experiencia segura e inclusiva para todos.
+:::
+
+Te invitamos a crear, actualizar y corregir errores en nuestro [plan curricular](#curriculum), ayúdanos a corregir errores en la [plataforma de aprendizaje](#learning-platform) de freeCodeCamp, o [ayúdanos a traducir](#translations) freeCodeCamp.org a deferentes idiomas.
+
+Respondemos a las preguntas más comunes sobre cómo contribuir [nuestras FAQ del colaborador](FAQ).
+
+Feliz contribución.
+
+---
+
+## Plan de estudios
+
+Nuestro plan de estudios está elaborado por la comunidad global de freeCodeCamp. De esta forma, podemos incorporar el conocimiento avanzado proporcionado por voluntarios como tú.
+
+Puedes ayudar a ampliar y mejorar el plan de estudios. También puedes actualizar las historias de usuario del proyecto para explicar mejor los conceptos. Y puedes mejorar nuestras pruebas automatizadas para que podamos probar con más precisión el código de las personas.
+
+**Si estás interesado en mejorar nuestro plan de estudios, aquí mostramos [cómo contribuir al plan de estudios](how-to-work-on-coding-challenges).**
+
+## Traducciones
+
+Estamos localizando freeCodeCamp.org a los principales idiomas del mundo.
+
+Las certificaciones ya están disponibles en algunos de los principales idiomas del mundo como:
+
+- [Chino (中文)](https://www.freecodecamp.org/chinese/learn)
+- [Español](https://www.freecodecamp.org/espanol/learn)
+- [Italiano (Italiano)](https://www.freecodecamp.org/italian/learn)
+- [portugués (Português)](https://www.freecodecamp.org/portuguese/learn)
+- [Ucraniano (Українська)](https://www.freecodecamp.org/ukrainian/learn)
+- [Japonés (日本語)](https://www.freecodecamp.org/japanese/learn)
+- [Alemán (Deutsch)](https://www.freecodecamp.org/german/learn)
+
+Te animamos a leer el anuncio [aquí](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/) y compartirlo con tus amigos para que se sientan entusiasmados con esto.
+
+**Si estás interesado en traducir, aquí tienes [cómo traducir los recursos de freeCodeCamp](how-to-translate-files).**
+
+## Plataforma de aprendizaje
+
+Nuestra plataforma de aprendizaje se ejecuta en un stack de JavaScript moderno. Tiene varios componentes, herramientas y librerías. Estos incluyen Node.js, MongoDB, OAuth 2.0, React, Gatsby, Webpack y más.
+
+A grandes rasgos, tenemos un servidor API basado en Node.js, un conjunto de aplicaciones cliente basadas en React, scripts de prueba para evaluar proyectos currículo enviados por los estudiantes, y más. Si deseas contribuir de manera productiva a la plataforma de aprendizaje, te recomendamos que te familiarices un poco con estas herramientas.
+
+**Si quieres ayudarnos a mejorar nuestra base de código, puedes verlo aquí [Cómo configurar freeCodeCamp](how-to-setup-freecodecamp-locally).**
diff --git a/src/content/docs/es/language-lead-handbook.md b/src/content/docs/es/language-lead-handbook.md
new file mode 100644
index 00000000..e6719c82
--- /dev/null
+++ b/src/content/docs/es/language-lead-handbook.md
@@ -0,0 +1,364 @@
+---
+title: El manual oficial de liderazgo de idioma Freecodecamp
+---
+
+Este manual lo ayudará a configurar y utilizar las herramientas para sus esfuerzos de localización.
+
+## How to Invite New Contributors to Ghost
+
+Ghost allows you to set contributors with different levels of authorization.
+
+La mayoría de tus invitaciones serán para el nivel de "Colaborador". Este nivel permite al usuario crear borradores. Selecciona este rol cuando invitas a un nuevo traductor.
+
+El nivel "autor" permite al usuario crear borradores y publicarlos.
+
+El nivel "Editor" permite al usuario acceder a todos los Borradores y publicarlos. Seleccione este rol al invitar a un nuevo revisor (proofreader).
+
+El nivel "Administrador" está reservado para el personal de freeCodeCamp y los líderes de idiomas.
+
+### How are the Articles Built
+
+Utilizamos un método basado en [JAMStack](https://www.google.com/search?q=what+is+jamstack) para construir y desplegar los artículos. Esta estrategia permite que el sitio se almacene rápidamente en caché y se sirva desde un CDN.
+
+[Ghost](https://ghost.org) actúa como nuestra plataforma de gestión de contenidos, y [11](https://11ty.dev) incorpora los artículos en activos estáticos - HTML, JavaScript y CSS. Sólo estos activos estáticos están desplegados en nuestros servidores.
+
+Este proceso es automatizado y se ejecuta periódicamente. Si usted publica algo ahora, estará disponible en el sitio de noticias dentro de unas pocas horas.
+
+You can find the up-to-date build schedules and status here: https://github.com/freeCodeCamp/news#build
+
+## How to Mention the Original Author of a Translated Article
+
+The original author and the original article are linked automatically adding this code to the Code Injection -> head section in the Draft Settings on Ghost.
+
+```html
+
+```
+
+Con `link` siendo el enlace del artículo original.
+
+## How to Update Trending Articles
+
+> [!TIP] Changing the articles in the footer at least once a month means giving a boost to the linked articles on Google results.
+
+To update the trending articles in the footer, you need to update the [yaml file in the CDN repository](https://github.com/freeCodeCamp/cdn/tree/main/build/universal/trending) for your language. Both the curriculum and the publication reference this file.
+
+For example, here is the file content for the first 6 articles:
+
+```yaml
+article0
+title: "Unire CSV con Python"
+article0link: "https://www.freecodecamp.org/italian/news/come-combinare-file-multipli-in-formato-csv-con-8-righe-di-codice/"
+article1
+title: "Il comando Git push"
+article1link: "https://www.freecodecamp.org/italian/news/il-comando-git-push-spiegato/"
+article2
+title: "Centrare immagini in CSS"
+article2link: "https://www.freecodecamp.org/italian/news/come-centrare-un-immagine-usando/"
+article3
+title: "I codici Alt"
+article3link: "https://www.freecodecamp.org/italian/news/codici-alt/"
+article4
+title: "Tenere a bada il footer"
+article4link: "https://www.freecodecamp.org/italian/news/come-mantenere-il-footer-al-suo-posto/"
+article5
+title: "Cosa è API?"
+article5link: "https://www.freecodecamp.org/italian/news/cose-un-api-in-italiano-per-favore/"
+```
+
+Each number represents one of the 30 articles in the footer. Make sure to match the title and the link correctly.
+
+For each article, you will need to create a shorter title to use in the footer. Each title must stay on a single line and not go to a new line.
+
+You will want to [build the translated client locally](how-to-enable-new-languages) to see if the titles have the right length. You can preview the changes by editing the `trending.json` file in your local environment:
+
+1. Update your `.env` file to use your language for `CLIENT_LOCALE` and `CURRICULUM_LOCALE`.
+
+2. Run `pnpm run create:shared`. This will automatically generate the `trending.json` file for your language under the `/client/i18n/locales/` directory.
+
+3. Start the server by running `pnpm run develop:server` in one terminal window.
+
+4. Edit the `trending.json` to contain the titles you want to preview. You may want to convert your `.yaml` file into JSON format with an automatic tool.
+
+5. In another terminal window, run `pnpm run clean:client`, and then `pnpm run develop:client`
+
+## How to Translate Articles in the Footer Links
+
+There are some links listed at the bottom of the footer (About, Alumni Network, Open Source, etc.) and some of them can be translated into your language in the same way as other articles.
+
+Articles that can be translated:
+
+- About
+- Support
+- Academic Honesty
+- Code of Conduct
+
+The following articles should **not** be translated:
+
+- Shop
+- Sponsors
+- Privacy Policy
+- Terms of Service
+- Copyright Policy
+
+The following links are pointing to external sites and cannot be translated:
+
+- Alumni Network
+- Open Source
+
+### Change the Footer Links in the News
+
+Once you have translated and published the articles listed as "can be translated" above, you can update the links in the footer for `/news` by editing the file at `news/config/i18n/locales//links.json` in the [freeCodeCamp/news](https://github.com/freeCodeCamp/news) repository.
+
+:::note
+Pull requests to this repository are currently limited to staff only. If you want to update this file, ask someone on the staff team for help.
+:::
+
+Update the following part in the file:
+
+```json
+{
+ ...
+ "footer": {
+ "about": "https://www.freecodecamp.org/news/about/",
+ "support": "https://www.freecodecamp.org/news/support/",
+ "honesty": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc": "https://www.freecodecamp.org/news/code-of-conduct/"
+ }
+}
+```
+
+### Change the Footer Links in the Curriculum
+
+When you have translated and published the articles listed as "can be translated" above, as well as when the curriculum in your language is ready for launch, you can update the links in the footer for `/learn` by editing the file at `client/i18n/locales//links.json` in the [freeCodeCamp/freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp) repository.
+
+> [!WARNING] Only "About", "Support", "Academic Honesty", and "Code of Conduct" can be translated. Leave other URLs unchanged.
+
+Update the following part in the file:
+
+```json
+{
+ ...
+ "footer": {
+ "about-url": "https://www.freecodecamp.org/news/about/",
+ "shop-url": "https://www.freecodecamp.org/shop/",
+ "support-url": "https://www.freecodecamp.org/news/support/",
+ "sponsors-url": "https://www.freecodecamp.org/news/sponsors/",
+ "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/",
+ "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/",
+ "tos-url": "https://www.freecodecamp.org/news/terms-of-service/",
+ "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
+ },
+ ...
+}
+```
+
+## How to Translate the Info Boxes Headers in the Documentation
+
+You can find these boxes all around the documentation:
+
+:::note
+I am a note box
+:::
+
+> [!TIP] I am a tip box
+
+> [!WARNING] I am a warning box
+
+:::danger
+I am an attention box
+:::
+
+By default, their headers appear in English even in the translated docs.
+
+You can have the headers translated in the docs in your language by changing the file `docs/index.html`, in this way:
+
+Inside the `script` element there is an object, find the `flexibleAlerts` property, which has this shape:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+Inside the object of the label property, before the `'/'` property, you would add a new property for your language, like `/i18n//`.
+
+For example, adding the translations for Portuguese would appear like this:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/i18n/portuguese/': 'Observação',
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/i18n/portuguese/': 'Dica',
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/i18n/portuguese/': 'Aviso',
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/i18n/portuguese/': 'Atenção',
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+## How to Translate the Motivational Quotes
+
+The motivational quotes can be found in the [curriculum repository](https://github.com/freeCodeCamp/freeCodeCamp/) in the `/client/i18n/locales//motivation.json` file.
+
+Este archivo tiene una estructura general de:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": []
+}
+```
+
+The compliments are the short sentences that appear at the completion of a challenge.
+
+You don't need to directly translate the sentences used in English, you can write a set of short sentences that are appropriate to show at the completion of a challenge.
+
+The `compliments` array is an array of strings. So, for example, you would write:
+
+```json
+{
+ "compliments": ["A tutta birra!", "Pikachu, scelgo te!"],
+ "motivationalQuotes": []
+}
+```
+
+> [!TIP] You should start with at least a dozen compliments to have some variety when users complete challenges.
+
+The motivational quotes are the quotes that appear at https://freecodecamp.org/learn.
+
+The `motivationalQuotes` array is an array of objects, these objects should include a `quote` property and an `author` property. like this:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": [
+ {
+ "quote": "Se i costruttori costruissero come i programmatori programmano, il primo picchio che passa potrebbe distruggere la civiltà.",
+ "author": "Artur Bloch, Seconda legge di Weinberg"
+ },
+ {
+ "quote": "I bravi programmatori sanno cosa scrivere. I migliori sanno cosa riscrivere.",
+ "author": "Eric Steven Raymond"
+ }
+ ]
+}
+```
+
+> [!TIP] You should start with at least a dozen quotes, to have some variety. A new quote is shown every time the user reloads the page.
+
+## How to Update the Common Links
+
+We maintain a file of common links used throughout our [curriculum site](https://github.com/freecodecamp/freecodecamp) in the `/client/i18n/locales//links.json` file.
+
+Some of these links will not change - but you should update the `/news` article links to point to your language's translated version of that article when it is published.
+
+You should also update the `help` categories to point to your language's subforum (usually `language/category`, like `Italiano/HTML-CSS`). This will allow campers to create "help posts" in the correct forum location.
+
+## How to Update the Site Meta-Data
+
+The site meta-data is in the `/client/i18n/locales//meta-tags.json` file. This file has five keys: `title`, `description`, `social-description`, `keywords`, and `youre-unsubscribed`.
+
+The `youre-unsubscribed` value should be directly translated. The other values will need to be translated as closely as possible, while also considering common search terms and phrases used in your language.
+
+If you need help with this, reach out to us in the [contributor chat](https://discord.gg/PRyKn3Vbay)
+
+## Pre-Translate Workflow on Crowdin
+
+The Pre-Translate workflow can be used to apply translations from the Translation Memory to strings.
+
+> [!TIP] Really useful to restore a lot of translations from the Translation Memory in bulk when a lot of files have been updated.
+
+You can find the Pre-Translation workflow at the top of the page in the console of a project. If you see "Go to console" in the upper right corner, click there first.
+
+
+
+
+
+You can choose "From Machine Translation" or "From Translation Memory". Choose "Translation Memory" to recover translations from memory.
+
+Then there are three steps to complete:
+
+1. Files. Choose which files to translate, you can do all the projects, or specific folders or files.
+2. Languages. Set your language here.
+3. Existing Translations. The best combination here is "100% match" and "Apply to untranslated strings only". Do not approve automatically, as it's always best to have a human eye on things.
+
+
+
+When you have finished setting this, press the Pre-Translate button and wait. It will alert you once it has finished. The time it takes depends on how many untranslated strings are in the chosen files.
+
+## How to Update Crowdin Glossary
+
+> [!TIP] An updated glossary helps in having a homogeneous translation of technical terms.
+
+The Crowdin Glossary is kept in the [crowdin-glossaries](https://github.com/freeCodeCamp/crowdin-glossaries) repository.
+
+In the `glossaries` folder, there are various `*.csv` (comma,separated values) files, one for each of the crowdin projects that have a glossary that can be updated from this workflow.
+
+The `client.csv` file is for the Learn User Interface project, the `curriculum.csv` file is for the Coding Curriculum project, the `docs.csv` file is for the Contributing Documentation project.
+
+To update the Crowdin Glossaries, you need to clone this repo locally. Open the `.csv` file with an appropriate program, for example, Microsoft Excel.
+
+In the `.csv` file you will find that the English language occupies the first three columns, `Term:English` is the column for the English term, `Description:English` is the column for the English description, and `Part:English` is for the part of speech (e.g., noun, verb etc.) of the term.
+
+Then, each target language has two columns. If you translate to Dothraki, you will be interested in the columns `Term:Dothraki` and `Description:Dothraki`. The column `Term:Dothraki` is for the translation of the term in Dothraki, and the column `Description:Dothraki` is for a description of the term in Dothraki.
+
+> [!TIP] In programs like Microsoft Excel, you can hide the columns of the other languages to free up screen real-estate and see the English columns and the target language columns near each other.
+
+After you have made the changes and saved the file, you will need to make a PR with the proposed changes. After the PR is accepted, you will need to run the GitHub Action workflow to update the Crowdin Glossary. Your glossary changes will not have immediate effects, but they will come.
+
+## How to Promote a Contributor to Proofreader
+
+If you consider that a contributor could become a Crowdin Proofreader, you can give the proofreader role to them this way:
+
+In Crowdin, individuate the `User management` on the left-hand side menu.
+
+This will open the user management tools, you will be able to see the list of all the users.
+
+Search for the user who will become a proofreader. Use the three dots menu on the user row to open a menu and select "Add to team". The proofreader teams have a standard name of `Proof Readers ()`, you can search the team using the language name. Once you have selected the team, use the "ADD" button at the bottom of the page to finalize the thing.
+
+The user is now a proofreader.
+
+> [!TIP] The newly promoted proofreader could benefit from reading the [How to Proofread Files](how-to-proofread-files) documentation.
+
+## How to Add or Update a Language
+
+Check out the [how to enable new language](how-to-enable-new-languages) docs. If you are updating a language the section on [set translated superblocks](how-to-enable-new-languages#set-translated-superblocks) should be helpful.
diff --git a/src/content/docs/es/moderator-handbook.md b/src/content/docs/es/moderator-handbook.md
new file mode 100644
index 00000000..74f93ba3
--- /dev/null
+++ b/src/content/docs/es/moderator-handbook.md
@@ -0,0 +1,376 @@
+---
+title: El Manual Oficial del Moderador de freeCodeCamp
+---
+
+Este manual te ayudará a moderar diferentes secciones dentro de nuestra comunidad. Esto cubre conversaciones e interacciones en asuntos e hilos de pull request en GitHub, el foro de la comunidad, las salas de chat y otras comunidades oficiales que proveemos.
+
+:::note
+Todos los moderadores de freeCodeCamp son moderadores de toda la comunidad. Esto significa que confiamos en ti para supervisar cualquiera de estos lugares.
+:::
+
+Puedes ser moderador en cualquiera de las plataformas que sea de mas interés para ti. Algunos moderadores solo ayudan a través de GitHub, mientras que otros solo ayudan a través del foro. Algunos moderadores son activos en todas partes.
+
+Al final, lo que queremos es que disfrutes siendo moderador, e inviertas tu tiempo en las secciones que sean de tu interés.
+
+> "Con un gran poder, viene una gran responsabilidad" - Tio Ben
+
+Como moderador, el temperamento es más importante que las habilidades técnicas.
+
+Escucha. Se servicial. No abuses de tu poder.
+
+freeCodeCamp es una comunidad inclusiva y necesitamos mantenerla de esa manera.
+
+Tenemos un solo [Código de Conducta](https://code-of-conduct.freecodecamp.org) que gobierna toda nuestra comunidad. Cuantas menos reglas, mas fácil serán de recordar. Puedes leerlas y memorizarlas [aquí](https://code-of-conduct.freecodecamp.org).
+
+:::note
+As a moderator, we would add you to one or more teams on GitHub, our community forums & chat servers. If you are missing access to a platform that you would like to moderate, please [reach out to a staff member](FAQ#additional-assistance).
+:::
+
+## Moderando GitHub
+
+Las moderadoras tienen dos responsabilidades principales en GiHub:
+
+1. Evaluar y responder a problemas.
+2. Revisión y fusión de pull requests (también conocido como QA).
+
+### Moderando conflictos (issues) de GitHub
+
+Utilizamos nuestro repositorio principal [`freeCodeCamp/freeCodeCamp`](https://github.com/freeCodeCamp/freeCodeCamp/issues) como un rastreador de problemas común para todos nuestros repositorios. Todos los días recibimos nuevos problemas, que hay que clasificar, etiquetar y tratar. Hay tambien una gran seccion para empezar a ayudar con proyectos de origen-abierto (open-source).
+
+#### Problema de clasificación
+
+La clasificación (o triaging en inglés) es un proceso de priorización de atención para un nuevo reporte de problema. Tenemos una extensa lista de etiquetas que utilizamos para marcar la prioridad, categoría, estado y alcance de cada tema.
+
+Puedes ayudarnos a organizar y clasificar los reportes de problemas mediante la aplicación de etiquetas de [esta lista](https://github.com/freeCodeCamp/freeCodeCamp/labels). Por lo general, hay una descripción junto a la etiqueta que explica su significado.
+
+Por favor, presta especial atención a las etiquetas `"help wanted"` y `"first timers only"`. Estos se deben agregar a los hilos que creas que se puedan abrir a posibles contribuyentes para realizar una pull request.
+
+For triaging a trivial issue such as a typo fix, it is recommended to apply a "first timers only" label along with additional information. You can utilize the [reply template](reply-templates#first-timer-only-issues) provided for this purpose.
+
+#### Cierre de solicitudes de extracción y problemas obsoletos, desactualizados e inactivos
+
+- Los problemas obsoletos o RP son aquellos que no han visto ninguna actividad del autor durante 21 días (3 semanas desde la última actividad), pero solo después de que un moderador haya solicitado más información / cambios.
+
+- La actividad se define como: Comentarios que solicitan una actualización en PR y clases como `estado: actualización necesaria` etiqueta, etc.
+
+- Si el colaborador solicita ayuda adicional o incluso tiempo, lo anterior se puede relajar y revisar después de que se dé una respuesta. En cualquier caso, los mods deben usar su mejor criterio para resolver el estado de PR.
+
+> [!TIP] We recommend you use this list of standard [reply templates](reply-templates) while triaging issues.
+
+### Moderación de solicitudes de extracción
+
+Las solicitudes de extracción (PRs) es la forma en que los colaboradores envían cambios a los repositorios de freeCodeCamp´s. Debemos realizar un control de calidad (QA) en los pull requests antes de decidir si, cambios de solicitud, o cerrarlos.
+
+#### Tipo de Pull Requests
+
+1. **Edición a las instrucciones del desafío**
+
+ Estos son cambios en el texto de los desafíos: la descripción, las instrucciones o el texto de prueba.
+
+ Puedes revisar las ediciones directamente en GitHub y decidir ahí si aceptar o no los cambios. Aqui debemos ser un poco mas cuidadosos, porque millones de personas leerán estos textos en la medida que vayan completando el programa de freeCodeCamp. ¿El pull request hace más claro el texto sin alargarlo demasiado? ¿Son las recomendaciones relevantes o pedantes en exceso? Recuerda que nuestro objetivo es que los retos sean lo más claro y cortos posibles. No son el lugar para detalles oscuros. Además, los colaboradores podrían intentar añadir enlaces hacia recursos en los desafíos.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ Si los cambios se ven bien, por favor asegúrese de dejar una aprobación con un comentario "LGTM" (Looks Good To Me). Una vez que un Pull Request recibe al menos dos aprobaciones (incluyendo la tuya) de los moderadores o del equipo de desarrollo, puedes hacer un Merge.
+
+2. **Edición al código del desafío**
+
+ These are changes to the code in a challenge - the challenge seed, challenge solution, and test strings.
+
+ These pull requests need to be pulled down from GitHub and tested on your local computer or Gitpod to make sure the challenge tests can still be passed with the current solution and to make sure the new code doesn't introduce any errors.
+
+ Algunos colaboradores pueden intentar añadir pruebas adicionales para cubrir casos marginales. Debemos tener cuidado de no complicar demasiado el reto. Estos retos y sus pruebas deben ser tan simples e intuitivas como sea posible. Aparte de los desafíos del algoritmo y la sección de preparación de la entrevista, los estudiantes deberían ser capaces de resolver cada desafío en unos 2 minutos.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ If the changes look good, please ensure to leave an approval with an "LGTM" comment. Una vez que un Pull Request recibe al menos dos aprovaciones (incluyendo la tuya) de los moderadores o del equipo de desarrollo, puedes hacer un Merge.
+
+3. **Cambios a la Plataforma**
+
+ Estas ediciones de código cambian la funcionalidad de la propia plataforma freCodeCamp.
+
+ A veces los colaboradores tratan de hacer cambios sin mucha explicación, pero para cambios de código necesitamos asegurarnos de que alla una verdadera necesidad para los mismos. Estos Pull Request deben hacer referencia a un GitHub Issue preexistente, donde discutir las razones del cambio. Entonces puede abrir el pull request en su computadora y probarlo localmente.
+
+ Después de haberlo hecho, si los cambios se ven bien, no los fusiones todavía. Puede comentar sobre la solicitud de extracción diciendo "LGTM", luego mencionar ** "@ freeCodeCamp / dev-team" ** para que puedan echar un vistazo final.
+
+4. **Relaciones públicas automatizadas (Dependabot)**
+
+ Algunos RP son actualizaciones de dependencia automatizadas realizadas a través de una integración. Tu no debes fusionar ni aprobar estos RP. Uno de los miembros del equipo de desarrollo se encargará de revisar y fusionar dichos PRs automatizados.
+
+#### How to Review, Merge, or Close Pull Requests
+
+##### Assign yourself to a Pull Request:
+
+En primer lugar, cuando elijas un pull request a QA, deberás asignarte a él. Puedes hacer esto haciendo clic en el enlace "assign yourself" debajo de la parte "assignees" en la columna derecha de la interfaz de GitHub.
+
+Dependiendo del tipo de pull request que sea, siga las reglas indicadas arriba.
+
+##### Ensure the CI Checks are Passing:
+
+Antes de hacer Merge a cualquier Pull Request, asegúrate que Github está tomando todos los Checks (las marcas verdes de aprobación) y que están pasando correctamente en los Pull Request. Si ves que falla alguna de las comprobaciones, investiga y obtén alguna aclaración sobre la causa raíz. ¿Se está realizando el cambio rompiendo nuestras pruebas? ¿El sitio compilará correctamente si el PR hace Merge? Estos controles son fundamentales para la estabilidad de la plataforma.
+
+> [!ALERTA] Al fusionar un PR que no cumple con las comprobaciones de CI/CD puede causar dificultades a todas las partes interesadas, incluido el equipo de desarrollo y los colaboradores.
+
+##### Handling Merge Conflicts:
+
+Sometimes there will be a merge conflict.
+
+Esto significa que otro pull request ha hecho un cambio a esa parte exacta del mismo archivo. GitHub tiene una herramienta para abordar estos conflictos de fusión en GitHub. Puedes tratar de resolver estos conflictos. Utilice su mejor criterio.
+
+Los cambios del pull request estarán en la parte superior, y los cambios de la rama principal estarán en la parte inferior. A veces habrá información redundante que se puede eliminar. Antes de que finalices, cerciórate de eliminar el `<<<<<<`, `======`, y `>>>>>>` que Git añade para indicar áreas de conflicto.
+
+Si no está seguro, pida ayuda a uno de los compañeros moderadores o al equipo de desarrollo.
+
+##### Merging a Valid Pull Request:
+
+Si el pull request parece estar listo para fusionarse (y no requiere la aprobación de @raisedadead), puedes seguir adelante y fusionarlo. Asegúrese de utilizar la opción predeterminada ** "Squash and Merge" **. Esto juntará todos los commits de las solicitudes de extracción en un solo commit, lo que hará que el historial de Git sea mucho más fácil de leer.
+
+> You should then comment on the pull request, thanking the contributor in your own personal way!
+
+Si el autor del pull request es un "colaborador por primera vez" también deberias felicitarlos por su primera fusión de pull request en el repositorio. Puedes mirar la esquina superior derecha del cuerpo del PR, para determinar un colaborador de primera vez. Mostrará `First-time contributor` como se muestra a continuación:
+
+
+
+ First-time contributor badge on pull requests (screenshot)
+
+
+
+
+
+
+Si el pull request no parece listo para fusionarse, puedes responder amablemente al autor que debe hacer para prepararlo. Con suerte, responderán y prepararán sus pull request.
+
+Si necesitas una segunda opinión sobre un pull request, sigue adelante y deja tus comentarios sobre el pull request, luego agregue la etiqueta "discussing" al pull request.
+
+##### Closing an Invalid Pull Request:
+
+A menudo, una pull request requiere poco esfuerzo. You can usually tell this immediately when the contributor didn't bother checking the checkboxes in the Pull Request Template or used a generic pull request title like "Made changes" or "Update index.md".
+
+También hay situaciones en las que el colaborador está tratando de agregar un enlace a su sitio web, incluir una librería que creó o realizar una edición frívola que no ayuda a nadie más que a ellos mismos.
+
+You can close these invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+#### Filtering Pull Requests
+
+To sort Pull Requests for Quality Assurance for quick access to PRs that are ready for review, do not have a merge conflict, are not blocked, and have all status checks in green, use the following link to apply the filters:
+
+[Direct link with filter applied](https://github.com/freeCodeCamp/freeCodeCamp/pulls?q=is%3Aopen+is%3Apr+-label%3A%22status%3A+blocked%22+-label%3A%22status%3A+merge+conflict%22+status%3Asuccess+draft%3Afalse)
+
+#### Other Guidelines for Moderators on GitHub
+
+Though you will have write access to freeCodeCamp's repository, **you should never push code directly to freeCodeCamp repositories**. All code should enter freeCodeCamp's codebase in the form of a pull request from a fork of the repository.
+
+Also, you should never accept your own PRs. They must be reviewed by another moderator, just like any other PR.
+
+If you notice anyone breaking the [Code of Conduct](https://code-of-conduct.freecodecamp.org) on GitHub issues, or opening pull requests with malicious content or code, email `support[at]freecodecamp.org` with a link to the offending pull request, and we can consider banning them from freeCodeCamp's GitHub organization entirely.
+
+## Moderando el foro
+
+As a moderator, you help keep our community an enjoyable place for anyone to learn and get help. You will deal with flagged posts and handle spam, off-topic, and other inappropriate conversations.
+
+Note that once you are a moderator on the forum, you will start to see blue moderator hints about forum members, like "this is the first time [person] has posted - let's welcome them to the community!" or "[person] hasn't posted in a long time - let's welcome them back."
+
+![A blue text message saying "This is the first time [person] has posted - let's welcome them to the community!](https://i.imgur.com/mPmVgzK.png)
+
+These are opportunities for you to welcome them and make them feel extra special. You never know which person who's marginally involved may become our next super-helper, helping many other people in their coding journey. Even the slightest kindness may trigger a cascade of good deeds.
+
+### Eliminando mensajes del foro
+
+Forum moderators can delete users' posts. You should only do this for the following instances:
+
+1. Alguien ha publicado una imagen pornográfica o gráficamente violenta.
+2. Alguien ha publicado un enlace o código que es de naturaleza maliciosa y podría dañar a otros usuarios que hagan clic en él.
+3. Alguien ha inundado un hilo con muchos mensajes de spam.
+4. An account has been created, beyond a reasonable doubt, to spam.
+
+### Tratando con Spam
+
+For the first spam post of a legitimate user (ie. whose intent isn't to spam the forum but to learn/contribute to the forum), send them a message explaining the problem, and remove the link or post as appropriate. Leave a note on the user's profile explaining the action you have taken. If the problem persists, then quietly block the user from posting (using the silence option on the User Admin panel). Send the user a warning with the [Code of Conduct](https://code-of-conduct.freecodecamp.org). Check the box in the private message indicating that your message is a "formal warning."
+
+As a moderator, you can ask questions and report incidents in the [mod-team forum section](https://forum.freecodecamp.org/c/mod-team/4).
+
+### Dealing with Off-Topic Conversations
+
+Posts or topics that seem to be in the wrong place can be recategorized or renamed to whatever would be appropriate.
+
+In exceptional circumstances, it may be appropriate for a moderator to fork a discussion into multiple threads.
+
+Again, if you have any problems or questions, make a post with your actions in the `"Staff"` category, and tag another moderator if you want them to review your moderating actions.
+
+### Dealing with Posted Solutions
+
+If a user replies in a help thread for the freeCodeCamp curriculum with a solution, remove it and use the **Solution Instead of Help** canned reply (or a similar response in your own words).
+
+If the OP (Original Poster) replies within a freeCodeCamp curriculum help thread with their final solution, blur it, and use the **Blurred Spoiler Solution** canned reply.
+
+If a user creates a thread asking for feedback on a solution, move the thread to the feedback subforum and blur the solution, as necessary. If the user is only posting the solution to show it off, then unlist the thread and use the **Solutions Thread** canned reply.
+
+### Underage Users
+
+Our [Terms of Service](https://freecodecamp.org/terms) require that freeCodeCamp users be at least 13 years of age. If a user reveals that they are under the age of 13, send them the message below, suspend their account, then email the link of their forum account to `support[at]freecodecamp.org` for their freeCodeCamp /learn and forum accounts removal.
+
+```markdown
+SUBJECT: Los usuarios menores de 13 años no pueden utilizar el foro según nuestras Condiciones de Servicio.
+
+Nos hemos enterado de que usted es menor de 13 años. Por los [Términos de servicio de freeCodeCamp](https://freecodecamp.org/terms), debes tener al menos 13 años para usar el sitio o el foro. Eliminaremos tu cuenta de freeCodeCamp y tu cuenta del foro. Esta restricción nos mantiene en cumplimiento de las leyes estadounidenses.
+
+Por favor, vuelva a unirse una vez que haya alcanzado al menos 13 años de edad.
+
+Gracias por su entendimiento.
+```
+
+### Account Deletion Requests
+
+If a user requests their account to be deleted, send the following:
+
+```markdown
+Deleting an account with many posts disrupts the flow of conversation, and could remove helpful information for other Campers.
+
+We can anonymize your account, which will remove your username along with any other public information associated with your forum account. Your posts will remain, but will be attributed to an anonymous user, and you will be unable to log in to the account, as it will no longer be associated with an email address.
+
+If you would like to proceed with this, please reply to this message with your consent.
+```
+
+If a user insists on having their account deleted, ask them to email `support[at]freecodecamp.org` with a link to their forum account.
+
+### Moderating Via Cell Phone
+
+Moderating the forum is possible via a cell phone but you may encounter some usage quirks. This is not an exhaustive list.
+
+- When trying to include a "Canned reply" in a response, if the menu doesn't open (after clicking on the gear), click on the text area first then try it again.
+- The moderator's 'wrench' is at the bottom of the view-port but if you click it and cannot see the "Select Posts" button because it has scrolled out of view, you may need to try to scroll to it, though sometimes that doesn't work in which case moving to a desktop/laptop monitor may be needed.
+- Sometimes clicking on the three-dot menu below a post can hide the reply icon. Reload the page to get it back.
+
+## Moderando Facebook
+
+If you see anything that seems to break our [Code of Conduct](https://code-of-conduct.freecodecamp.org/), you should delete it immediately.
+
+Sometimes people will post things that they think are funny. They don't realize that what they said or what they shared could be interpreted as offensive. You should delete such posts, but not necessarily ban the person. Hopefully, the user will come to understand that what they posted was inappropriate because the post was deleted.
+
+But if it is an egregious offense that can't reasonably be attributed to a cultural difference or a misunderstanding of the English language. In that case, you should strongly consider blocking the member from the Facebook group.
+
+## Moderando Discord
+
+Here's how moderators deal with violations of our [Code of Conduct](https://code-of-conduct.freecodecamp.org/) on our chat server:
+
+:::note
+Camperbot serves as our moderation bot, and all of the commands use Discord's native slash command interface. You can see a list of all of the commands by typing `/` in any channel.
+:::
+
+1. **Asegúrese de que el usuario ha querido violar el [Código de Conducta](https://code-of-conduct.freecodecamp.org).**
+
+ Not all violations of the [Code of Conduct](https://code-of-conduct.freecodecamp.org) were intended as such. A new camper might post a large amount of code for help, unaware that this can be disruptive to the conversation. En estos casos, puedes pedir que copien su código en aplicaciones como CodePen o Pastebin.
+
+2. **If the camper clearly and intentionally violates the [Code of Conduct](https://code-of-conduct.freecodecamp.org), the moderator will proceed as follows:**
+
+ For minor offences, a warning may be issued with the `/warn` command. For more egregious offences, you can remove the member from the server temporarily with the `/kick` command, or permanently with the `/ban` command. In some cases, a member may just need some time to cool off and collect their thoughts - the `/mute` command allows you to prevent them from engaging with our community for a set period of time. A muted member can see the conversation, but cannot post messages or add reactions.
+
+ All moderation commands will take a `reason` parameter, which should be a short explanation of why the action was taken. Moderation actions done with the bot will be logged in `#mod-actions`, which allows us all to stay on the same page. As such, we should avoid using Discord's built-in moderation tools, as they will not be logged.
+
+ > [!WARNING] The reason provided to a moderation command will also be included in the DM notification to the camper. Please remember to be professional here.
+
+3. **Creando una discusión privada**
+
+ Puede haber situaciones en las que necesites abordar una inquietud con un usuario en privado. Esto no debe hacerse a través de Mensajes Directos, lo que puede llevar a situaciones en las que reclamas una cosa y el campista reclama otra. En su lugar, use la funcionalidad del bot para crear una discusión privada:
+
+ - Call the `/private` command, where `target` is the camper you want to open a private channel with.
+ - The bot will create a new channel, and add the mentioned camper and all moderators with the `Your Friendly Moderator` role. While all moderators are added to the channel for transparency, the moderator who calls this command should be the only one to interact with the camper unless they request assistance.
+ - When the conversation is complete, click the `❌ Close` button _on the first message in the private channel_ to have the bot close and delete that channel.
+
+4. **Deleting messages**
+
+ Our moderation bot is configured to log deleted messages automatically in the `#mod-actions` channel. If a message is not in line with our Code of Conduct, or otherwise not appropriate for our community, you are generally safe to delete it.
+
+ Note that if the message contains content that violates Discord's terms of service, you'll want to report it via https://dis.gd/report **prior to** deleting it.
+
+5. **Don’t threaten to take action**
+
+ If a camper breaks the [Code of Conduct](https://code-of-conduct.freecodecamp.org), don’t threaten to take moderator action, and never warn them in public. Instead, talk to them privately using the bot's `/private` command, or use the bot's moderation commands.
+
+ If a violation was clearly unintended and doesn't warrant moderation action or private conversation, make the offending camper aware of their actions without making it come across as a warning.
+
+ Por ejemplo:
+
+ - Camper posts a wall of code to request help:
+
+ Moderator: **@username** Please use CodePen or Pastebin when posting large amounts of code.
+
+ - Or if you really have to explain why:
+
+ Moderator: **@username** Please use CodePen or Pastebin when posting large amounts of code, because it disrupts the chat for everyone and could be considered spamming according to our [Code of Conduct](https://code-of-conduct.freecodecamp.org).
+
+ - For mild and unintentional violations of the [Code of Conduct](https://code-of-conduct.freecodecamp.org):
+
+ Moderator: This is a friendly reminder for everyone to follow the [Code of Conduct](https://code-of-conduct.freecodecamp.org): https://code-of-conduct.freecodecamp.org/
+
+6. **No se preocupe de ser un moderador**
+
+ Do not see yourself as above the community. **You are the community.** And the community has trusted you to help protect something rare that we all share - a _welcoming_ place for new developers.
+
+ If you brag about being a moderator, people may feel uneasy around you, in the same way that people may feel uneasy around a police officer, even if they’re doing nothing wrong. This is just human nature.
+
+7. **No contradigas a otros moderadores**
+
+ If you disagree with a moderator's action, talk with them in private or bring it up in the #mod-chat channel. Never override a moderator's action, and never contradict the other moderator(s) publicly. Instead, have a cool-headed discussion in `#mod-chat` and convince the moderator that they themselves should reverse their ban or change their PoV (Point of View).
+
+ _Remember: We’re all on the same team. We want to dignify the role of moderators and present a unified front._
+
+8. **Habla con otros moderadores**
+
+ We have a `#mod-chat` room for moderators only. Use it! If you feel uncomfortable with handling a certain situation, ask other moderators for help. If you think something should be discussed, do it. You're part of the team, and we value every team member's input! Even if you totally disagree with anything in these guidelines or the [Code of Conduct](https://code-of-conduct.freecodecamp.org)!
+
+9. **Temporalmente inactivo**
+
+ If you're not going to be active as a Moderator for a while due to vacation, illness, or any other reason, make sure to let the others know in the `#mod-chat` channel. This is so we know if we can count on you to be regularly active on the server or not.
+
+## Cómo convertirse en moderador
+
+Suppose you are helping people in the community consistently over time. In that case, our moderator team will eventually take notice, and one of them will mention you as a possible moderator to [our staff](https://forum.freecodecamp.org/g/Team). There are no shortcuts to becoming a moderator.
+
+If you are approved, we will add you to our moderator teams on [GitHub](https://github.com/orgs/freeCodeCamp/teams/moderators), [forum](https://forum.freecodecamp.org/g/moderators), chat, etc.
+
+:::note
+For GitHub: After you've been accepted as a moderator, you will receive a Github repository invitation. You'll need to head over towards [freeCodeCamp GitHub Organization Invitation](https://github.com/orgs/freeCodeCamp/invitation) to be able to accept the invitation.
+:::
+
+> This is required for us to be able to give you write access to some of our repositories.
+
+## How Our Contributors Room Works
+
+Anyone is welcome in the [contributors room on our chat server](https://discord.gg/PRyKn3Vbay). It is the designated chat room for moderators and other campers who contribute to our community in any number of ways, including through study groups.
+
+We assume contributors will read anything in this room that directly mentions them with an **@username**. Everything else is optional, but feel free to read anything anyone posts in there and interact.
+
+## Dealing with Solicitors
+
+You may be approached by organizations who want to partner or co-brand with freeCodeCamp somehow. Once you realize that this is what they're after, **please stop talking to them** and tell them to email `team[at]freecodecamp.org`.
+
+We get proposals like this all the time, and the staff are in the best position to judge whether such a relationship will be worth it for our community (and it rarely is).
+
+## Dealing with (Mental) Health Inquiries
+
+You may come across situations where users seek medical advice or are dealing with mental health issues and are looking for support.
+
+As a matter of policy, you should avoid talking privately about these matters. Should the situation reflect back to freeCodeCamp, we want to have the conversation(s) on record. Make it clear that we are not medical professionals and that you encourage the user to find professional help.
+
+As difficult as it sometimes can be, avoid giving any tips or advice and rather point the user in the direction of seeking professional help!
+
+If this happens on our chat server: Create a private channel for the user and the moderator team. This can be done with the bot's `private` command.
+
+- The user is guaranteed some privacy.
+- Public chat is no longer disrupted.
+- Other team members can pitch in, should you feel uncomfortable dealing with the situation yourself.
+
+Helpful URLs:
+
+http://suicide.org/international-suicide-hotlines.html
+
+## A Note on Free Speech
+
+Sometimes people will defend something offensive or incendiary that they said as "free speech."
+
+This XKCD comic summarizes perfectly most communities' thoughts on free speech.
+
+
+
+Thanks for reading this, and thanks for helping the developer community!
diff --git a/src/content/docs/es/moderator-onboarding-guide.md b/src/content/docs/es/moderator-onboarding-guide.md
new file mode 100644
index 00000000..52f87586
--- /dev/null
+++ b/src/content/docs/es/moderator-onboarding-guide.md
@@ -0,0 +1,54 @@
+---
+title: Guía oficial de incorporación de moderadores de freeCodeCamp
+---
+
+This guide will help new moderators get up and running with the processes and procedures followed by experienced moderators on the freeCodeCamp community forum and other official communities we foster.
+
+:::note
+Si aún no ha leído el [Manual del moderador](https://contribute.freecodecamp.org/#/moderator-handbook), deberia empezar por ahí primero.
+:::
+
+## Nuestro foro
+
+### Primeros pasos
+
+Lo primero que puede notar después de recibir el estado de moderador en el foro, es que su interfaz se verá algo diferente, con nuevas herramientas de administración para explorar y, acceder al subforo Mod-Team.
+
+Algunas de las nuevas herramientas aparecerán dentro de un nuevo elemento de menú que parece una llave inglesa. Algunos aparecerán como nuevas pestañas o botones, o incluso nuevas opciones habilitadas dentro de los menús del foro.
+
+Para familiarizarse con las nuevas herramientas y poderes, puede combinar uno o más de los siguientes métodos durante su primera semana con este rol elevado:
+
+> [!TIP] Los dos primeros son los más importantes.
+
+### Familiarícese con las herramientas de administración de discord
+
+The freeCodeCamp forum is a Discourse forum and follows many of the same guidelines of other forums built on Discourse. Para comenzar a familiarizarse con Discord y la función de moderación, comience leyendo la [nueva guía del usuario](https://meta.discourse.org/t/discourse-new-user-guide/96331) de Discord y la [nueva guía del moderador](https://meta.discourse.org/t/discourse-moderation-guide/63116) de Discord.
+
+### Shadow a Mod
+
+Todas las acciones del moderador se pueden seguir revisando los [registros de acciones](https://forum.freecodecamp.org/admin/logs/staff_action_logs). The actions taken by automated tools like `Akismet` or `system` can mostly be ignored until they result in a post that needs to be reviewed. Posts to be reviewed will show up in the [Review](https://forum.freecodecamp.org/review) area of the forum.
+
+For the first week or so you will want to pay attention to what is getting flagged and what is being reviewed, and compare that to the actions being taken upon the flagged posts. You may see the system account flag a post because the user created it too quickly. In many cases, the moderators will unflag the post by clicking on the "Approve Post" button or mark it as "Not Spam" (depending on the flag type).
+
+Commonly, spam flags can also be raised by members or moderators. Common duplicitous behavior would involve opening an account, making a post that seems harmless, then editing that post later on to add a link to an external site to advertise it. In this case, the member account is usually fairly new and has only made this one post thus far, which indicates that the account was opened solely for spamming the community. The decision should be made to delete the account after the first offense in this case. The same applies to accounts whose first post is deemed to be spam.
+
+You may notice moderators performing a procedure called 'split topic'. This may be a case where a moderator has split a post that was made erroneously on an existing topic into a new topic, or a moderator merged duplicate topics that a single user has created for the same question. Watching this procedure will highlight different actions and their causes.
+
+Another useful feature that becomes enabled for all moderators is the ability to post a "Canned Reply" which is a pre-written response that was worked out with the mod team to quickly respond to some well-known and repetitive scenarios. These include:
+
+- Welcoming a new forum member who has posted code without a question -> "Welcome - remind question"
+- Reminding members not to post code solutions but to provide hints and tips instead -> "Solutions Instead of Help"
+- Responding to a situation where someone's code works for you but not for them -> "Browser Issues"
+- Encouraging members to open GitHub issues when a possible bug is found -> "Bug Report"
+
+There are more, which you can read through to become familiar with their respective uses. You can also find discussions around the templates in the mod-team subforum, and you are welcome to ask questions if you aren't sure how a template should be used.
+
+### Read Mod-Team Subforum Posts
+
+The Mod-Team subforum contains several posts from past and current moderators discussing the different requirements and/or challenges of moderating the forum.
+
+Reading back through these posts can help uncover some of the underlying goals and processes that concern forum moderators. Some of the threads may also shed some light on the handling of spam and inappropriate content on the forum.
+
+## Where to Ask for Help
+
+To get help dealing with a situation that you are either uncomfortable with or unsure of how to handle, discuss with your fellow moderators on either the [Mod-Team Subforum](https://forum.freecodecamp.org/c/mod-team/4) or the [#mod-chat](https://discord.com/channels/692816967895220344/693157007418720277) on Discord.
diff --git a/src/content/docs/es/reply-templates.md b/src/content/docs/es/reply-templates.md
new file mode 100644
index 00000000..43bbabfd
--- /dev/null
+++ b/src/content/docs/es/reply-templates.md
@@ -0,0 +1,255 @@
+---
+title: Reply Templates
+---
+
+These are some of the standard reply templates that you may use while reviewing pull requests and triaging issues/pull requests.
+
+> You can make your own saved replies with GitHub's built-in [saved replies](https://github.com/settings/replies/) feature or use the ones below.
+
+## Thank You
+
+```markdown
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 🎉
+```
+
+## Thank you and congrats
+
+> For thanking and encouraging first-time contributors.
+
+```markdown
+Hi @username. Congrats on your first pull request (PR)! 🎉
+
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 📝
+```
+
+## Build Error
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like there is an error with the CI build. ⚠️
+
+Once you resolve these issues, we will be able to review your PR and merge it. 😊
+
+---
+
+Feel free to reference the [contributing guidelines](https://contribute.freecodecamp.org/#/how-to-work-on-coding-challenges.md?id=testing-challenges) for instructions on running the CI build locally. ✅
+```
+
+## Syncing Fork
+
+> When PR is not up to date with the `main` branch.
+
+````markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like the branch is not up to date. ⚠️
+
+To resolve this error, you will have to sync the latest changes from the `main` branch of the `freeCodeCamp/freeCodeCamp` repo.
+
+Using the command line, you can do this in three easy steps:
+
+```bash
+git remote add upstream git://github.com/freeCodeCamp/freeCodeCamp.git
+
+git fetch upstream
+
+git pull upstream main
+```
+
+If you're using a GUI, you can simply `Add a new remote...` and use the link `git://github.com/freeCodeCamp/freeCodeCamp.git` from above.
+
+Once you sync your fork and pass the build, we will be able to review your PR and merge it. 😊
+
+---==crwdHRulesLBB_2_BBsuleRHdwrc==
+
+Feel free to reference the ["Syncing a fork"](https://help.github.com/articles/syncing-a-fork/) article on GitHub for more insight on how to keep your fork up-to-date with the upstream repository. 🔄
+````
+
+## Merge Conflicts
+
+> When PR has merge conflicts that need to be resolved.¹
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like you have some merge conflicts. ⚠️
+
+Once you resolve these conflicts, we will be able to review your PR and merge it. 😊
+
+---
+
+If you're not familiar with the merge conflict process, feel free to look over GitHub's guide on ["Resolving a merge conflict"](https://help.github.com/articles/resolving-a-merge-conflict-on-github/). 🔍️
+
+Also, it's good practice on GitHub to write a brief description of your changes when creating a PR. 📝
+```
+
+¹ If a first-time-contributor has a merge conflict, maintainers will resolve the conflict for them.
+
+## Duplicate
+
+> When PR is repetitive or a duplicate.
+
+```markdown
+Hey @username
+
+This PR seems to make similar changes as the existing PR <#number>. As such, we are going to close this as a duplicate.
+
+If you feel you have additional changes to expand upon this PR, please feel free to push your commits and request this PR be reopened.
+
+Thanks again! 😊
+
+---
+
+If you have any questions, feel free to ask questions on the ["Contributors" category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+```
+
+## Closing Invalid Pull Requests
+
+> When PR is invalid.
+
+```markdown
+Hey there,
+
+Thank you for opening this pull request.
+
+This is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
+
+Thank you and happy coding.
+```
+
+> When PR adds links to external resources.
+
+```markdown
+Thank you for your pull request.
+
+We are closing this pull request. Please suggest links and other details to add the challenge's corresponding guide post through [a forum topic](https://forum.freecodecamp.org/new-topic?category=Contributors&title=&body=**What%20is%20your%20hint%20or%20solution%20suggestion%3F**%0A%0A%0A%0A%0A**Challenge%3A**%0A%0A%0A**Link%20to%20the%20challenge%3A**) instead.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## Adding Comment About Newbie Mistakes
+
+```markdown
+Hello,
+
+Firstly, thank you for submitting this pull request!
+
+As you navigate through the process, we have a PR checklist to ensure consistency and quality in our contributions. We kindly ask that you genuinely follow through with each point. This not only facilitates the review process but also demonstrates a mutual respect for the community's efforts.
+
+If you're unfamiliar with certain aspects, our [contributing guidelines](https://contribute.freecodecamp.org) are a helpful resource to get you up to speed.
+
+
+**Friendly Pointers (click to expand)**
+
+1. **Editing on GitHub:** While it's possible to edit files directly on GitHub, it's typically better not to. This helps avoid inadvertent mistakes like typos that can disrupt tests.
+
+2. **Pull Request
+ title: ** Please ensure the PR title follows [our convention](https://contribute.freecodecamp.org/#/how-to-open-a-pull-request?id=prepare-a-good-pr-title).
+
+3. **Linking Issues:** Please ensure you link issues using the designated method. Simply update the `XXXXXX` in the PR description to include the issue number. This keeps our records organized and clear.
+
+4. **Engaging with the Team:** We know you're eager, but kindly keep mentions and review requests limited. Our maintainers are always on the lookout and will attend to PRs in the order they come in.
+
+5. **Branch Management:** It's a good practice not to work directly off your `main` branch. Creating separate branches for different changes allows you to smoothly update your PR even as the main repository progresses.
+
+
+
+Please note, there's no need to close this PR. If you have questions or need guidance refining your contribution, don't hesitate to ask. Our community is here to assist.
+
+Thank you for your enthusiasm in contributing to our project. We eagerly await more contributions from you!
+
+**Happy Contributing!** 🌟
+```
+
+## PR Opened While Issue Is Not Triaged
+
+> When a PR is opened for an issue that hasn't been triaged and marked as ready for contribution.
+
+```markdown
+Hi there,
+
+Thanks for creating this pull request.
+
+The linked issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to update this pull request to reflect the issue consensus. Until the issue is open for contribution, we will not be able to review your pull request.
+```
+
+## Closing Invalid Issues
+
+> When an issue relates to the camper's code.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the **"Get Help"** button on the challenge on freeCodeCamp and choose the **"Ask for help"** option, which will help you create a question in the right part of the forum. Volunteers on the forum usually respond to questions within a few hours and can help determine if there is an issue with your code or the challenge's tests.
+
+If the forum members determine there is nothing wrong with your code, you can request this issue to be reopened.
+
+Thank you and happy coding.
+```
+
+> When an issue is a duplicate of an earlier issue.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue appears to be very similar to issue #XXXXX, so we are closing it as a duplicate.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+> When an issue is fixed in staging.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that the problem you mentioned here is present in production, but that it has already been fixed in staging. This means that the next time we push our staging branch to production, this problem should be fixed. Because of this, we're closing this issue.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## `first timer only` Issues
+
+> When an issue is deemed to be eligible for first-time code contributors.
+
+```markdown
+Thanks for opening this issue.
+
+This looks like something that can be fixed by "first-time" code contributors to this repository. Here are the files that you should be looking at to work on a fix:
+
+List of files:
+
+1. ...
+2. ...
+3. ...
+
+Please make sure you read our [guidelines for contributing](https://contribute.freecodecamp.org/#/), we prioritize contributors following the instructions in our guides. Join us in our [chat room](https://discord.gg/PRyKn3Vbay) or our [forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing; our moderators will guide you through this.
+
+Sometimes we may get more than one pull request. We typically accept the most quality contribution followed by the one that is made first.
+
+Happy contributing.
+```
+
+## Requests for Assignment
+
+```md
+We typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+
+Issues labeled with `help wanted` or `first timers only` are open for contributions.
+
+Please make sure you read [our guidelines for contributing](https://contribute.freecodecamp.org/#/). We prioritize contributors following the instructions in our guide. Join us in [our chat room](https://discord.gg/PRyKn3Vbay) or [the forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing - our community will be happy to assist you.
+```
+
+## Requests for Assignment While Issue Is Not Triaged
+
+> When a contributor requests for assignment but the issue hasn't been triaged or marked as ready for contribution.
+
+```md
+Hi there,
+
+Thanks for your interest in contributing.
+
+This issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to create a pull request to reflect the issue consensus. Please also note that we typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+```
diff --git a/src/content/docs/es/security-hall-of-fame.md b/src/content/docs/es/security-hall-of-fame.md
new file mode 100644
index 00000000..9a3017b7
--- /dev/null
+++ b/src/content/docs/es/security-hall-of-fame.md
@@ -0,0 +1,14 @@
+---
+title: Divulgación responsable - Salón de la Fama
+---
+
+Apreciamos cualquier divulgación responsable de vulnerabilidades que puedan afectar la integridad de nuestras plataformas y usuarios. Si está interesado en contribuir a la seguridad de nuestra plataforma, lea nuestra política de [seguridad descrita aquí](security).
+
+Si bien no ofrecemos ninguna recompensa o botín en este momento, estamos agradecidos con estas personas increíbles por ayudarnos a mantener la plataforma segura para todos:
+
+- Mehul Mohan de [codedamn](https://codedamn.com) ([@mehulmpt](https://twitter.com/mehulmpt)) - [Vulnerability Fix](https://github.com/freeCodeCamp/freeCodeCamp/blob/bb5a9e815313f1f7c91338e171bfe5acb8f3e346/client/src/components/Flash/index.js)
+- Peter Samir https://www.linkedin.com/in/peter-samir/
+- Laurence Tennant ([@hyperreality](https://github.com/hyperreality)) trabajando con IncludeSecurity.com - [GHSA-cc3r-grh4-27gj](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-cc3r-grh4-27gj)
+- Michal Biesiada ([@mbiesiad](https://github.com/mbiesiad)) - [GHSA-6c37-r62q-7xf4](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-6c37-r62q-7xf4)
+
+> **Thank you for your contributions :pray:**
diff --git a/src/content/docs/es/security.md b/src/content/docs/es/security.md
new file mode 100644
index 00000000..bab914bf
--- /dev/null
+++ b/src/content/docs/es/security.md
@@ -0,0 +1,58 @@
+---
+title: Política de Seguridad de freeCodeCamp.org
+---
+
+Este documento describe nuestra política de seguridad para los códigos, plataformas que operamos, y cómo reportar vulnerabilidades.
+
+## Informar una vulnerabilidad
+
+:::note
+Si crees que has encontrado una vulnerabilidad, **por favor, informa de ella de forma responsable**. No cree propuestas de GitHub para problemas de seguridad. En su lugar, siga esta guía.
+:::
+
+### Directrices
+
+Agradecemos la divulgación responsable de las vulnerabilidades que puedan afectar a la integridad de nuestras plataformas y usuarios. En aras de ahorrar tiempo a todo el mundo, le animamos a informar de las vulnerabilidades teniendo en cuenta esto:
+
+1. Asegúrese de que está utilizando las versiones **más recientes**, **estables** y **actualizadas** del sistema operativo y del navegador o navegadores web disponibles en su máquina.
+2. Consideramos que el uso de herramientas y utilidades en línea para informar de problemas con las configuraciones de SPF y DKIM, las pruebas del servidor SSL, etc., entra en la categoría de ["mendigar recompensas"](https://www.troyhunt.com/beg-bounties) y no podemos responder a estos informes.
+3. While we do not offer any bounties or swags at the moment, we'll be happy to list your name in our [Hall of Fame](security-hall-of-fame) list, provided the reports are not low-effort.
+
+### Reportando
+
+Después de confirmar las directrices anteriores, no dude en enviar un correo electrónico a `possible-security-issue [at] freecodecamp.org`. También puede enviarnos un mensaje cifrado con PGP a `flowcrypt.com/me/freecodecamp`.
+
+Una vez que nos informe de una vulnerabilidad, la investigaremos y nos aseguraremos de que no sea un falso positivo. Si necesitamos aclarar algún detalle, nos pondremos en contacto con usted. Puede enviar informes separados para cada problema que encuentre. Tenga en cuenta que no podremos responder a las cuestiones que consideremos que están fuera de las directrices.
+
+## Plataformas y Bases de Código
+
+Esta es una lista de las plataformas y bases de código para las que aceptamos informes:
+
+### Plataforma de Aprendizaje
+
+| Versión | Rama | Soportado | Sitio web activo |
+| ---------- | -------------- | --------- | ------------------------ |
+| producción | `prod-current` | Sí | `freecodecamp.org/learn` |
+| escenario | `prod-staging` | Sí | `freecodecamp.dev/learn` |
+| desarrollo | `principal` | No | |
+
+### Plataforma de Publicación
+
+| Versión | Soportado | Sitio web activo |
+| ---------- | --------- | ---------------------------------- |
+| producción | Sí | `freecodecamp.org/news` |
+| localizado | Sí | `freecodecamp.org//news` |
+
+### Aplicación Móvil
+
+| Versión | Soportado | Sitio web activo |
+| ---------- | --------- | ---------------------------------------------------------------- |
+| producción | Sí | `https://play.google.com/store/apps/details?id=org.freecodecamp` |
+
+### Otras Plataformas
+
+Aparte de lo anterior, también aceptamos informes para los repositorios alojados en GitHub bajo la organización de freeCodeCamp.
+
+### Otras Aplicaciones Autoalojadas
+
+Algunas de nuestras plataformas las alojamos nosotros mismos utilizando software de código abierto como Ghost y Discourse. Si está informando de una vulnerabilidad, asegúrese de que no se trata de un error en el software de origen.
diff --git a/src/content/docs/es/troubleshooting-development-issues.md b/src/content/docs/es/troubleshooting-development-issues.md
new file mode 100644
index 00000000..4155ebec
--- /dev/null
+++ b/src/content/docs/es/troubleshooting-development-issues.md
@@ -0,0 +1,97 @@
+---
+title: Troubleshooting Development Issues
+---
+
+If you are facing an issue, there is a high chance that the resolution is in this documentation.
+
+## Issues with Installing the Recommended Prerequisites
+
+Regularmente desarrollamos en los últimos o más populares sistemas operativos como macOS 10.15 o posterior, Ubuntu 18.04 o posterior, y Windows 10 (con WSL2).
+
+Se recomienda buscar tu problema específico en recursos como Google, Stack Overflow y Stack Exchange. Existe la posibilidad de que alguien haya enfrentado el mismo problema y que ya exista una respuesta a tu pregunta específica.
+
+Si estás en un sistema operativo diferente o todavía estas encontrandote con problemas, consulta [obtener ayuda](#getting-help).
+
+:::warning
+Por favor, evite crear asuntos de GitHub para problemas con las tecnologías previas. Están fuera del alcance de este proyecto.
+:::
+
+## Issues with Missing UI, Fonts, Language Strings, or Build Errors
+
+When you build the client, Gatsby will cache the fonts, language strings, and UI. Si uno de ellos no fue almacenado en caché, ejecute lo siguiente:
+
+```bash
+pnpm run clean
+pnpm install
+pnpm run seed
+pnpm run develop
+```
+
+O
+
+Use el atajo
+
+```
+pnpm run clean-and-develop
+```
+
+If you continue to face issues with the build, cleaning up the workspace is recommended.
+
+Use `git clean` en modo interactivo:
+
+```
+git clean -ifdX
+```
+
+
+
+ Cómo limpiar archivos sin el seguimiento de git (captura de pantalla)
+
+
+
+
+
+
+## Issues with API, login, Challenge Submissions, etc.
+
+If you can't sign in, and instead you see a banner with an error message saying that the error will be reported to freeCodeCamp, please double-check that your local port `3000` is not in use by a different program.
+
+#### **From Terminal:**
+
+```bash
+netstat -a | grep "3000"
+
+tcp4 0 0 0.0.0.0:3000 DESKTOP LISTEN
+```
+
+## Issues Signing Out while Navigating
+
+Mientras estás en desarrollo, tu sesión es almacenado como cookies. Limpiarlos cerrará la sesión de tu cuenta de desarrollo.
+
+Running `pnpm run seed:certified-user` will log you out, too. Pero sobrescribirá al usuario de desarrollo en tu base de datos local.
+
+## Issue Getting 404 when Navigating Profile Page
+
+Cuando intenta navegar a http://localhost:8000/developmentuser para ver la página de perfil, Gatsby se encarga de servir las páginas del lado del cliente y por lo tanto obtendrá una página 404 para el perfil de usuario cuando este trabajando.
+
+Hay un botón de "Vista previa de página 404 personalizada", haga clic en él para ver el perfil.
+
+## Issues Installing Dependencies
+
+Si tienes errores mientras instalas dependencias, por favor asegúrate de que no estes en una red restringida o tu configuración de firewall no te impida acceder a los recursos.
+
+La primera configuración puede tardar un rato dependiendo del ancho de banda de tu red. Be patient, and if you are still stuck we recommend using Gitpod instead of an offline setup.
+
+:::note
+Si estás utilizando dispositivos de Apple con el chip M1 para iniciar la aplicación localmente, es sugerido usar Node v14.7 or superior. De lo contrario, podrías tener problemas con dependencias como Sharp.
+:::
+
+## Working With Other Languages
+
+To see how the client renders in another language go to [testing the client app in a world language.](how-to-work-on-localized-client-webapp#Testing-the-Client-App-in-a-World-Language)
+
+## Getting Help
+
+Si estás atascado y necesitas ayuda, sientete libre de hacer preguntas en ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) o [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+
+Puede haber un error en la consola de tu navegador o en el Bash / Terminal / Línea de comandos que te ayudará a identificar el problema. Proporciona este mensaje de error en la descripción de tu problema para que otros puedan identificar el problema fácilmente y ayudarte a encontrar una solución.
diff --git a/src/content/docs/es/user-token-workflow.md b/src/content/docs/es/user-token-workflow.md
new file mode 100644
index 00000000..9fd1421c
--- /dev/null
+++ b/src/content/docs/es/user-token-workflow.md
@@ -0,0 +1,17 @@
+---
+title: Cómo funciona el flujo de trabajo de los tokens de usuario
+---
+
+Los tokens de usuario se utilizan para identificar usuarios a terceros de modo que los desafíos completados con esos servicios pueden ser guardados en la cuenta de usuario.
+
+## How they are Created
+
+Por el momento, los tokens sólo se utilizan para presentar los retos de la base de datos relacional. A token gets created when a signed-in user clicks the "Click here to start the course" or "Click here to start the project" buttons to start one of the Relational Database courses or projects.
+
+## When they Get Deleted
+
+Se eliminará un token de usuario cuando un usuario se desconecte de freeCodeCamp, restablezca su progreso, borra su cuenta, o borra manualmente el token usando el widget de la página de configuración.
+
+## How they Work
+
+Los tokens se almacenan en una colección de `UserToken` en la base de datos. Cada registro tiene un único `_id`, que es el token, y un `user_id` que enlaza a la cuenta del usuario desde la colección `user`. El token se codifica usando JWT y se envía al cliente cuando se crea. That encoded token is then given to third-party services that need it and sent to our API by them when a challenge is completed. Cuando nuestro API lo recibe, está decodificado para que podamos identificar al usuario que envía un desafío y guardar el desafío completado en sus `Desafíos completos`.
diff --git a/src/content/docs/FAQ.md b/src/content/docs/faq.md
similarity index 100%
rename from src/content/docs/FAQ.md
rename to src/content/docs/faq.md
diff --git a/src/content/docs/how-to-catch-outgoing-emails-locally.md b/src/content/docs/how-to-catch-outgoing-emails-locally.md
index 1dd5a78a..ebf6f8f9 100644
--- a/src/content/docs/how-to-catch-outgoing-emails-locally.md
+++ b/src/content/docs/how-to-catch-outgoing-emails-locally.md
@@ -2,7 +2,9 @@
title: Catching emails locally
---
-**Note:** This is an **optional** step and is required only when working with email workflows
+:::note
+This is an **optional** step and is required only when working with email workflows
+:::
- [Introduction](#introduction)
- [Installing MailHog](#installing-mailhog)
diff --git a/src/content/docs/how-to-setup-freecodecamp-locally.md b/src/content/docs/how-to-setup-freecodecamp-locally.md
index 2cc9cc98..4bc73267 100644
--- a/src/content/docs/how-to-setup-freecodecamp-locally.md
+++ b/src/content/docs/how-to-setup-freecodecamp-locally.md
@@ -11,7 +11,8 @@ Follow these guidelines for setting up a development environment for freeCodeCam
- freeCodeCamp does not build and run natively on Windows, you will [need to use WSL2](how-to-setup-wsl) for a Linux-like setup on Windows.
- You can't use Windows Command Prompt, Git Bash or PowerShell to build and run the codebase.
- Note that if using Windows, the hardware requirements need to be more than [what we mention](how-to-setup-freecodecamp-locally?id=how-to-prepare-your-local-machine) to accommodate for WSL-based setup.
- :::
+
+:::
If you are looking to make a one-off contribution, you should use Gitpod to make changes. The Gitpod setup launches a ready-to-code environment in a few minutes in your web browser. To contribute long-term, we recommend you set up freeCodeCamp on your local machine.
diff --git a/src/content/docs/it/authors-analytics-manual.md b/src/content/docs/it/authors-analytics-manual.md
new file mode 100644
index 00000000..c50cee47
--- /dev/null
+++ b/src/content/docs/it/authors-analytics-manual.md
@@ -0,0 +1,29 @@
+---
+title: Manuale Analytics per gli autori
+---
+
+If you are an author with access to the publication's Google Analytics Property (News), you can use this guide to view your article engagement and search for articles by publication language.
+
+## Cercare per lingua
+
+To search for engagement reports in a specific language:
+
+
+
+1. Dal menu a discesa in alto, seleziona `News`.
+1. Nella barra laterale, clicca su `Reports`.
+1. Dalla barra laterale secondaria, seleziona `Engagement`.
+1. Clicca su `Pages and Screens`.
+1. Nella barra di ricerca, digita il sotto-percorso per la lingua desiderata.
+1. Dal menu a discesa sotto la barra di ricerca, scegli `Page path and screen class`.
+
+## Filtrare i report per autore
+
+Dopo essere arrivati ai report `Pages and Screens` menzionati sopra, utilizza i seguenti passaggi per filtrare i risultati in base all'autore.
+
+
+
+1. Clicca sul pulsante `Add filter`.
+1. Dalla barra di navigazione laterale includi `Author`.
+1. Dal menu a discesa `Dimensions values`, scegli il nome dell'autore.
+1. Clicca sul pulsante `Apply` per applicare le modifiche.
diff --git a/src/content/docs/it/codebase-best-practices.md b/src/content/docs/it/codebase-best-practices.md
new file mode 100644
index 00000000..c0757e52
--- /dev/null
+++ b/src/content/docs/it/codebase-best-practices.md
@@ -0,0 +1,190 @@
+---
+title: Buone pratiche per il codebase
+---
+
+## Definire lo stile di un componente
+
+Consigliamo di definire lo stile dei componenti seguendo la nostra [guida di stile](https://design-style-guide.freecodecamp.org/).
+
+I colori sono definiti in [`variable.css`](/client/src/components/layouts/variables.css) e i font in [`fonts.css`](/client/src/components/layouts/fonts.css).
+
+Siamo estremamente categorici circa l'aggiunta di nuove variabili/token ai colori. Dopo un'attenta ricerca, i colori sono stati scelti per rispettare l'identità del marchio freeCodeCamp, l'esperienza dello sviluppatore e l'accessibilità.
+
+La parola chiave `!important` può essere usata per sovrascrivere i valori in alcuni casi (per esempio: problemi di accessibilità). È necessario aggiungere un commento che descriva il problema, in modo che non venga rimosso in un futuro refactoring.
+
+### Supporto RTL
+
+Stiamo cercando di supportare il layout da destra a sinistra (right-to-left, RTL) nel codebase per le lingue che sono lette in questa direzione. For this, you need to be mindful of how to style components. Ecco alcune rapide regole pratiche da seguire:
+
+- Non utilizzare le proprietà `float`
+ - Invece, utilizza i layout Flexbox e Grid poiché hanno già integrato il supporto RTL e saranno più facili da gestire e revisionare.
+- Non definire la direzione usando `margin` e `padding`: potrebbe sembrare innocuo usare `padding-right` e `margin-left`, ma queste direzioni non sono rispecchiate quando il layout cambia in RTL e l'aggiunta di valori contatori per loro nel file RTL rende il mantenimento del codebase più difficile.
+ - Usa le proprietà logiche per loro: puoi aggiungere la stessa spaziatura usando `padding-inline-end` e `margin-inline-start` e non dovrai preoccuparti del layout RTL, dato che segue l'inizio e la fine della riga e non è necessario aggiungere alcun valore aggiuntivo nei file RTL, così le persone non dovranno ricordarsi di cambiare gli stessi valori in due file.
+- Non usare `!important` in `font-family`: il layout RTL utilizza caratteri diversi rispetto al layout LTR, aggiungendo `!important` alla proprietà `font-family` si influisce anche sul layout RTL.
+
+## JavaScript generale
+
+Nella maggior parte dei casi, il nostro [linter](how-to-setup-freecodecamp-locally#follow-these-steps-to-get-your-development-environment-ready) darà un avvertimento nel caso di un format che va contro le preferenze del nostro codebase.
+
+Si incoraggia l'utilizzo di componenti funzionali invece di componenti basati su classi.
+
+## TypeScript specifico
+
+### Migrare un file da JavaScript a TypeScript
+
+#### Mantenere la cronologia del file con Git
+
+A volte cambiare il file da `.js` a `.ts` (o `.tsx`) fa sì che il file originale venga cancellato e ne venga creato uno nuovo, altre volte è solo il nome del file a cambiare - per quanto riguarda Git. Idealmente, vogliamo che la cronologia dei file sia conservata.
+
+Il modo migliore per assicurarsene è:
+
+1. Rinominare il file
+2. Fare un commit con il flag `--no-verify` per prevenire gli avvertimenti di Husky per errori di lint
+3. Fare il refactoring per la migrazione a TypeScript in un commit separato
+
+> [!NOTE] Un editor come VSCode ha buona probabilità di mostrare comunque che un file è stato eliminato e uno nuovo è stato creato. Se usi la CLI (Command Line Interface) per eseguire `git add .`, allora VSCode mostrerà che il file è stato rinominato
+
+### Convenzioni per i nomi
+
+#### Interfacce e Tipi
+
+Per la maggior parte, incoraggiamo l'uso di dichiarazioni di interfaccia piuttosto che di tipo.
+
+Props di componenti React - suffissi con `Props`
+
+```typescript
+interface MyComponentProps {}
+// type MyComponentProps = {};
+const MyComponent = (props: MyComponentProps) => {};
+```
+
+Componenti React stateful - suffissi con `State`
+
+```typescript
+interface MyComponentState {}
+// type MyComponentState = {};
+class MyComponent extends Component {}
+```
+
+Default - nomi di oggetti in PascalCase
+
+```typescript
+interface MyObject {}
+// type MyObject = {};
+const myObject: MyObject = {};
+```
+
+
+
+
+
+## Redux
+
+### Definizione di azioni
+
+```typescript
+enum AppActionTypes = {
+ actionFunction = 'actionFunction'
+}
+
+export const actionFunction = (
+ arg: Arg
+): ReducerPayload => ({
+ type: AppActionTypes.actionFunction,
+ payload: arg
+});
+```
+
+### Come usare Reducer
+
+```typescript
+// Base reducer action without payload
+type ReducerBase = { type: T };
+// Logic for handling optional payloads
+type ReducerPayload =
+ T extends AppActionTypes.actionFunction
+ ? ReducerBase & {
+ payload: AppState['property'];
+ }
+ : ReducerBase;
+
+// Switch reducer exported to Redux combineReducers
+export const reducer = (
+ state: AppState = initialState,
+ action: ReducerPayload
+): AppState => {
+ switch (action.type) {
+ case AppActionTypes.actionFunction:
+ return { ...state, property: action.payload };
+ default:
+ return state;
+ }
+};
+```
+
+### Come fare il dispatch
+
+Dentro un componente, importa le azioni e i selettori necessari.
+
+```tsx
+// Add type definition
+interface MyComponentProps {
+ actionFunction: typeof actionFunction;
+}
+// Connect to Redux store
+const mapDispatchToProps = {
+ actionFunction
+};
+// Example React Component connected to store
+const MyComponent = ({ actionFunction }: MyComponentProps): JSX.Element => {
+ const handleClick = () => {
+ // Dispatch function
+ actionFunction();
+ };
+ return ;
+};
+
+export default connect(null, mapDispatchToProps)(MyComponent);
+```
+
+
+
+
+## API
+
+### Testing
+
+The `api/` tests are split into two parts:
+
+1. Unit tests
+2. Integration tests
+
+#### Unit Tests
+
+Unit tests isolate a single function or component. The tests do not need mocking, but will require fixtures.
+
+The unit tests are located in a new file adjacent to the file exporting that is being tested:
+
+```text
+api/
+├── src/
+│ ├── utils.ts
+│ ├── utils.test.ts
+```
+
+#### Integration Tests
+
+Integration tests test the API as a whole. The tests will require mocking and should not require fixtures beyond the database seeding data and a method for authentication.
+
+Typically, each integration test file will be directly related to a route. The integration tests are located in the `api/tests/` directory:
+
+```text
+api/
+├── tests/
+│ ├── settings.ts
+```
+
+## Further Literature
+
+- [Documentazione di TypeScript](https://www.typescriptlang.org/docs/)
+- [CheatSheet di TypeScript con React](https://github.com/typescript-cheatsheets/react#readme)
diff --git a/src/content/docs/it/courses-vscode-extension.md b/src/content/docs/it/courses-vscode-extension.md
new file mode 100644
index 00000000..957eb0c3
--- /dev/null
+++ b/src/content/docs/it/courses-vscode-extension.md
@@ -0,0 +1,43 @@
+---
+title: Estensione di VSCode per i corsi
+---
+
+Questo dettaglia le linee guida della manutenzione del repo [freeCodeCamp/courses-vscode-extension](https://github.com/freeCodeCamp/courses-vscode-extension) che contiene il codice sorgente per l'estensione [freeCodeCamp - Courses](https://marketplace.visualstudio.com/items?itemName=freeCodeCamp.freecodecamp-courses).
+
+## Pubblicazione dell'estensione
+
+Una GitHub Action pubblica automagicamente l'estensione nel Visual Studio Marketplace, al rilascio di un nuovo GitHub Release.
+
+1. Impacchetta una nuova versione dell'estensione:
+
+```bash
+npm run pack --
+```
+
+Dove `` è uno dei seguenti: `major`, `minor`, `patch`.
+
+2. Fai il push della nuova versione a `main`:
+
+```bash
+git commit -am "(): "
+git push
+```
+
+Facoltativamente, puoi fare il push direttamente a `upstream/main`, ma aprire una PR è raccomandato per un sanity check.
+
+3. Crea una nuova GitHub Release usando la GitHub UI:
+
+- Implementa correttamente il numero di versione, quando crei una nuova tag.
+- Fai l'upload del file `.vsix` con la nuova release.
+- Pubblica la release, e conferma che l'azione ha avuto successo.
+
+> [!NOTE] Creare una release richiede permessi di scrittura sul repository `freeCodeCamp/courses-vscode-extension`.
+
+## Pubblicare l'estensione manualmente
+
+Un upload manuale al Visual Studio Marketplace può essere fatto, seguendo questi step:
+
+1. Visita https://marketplace.visualstudio.com/ e fai log in
+2. Naviga alla [pagina freeCodeCamp Publisher](https://marketplace.visualstudio.com/manage/publishers/freecodecamp)
+3. Seleziona l'estensione rilevante, e seleziona `Update`
+4. Carica il file dai tuoi file locali
diff --git a/src/content/docs/it/curriculum-file-structure.md b/src/content/docs/it/curriculum-file-structure.md
new file mode 100644
index 00000000..907c26ef
--- /dev/null
+++ b/src/content/docs/it/curriculum-file-structure.md
@@ -0,0 +1,109 @@
+---
+title: Struttura dei file del curriculum
+---
+
+Il nostro contenuto educativo centrale è situato nella cartella chiamata convenientemente `curriculum`. Questa pagina analizzerà come questi file sono organizzati.
+
+## Terminologia
+
+Questi sono alcuni termini che usiamo quando discutiamo il contenuto del nostro curriculum.
+
+- `certification` : Quando riferito a una certificazione in questa istanza, sta parlando del certificato che gli utenti richiedono. Che è separato dal nome del superBlock.
+- `superBlock` : Un superblock è il raggruppamento superiore di sfide. Ogni superblock corrisponde ad una certificazione nel curriculum (p.e. Responsive Web Design).
+- `block` : Un block è una sezione in un superblock. Un blocco corrisponde a un gruppo di sfide in una certa certificazione (per esempio Basic HTML e HTML5)
+- `challenge`: Una sfida è una singola lezione nel curriculum (p. e. Saluta gli elementi HTML)
+
+## Albero dei file
+
+Usando quei termini, ecco come la struttura dei file viene definita:
+
+
+```md
+
+curriculum/
+├─ _meta/
+│ ├─ {block}/
+│ │ ├─ meta.json
+├─ {language}/
+│ ├─ {superBlock}/
+│ │ ├─ {block}/
+│ │ │ ├─ {challenge}.md
+```
+
+## La cartella `_meta`
+
+La cartella `_meta` è una cartella speciale che contiene dei file `.json`. Questi file corrispondono ad ogni blocco nel curriculum e sono usati per determinare a quale superblocco corrisponde un certo blocco, e l'ordine delle sfide in quel blocco.
+
+## Rinominare i file
+
+Ci potrebbero essere volte in cui devi rinominare un certificato, superblocco, blocco o sfida. Questa sezione delinea gli step necessari per evitare errori di build nel farlo.
+
+:::danger
+Rinominare i file nella struttura del curriculum spesso cambia il percorso (o l'URL) del contenuto sulla pagina web principale. Questo è da fare con cura, poiché bisogna configurare reindirizzamenti per ogni cambiamento che viene fatto.
+:::
+
+### Rinominare una certificazione
+
+Quando rinomini una certificazione, vorrai probabilmente rinominare il superblocco associato. Fai quanto segue per rinominare solo il certificato:
+
+1. Rinomina la cartella `curriculum/challenges/_meta/{superBlock}-certificate` con il nuovo nome.
+1. Nel file `meta.json` di quella cartella, rinomina i valori in `name`, `dashedName`, e `challengeOrder` con il nuovo nome.
+1. In `curriculum/challenges/english/12-certificate`, rinomina la cartella `{superBlock}-certificate`, e il file YAML dentro di essa, con il nuovo nome.
+1. Nel file YAML, cambia il titolo (`title`) con il nuovo nome.
+1. Rinomina il file e la cartella dello step 3 nel resto delle lingue del curriculum.
+1. Aggiorna `client/src/redux/index.ts` con il corretto `title`.
+1. Facoltativamente, aggiorna il `certSlug` per il superblocco nello stesso file. **Nota** che rinominare un `certSlug` cambia l'URL della certificazione ed è da fare con attenta considerazione.
+1. Aggiorna il `title` in `client/src/resources/cert-and-project-map.ts` al nuovo valore. **Nota** che cambiare `title` qui **romperà** la pagina superBlock per la certificazione associata. Fa affidamento sul titolo del superblocco per combaciare il titolo del certificato. Vorrai probabilmente rinominare il superblocco allo stesso tempo.
+1. Se hai rinominato `certSlug` allo step 7, cambialo qui per il certificato e tutti i valori dei progetti annidati `projects`.
+1. In `shared/config/certification-settings.js`, update the value of `certTypeTitleMap` to the new name.
+1. Se hai rinominato `certSlug` allo step 7, aggiorna la key di `certSlugTypeMap` nello stesso file.
+1. Se necessario aggiorna il nome del certificato nell'array `legacyCerts` di `client/src/client-only-routes/show-project-links.tsx`.
+1. Aggiorna il file `README.md` principale al nuovo nome.
+
+### Rinominare un superblocco
+
+> [!NOTE] Quando rinomini un superblocco, il nuovo nome della cartella è usato come percorso e dovrebbe essere considerato il nome "corretto". Tutti gli altri valori devono essere aggiornati per riflettere il cambiamento.
+
+Inoltre, probabilmente vorrai rinominare il certificato e il blocco `{superBlock}-projects` quando rinomini un superblocco visto che condividono tutti un nome. Per rinominare solo un superblocco devi:
+
+1. Rinominare la cartella del superblocco nella cartella `curriculum/challenges/english`.
+1. Rinominare la cartella del superblocco in _tutte_ le altre cartelle `curriculum/challenges/{language}`.
+1. Per ogni blocco dentro quel superblocco, aggiorna il valore `superBlock` nel file `meta.json` al suo nome a trattini. Non hai bisogno di rinominare alcuna cartella qui. Fallo quando rinomini un blocco.
+1. Rinomina la cartella del superblocco in `client/src/pages/learn`.
+1. Aggiorna il file `index.md` nella cartella qui sopra, cambiando i valori `title` e `superBlock` al nuovo nome.
+1. Per ogni cartella di un blocco all'interno della precedente, aggiorna `index.md` affinché usi il valore corretto di `superBlock`.
+1. Nel file `client/src/resources/cert-and-project-map.ts`, aggiorna il percorso per il certificato in cima al file, e il valore di `title` per quel superblocco. **Nota** che cambiare `title` qui **romperà** l'abilità di vedere la certificazione per questo superblocco. Fa affidamento sul titolo del superblocco per abbinare il titolo del certificato. Vorrai probabilmente rinominare la certificazione allo stesso tempo.
+1. Update the `superBlockCertTypeMap` key in `shared/config/certification-settings.js` to the new superBlock name.
+1. Aggiorna il valore del percorso in `client/src/assets/icons/index.tsx`.
+1. Per ogni lingua in `client/i18n/locales`, aggiorna il file `intro.json` file affinché usi il nuovo `dashedName` del superblocco. Nel file inglese aggiorna anche `title`.
+1. Check the `shared/config/i18n/all-langs.js` file to see if the superBlock is enabled in i18n builds. Aggiorna il valore dove è usato.
+1. Aggiorna il file principale `README.md` con il nuovo nome.
+
+### Rinominare un blocco
+
+Quando rinomini un blocco del curriculum, devi:
+
+1. Cambiare il nome della cartella nella directory `curriculum/challenges/english/{superBlock}`.
+1. Cambiare il nome della cartella dello stesso blocco in _tutte_ le directory delle altre lingue. Queste devono tutte essere uguali alla struttura inglese o il build avrà errori.
+1. Cambia il nome della cartella del blocco nella directory `_meta`.
+1. Aggiorna le proprietà `name` e `dashedName` per il `meta.json` di quel blocco.
+1. Update the block folder in `client/src/pages/learn/{superBlock}`.
+1. In the `index.md` file of the above folder, update the `block` value in the frontmatter.
+1. In the `client/i18n/locales/{language}/intro.json` files, update the block name to the new name for all the languages. In the English `intro.json` file, update the `title` as well.
+1. Update the main `README.md` file to the new name.
+
+### Rinominare una sfida
+
+Quando rinomini il file di una singola sfida, devi:
+
+1. Cambiare il nome del file della sfida nella directory `curriculum/challenges/english`.
+1. Cambiare i valori di `title` e `dashedName` in quel file.
+1. Cambia il nome del file e il valore di `dashedName` in quei file per _tutte_ le directory delle altre lingue.
+1. Cambiare il nome della sfida nel file `meta.json` rilevante. I nomi delle sfide qui non sono usati nel build, ma forniscono un metodo user-friendly per identificare l'ordine delle sfide.
+1. Se la sfida è un progetto di un certificato, aggiorna il file YAML in `curriculum/english/12-certificates/` con il nuovo nome.
+1. Se la sfida è un progetto di un certificato, aggiorna `title` e `link` in `client/src/resources/cert-and-project-map.ts`
+1. Se la sfida è un progetto di un certificato, aggiorna il file `README.md` principale con il nuovo nome.
+
+## La proprietà `dashedName`
+
+La proprietà `dashedName` è usata per generare il percorso URL del superblocco, del blocco o della sfida. Questi devono in genere combaciare con ciò che l'aiutante `/utils/slugs.js` restituirebbe per il nome del file.
diff --git a/src/content/docs/it/curriculum-help.md b/src/content/docs/it/curriculum-help.md
new file mode 100644
index 00000000..82848d65
--- /dev/null
+++ b/src/content/docs/it/curriculum-help.md
@@ -0,0 +1,165 @@
+---
+title: Using the Curriculum Helpers
+---
+
+The test runner has access to a few helpers that can assist with testing campers' code.
+
+## CSS Helper
+
+To instantiate the helper within a test block, use this:
+
+```js
+const helper = new __helpers.CSSHelp(document);
+```
+
+In that example, the `document` variable refers to the document object of the test runner's iframe.
+
+### Methods
+
+There are a few methods available for parsing and testing CSS.
+
+#### `.getStyle()`
+
+The `.getStyle()` method takes a CSS selector and returns a CSS style declaration object.
+
+For example, if the camper has written the following CSS:
+
+```css
+body {
+ background: linear-gradient(45deg, rgb(118, 201, 255), rgb(247, 255, 222));
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+}
+```
+
+You would get an object that looks like this:
+
+```js
+{
+ 0: "background-image",
+ 1: "background-position-x",
+ 2: "background-position-y",
+ 3: "background-size",
+ 4: "background-repeat-x",
+ 5: "background-repeat-y",
+ 6: "background-attachment",
+ 7: "background-origin",
+ 8: "background-clip",
+ 9: "background-color",
+ 10: "margin-top",
+ 11: "margin-right",
+ 12: "margin-bottom",
+ 13: "margin-left",
+ 14: "padding-top",
+ 15: "padding-right",
+ 16: "padding-bottom",
+ 17: "padding-left",
+ 18: "width",
+ 19: "height",
+ 20: "overflow-x",
+ 21: "overflow-y",
+ "accentColor": "",
+ "additiveSymbols": "",
+ "alignContent": "",
+ "alignItems": "",
+ ...
+}
+```
+
+This method allows you to test that specific properties have been set:
+
+```js
+assert.strictEqual(helper.getStyle('body')?.width, '100%');
+```
+
+The helper attaches a `.getPropVal()` method to the style declaration object that allows you to get the value of a specific property:
+
+```js
+assert.strictEqual(helper.getStyle('body').getPropVal('width'), '100%');
+```
+
+#### `.getCSSRules()`
+
+The `.getCSSRules()` takes an at-rule type from the union `media | fontface | import | keyframes`, and returns an array of CSS rules matching that at-rule.
+
+For example, if the camper has written the following code:
+
+```css
+@media (max-width: 100px) {
+ body {
+ background-color: green;
+ }
+}
+```
+
+Then the returned value of `helper.getCSSRules('media')` would be this array:
+
+```js
+[
+ {
+ conditionText: "(max-width: 100px)",
+ cssRules: [
+ selectorText: 'body',
+ style: CSSStyleDeclaration,
+ styleMap: StylePropertyMap,
+ cssRules: CSSRuleList,
+ type: 1,
+ ...
+ ],
+ cssText: "@media (max-width: 100px) {\n body { background-color: green; }\n}",
+ ...
+ }
+]
+```
+
+You can then test that the camper has written the correct media query:
+
+```js
+const hasCorrectHeight = helper
+ .getCSSRules('media')
+ .some(x => x.style.height === '3px');
+assert.isTrue(hasCorrectHeight);
+```
+
+#### `.getRuleListsWithinMedia()`
+
+The `.getRuleListsWithinMedia()` method takes a media text (e.g. `("max-width: 200")`) and returns the CSS rules within that media query.
+
+The return result is the equivalent of that media rule's `cssRules` property from the return value of `.getCSSRules("media")`.
+
+### Less Frequent Methods
+
+These methods are not as commonly used, but are available if needed.
+
+#### `.getStyleDeclarations()`
+
+The `.getStyleDeclarations()` method takes a CSS selector and returns an array of CSS style declaration objects (from the `.getStyle()` method).
+
+#### `.isPropertyUsed()`
+
+The `.isPropertyUsed()` method takes a CSS **property** and checks if it has been set/used anywhere in the camper's CSS.
+
+#### `.getStyleRule()`
+
+The `.getStyleRule()` method takes a CSS selector and returns the CSS Style Declaration, much like `.getStyle()`. However, the declaration returned from this method includes an additional `.isDeclaredAfter()` method which takes a selector and returns whether this rule is declared after the selector passed in.
+
+#### `.getStyleSheet()`
+
+The `.getStyleSheet()` method returns the camper's CSS, parsed into a CSS Style Sheet object.
+
+## Strip Content
+
+There are a few methods on the `__helpers` object to remove content from the camper's code.
+
+These do NOT need to be instantiated they are static methods.
+
+### Removing Comments
+
+Using `__helpers.removeCssComments()`, `__helpers.removeHTMLComments()`, or `__helpers.removeJSComments()` allows you to pass the camper's code (through the `code` variable) to remove comments matching the language's comment syntax.
+
+### Removing Whitespace
+
+Using `__helpers.removeWhitespace()` allows you to pass the camper's code (through the `code` variable) to remove all whitespace.
diff --git a/src/content/docs/it/devops.md b/src/content/docs/it/devops.md
new file mode 100644
index 00000000..c6404364
--- /dev/null
+++ b/src/content/docs/it/devops.md
@@ -0,0 +1,989 @@
+---
+title: Manuale di DevOps
+---
+
+Questa guida ti aiuterà a capire lo stack della nostra infrastruttura e come gestiamo le nostre piattaforme. Anche se questa guida non ha dettagli esaustivi per tutte le operazioni, può essere utilizzata come riferimento per la comprensione dei sistemi.
+
+Let us know if you have feedback or queries and we will be happy to clarify.
+
+## Flight Manual - Code Deployments
+
+This repository is continuously built, tested, and deployed to **separate sets of infrastructure (Servers, Databases, CDNs, etc.)**.
+
+Questo prevede tre fasi da seguire in sequenza:
+
+1. I nuovi cambiamenti (sia risoluzioni di bug che nuove caratteristiche) sono aggiunti al branch principale di sviluppo (`main`) tramite pull requests.
+2. Queste modifiche sono testate da una serie di test automatizzati.
+3. Una volta che i test sono superati, rilasciamo le modifiche (o aggiornamenti se necessario) alle distribuzioni sulla nostra infrastruttura.
+
+### Building the codebase - Mapping Git Branches to Deployments
+
+In genere, si fa un merge di [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) (il ramo di sviluppo di default) nel branch [`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) una volta al giorno, e questo è rilasciato in una infrastruttura isolata.
+
+Questa è una release intermedia per i nostri sviluppatori e collaboratori volontari. È anche noto come il nostro rilascio di "staging" o "beta".
+
+È identico al nostro ambiente di produzione live su `freeCodeCamp.org`, a parte il fatto che utilizza un set separato di database, server, web-proxies, ecc. Questo isolamento ci permette di testare lo sviluppo continuo e le caratteristiche in uno scenario come quello di "produzione", senza influenzare gli utenti regolari delle principali piattaforme di freeCodeCamp.org.
+
+Una volta che il team di sviluppo [`@freeCodeCamp/dev-team`](https://github.com/orgs/freeCodeCamp/teams/dev-team/members) è soddisfatto dei cambiamenti nella piattaforma di staging, questi cambiamenti sono spostati ogni pochi giorni al branch [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current).
+
+Questa è la versione finale che sposta le modifiche alle nostre piattaforme di produzione su freeCodeCamp.org.
+
+### Testing changes - Integration and User Acceptance Testing
+
+Adottiamo vari livelli di integrazione e test di accettazione per verificare la qualità del codice. Tutti i nostri test sono fatti con software come [GitHub Actions CI](https://github.com/freeCodeCamp/freeCodeCamp/actions) e [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp).
+
+We have unit tests for testing our challenge solutions, Server APIs, and Client User interfaces. Questi ci aiutano a testare l'integrazione tra i diversi componenti.
+
+> [!NOTE] We are also in the process of writing end user tests which will help in replicating real-world scenarios like updating an email or making a call to the API or third-party services.
+
+Tutti questi test aiutano a evitare che i problemi si ripetano e assicurano di non introdurre dei bug mentre si lavora su un altro bug o una nuova funzionalità.
+
+### Deploying Changes - Pushing changes to servers
+
+Abbiamo configurato un software di consegna continua per inviare modifiche ai nostri server di sviluppo e produzione.
+
+Una volta che le modifiche sono inviate ai branch di rilascio protetti, una pipeline di build viene attivata automaticamente per il branch. Le pipeline di build sono responsabili della compilazione degli artefatti e di conservarli in un deposito di stoccaggio per un uso successivo.
+
+La pipeline di build continua ad attivare una corrispondente pipeline di rilascio se completa un'esecuzione riuscita. The release pipelines are responsible for collecting the build artifacts, moving them to the servers, and going live.
+
+The statuses of builds and releases are [available here](#build-test-and-deployment-status).
+
+## Trigger a Build, Test, and Deploy
+
+Currently, only members of the developer team can push to the production branches. Le modifiche ai branch `production-*` possono avvenire solo tramite il merge fast-forward all'[`upstream`](https://github.com/freeCodeCamp/freeCodeCamp).
+
+> [!NOTE] In the upcoming days, we would improve this flow to be done via pull requests, for better access management and transparency.
+
+### Pushing changes to Staging Applications
+
+1. Configura correttamente i tuoi remotes.
+
+ ```sh
+ git remote -v
+ ```
+
+ **Risultati:**
+
+ ```
+ origin git@github.com:raisedadead/freeCodeCamp.git (fetch)
+ origin git@github.com:raisedadead/freeCodeCamp.git (push)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+2. Assicurati che il tuo branch `main` sia pulito e sincronizzato con la fonte (upstream).
+
+ ```sh
+ git checkout main
+ git fetch --all --prune
+ git reset --hard upstream/main
+ ```
+
+3. Controlla che i test GitHub CI siano superati nel branch `main` dell'upstream.
+
+ I test di [integrazione continua](https://github.com/freeCodeCamp/freeCodeCamp/actions) dovrebbero essere verdi ed essere superati per il branch `main`. Clicca sulla spunta verde vicino all'hash del commit guardando il codice del branch `main`.
+
+ Controllare lo stato sulle GitHub Actions (screenshot)
+
+ 
+
+
+ Se questo fallisce, dovresti fermarti e investigare gli errori.
+
+4. Conferma di essere in grado di fare il build del repository localmente.
+
+ ```
+ pnpm run clean-and-develop
+ ```
+
+5. Sposta cambiamenti da `main` a `prod-staging` con un merge fast-forward
+
+ ```
+ git checkout prod-staging
+ git merge main
+ git push upstream
+ ```
+
+ > [!NOTE] You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+ >
+ > Se lo fanno, potresti aver fatto qualcosa in modo errato e dovresti solo ricominciare da capo.
+
+Gli step precedenti attiveranno automaticamente l'esecuzione della pipeline di build per il ramo `prod-staging`. Una volta completata la build, gli artefatti vengono salvati come file `.zip` in un archivio per essere recuperati e utilizzati in seguito.
+
+La pipeline di rilascio viene attivata automaticamente quando un nuovo artefatto è disponibile dalla pipeline di build connessa. For staging platforms, this process does not involve manual approval, and the artifacts are pushed to the Client CDN and API servers.
+
+### Pushing changes to Production Applications
+
+Il processo è per lo più lo stesso delle piattaforme di staging, con la messa in atto di alcuni controlli aggiuntivi. Questo è solo per essere sicuri: non possiamo permetterci di rompere nulla su freeCodeCamp.org dato che può vedere centinaia di utenti che lo utilizzano in qualsiasi momento.
+
+| NON eseguire questi comandi a meno che non sia stato verificato che tutto funziona sulla piattaforma di staging. Non dovresti bypassare o saltare alcun test di staging prima di procedere ulteriormente. |
+| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| |
+
+1. Assicurati che il tuo ramo `prod-staging` sia pulito e sincronizzato con la fonte.
+
+ ```sh
+ git checkout prod-staging
+ git fetch --all --prune
+ git reset --hard upstream/prod-staging
+ ```
+
+2. Sposta cambiamenti da `prod-staging` a `prod-current` con un merge fast-forward
+
+ ```
+ git checkout prod-current
+ git merge prod-staging
+ git push upstream
+ ```
+
+ > [!NOTE] You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+ >
+ > Se lo fanno, potresti aver fatto qualcosa in modo errato e dovresti solo ricominciare da capo.
+
+Gli step precedenti attiveranno automaticamente l'esecuzione della pipeline di build per il ramo `prod-current`. Una volta che un artefatto di build è pronto, attiverà un avvio della pipeline di rilascio.
+
+**Misure supplementari per le azioni dello Staff**
+
+Once a release run is triggered, members of the developer staff team will receive an automated manual intervention email. Possono _approvare_ o _rifiutare_ l'esecuzione del rilascio.
+
+Se le modifiche funzionano bene e sono state testate sulla piattaforma di staging, allora possono essere approvate. L’approvazione deve essere rilasciata entro 4 ore dall’attivazione del rilascio prima di essere respinta automaticamente. Un membro dello staff può riattivare il rilascio manualmente per gli avvi rifiutati, o attendere il prossimo ciclo di rilascio.
+
+Per uso dello staff:
+
+| Controlla la tua email per un link diretto o [vai alla dashboard di rilascio](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) dopo che la build è completata. |
+| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| |
+
+Una volta che uno dei membri dello staff approva una release, la pipeline porterà i cambiamenti live ai CDN di produzione e ai server API di freecodecamp.org.
+
+## Build, Test and Deployment Status
+
+Ecco lo stato attuale di test, build e deployment del codebase.
+
+| Ramo | Test unitari | Test di integrazione | Build & rilasci |
+| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
+| [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | - |
+| [`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-staging) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-current) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| `prod-next` (sperimentale, futuro) | - | - | - |
+
+## Early Access and Beta Testing
+
+Ti diamo il benvenuto al test di queste versioni in modalità **"public beta testing"** e all'accesso anticipato alle funzionalità imminenti delle piattaforme. A volte queste funzionalità/modifiche sono indicate come **next, beta, staging,** ecc. in modo intercambiabile.
+
+Your contributions via feedback and issue reports will help us in making the production platforms at `freeCodeCamp.org` more **resilient**, **consistent**, and **stable** for everyone.
+
+Ti ringraziamo se vorrai segnalare i bug che incontrerai aiutandoci a migliorare freeCodeCamp.org. Sei un grande!
+
+### Identifying the Upcoming Version of the Platforms
+
+Currently, a public beta testing version is available at:
+
+| Applicazione | Lingua | URL |
+| :----------- | :------- | :--------------------------------------- |
+| Learn | Inglese | |
+| | Spagnolo | |
+| | Cinese | |
+| News | Inglese | |
+| Forum | Inglese | |
+| | Cinese | |
+| API | - | `https://api.freecodecamp.dev` |
+
+> [!NOTE] Il nome del dominio è diverso da **`freeCodeCamp.org`**. Questo è intenzionale per prevenire l'indicizzazione dai motori di ricerca e creare confusione per i normali utenti della piattaforma.
+>
+> The above list is not exhaustive of all the applications that we provision. Also, not all language variants are deployed in staging to conserve resources.
+
+### Identifying the Current Version of the Platforms
+
+**La versione attuale della piattaforma è sempre disponibile su [`freeCodeCamp.org`](https://www.freecodecamp.org).**
+
+Il team di sviluppo fa un merge dei cambiamenti dal ramo `prod-staging` a `prod-current` quando rilascia dei cambiamenti. Il commit superiore dovrebbe essere quello che si vede live sul sito.
+
+È possibile identificare la versione esatta distribuita visitando i registri di compilazione e distribuzione disponibili nella sezione stato. Alternatively, you can also ping us in the [contributors chat room](https://discord.gg/PRyKn3Vbay) for a confirmation.
+
+### Known Limitations
+
+Ci sono alcune limitazioni e compromessi noti quando si utilizza la versione beta della piattaforma.
+
+- **All data / personal progress on these beta platforms will NOT be saved or carried over to production**
+
+ **Gli utenti nella versione beta avranno un account separato dalla produzione.** La versione beta utilizza un database fisicamente separato dalla produzione. Questo ci dà la possibilità di prevenire qualsiasi perdita accidentale di dati o modifiche. The dev-team may purge the database on this beta version as needed.
+
+- **The beta platforms do not provide any assurances regarding uptime and reliability**
+
+ Il deploy dovrebbe essere frequente e in iterazioni rapide, talvolta più volte al giorno. As a result, there will be unexpected downtime at times or broken functionality on the beta version.
+
+- **To ensure the effectiveness of the fix, it is advised not to direct regular users to this site for verification purposes.**
+
+ Il sito beta ha il solo scopo di supportare lo sviluppo locale e il testing, nient'altro. Non è una promessa di ciò che sta arrivando, ma un assaggio di ciò a cui si sta lavorando.
+
+- **Sign in page may look different than production**
+
+ Usiamo un test tenant per freeCodeCamp.dev su Auth0, e quindi non abbiamo l'abilità di impostare un dominio personalizzato. Questo fa sì che tutte le callback di reindirizzamento e la pagina di login appaiano su un dominio predefinito come: `https://freecodecamp-dev.auth0.com/`. Questo non ha effetto sulle funzionalità ed è quanto più vicino possiamo arrivare alla produzione.
+
+## Reporting issues and leaving feedback
+
+Per favore apri nuove issue per discutere e segnalare bug.
+
+Puoi inviare un'email a `dev[at]freecodecamp.org` se hai domande. Come sempre tutte le vulnerabilità di sicurezza dovrebbero essere segnalate a `security[at]freecodecamp.org` invece che al tracker pubblico o nel forum.
+
+## Flight Manual - Server Maintenance
+
+> [!WARNING]
+>
+> 1. Questa guida è rivolta solo ai **membri dello staff di freeCodeCamp**.
+> 2. Queste istruzioni non devono essere considerate esaustive, per favore usa cautela.
+
+Come membro dello staff, potrebbe esserti stato dato accesso ai nostri fornitori di servizi cloud come Azure, Digital Ocean, ecc.
+
+Ecco alcuni utili comandi che puoi usare per lavorare sulle Virtual Machine (VM), per fare manutenzione o faccende generali.
+
+## Get a list of the VMs
+
+> [!NOTE] While you may already have SSH access to the VMs, that alone will not let you list VMs unless you have been granted access to the cloud portals as well.
+
+### Azure
+
+Installa Azure CLI `az`: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
+
+> **(Una volta sola) Installa su macOS con [`homebrew`](https://brew.sh):**
+
+```
+brew install azure-cli
+```
+
+> **(Una volta sola) Login:**
+
+```
+az login
+```
+
+> **Ottieni una lista dei nomi delle VM e degli indirizzi IP:**
+
+```
+az vm list-ip-addresses --output table
+```
+
+### Digital Ocean
+
+Installa Digital Ocean CLI `doctl`: https://github.com/digitalocean/doctl#installing-doctl
+
+> **(One volta sola) Installa su macOS con [`homebrew`](https://brew.sh):**
+
+```
+brew install doctl
+```
+
+> **(Una Volta) Login:**
+
+Autenticazione e cambio di contesto: https://github.com/digitalocean/doctl#authenticating-with-digitalocean
+
+```
+doctl auth init
+```
+
+> **Ottieni una lista dei nomi delle VM e degli indirizzi IP:**
+
+```
+doctl compute droplet list --format "ID,Name,PublicIPv4"
+```
+
+## Spin New Resources
+
+Stiamo lavorando per creare il nostro setup IaC, e mentre stiamo lavorando su quello puoi usare il portale di Azure o il CLI di Azure per creare nuove macchine virtuali e altre risorse.
+
+:::tip
+Non importa cosa usi per creare nuove risorse, abbiamo alcuni [utili file di configurazione cloud-init](https://github.com/freeCodeCamp/infra/tree/main/cloud-init) per aiutarti a fare provisioning di base, come installare docker o aggiungere le chiavi SSH, ecc.
+:::
+
+## Keep VMs Updated
+
+Dovresti tenere aggiornate le VM eseguendo update e upgrade. This will ensure that the virtual machine is patched with the latest security fixes.
+
+> [!WARNING] Prima di eseguire questi comandi:
+>
+> - Make sure that the VM has been provisioned completely and that there are no post-install steps running.
+> - Se stai aggiornando pacchetti su una VM che sta già servendo una applicazione, assicurati che l'app sia stata fermata e salvata. L'aggiornamento dei pacchetti causerà picchi di utilizzo di banda, memoria e/o CPU portando a malfunzionamenti di applicazioni in esecuzione.
+
+Aggiorna informazioni sul pacchetto
+
+```bash
+sudo apt update
+```
+
+Aggiorna i pacchetti installati
+
+```bash
+sudo apt upgrade -y
+```
+
+Pulisci i pacchetti inutilizzati
+
+```bash
+sudo apt autoremove -y
+```
+
+## Work on Web Servers (Proxy)
+
+Stiamo eseguendo istanze di carico bilanciate (Azure Load Balancer) per i nostri server web. Questi server eseguono NGINX che inverte il proxy di tutto il traffico a freeCodeCamp.org da varie applicazioni in esecuzione sulle proprie infrastrutture.
+
+La configurazione di NGINX è disponibile su [questo repository](https://github.com/freeCodeCamp/nginx-config).
+
+### Prima Installazione
+
+Provisioning delle VM con il codice
+
+1. Installa NGINX e configuralo dal repository.
+
+ ```bash
+ sudo su
+
+ cd /var/www/html
+ git clone https://github.com/freeCodeCamp/error-pages
+
+ cd /etc/
+ rm -rf nginx
+ git clone https://github.com/freeCodeCamp/nginx-config nginx
+
+ cd /etc/nginx
+ ```
+
+2. Installa i certificati di origine di Cloudfire e la configurazione dell'applicazione di upstream.
+
+ Ottieni il certificati di origine di Cloudflare dallo storage sicuro e installa nelle posizioni richieste.
+
+ **O**
+
+ Sposta i certificati esistenti:
+
+ ```bash
+ # Local
+ scp -r username@source-server-public-ip:/etc/nginx/ssl ./
+ scp -pr ./ssl username@target-server-public-ip:/tmp/
+
+ # Remote
+ rm -rf ./ssl
+ mv /tmp/ssl ./
+ ```
+
+ Aggiorna le configurazioni di upstream:
+
+ ```bash
+ vi configs/upstreams.conf
+ ```
+
+ Aggiungi/aggiorna gli indirizzi IP di sorgente/origine dell'applicazione.
+
+3. Set up networking and firewalls.
+
+ Configura i firewall di Azure e `ufw` come necessario per indirizzi di origine d'ingresso.
+
+4. Aggiungi la VM al pool del load balancer del backend.
+
+ Configura e aggiungi regole al load balancer se necessario. Potresti anche aver bisogno di aggiungere le VM al pool del load balancer del backend.
+
+### Log e monitoraggio
+
+1. Controlla lo stato dei servizi NGINX usando i comandi seguenti:
+
+ ```bash
+ sudo systemctl status nginx
+ ```
+
+2. I log e il monitoraggio dei server sono disponibili su:
+
+ NGINX Amplify: [https://amplify.nginx.com]('https://amplify.nginx.com'), l'attuale dashboard per il monitoraggio. Stiamo lavorando a metriche più granulari per una osservabilità migliore
+
+### Aggiornamento Istanze (Manutenzione)
+
+Le modifiche di configurazione alle nostre istanze NGINX sono mantenute su GitHub, queste dovrebbero essere distribuite su ogni istanza in questo modo:
+
+1. SSH nell'istanza e inserisci sudo
+
+```bash
+sudo su
+```
+
+2. Ottieni l'ultimo codice di configurazione.
+
+```bash
+cd /etc/nginx
+git fetch --all --prune
+git reset --hard origin/main
+```
+
+3. Prova e ricarica la configurazione [con i segnali](https://docs.nginx.com/nginx/admin-guide/basic-functionality/runtime-control/#controlling-nginx).
+
+```bash
+nginx -t
+nginx -s reload
+```
+
+## Work on API Instances
+
+1. Installa strumenti di generazione per i binari di node (`node-gyp`) ecc.
+
+```bash
+sudo apt install build-essential
+```
+
+### Prima Installazione
+
+Fare il provisioning delle VM con il codice
+
+1. Install Node LTS.
+
+2. Install pnpm globally.
+
+```bash
+npm install -g pnpm
+```
+
+3. Install pm2 globally.
+
+```bash
+npm install -g pm2
+```
+
+4. Clone freeCodeCamp, set up env, and keys.
+
+```bash
+git clone https://github.com/freeCodeCamp/freeCodeCamp.git
+cd freeCodeCamp
+git checkout prod-current # or any other branch to be deployed
+```
+
+5. Create the `.env` from the secure credentials storage.
+
+6. Install dependencies
+
+```bash
+pnpm install
+```
+
+7. Setup pm2 `logrotate` and startup on boot
+
+```bash
+pm2 install pm2-logrotate
+pm2 startup
+```
+
+8. Build the server
+
+```bash
+pnpm prebuild && pnpm build:curriculum && pnpm build:server
+```
+
+9. Start Instances
+
+```bash
+pnpm start:server
+```
+
+### Aggiornamento Istanze (Manutenzione)
+
+```bash
+pm2 logs
+```
+
+```bash
+pm2 monit
+```
+
+### Aggiornamento Istanze (Manutenzione)
+
+Ogni tanto devono essere fatti dei deployment dei cambiamenti al codice alle istanze delle API. Può essere un update continuo o un update manuale. The latter is essential when changing dependencies or adding environment variables.
+
+:::danger
+Le pipeline automatizzate al momento non gestiscono l'aggiornamento delle dipendenze. Dobbiamo fare un aggiornamento manuale prima dell'avvio di qualsiasi pipeline di deployment.
+:::
+
+#### 1. Manual Updates - Used for updating dependencies, env variables.
+
+1. Stop all instances
+
+```bash
+pm2 stop all
+```
+
+2. Install dependencies
+
+```bash
+pnpm install
+```
+
+3. Build the server
+
+```bash
+pnpm prebuild && pnpm build:curriculum && pnpm build:server
+```
+
+4. Start Instances
+
+```bash
+pnpm start:server && pm2 logs
+```
+
+#### 2. Rolling updates - Used for logical changes to code.
+
+```bash
+pnpm reload:server && pm2 logs
+```
+
+> [!NOTE] We are handling rolling updates to code and logic via pipelines. Non dovresti aver bisogno di eseguire questi comandi. Sono qui per documentazione.
+
+#### 3. Updating Node
+
+1. Install new Node version
+
+2. Update pm2 to use the new version
+
+```bash
+pm2 update
+```
+
+## Work on Client Instances
+
+1. Install build tools for node binaries (`node-gyp`) etc.
+
+```bash
+sudo apt install build-essential
+```
+
+### Prima installazione
+
+Fare provisioning delle VM con il codice
+
+1. Install Node LTS.
+
+2. Update `npm` and install PM2 and setup `logrotate` and startup on boot
+
+ ```bash
+ npm i -g npm@8
+ npm i -g pm2@4
+ npm install -g serve@13
+ pm2 install pm2-logrotate
+ pm2 startup
+ ```
+
+3. Clone client config, setup env and keys.
+
+ ```bash
+ git clone https://github.com/freeCodeCamp/client-config.git client
+ cd client
+ ```
+
+ Start placeholder instances for the web client, these will be updated with artifacts from the Azure pipeline.
+
+ > Todo: This setup needs to move to S3 or Azure Blob storage
+ >
+ > ```bash
+ > echo "serve -c ../serve.json -p 50505 www" > client-start-primary.sh
+ > chmod +x client-start-primary.sh
+ > pm2 delete client-primary
+ > pm2 start ./client-start-primary.sh --name client-primary
+ > echo "serve -c ../serve.json -p 52525 www" > client-start-secondary.sh
+ > chmod +x client-start-secondary.sh
+ > pm2 delete client-secondary
+ > pm2 start ./client-start-secondary.sh --name client-secondary
+ > ```
+
+### Logging e monitoraggio
+
+```bash
+pm2 logs
+```
+
+```bash
+pm2 monit
+```
+
+### Aggiornamento istanze (Manutenzione)
+
+Ogni tanto devono essere fatti dei deployment dei cambiamenti al codice alle istanze delle API. Può essere un update continuo o un update manuale. Il secondo è essenziane quando si cambiando dipendenze o si aggiungono variabili ambientali.
+
+:::danger
+Le pipeline automatizzate al momento non gestiscono l'aggiornamento delle dipendenze. Dobbiamo fare un aggiornamento manuale prima di ogni esecuzione della pipeline di deployment.
+:::
+
+#### 1. Aggiornamenti manuali - Usati per aggiornare dipendenze, variabili env.
+
+1. Stop all instances
+
+ ```bash
+ pm2 stop all
+ ```
+
+2. Install or update dependencies
+
+3. Start Instances
+
+ ```bash
+ pm2 start all --update-env && pm2 logs
+ ```
+
+#### 2. Aggiornamenti continui - usati per cambiamenti logici al codice.
+
+```bash
+pm2 reload all --update-env && pm2 logs
+```
+
+> [!NOTE] Gli update continui a codice e logica sono gestiti dalle pipeline. Non dovresti aver bisogno di eseguire questi comandi. Sono qui per documentazione.
+
+## Work on Chat Servers
+
+I nostri chat server sono disponibili con una configuratione HA [raccomandata nella documentazione di Rocket.Chat](https://docs.rocket.chat/installation/docker-containers/high-availability-install). Il file `docker-compose` per questo è [disponibile qui](https://github.com/freeCodeCamp/chat-config).
+
+Avviamo istanze ridondanti di NGINX che sono loro stesse con bilanciamento di carico (Azure Load Balancer) sul cluster di Rocket.Chat. I file di configurazione NGINX sono [disponibili qui](https://github.com/freeCodeCamp/chat-nginx-config).
+
+### First Install
+
+Fare provisioning delle VM con il codice
+
+**Cluster NGINX:**
+
+1. Install NGINX and configure from repository.
+
+ ```bash
+ sudo su
+
+ cd /var/www/html
+ git clone https://github.com/freeCodeCamp/error-pages
+
+ cd /etc/
+ rm -rf nginx
+ git clone https://github.com/freeCodeCamp/chat-nginx-config nginx
+
+ cd /etc/nginx
+ ```
+
+2. Install Cloudflare origin certificates and upstream application config.
+
+ Get the Cloudflare origin certificates from the secure storage and install at required locations.
+
+ **OR**
+
+ Move over existing certificates:
+
+ ```bash
+ # Local
+ scp -r username@source-server-public-ip:/etc/nginx/ssl ./
+ scp -pr ./ssl username@target-server-public-ip:/tmp/
+
+ # Remote
+ rm -rf ./ssl
+ mv /tmp/ssl ./
+ ```
+
+ Update Upstream Configurations:
+
+ ```bash
+ vi configs/upstreams.conf
+ ```
+
+ Add/update the source/origin application IP addresses.
+
+3. Set up networking and firewalls.
+
+ Configure Azure firewalls and `ufw` as needed for ingress origin addresses.
+
+4. Add the VM to the load balancer backend pool.
+
+ Configure and add rules to load balancer if needed. You may also need to add the VMs to load balancer backend pool if needed.
+
+**Cluster Docker:**
+
+1. Install Docker and configure from the repository
+
+ ```bash
+ git clone https://github.com/freeCodeCamp/chat-config.git chat
+ cd chat
+ ```
+
+2. Configure the required environment variables and instance IP addresses.
+
+3. Run rocket-chat server
+
+ ```bash
+ docker-compose config
+ docker-compose up -d
+ ```
+
+### Logging and Monitoring
+
+1. Check status for NGINX service using the below command:
+
+ ```bash
+ sudo systemctl status nginx
+ ```
+
+2. Check status for running docker instances with:
+
+ ```bash
+ docker ps
+ ```
+
+### Updating Instances (Maintenance)
+
+**Cluster NGINX:**
+
+Le modifiche di configurazione alle nostre istanze NGINX sono mantenute su GitHub, queste dovrebbero essere distribuite su ogni istanza in questo modo:
+
+1. SSH into the instance and enter sudo
+
+ ```bash
+ sudo su
+ ```
+
+2. Get the latest config code.
+
+ ```bash
+ cd /etc/nginx
+ git fetch --all --prune
+ git reset --hard origin/main
+ ```
+
+3. Test and reload the config [with Signals](https://docs.nginx.com/nginx/admin-guide/basic-functionality/runtime-control/#controlling-nginx).
+
+ ```bash
+ nginx -t
+ nginx -s reload
+ ```
+
+**Cluster Docker:**
+
+1. SSH into the instance and navigate to the chat config path
+
+ ```bash
+ cd ~/chat
+ ```
+
+2. Get the latest config code.
+
+ ```bash
+ git fetch --all --prune
+ git reset --hard origin/main
+ ```
+
+3. Pull down the latest docker image for Rocket.Chat
+
+ ```bash
+ docker-compose pull
+ ```
+
+4. Update the running instances
+
+ ```bash
+ docker-compose up -d
+ ```
+
+5. Validate the instances are up
+
+ ```bash
+ docker ps
+ ```
+
+6. Cleanup extraneous resources
+
+ ```bash
+ docker system prune --volumes
+ ```
+
+ Output:
+
+ ```bash
+ WARNING! This will remove:
+ - all stopped containers
+ - all networks not used by at least one container
+ - all volumes not used by at least one container
+ - all dangling images
+ - all dangling build cache
+
+ Are you sure you want to continue? [y/N] y
+ ```
+
+ Select yes (y) to remove everything that is not in use. This will remove all stopped containers, all networks and volumes not used by at least one container, and all dangling images and build caches.
+
+## Work on Contributor Tools
+
+### Deploy Updates
+
+Fai ssh nella VM (hosted su Digital Ocean).
+
+```bash
+cd tools
+git pull origin master
+pnpm install
+pnpm run build
+pm2 restart contribute-app
+```
+
+## Updating Node.js Versions on VMs
+
+Visualizza le versioni installate di node & npm
+
+```bash
+nvm -v
+node -v
+npm -v
+
+nvm ls
+```
+
+Installa l'ultima versione di Node.js LTC, e reinstalla i pacchetti globali
+
+```bash
+nvm install --lts --reinstall-packages-from=default
+```
+
+Verifica i pacchetti installati
+
+```bash
+npm ls -g --depth=0
+```
+
+Alias the `default` Node.js version to the current LTS (pinned to the latest major version)
+
+```bash
+nvm alias default 16
+```
+
+(Facoltativo) Disinstalla vecchie versioni
+
+```bash
+nvm uninstall
+```
+
+:::danger
+Per applicazioni client, lo script della shell non può essere fatto risorgere tra versioni di Node.js con `pm2 resurrect`. Fai il deploy dei processi da zero. This should become nicer when we move to a docker-based setup.
+:::
+
+> Se stai usando PM2 per processi dovresti anche richiamare le applicazione e salvare la lista di processo per un recupero automatico al riavvio.
+
+Ottieni le istruzioni/comandi di deinstallazione con il comando `unstartup` e usa l'output per rimuovere i servizi systemctl
+
+```bash
+pm2 unstartup
+```
+
+Ottieni le istruzioni/comandi di installazione con il comando `startup` e usa l'output per aggiungere i servizi systemctl
+
+```bash
+pm2 startup
+```
+
+Comandi veloci per PM2 per elencare, far ripartire processi salvati, ecc.
+
+```bash
+pm2 ls
+```
+
+```bash
+pm2 resurrect
+```
+
+```bash
+pm2 save
+```
+
+```bash
+pm2 logs
+```
+
+## Installing and Updating Azure Pipeline Agents
+
+See: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-linux?view=azure-devops and follow the instructions to stop, remove, and reinstall agents. Approssimativamente puoi seguire gli step elencati qui.
+
+Avrai bisogno di un PAT, che puoi ottenere da: https://dev.azure.com/freeCodeCamp-org/_usersSettings/tokens
+
+### Installing Agents on Deployment targets
+
+Vai su [Azure Devops](https://dev.azure.com/freeCodeCamp-org) e registra l'agente dall'inizio nei requisiti [deployment groups](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_machinegroup).
+
+> [!NOTE] Dovresti eseguire gli script nella home directory, e assicurati che nessun'altra directory `azagent` esista.
+
+### Updating Agents
+
+Attualmente aggiornare gli agent richiede che siano rimossi e riconfigurati. Questo è richiesto perché possano ottenere valori `PATH` e altre variabili d'ambiente di sistema. Dobbiame farlo per aggiornare Node.js sulle VM target di deployment.
+
+1. Navigate and check status of the service
+
+ ```bash
+ cd ~/azagent
+ sudo ./svc.sh status
+ ```
+
+2. Stop the service
+
+ ```bash
+ sudo ./svc.sh stop
+ ```
+
+3. Uninstall the service
+
+ ```bash
+ sudo ./svc.sh uninstall
+ ```
+
+4. Remove the agent from the pipeline pool
+
+ ```bash
+ ./config.sh remove
+ ```
+
+5. Remove the config files
+
+ ```bash
+ cd ~
+ rm -rf ~/azagent
+ ```
+
+Una volta completati gli step precedenti potrai ripetere gli stesi passi per installare l'agente.
+
+## Flight Manual - Email Blast
+
+Usiamo uno [strumento CLI](https://github.com/freecodecamp/sendgrid-email-blast) per inviare la nostra newsletter settimanale. Per avviare e iniziare il processo:
+
+1. Sign in to DigitalOcean, and spin up new droplets under the `Sendgrid` project. Use the Ubuntu Sendgrid snapshot with the most recent date. This comes pre-loaded with the CLI tool and the script to fetch emails from the database. With the current volume, three droplets are sufficient to send the emails in a timely manner.
+
+2. Set up the script to fetch the email list.
+
+ ```bash
+ cd /home/freecodecamp/scripts/emails
+ cp sample.env .env
+ ```
+
+ You will need to replace the placeholder values in the `.env` file with your credentials.
+
+3. Run the script.
+
+ ```bash
+ node get-emails.js emails.csv
+ ```
+
+ This will save the email list in an `emails.csv` file.
+
+4. Break the emails down into multiple files, depending on the number of droplets you need. This is easiest to do by using `scp` to pull the email list locally and using your preferred text editor to split them into multiple files. Each file will need the `email,unsubscribeId` header.
+
+5. Switch to the CLI directory with `cd /home/sendgrid-email-blast` and configure the tool [per the documentation](https://github.com/freeCodeCamp/sendgrid-email-blast/blob/main/README).
+
+6. Run the tool to send the emails, following the [usage documentation](https://github.com/freeCodeCamp/sendgrid-email-blast/blob/main/docs/cli-steps).
+
+7. When the email blast is complete, verify that no emails have failed before destroying the droplets.
+
+## Flight Manual - Adding news instances for new languages
+
+### Theme Changes
+
+Utilizziamo un [tema](https://github.com/freeCodeCamp/news-theme) personalizzato per la nostra pubblicazione. L'aggiunta delle seguenti modifiche al tema consente l'aggiunta di nuove lingue.
+
+1. Include an `else if` statement for the new [ISO language code](https://www.loc.gov/standards/iso639-2/php/code_list.php) in [`setup-locale.js`](https://github.com/freeCodeCamp/news-theme/blob/main/assets/config/setup-locale.js)
+2. Create an initial config folder by duplicating the [`assets/config/en`](https://github.com/freeCodeCamp/news-theme/tree/main/assets/config/en) folder and changing its name to the new language code. (`en` —> `es` for Spanish)
+3. Inside the new language folder, change the variable names in `main.js` and `footer.js` to the relevant language short code (`enMain` —> `esMain` for Spanish)
+4. Duplicate the [`locales/en.json`](https://github.com/freeCodeCamp/news-theme/blob/main/locales/en.json) and rename it to the new language code.
+5. In [`partials/i18n.hbs`](https://github.com/freeCodeCamp/news-theme/blob/main/partials/i18n.hbs), add scripts for the newly created config files.
+6. Add the related language `day.js` script from [cdnjs](https://cdnjs.com/libraries/dayjs/1.10.4) to the [freeCodeCamp CDN](https://github.com/freeCodeCamp/cdn/tree/main/build/news-assets/dayjs/1.10.4/locale)
+
+### Ghost Dashboard Changes
+
+Cambia gli asset della pubblicazione andando alla dashboard di ghost > settings > general e caricando l'[icona](https://github.com/freeCodeCamp/design-style-guide/blob/master/assets/fcc-puck-500-favicon.png), il [logo](https://github.com/freeCodeCamp/design-style-guide/blob/master/downloads/fcc_primary_large.png), e la [copertina](https://github.com/freeCodeCamp/design-style-guide/blob/master/assets/fcc_ghost_publication_cover.png) della pubblicazione.
diff --git a/src/content/docs/it/faq.md b/src/content/docs/it/faq.md
new file mode 100644
index 00000000..692c1a50
--- /dev/null
+++ b/src/content/docs/it/faq.md
@@ -0,0 +1,113 @@
+---
+title: Frequently Asked Questions
+---
+
+Answers to common questions.
+
+## I am new to GitHub and Open Source. Where should I start?
+
+Read our ["How to Contribute to Open Source Guide"](https://github.com/freeCodeCamp/how-to-contribute-to-open-source). It's a comprehensive reference for first-timer-friendly projects. And it includes a lot of open-source contribution tips.
+
+## What do I need to know to contribute to the codebase?
+
+freeCodeCamp runs on a modern JavaScript stack. If you're interested in contributing to our codebase, you will need some familiarity with JavaScript and some of the technologies we use like Node.js, MongoDB, OAuth 2.0, React, Gatsby, and Webpack.
+
+## Can I translate freeCodeCamp's resources?
+
+Yes - You can contribute to any of the 30+ languages we have enabled on our translation platform.
+
+We have user-contributed translations live in some languages. We intend to localize freeCodeCamp into several major world languages. You can read all about this in our [announcement here](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/).
+
+If you are interested in contributing to translations please make sure you [read this guide](how-to-translate-files) first.
+
+## Can I contribute articles to freeCodeCamp News or videos to freeCodeCamp's YouTube channel?
+
+Yes - you can contribute to our publication blog and YouTube channel.
+
+If you're interested in writing articles for freeCodeCamp News, please visit this [publication guide](https://www.freecodecamp.org/news/how-to-write-for-freecodecamp/). In addition, please read our [style guide](https://www.freecodecamp.org/news/developer-news-style-guide/) as this will help you write stronger and more effective articles.
+
+To help us make educational videos for our YouTube channel, you can follow the [YouTube channel guide here](https://www.freecodecamp.org/news/how-to-contribute-to-the-freecodecamp-community-youtube-channel-b86bce4c865/).
+
+## How can I report a new bug?
+
+If you think you've found a bug, first read the ["How to Report a Bug"](https://www.freecodecamp.org/news/how-to-report-a-bug-to-freecodecamp/) article and follow its instructions.
+
+If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so that we can reproduce the bug. We have a pre-defined issue template to help you through this.
+
+Please note that these GitHub issues are for codebase-related issues and discussions – not for getting help with learning to code. Whenever in doubt, you should [seek assistance on the forum](https://forum.freecodecamp.org) before creating a GitHub issue.
+
+## How can I report a security issue?
+
+Please don't create GitHub issues for security issues. Instead, please [follow our security policy](https://contribute.freecodecamp.org/#/security).
+
+## I am a student. Can I work on a feature for academic credits?
+
+Yes. Please note we are unable to commit to any timelines or paperwork that may be a requirement by your college or university. We receive many pull-requests and code contributions from volunteer developers, and we respect their time and efforts. Out of respect for all of our other contributors, we will not give any PR special priority just because it happens to be school-related.
+
+We request you to plan ahead and work on code contributions with this in mind.
+
+## What do these different labels that are tagged on issues mean?
+
+The code maintainers [triage](https://en.wikipedia.org/wiki/Software_bug#Bug_management) issues and pull requests based on their priority, severity, and other factors. You can [find a complete glossary of their meanings here](https://github.com/freecodecamp/freecodecamp/labels).
+
+## Where do I start if I want to work on an issue?
+
+You should go through [**`help wanted`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [**`first timers only`**](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) issues for a quick overview of what is available for you to work on.
+
+:::tip
+Le issue **`help wanted`** sono a disposizione e non devi chiedere permessi per poterci lavorare. Tuttavia, le issue con l'etichetta **`first timers only`** sono problemi speciali che sono stati progettati per le persone che non hanno contribuito al codice di freeCodeCamp prima d'ora.
+:::
+
+## I found a typo. Should I report an issue before I can make a pull request?
+
+For typos and other wording changes, you can directly open pull requests without creating an issue first. Please be sure to mention details in the pull request description to help us understand and review your contribution – even if it's just a minor change.
+
+Please do create an issue if you want to discuss bigger aspects of the codebase or curriculum.
+
+## How can I get an issue assigned to me?
+
+We typically do not assign issues to anyone other than long-time contributors. Instead, we follow the below policy to be fair to everyone:
+
+1. Abbiamo maggiori probabilità di fare il merge della prima pull request che affronta il problema.
+2. Nel caso di più contributori che aprono una pull request per lo stesso problema all'incirca allo stesso tempo, daremo la priorità alla pull request che affronta al meglio la questione. Alcune delle cose che consideriamo:
+ - Hai incluso dei test?
+ - Hai coperto tutti i casi d'uso?
+ - Ti sei assicurato che tutti i test siano superati e confermi che tutto funziona localmente?
+3. Infine, diamo la priorità alle pull request che seguono le nostre linee guida raccomandate.
+ - Hai seguito la checklist delle pull request?
+ - Hai dato alla tua pull request un titolo esplicativo?
+
+## I am interested in being a moderator at freeCodeCamp. Where should I start?
+
+Our community moderators are our heroes. Their voluntary contributions make freeCodeCamp a safe and welcoming community.
+
+First and foremost, we would need you to be an active participant in the community, and live by our [code of conduct](https://www.freecodecamp.org/news/code-of-conduct/) (not just enforce it).
+
+Here are some recommended paths for some of our platforms:
+
+- Per essere un moderatore per **Discord/Chat**, abbi una presenza attiva nella nostra chat e interazioni positive con gli altri, e intanto impara come gestire i potenziali conflitti che possono verificarsi.
+- Per essere un moderatore del **Forum**, in maniera simile ai moderatori della chat, abbi una presenza attiva e interagisci con gli utenti, supportando gli altri nel loro percorso di crescita e dando feedback quando richiesto. Dai un occhiata al [The Subforum Leader Handbook](https://forum.freecodecamp.org/t/the-subforum-leader-handbook/326326) per maggiori informazioni.
+- Per essere un moderatore su **GitHub**, aiuta a processare le issue create su GitHub per vedere se sono valide e (idealmente) prova a proporre soluzioni per queste issue che possono essere applicate da altri (o da te stesso).
+
+Altogether, be respectful to others. We are humans from all around the world. With that in mind, please also consider using encouraging or supportive language and be mindful of cross-cultural communication.
+
+If you practice the above **consistently for a while** and our fellow moderator members recommend you, a staff member will reach out and onboard you to the moderators' team. Open source work is voluntary work and our time is limited. We acknowledge that this is probably true in your case as well. So we emphasize being **consistent** rather than engaging in the community 24/7.
+
+Take a look at our [Moderator Handbook](moderator-handbook) for a more exhaustive list of other responsibilities and expectations we have of our moderators.
+
+## I am stuck on something that is not included in this documentation.
+
+**Feel free to ask for help in:**
+
+- La categoria `Contributors` del [forum della nostra community](https://forum.freecodecamp.org/c/contributors).
+- Il canale `#Contributors` sul nostro [chat server](https://discord.gg/PRyKn3Vbay).
+
+We are excited to help you contribute to any of the topics that you would like to work on. If you ask us questions on the related issue threads, we will be glad to clarify. Be sure to search for your question before posting a new one.
+
+Thanks in advance for being polite and patient. Remember – this community is run mainly by volunteers.
+
+## Additional Assistance
+
+If you have queries about the stack, architecture of the codebase, translations, or anything else, feel free to reach out to our staff team [on the forum](https://forum.freecodecamp.org/g/team).
+
+**You can email our developer staff at: `dev[at]freecodecamp.org`**
diff --git a/src/content/docs/it/how-to-add-cypress-tests.md b/src/content/docs/it/how-to-add-cypress-tests.md
new file mode 100644
index 00000000..ccc15ef1
--- /dev/null
+++ b/src/content/docs/it/how-to-add-cypress-tests.md
@@ -0,0 +1,122 @@
+---
+title: Come aggiungere test Cypress
+---
+
+Quando si fanno cambiamenti a JavaScript, CSS o HTML che possono cambiare le funzionalità o il layout di una pagina è importante aggiungere corrispondenti test di integrazione [Cypress](https://docs.cypress.io).
+
+Per imparare come scrivere test Cypress, o specs, per favore vedi la [dcoumentazione](https://docs.cypress.io/guides/getting-started/writing-your-first-test.html) ufficiale di Cypress.
+
+## Where to Add a Test
+
+- I test Cypress sono nella directory `./cypress`.
+
+- I test Cypress per un modulo del curriculum sono nella corrispondente cartella del curriculum, per esempio `cypress/integration/learn/responsive-web-design/basic-css/index.js`.
+
+## How to Run Tests
+
+> [!NOTE] If using Gitpod, please see [Cypress-Gitpod Setup](how-to-add-cypress-tests#cypress-gitpod-setup)
+
+### 1. Ensure that MongoDB and Client Applications are Running
+
+- [Fai partire MongoDB e fai il seed del database](how-to-setup-freecodecamp-locally#step-3-start-mongodb-and-seed-the-database)
+
+- [Avvia l'applicazione del client di freeCodeCamp e il server API](how-to-setup-freecodecamp-locally#step-4-start-the-freecodecamp-client-application-and-api-server)
+
+### 2. Run the Cypress Tests
+
+Per eseguire i test su build di produzione, sostituisci `dev` con `prd` nella parte seguente.
+
+- Per eseguire tutti i test nella cartella `./cypress`:
+
+ ```bash
+ pnpm run cypress:dev:run
+ ```
+
+- Per eseguire un singolo test:
+
+ ```bash
+ pnpm run cypress run --spec=cypress/
+ ```
+
+ Ad esempio:
+
+ ```bash
+ pnpm run cypress run --spec=cypress/e2e/default/landing.ts
+ ```
+
+- Per creare una build di sviluppo, avvia il server di sviluppo e esegui tutti i test cypress end-to-end esistenti:
+
+ ```bash
+ pnpm run e2e:dev:run
+ ```
+
+## Cypress-Gitpod Setup
+
+### 1. Assicurati che l'ambiente di sviluppo sia in esecuzione
+
+If starting the Gitpod environment did not automatically develop the environment:
+
+- Follow the [MongoDB installation guide](https://www.mongodb.com/basics/get-started).
+- Create a config file.
+
+```bash
+pnpm run create:shared
+```
+
+- Fai il seed del database
+
+```bash
+pnpm run seed
+```
+
+- Sviluppa il server e il client
+
+```bash
+pnpm run develop
+```
+
+### 2. Installa Cypress Build Tools
+
+```bash
+pnpm run cypress:install-build-tools
+```
+
+- Quando chiesto dal terminale, seleziona il layout della tua tastiera per lingua/area
+
+Ora, [puoi eseguire Cypress](how-to-add-cypress-tests#_2-esegui-i-test-cypress)
+
+## Troubleshooting
+
+### Unable to Connect to Port 8000
+
+If Cypress fails to run with the following error:
+
+```
+CypressError: `cy.visit()` failed trying to load:
+
+http://localhost:3000/signin
+
+We attempted to make an http request to this URL but the request failed without a response.
+
+We received this error at the network level:
+
+ > Error: connect ECONNREFUSED 127.0.0.1:8000
+
+Common situations why this would fail:
+ - you don't have internet access
+ - you forgot to run / boot your web server
+ - your web server isn't accessible
+ - you have weird network configuration settings on your computer
+
+This error occurred while creating the session. Because the session setup failed, we failed the test.
+```
+
+You can resolve the issue by:
+
+- Going to the root `package.json` file and adding `--host 0.0.0.0` to the `develop:client` command:
+ ```json
+ "scripts": {
+ "develop:client": "cd ./client && pnpm run develop --host 0.0.0.0"
+ }
+ ```
+- Then, re-running `pnpm run develop`
diff --git a/src/content/docs/it/how-to-add-playwright-tests.md b/src/content/docs/it/how-to-add-playwright-tests.md
new file mode 100644
index 00000000..38b58b7c
--- /dev/null
+++ b/src/content/docs/it/how-to-add-playwright-tests.md
@@ -0,0 +1,349 @@
+---
+title: How to add Playwright tests
+---
+
+## Installation
+
+To install Playwright run:
+
+```bash
+pnpm run playwright:install-build-tools
+```
+
+Alternatively you can follow official documentation referenced below:
+
+To install and configure Playwright on your machine check out this [documentation](https://playwright.dev/docs/intro#installing-playwright).
+
+To learn how to write Playwright tests, or 'specs', please see Playwright's official [documentation](https://playwright.dev/docs/writing-tests).
+
+## Where to Add a Test
+
+- Playwright tests are in the `./e2e` directory.
+
+- Playwright test files are always with a `.spec.ts` extension.
+
+## Best Practices for writing E2E tests
+
+This section will explain in detail about best practices for writing and documenting E2E tests based on Playwright documentation and our community code-style.
+
+### - Imports
+
+Always start with necessary imports at the beginning of the file.
+
+For example:
+
+```ts
+import { test, expect, type Page } from '@playwright/test';
+```
+
+### - Identifying a DOM element
+
+Playwright comes with [multiple built-in locators](https://playwright.dev/docs/locators#quick-guide), but we recommend prioritizing the following locators:
+
+- `getByRole` for querying semantic elements, whose role is important and allows assistive technology to perceive the page correctly.
+- `getByText` for querying non-semantic elements such as `div`, `span`, or `p`.
+
+For example:
+
+```ts
+await expect(page.getByRole('heading', { name: 'Sign up' })).toBeVisible();
+await expect(page.getByText('Hello World')).toBeVisible();
+```
+
+In cases where the elements cannot be queried using the above-mentioned locators, you can use the `data-playwright-test-label` attribute as the last resort. This attribute is used to identify elements in the DOM for testing with playwright only. It is not used for styling or any other purpose.
+
+For example:
+
+```html
+
+
+
+```
+
+In the test file, you can use the `getByTestId` method to identify the element.
+
+For example:
+
+```ts
+await expect(page.getByTestId('landing-page-figure')).toBeVisible();
+```
+
+### - Constants
+
+Define any constant elements, data sets, or configurations used throughout your tests for easy reference.
+
+For example:
+
+```ts
+const landingPageElements = { ... };
+const superBlocks = [ ... ];
+```
+
+### - Shared Context
+
+If tests depend on a shared context (like a loaded web page), use beforeAll and afterAll hooks to set up and tear down that context.
+
+For example:
+
+```ts
+let page: Page;
+
+beforeAll(async ({ browser }) => {
+ page = await browser.newPage();
+});
+
+afterAll(async () => {
+ await page.close();
+});
+```
+
+### - Descriptive test names
+
+Each test block should have a clear and concise name describing exactly what it's testing.
+
+For example:
+
+```ts
+test('The component landing-top renders correctly', async ({ page }) => {
+ // ...
+});
+```
+
+### - Human readable assertions
+
+Each assertion should be as human readable as possible. This makes it easier to understand what the test is doing and what it's expecting.
+
+For example:
+
+```ts
+await expect(landingHeading1).toHaveText('Learn to code — for free.');
+```
+
+### - Keep it DRY
+
+Make sure that the tests are not repeating the same code over and over again. If you find yourself repeating the same code, consider refactoring it as a loop or a function.
+
+For example:
+
+```ts
+for (const logo of await logos.all()) {
+ await expect(logo).toBeVisible();
+}
+```
+
+### - Tests for mobile screens
+
+Use the `isMobile` argument to run tests that include logic that varies for mobile screens.
+
+For example:
+
+```ts
+test('The campers landing page figure is visible on desktop and hidden on mobile view', async ({
+ isMobile
+}) => {
+ const landingPageImage = page.getByTestId('landing-page-figure');
+
+ if (isMobile) {
+ await expect(landingPageImage).toBeHidden();
+ } else {
+ await expect(landingPageImage).toBeVisible();
+ }
+});
+```
+
+### - Group related tests
+
+Group related tests together using describe blocks. This makes it easier to understand what the tests are doing and what they're testing.
+
+For example:
+
+```ts
+describe('The campers landing page', () => {
+ test('The campers landing page figure is visible on desktop and hidden on mobile view', async ({
+ isMobile
+ }) => {
+ // ...
+ });
+
+ test('The campers landing page figure has the correct image', async () => {
+ // ...
+ });
+});
+```
+
+## How to Run Tests
+
+### 1. Ensure that MongoDB and Client Applications are Running
+
+- [Start MongoDB and seed the database](how-to-setup-freecodecamp-locally#step-3-start-mongodb-and-seed-the-database). In order for Playwright tests to work, be sure that you use the `pnpm run seed:certified-user` command.
+
+- [Start the freeCodeCamp client application and API server](how-to-setup-freecodecamp-locally#step-4-start-the-freecodecamp-client-application-and-api-server)
+
+### 2. Run the Playwright Tests
+
+To run tests with Playwright check the following below
+
+- Make sure you navigate to the e2e repo first
+
+ ```bash
+ cd e2e
+ ```
+
+- To run tests in UI helper mode:
+
+ ```bash
+ npx playwright test --ui
+ ```
+
+- To run a single test:
+
+ ```bash
+ npx playwright test
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test landing-page.spec.ts
+ ```
+
+- Run a set of test files in respective folders:
+
+ ```bash
+ npx playwright test
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test tests/todo-page/ tests/landing-page/
+ ```
+
+- Run the test with the title:
+
+ ```bash
+ npx playwright test -g
+ ```
+
+ For example:
+
+ ```bash
+ npx playwright test -g "add a todo item"
+ ```
+
+### 3. Debugging Tests
+
+Since Playwright runs in Node.js, you can debug it with your debugger of choice e.g. using console.log or inside your IDE
+
+- Debugging all tests:
+
+ ```bash
+ npx playwright test --debug
+ ```
+
+- Debugging one test file:
+
+ ```bash
+ npx playwright test example.spec.ts --debug
+ ```
+
+### 4. Generate Test Reports
+
+The HTML Reporter shows you a full report of your tests allowing you to filter the report by browsers, passed tests, failed tests, skipped tests and flaky tests.
+
+```bash
+npx playwright show-report
+```
+
+### 5. Troubleshooting
+
+Playwright is generally a solid bullet-proof tool. The contributor has already configured the tests to run on all OS machines, including major distributions of Windows, MacOS and Linux.
+
+- (MacOs and Linux) If running Playwright results in an error due to kernel dependencies, run the following command:
+
+ ```bash
+ pnpm run playwright:install-build-tools-linux
+ ```
+
+- A common error seen in playwright is as follows:
+
+ ```bash
+ Error: page.goto: Could not connect: Connection refused
+ =========================== logs ===========================
+ navigating to "https://127.0.0.1:8000/", waiting until "load"
+ ============================================================
+ ```
+
+ You can fix the above error with the following steps:
+
+ 1. **Check the URL:** Ensure that the URL you're trying to navigate to is correct and properly formatted. Make sure there are no typos in the URL.
+
+ 2. **Server Status:** Check whether the server at the URL is running and accessible. You might encounter this error if the server is not running or is not accessible.
+
+ 3. **Port Availability:** Verify that the port mentioned in the URL (8000 in this case) is the correct port and is available for use. Make sure no other process is already using that port.
+
+ 4. **Firewall or Security Software:** Sometimes, firewall or security software can block connections to specific ports. Check your firewall settings to ensure that the port is allowed.
+
+ 5. **Network Connectivity:** Ensure that your system has a working network connection and can access external resources.
+
+- Another common error seen in playwright is as follows:
+
+ ```bash
+ Protocol error (Network.getResponseBody): Request content was evicted from inspector cache
+ ```
+
+ 1. The network request was made using a method that does not include a response body, such as HEAD or CONNECT.
+ 2. The network request was made over a secure (HTTPS) connection, and the response body is not available for security reasons.
+ 3. The network request was made by a third-party resource (such as an advertisement or a tracking pixel) that is not controlled by the script.
+ 4. The network request was made by a script that has been paused or stopped before the response was received.
+
+**For more insights on issues visit the official documentation.**
+
+## Playwright-Gitpod Setup
+
+### 1. Ensure Development Environment is Running
+
+If starting the Gitpod environment did not automatically develop the environment:
+
+- Follow the [MongoDB installation guide](https://www.mongodb.com/basics/get-started).
+
+- Create the .env
+
+ ```bash
+ cp sample.env .env
+ ```
+
+- Create a config file.
+
+ ```bash
+ pnpm run create:shared
+ ```
+
+- Seed the database
+
+ ```bash
+ pnpm run seed:certified-user
+ ```
+
+- Develop the server and client
+
+ ```bash
+ pnpm run develop
+ ```
+
+### 2. Install Playwright Build Tools
+
+To install necessary dependencies for running Playwright run the following command:
+
+```bash
+pnpm run playwright:install-build-tools
+```
+
+### 3. Run the Playwright Tests on Gitpod
+
+To run all Playwright tests, run the following command:
+
+```bash
+cd e2e
+npx playwright test
+```
diff --git a/src/content/docs/it/how-to-catch-outgoing-emails-locally.md b/src/content/docs/it/how-to-catch-outgoing-emails-locally.md
new file mode 100644
index 00000000..bddff56c
--- /dev/null
+++ b/src/content/docs/it/how-to-catch-outgoing-emails-locally.md
@@ -0,0 +1,115 @@
+---
+title: Catching emails locally
+---
+
+> **Nota:** Questo è un **passaggio opzionale** ed è richiesto solo quando si lavora con flussi di lavoro sulle email
+
+- [Introduzione](#introduction)
+- [Installare MailHog](#installing-mailhog)
+- [Usare Mailhog](#using-mailhog)
+- [Link Utili](#useful-links)
+
+## Introduzione
+
+Some email workflows, like updating a user's email, require the back-end API server to send outgoing emails. MailHog è una alternativa ad usare un provider di un servizio email per mandare messagi email. È uno strumento per lo sviluppo per testare le email che catturerà i messaggi email mandati dalla tua istanza di freeCodeCamp.
+
+## Installare MailHog
+
+MailHog can be installed on macOS, Windows, and Linux or used via Docker.
+
+Installare MailHog con Docker
+
+Se hai Docker installato puoi usare
+
+```bash
+docker run -d --name mailhog --network host --rm mailhog/mailhog
+```
+
+per avviare MailHog in background e
+
+```bash
+docker stop mailhog
+```
+
+per arrestarlo.
+
+Quando l'installazione è completa, puoi iniziare a [usare MailHog](#using-mailhog).
+
+
+
+Installare MailHog su macOS
+
+Installa MailHog su macOS con [Homebrew](https://brew.sh/):
+
+```bash
+brew install mailhog
+brew services start mailhog
+```
+
+The above commands will start a MailHog service in the background.
+
+Quando l'installazione è completa, puoi iniziare a [usare MailHog](#using-mailhog).
+
+
+
+Installare MailHog su Windows
+
+Scarica l'ultima versione di MailHog dalla [repository ufficiale di MailHog](https://github.com/mailhog/MailHog/releases). Trova e clicca sul link per la tua versione di Windows (32 o 64 bit) e un file `.exe` sarà scaricato sul tuo computer.
+
+Quando il download è stato completato, clicca per aprire il file. Potrebbe comparire una notifica del firewall di Windows, chiedendo i permessi di accesso per MailHog. Dopo aver consentito l'accesso nel firewall, si aprirà un prompt standard della riga di comando di Windows con MailHog in esecuzione.
+
+Chiudi MailHog chiudendo la finestra del prompt dei comandi. Per riaprire MailHog, clicca sul file eseguibile (`.exe`) di MailHog che è stato scaricato all'inizio; non è necessario scaricare un nuovo file di installazione.
+
+Inizia a [usare MailHog](#using-mailhog).
+
+
+
+Installare MailHog su Linux
+
+Come prima cosa, installa [Go](https://golang.org).
+
+Usa i seguenti comandi per installare GO su sistemi basati su Debian come Ubuntu e Linux Mint.
+
+```bash
+sudo apt-get install golang
+```
+
+Usa i seguenti comandi per installare GO su sistemi basati su RPM come CentOS, Fedora, Red Hat Linux, ecc.
+
+```bash
+sudo dnf install golang
+```
+
+In alternativa, esegui i seguenti comandi per installare GO.
+
+```bash
+sudo yum install golang
+```
+
+Ora imposta il path per Go con i seguenti comandi.
+
+```bash
+echo "export GOPATH=$HOME/go" >> ~/.profile
+echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.profile
+source ~/.profile
+```
+
+In fine, esegui i comandi seguenti per installare ed eseguire MailHog.
+
+```bash
+go get github.com/mailhog/MailHog
+sudo cp /home/$(whoami)/go/bin/MailHog /usr/local/bin/mailhog
+mailhog
+```
+
+Inizia a [usare MailHog](#using-mailhog).
+
+
+
+## Usare Mailhog
+
+Open a new browser tab or window and navigate to [http://localhost:8025](http://localhost:8025) to open your MailHog inbox when the MailHog installation has been completed and MailHog is running.
+
+## Link Utili
+
+- Controlla il repository [MailHog](https://github.com/mailhog/MailHog) per ulteriori informazioni relative a MailHog. Ulteriori informazioni sono disponibili anche per quanto riguarda le configurazioni personalizzate di MailHog.
diff --git a/src/content/docs/it/how-to-contribute-to-the-codebase.md b/src/content/docs/it/how-to-contribute-to-the-codebase.md
new file mode 100644
index 00000000..5c506c33
--- /dev/null
+++ b/src/content/docs/it/how-to-contribute-to-the-codebase.md
@@ -0,0 +1,222 @@
+---
+title: Contribute to the Codebase
+---
+
+Seguire queste linee guida per contribuire al codebase. È altamente raccomandato se vuoi contribuire regolarmente.
+
+Ignorare questi passaggi può sporcare la tua copia, rendendo difficoltosi i processi di contribuzione, manutenzione e revisione.
+
+## Contribuire al codebase
+
+You can now make changes to files and commit your changes to your fork, which you can prepare by reading [how to set up freeCodeCamp locally](how-to-setup-freecodecamp-locally).
+
+Segui questi passaggi:
+
+1. Controlla di essere sul branch `main`:
+
+ ```bash
+ git status
+ ```
+
+ Dovresti ottenere un output come questo:
+
+ ```bash
+ On branch main
+ Your branch is up-to-date with 'origin/main'.
+
+ nothing to commit, working directory clean
+ ```
+
+ If you got a different message, then you aren't on main or your working directory isn't clean, resolve any outstanding files/commits and checkout `main`:
+
+ ```bash
+ git checkout main
+ ```
+
+2. Sincronizza il tuo ramo `main` del tuo fork con gli ultimi aggiornamenti dal ramo `main` dell'upstream di freeCodeCamp:
+
+:::danger
+Se hai delle pull request in sospeso fatte dal branch `main` del tuo fork, le perderai alla fine di questi passaggi.
+
+Prima di eseguire questo passaggio, dovresti assicurarti che un moderatore abbia eseguito il merge della tua pull request. Per evitare questa situazione, dovresti **sempre** lavorare su un branch che non sia `main`.
+:::
+
+Questo passaggio **sincronizzerà le ultime modifiche** dal repository principale di freeCodeCamp.
+
+Aggiorna la tua copia del repository upstream freeCodeCamp:
+
+```bash
+git fetch upstream
+```
+
+Fai un hard reset del tuo ramo main con il ramo main di freeCodeCamp:
+
+```bash
+git reset --hard upstream/main
+```
+
+Fai un push del ramo main al tuo origin per avere una cronologia pulita nel tuo fork su GitHub:
+
+```bash
+git push origin main --force
+```
+
+You can validate that your current main matches the upstream/main by performing a diff:
+
+```bash
+git diff upstream/main
+```
+
+L'output risultante dovrebbe essere vuoto. This process is important, because you will be rebasing your branch on top of the latest `upstream/main` as often as possible to avoid conflicts later.
+
+3. Crea un nuovo branch:
+
+ Lavorare su un branch separato per ogni issue ti aiuta a mantenere pulita la tua copia di lavoro locale. Non dovresti mai lavorare su `main`. Comprometteresti la tua copia di freeCodeCamp e potrebbe essere necessario ricominciare da capo con un nuovo clone o fork.
+
+ Controlla di essere su `main`, come spiegato in precedenza, e crea un branch da lì:
+
+ ```bash
+ git checkout -b fix/update-guide-for-xyz
+ ```
+
+ Il nome del branch dovrebbe iniziare con un `fix/`, `feat/`, `docs/`, ecc. Evita di utilizzare i numeri delle issue nei branch. Tienili brevi, significativi e unici.
+
+ Alcuni esempi di nomi buoni per un branch sono:
+
+ ```md
+ fix/update-challenges-for-react
+ fix/update-guide-for-html-css
+ fix/platform-bug-sign-in-issues
+ feat/add-guide-article-for-javascript
+ translate/add-spanish-basic-html
+ ```
+
+4. Modifica le pagine e lavora sul codice nel tuo editor di testo preferito.
+
+5. Una volta che sei soddisfatto delle modifiche, dovresti opzionalmente eseguire freeCodeCamp per visualizzarle in anteprima.
+
+6. Assicurati di correggere eventuali errori e controlla la formattazione delle modifiche.
+
+7. Controlla e conferma i file che stai aggiornando:
+
+ ```bash
+ git status
+ ```
+
+ Questo dovrebbe mostrare un elenco di file `unstaged` che hai modificato.
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes were not staged for commit:
+ (use "git add/rm ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in the working directory)
+
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
+ ...
+ ```
+
+8. Fai lo staging delle modifiche e crea un commit:
+
+ In questo passaggio, dovresti contrassegnare solo i file che hai modificato o aggiunto tu stesso. Se necessario è possibile eseguire un reset e risolvere i file che non hai intenzione di modificare.
+
+ ```bash
+ git add path/to/my/changed/file.ext
+ ```
+
+ Oppure puoi aggiungere tutti i file `unstaged` all'area di staging:
+
+ ```bash
+ git add .
+ ```
+
+ Solo i file che sono stati spostati nell'area di staging verranno aggiunti quando effettui un commit.
+
+ ```bash
+ git status
+ ```
+
+ Output:
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes to be committed:
+ (use "git reset HEAD ..." to unstage)
+
+ modified: CONTRIBUTING.md
+ modified: docs/README.md
+ modified: docs/how-to-setup-freecodecamp-locally.md
+ modified: docs/how-to-work-on-guide-articles.md
+ ```
+
+ Ora, è possibile eseguire il commit delle modifiche con un breve messaggio come questo:
+
+ ```bash
+ git commit -m "fix: breve messaggio di commit"
+ ```
+
+ Alcuni esempi:
+
+ ```md
+ fix: add test for JavaScript - for loop step
+ feat: add link for article for alexa skills
+ ```
+
+ Crea un messaggio di commit convenzionale. Questa è una buona pratica come sviluppatore, e seguirai le pratiche standard.
+
+ Alcuni esempi di messaggi di commit convenzionali sono:
+
+ ```md
+ fix: improve HTML step
+ fix: fix build scripts for Travis-CI
+ feat: add link to JavaScript hoisting article
+ docs: update contributing guidelines
+ ```
+
+ Mantieni questi messaggi brevi, non più di 50 caratteri. È sempre possibile aggiungere ulteriori informazioni nella descrizione del messaggio di commit.
+
+ Questo non richiede più tempo rispetto a un messaggio non convenzionale come 'update file' o 'add index.md'
+
+ Puoi sapere di più sul perché dovresti usare i commit convenzionali [qui](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
+
+9. Se ti accorgi di dover modificare un file o aggiornare il messaggio del commit dopo aver fatto un commit puoi farlo dopo aver modificato i file con:
+
+ ```bash
+ git commit --amend
+ ```
+
+ Questo aprirà un editor di testo predefinito come `nano` o `vi` dove potrai modificare il titolo del messaggio di commit e aggiungere/modificare la descrizione.
+
+10. Successivamente, è possibile inviare le modifiche al fork:
+
+ ```bash
+ git push origin branch/name-here
+ ```
+
+## Proporre una Pull Request (PR)
+
+Dopo aver fatto il commit delle tue modifiche, controlla qui [come aprire una Pull Request](how-to-open-a-pull-request).
+
+## Comandi rapidi
+
+Un rapido richiamo ai comandi di cui avrai bisogno lavorando.
+
+| comando | descrizione |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `pnpm test` | Esegue tutti i test JS del sistema inclusi client, server, lint e test delle sfide. |
+| `pnpm run test-client` | Esegue la test suite del client. |
+| `pnpm run test-client -u` | Run the client test suite, updating the Jest snapshots that are out of sync. |
+| `pnpm run test:curriculum` | Esegue la test suite del curriculum. |
+| `FCC_BLOCK='Basic HTML and HTML5' pnpm run test:curriculum` | Esegue i test di uno specifico blocco. |
+| `FCC_SUPERBLOCK='responsive-web-design' pnpm run test:curriculum` | Esegue i test di uno specifico superblocco. |
+| `pnpm run test-curriculum-full-output` | Esegue la suite di test del curriculum, senza arrestarsi dopo il primo errore |
+| `pnpm run test-server` | Esegue la suite di test del server. |
+| `pnpm run e2e` | Esegue i test di Cypress end to end. |
+| `pnpm run clean` | Disinstalla tutte le dipendenze e pulisce la cache. |
+| `pnpm run storybook` | Esegue Storybook per sviluppo dei componenti di library. |
diff --git a/src/content/docs/it/how-to-enable-new-languages.md b/src/content/docs/it/how-to-enable-new-languages.md
new file mode 100644
index 00000000..790e5d1f
--- /dev/null
+++ b/src/content/docs/it/how-to-enable-new-languages.md
@@ -0,0 +1,468 @@
+---
+title: Rilasciare nuove lingue su `/learn`
+---
+
+To enable a new language on `/learn` (curriculum), you need to complete the following steps:
+
+- Complete translating and approving the first 3 certifications on Crowdin. (New Responsive Web Design, JavaScript Algorithms and Data Structures, and Front End Development Libraries)
+- Complete translating and approving all strings in Learn UI project on Crowdin.
+- Update Crowdin settings to add a custom language code for the new language.
+- Open the 1st PR to configure GitHub Actions. You need to update 2 files:
+ - `crowdin-download.client-ui.yml`
+ - `crowdin-download.curriculum.yml`
+- Open the 2nd PR to add other configurations. You need to update/add the following files:
+ - Update `i18n.ts`
+ - Update `superblocks.ts`
+ - Update `algolia-locale-setup.ts`
+ - Add `links.json`
+ - Add `meta-tags.json`
+ - Add `motivation.json`
+- Ask infrastructure team to spin up the VM for the new language.
+- Once the VM is ready, open the 3rd PR to show the new language in the navigation menu.
+
+We will explain each step in the following sections.
+
+## Aggiornare le impostazioni di Crowdin
+
+Prima di poter rilasciare una nuova lingua, è necessario consentire alle lingue di fare il download da Crowdin. To configure that, you need to add a custom language code for your language.
+
+In the `Curriculum` and `Learn UI` projects on Crowdin, you will need to select `Settings` > `Languages` from the sidebar. Poi scorri fino a `Language Mapping`, dove vedrai un'opzione per aggiungere dei codici personalizzati per le lingue. Aggiungi una nuova voce per la lingua che vuoi rilasciare, selezionando `language` come valore `Placeholder` e inserendo il nome della lingua in minuscolo e in un formato adatto a un URL per il `Custom code`. If you aren't sure what to use, or you don't have an admin role and can't see the settings, reach out in our contributor chat and we will assist you.
+
+## Updating Workflows for GitHub Actions
+
+Then you need to configure the syncing between Crowdin and GitHub.
+
+You will need to add a step to the [`crowdin-download.client-ui.yml`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/.github/workflows/crowdin-download.client-ui.yml) and [`crowdin-download.curriculum.yml`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/.github/workflows/crowdin-download.curriculum.yml). Lo step sarà lo stesso per entrambi. Ad esempio, se vuoi abilitare il download per il Dothraki:
+
+```yml
+##### Download Dothraki #####
+- name: Crowdin Download Dothraki Translations
+ uses: crowdin/github-action@master
+ # options: https://github.com/crowdin/github-action/blob/master/action.yml
+ with:
+ # uploads
+ upload_sources: false
+ upload_translations: false
+ auto_approve_imported: false
+ import_eq_suggestions: false
+
+ # downloads
+ download_translations: true
+ download_language: mis
+ skip_untranslated_files: false
+ export_only_approved: true
+
+ push_translations: false
+
+ # pull-request
+ create_pull_request: false
+
+ # global options
+ config: './crowdin-config.yml'
+ base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
+
+ # Uncomment below to debug
+ # dryrun_action: true
+```
+
+Nota che la chiave `download_language` deve essere impostata sul codice della lingua mostrato su Crowdin.
+
+## Attivare una lingua
+
+> [!NOTE] Prima di procedere dovresti completare la sezione precedente aggiornando i processi automatici - devono essere effettuate in step separati o il build fallirà.
+
+Ci sono alcuni step da svolgere per consentire il build del codebase nella lingua scelta.
+
+First, visit the [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file to add the language to the list of available languages and configure the values. Qui ci sono diversi oggetti.
+
+- `Languages`: Aggiunge la nuova lingua all'enum `Languages` simile agli altri. Il valore della stringa qui sarà usato nel file `.env` per impostare un build della lingua in seguito.
+- `availableLangs`: Aggiunge la nuova proprietà dall'enum `Languages` a entrambi gli array `client` e `curriculum`.
+- `i18nextCodes`: Questi sono i codici ISO per le varie lingue. Dovrai aggiungere il codice ISO appropriato per la lingua che stai attivando. Devono essere unici per ogni lingua.
+- `LangNames`: Questi sono i nomi delle lingue visualizzati nel menu di navigazione.
+- `LangCodes`: Questi sono i codici delle lingue usati per formattare date e numeri. Questi devono essere codici Unicode CLDR invece di codici ISO.
+- `hiddenLangs`: Queste lingue non saranno mostrate nel menu di navigazione. Viene usato per le lingue che non sono ancora pronte per il rilascio. Include your language in this array in the first PR and ask staff team to prepare the VM instance for your language. When the VM is ready, make another PR to remove it from the array.
+- `rtlLangs`: Sono le lingue che si leggono da destra a sinistra.
+
+Per esempio, se vuoi attivare la lingua Dothraki, il tuo oggetto `i18n.ts` dovrebbe essere come segue:
+
+```js
+export enum Languages {
+ English = 'english',
+ Espanol = 'espanol',
+ Chinese = 'chinese',
+ ChineseTraditional = 'chinese-traditional',
+ Dothraki = 'dothraki'
+}
+
+export const availableLangs = {
+ client: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Dothraki
+ ],
+ curriculum: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Dothraki
+ ]
+};
+
+export const i18nextCodes = {
+ [Languages.English]: 'en',
+ [Languages.Espanol]: 'es',
+ [Languages.Chinese]: 'zh',
+ [Languages.ChineseTraditional]: 'zh-Hant',
+ [Languages.Dothraki]: 'mis'
+};
+
+export enum LangNames = {
+ [Languages.English]: 'English',
+ [Languages.Espanol]: 'Español',
+ [Languages.Chinese]: '中文(简体字)',
+ [Languages.ChineseTraditional]: '中文(繁體字)',
+ [Languages.Dothraki]: 'Dothraki'
+};
+
+export enum LangCodes = {
+ [Languages.English]: 'en-US',
+ [Languages.Espanol]: 'es-419',
+ [Languages.Chinese]: 'zh',
+ [Languages.ChineseTraditional]: 'zh-Hant',
+ [Languages.Dothraki]: 'mis'
+};
+
+export const hiddenLangs = ['dothraki'];
+
+export const rtlLangs = [''];
+```
+
+> [!NOTE] When a language has been set up in the deployment pipeline AND has a public `/learn` instance live, it can be removed from the `hiddenLangs` array and be made available to the public.
+
+### Set Translated SuperBlocks
+
+In the [shared/config/superblocks.ts](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/superblocks.ts) file, add the new language to the `notAuditedSuperBlocks` object. This lists all the superblocks which are not fully translated. Add an array of superblocks that have not been fully translated to it. For example:
+
+```js
+export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
+ ...
+ [Languages.Dothraki]: [
+ SuperBlocks.DataVis,
+ SuperBlocks.RelationalDb,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy,
+ SuperBlocks.CollegeAlgebraPy,
+ SuperBlocks.FoundationalCSharp,
+ SuperBlocks.CodingInterviewPrep,
+ SuperBlocks.ProjectEuler,
+ SuperBlocks.JsAlgoDataStructNew,
+ SuperBlocks.TheOdinProject
+ ]
+}
+```
+
+Be sure to only add the superblocks that are **not** fully translated and approved. The translated superblocks will be calculated from this object. When a new superblock is finished being fully translated, remove it from the array for that language.
+
+See the `SuperBlocks` enum at the beginning of the same file for the full list of superblocks.
+
+### Configurare la ricerca
+
+Next, open the [`client/src/utils/algolia-locale-setup.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/src/utils/algolia-locale-setup.ts) file. Questi dati sono usati dalla barra di ricerca che carica gli articoli in `/news`. Anche se è poco probabile che tu stia testando questa funzione, se questi dati mancano per la tua lingua possono esserci degli errori nel costruire il codebase localmente.
+
+Aggiungi un oggetto per la tua lingua all'oggetto `algoliaIndices`. You should use the same values as the `english` object for local testing, replacing the `english` key with your language's `availableLangs` value.
+
+> [!NOTE] Se abbiamo già distribuito un'istanza della pubblicazione nella tua lingua target, puoi aggiornare i valori così da rispecchiare le istanze live. Altrimenti, usa i valori della pubblicazione inglese.
+
+Se volessi aggiungere Dothraki:
+
+```js
+const algoliaIndices = {
+ english: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ },
+ espanol: {
+ name: 'news-es',
+ searchPage: 'https://www.freecodecamp.org/espanol/news/search/'
+ },
+ chinese: {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search/'
+ },
+ 'chinese-traditional': {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search'
+ },
+ dothraki: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ }
+
+ // If we already have /news in the target language up and running, you can update the values like this:
+ // dothraki: {
+ // name: 'news-mis',
+ // searchPage: 'https://www.freecodecamp.org/dothraki/news/search/'
+ // }
+};
+```
+
+### Client UI
+
+Dovrai fare un ulteriore passo per gestire le traduzioni dell'interfaccia utente client.
+
+I processi automatici scaricano da Crowdin _una parte_ delle traduzioni dell'interfaccia, ma ci sono alcuni file che devono essere creati manualmente.
+
+You will want to copy the following files from [`/client/i18n/locales/english`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/client/i18n/locales/english) to `/client/i18n/locales/`, and apply translations as needed:
+
+- `links.json`
+- `meta-tags.json`
+- `motivation.json`
+
+You don't have to have everything in these 3 files translated at first. It's possible to translate only the relevant parts and make adjustments later.
+
+#### `links.json`
+
+You can replace any URLs that you have corresponding pages ready in your language.
+
+For example, if you have a publication in your language, you can replace the URL for `"news"`. If you want to translate articles listed in the footer links, see [How to Translate Articles in the Footer Links](language-lead-handbook#how-to-translate-articles-in-the-footer-links).
+
+#### `meta-tags.json`
+
+This file contains metadata for the web page of `/learn` in your language. You can translate the values for `"title"`, `"description"`, and `"social-description"`. The value for `"youre-unsubscribed"` is used when someone unsubscribes from Quincy's weekly email.
+
+Also, you can translate or add relevant keywords in your language to the `"keywords"` array.
+
+#### `motivation.json`
+
+This file contains the compliments that will be displayed to campers when they complete a challenge, and motivational quotes that are displayed on the top page of `/learn`.
+
+You can translate them, or even replace them with relevant compliments/quotes of your choice in your language.
+
+### Enabling Localized Videos
+
+This section is applicable only if you have localized videos in the challenges. Otherwise, you can skip this section.
+
+Per le sfide video, devi cambiare alcune cose. First, add the new locale to the GraphQL query in the [`client/src/templates/Challenges/video/Show.tsx`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/src/templates/Challenges/video/show.tsx) file. Per esempio, in questo modo aggiungeresti Dothraki alla query:
+
+```tsx
+ query VideoChallenge($slug: String!) {
+ challengeNode(fields: { slug: { eq: $slug } }) {
+ videoId
+ videoLocaleIds {
+ espanol
+ italian
+ portuguese
+ dothraki
+ }
+ ...
+```
+
+Quindi aggiungi un id per la nuova lingua ogni sfida video in un blocco verificato (`auditedCerts`). Per esempio, se `auditedCerts` in `i18n.ts` include `scientific-computing-with-python` per `dothraki`, allora devi aggiungere l'elemento `dothraki` in `videoLocaleIds`. Il frontespizio dovrebbe essere simile a questo:
+
+```yml
+videoLocaleIds:
+ espanol: 3muQV-Im3Z0
+ italian: hiRTRAqNlpE
+ portuguese: AelGAcoMXbI
+ dothraki: nuovo-id-qui
+dashedName: introduction-why-program
+---
+```
+
+Aggiorna l'interfaccia `VideoLocaleIds` in `client/src/redux/prop-types` così che includa la nuova lingua.
+
+```ts
+export interface VideoLocaleIds {
+ espanol?: string;
+ italian?: string;
+ portuguese?: string;
+ dothraki?: string;
+}
+```
+
+And finally, update the challenge schema in `curriculum/schema/challengeSchema.js`.
+
+```js
+videoLocaleIds: Joi.when('challengeType', {
+ is: challengeTypes.video,
+ then: Joi.object().keys({
+ espanol: Joi.string(),
+ italian: Joi.string(),
+ portuguese: Joi.string(),
+ dothraki: Joi.string()
+ })
+}),
+```
+
+## Testing Translations Locally
+
+Se desideri testare le traduzioni localmente, prima di aggiungerle al nostro repository principale - salta i cambiamenti delle procedure di Crowdin. Segui i passaggi per abilitare una lingua, quindi scarica le traduzioni da Crowdin e caricale nel tuo codice locale.
+
+Poiché la lingua non è ancora stata approvata per la produzione, i nostri script non scaricheranno automaticamente le traduzioni. Only staff have access to directly download the translations - you are welcome to reach out to us in our [contributors chat room](https://discord.gg/PRyKn3Vbay), or you can translate the English markdown files locally for testing purposes.
+
+Una volta che avrai i file, li dovrai mettere nelle cartelle giuste. Per le sfide del curriculum, dovresti mettere le cartelle dei certificati (ad esempio `01-responsive-web-design`) nella cartella `curriculum/challenges/{lang}`. Per la nostra traduzione in Dothraki, sarebbe `curriculum/challenges/dothraki`. I file `.json` con le traduzioni del client vanno nella cartella `client/i18n/locales/{lang}`.
+
+Aggiorna il file `.env` in modo da poter utilizzare la tua lingua per `CLIENT_LOCALE` e `CURRICULUM_LOCALE`.
+
+Una volta che questi saranno in posizione, dovresti essere in grado di eseguire `pnpm run develop` per vedere la versione tradotta di freeCodeCamp.
+
+:::tip
+Se costruisci il client in una lingua e poi vuoi costruirlo in una lingua diversa, dovrai usare il comando `pnpm run clean-and-develop` dopo aver cambiato il file `.env`, dato che Gatsby memorizzerà nella cache la prima lingua.
+:::
+
+:::danger
+Anche se puoi farei delle traduzioni localmente per i test, ricordiamo che le traduzioni _non_ devono essere inviate attraverso GitHub ma solo tramite Crowdin. Assicurati di resettare il tuo codebase locale dopo che avrai finito con i test.
+:::
+
+## Show the language in the navigation menu
+
+When your prior PR is merged and the VM for your language is ready, make another PR to show your language in the navigation menu.
+
+In [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file, you have included your language in `hiddenLangs` array in the prior PR. Remove it from the array now.
+
+```js
+export const hiddenLangs = []; // Remove your language from the array
+```
+
+When this PR is merged and deployed, the curriculum in your language will be live.
+
+# Rilasciare nuove lingue su `/learn`
+
+Per distribuire News per una nuova lingua, dovrai creare due PR. Una Pr sarà al [repo CDN](https://github.com/freeCodeCamp/cdn), e l'altra sarà al [repo News](https://github.com/freeCodeCamp/news).
+
+## Prep the CDN Repo for the New Language
+
+News ottiene i link di tendenza e i titoli degli articoli dal nostro CDN durante il build e li aggiunge al piè di pagina. News recupera anche i file Day.js dal CDN durante il build per localizzare date e orari per ogni lingua.
+
+### Add a YAML File for Trending Articles
+
+Clona il [repo CDN](https://github.com/freeCodeCamp/cdn) e crea un nuovo branch.
+
+Nella cartella [`build/universal/trending`](https://github.com/freeCodeCamp/cdn/tree/main/build/universal/trending), crea un nuovo file e chiamalo `language.yaml`. Ad esempio, se stai lanciando le News in Dothraki, chiama il file `dothraki.yaml`.
+
+Quindi copia il contenuto del file con gli articoli di tendenza [`english.yaml`](https://github.com/freeCodeCamp/cdn/blob/main/build/universal/trending/english.yaml) e incollalo nel nuovo file YAML che hai appena creato.
+
+Il suo contenuto assomiglierà a questo:
+
+```yaml
+article0
+title: "Learn JavaScript"
+article0link: "https://www.freecodecamp.org/news/learn-javascript-free-js-courses-for-beginners/"
+article1
+title: "Linux ln Example"
+article1link: "https://www.freecodecamp.org/news/linux-ln-how-to-create-a-symbolic-link-in-linux-example-bash-command"
+article2
+title: "JS document.ready()"
+article2link: "https://www.freecodecamp.org/news/javascript-document-ready-jquery-example/"
+article3
+title: ...
+article3link: ...
+ ...
+```
+
+### Add a Day.js Locale File for the New Language
+
+Per impostazione predefinita, Day.js include solo l'inglese come locale. Per abilitarlo a lavorare con altre lingue, è necessario aggiungere un nuovo file locale Day.js al CDN.
+
+Nella cartella [`build/news-assets/dayjs//locale`](https://github.com/freeCodeCamp/cdn/tree/main/build/news-assets/dayjs/1.10.4/locale), crea un nuovo file e chiamalo `isocode.min.js`. Ad esempio, se stai lanciando le News in Dothraki, chiama il file `mis.min.js`.
+
+> [!NOTE] Il numero della versione cambierà in quanto le dipendenze vengono aggiornate.
+
+Quindi, visita [questa pagina su cdnjs](https://cdnjs.com/libraries/dayjs/1.10.4) con tutti i file Day.js disponibili per la versione che stiamo usando, trova il link `https://cdnjs.cloudflare.com/ajax/libs/dayjs//locale/isocode.min.js` per la nuova lingua e aprilo in una nuova scheda.
+
+> [!NOTE] Devi soltanto aggiungere il file .../dayjs/\/_locale_/isocode.min.js locale. Non è necessario aggiungere altri file Day.js.
+
+Copia il codice locale Day.js dalla nuova scheda nel nuovo file che hai creato. Per esempio, ecco una versione non minificata del codice locale inglese per Day.js:
+
+```js
+!(function (e, n) {
+ 'object' == typeof exports && 'undefined' != typeof module
+ ? (module.exports = n())
+ : 'function' == typeof define && define.amd
+ ? define(n)
+ : (e.dayjs_locale_en = n());
+})(this, function () {
+ 'use strict';
+ return {
+ name: 'en',
+ weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
+ '_'
+ ),
+ months:
+ 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+ '_'
+ )
+ };
+});
+```
+
+Quindi apri una PR al repo CDN per aggiungere i file YAML e Day.js per la revisione.
+
+## Prep the News Repo for the New Language
+
+Il [repo News](https://github.com/freeCodeCamp/news) prende i dati da un'istanza di Ghost, i file che hai aggiunto al CDN, fa il build di News e il deployment.
+
+> [!WARN] Pull requests to the News repo _must_ come from the same repo. Non dovresti lavorare da un fork per questo passaggio.
+
+### Modify the Main Config File
+
+Clona il repo News e crea un nuovo branch.
+
+Apri il file `config/index.js` per aggiungere la nuova lingua e configurare i valori necessari. Ci sono alcuni oggetti e array da modificare:
+
+- `locales`: Questo array contiene le lingue attive e le prossime lingue di News. Sono i valori che vengono usati nel file `.env` per scegliere l'istanza di Ghost e l'interfaccia utente da usare in ogni build. Aggiungi il nome della nuova lingua in minuscolo a questo array.
+- `localeCodes`: Questo oggetto è una mappa dei codici ISO per ogni lingua, e viene usato per configurare i18next prima del build dell'interfaccia utente. Per aggiungere una nuova lingua, usa il nome della lingua minuscolo come _chiave_ e il codice ISO 639-1 della lingua come _valore_.
+- `algoliaIndices`: Questo oggetto è una mappa degli indici Algolia per ogni lingua. Per aggiungere una nuova lingua, usa il nome della lingua minuscolo come _chiave_ e `news-`, seguito dal codice minuscolo ISO 639-1 della lingua come _valore_.
+
+> [!NOTE] Se non sei sicuro della stringa da usare per impostare `algoliaIndices`, manda un messaggio a Kris (@scissorsneedfoodtoo), o qualcun altro con accesso ad Algolia, e chiedigli di controllare.
+
+Ad esempio, se stai lanciando News in Dothraki, ecco come dovrebbero apparire gli oggetti / array sopra:
+
+```js
+const locales = ['arabic', 'bengali', 'chinese', 'english', 'dothraki'];
+
+const localeCodes = {
+ arabic: 'ar',
+ bengali: 'bn',
+ chinese: 'zh',
+ english: 'en',
+ dothraki: 'mis'
+};
+
+const algoliaIndices = {
+ arabic: 'news-ar',
+ bengali: 'news-bn',
+ chinese: 'news-zh',
+ english: 'news',
+ dothraki: 'news-mis'
+};
+```
+
+### Add the i18next JSON Files for the New Language
+
+Next, go to the `shared/config/i18n/locales` directory, create a new folder, and give it the name of the new language you're adding. Ad esempio, se stai lanciando le News in Dothraki, crea una nuova cartella chiamata `dothraki`.
+
+Quindi copia i file JSON dalla cartella `english` nella tua nuova cartella.
+
+In your new folder, open the `redirects.json` file and replace its contents with an empty array:
+
+```json
+[]
+```
+
+Quindi fail il commit e il push del tuo branch direttamente dal repo News.
+
+> [!NOTE] Hai bisogno di essere in uno dei team con l'accesso al repo News per fare il push direttamente a News. Attualmente, solo i team dev, i18n e staff sono autorizzati a farlo.
+
+Infine, apri una PR per la revisione.
+
+Una volta che entrambe le PR per i repo CDN e News sono state approvate, è possibile effettuare il merge.
+
+> [!NOTE] Il deployment sarà successivamente gestito dallo staff. Ecco una PR di esempio: [freeCodeCamp/news#485](https://github.com/freeCodeCamp/news/pull/485) su come si fa e altri dettagli disponibili in [staff-wiki](https://staff-wiki.freecodecamp.org/docs/flight-manuals/news-instances#jamstack---news--assets).
diff --git a/src/content/docs/it/how-to-help-with-video-challenges.md b/src/content/docs/it/how-to-help-with-video-challenges.md
new file mode 100644
index 00000000..07045f08
--- /dev/null
+++ b/src/content/docs/it/how-to-help-with-video-challenges.md
@@ -0,0 +1,215 @@
+---
+title: How to Help with Video Challenges
+---
+
+Le sfide video sono un nuovo tipo di sfida nel programma di studi freeCodeCamp.
+
+Una sfida video è una piccola sezione di un corso interamente su video su un argomento particolare. Una pagina di sfida video incorpora un video di YouTube. Ogni pagina di sfida ha una singola domanda a scelta multipla relativa al video. Un utente deve rispondere alla domanda correttamente prima di poter passare alla sfida video successiva nel corso.
+
+Le pagine della sfida video sono create dai membri del team freeCodeCamp. Anche i video di YouTube sono caricati dai membri del team freeCodeCamp. Molte delle sfide video non hanno ancora domande ad esse associate.
+
+Puoi aiutare creando domande a scelta multipla legate a sezioni del video e aggiungendo le domande ai file markdown per le sfide video.
+
+## Template delle sfide
+
+Di seguito è riportato un modello di come appaiono i file markdown delle sfide.
+
+````md
+---
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: Challenge Title
+challengeType: 11
+videoId: 'YouTube videoId for video challenge'
+forumTopicId: 12345
+---
+
+# --description--
+
+Challenge description text, in markdown
+
+```html
+example code
+```
+````
+
+# --question--
+
+Questi campi sono usati attualmente per le domande a scelta multipla nelle sfide di Python.
+
+## --text--
+
+Il testo della domanda va qui.
+
+## --answers--
+
+Risposta 1
+
+---
+
+Risposta 2
+
+---
+
+Altre risposte
+
+## --video-solution--
+
+Il numero della risposta corretta va qui.
+
+```
+
+## Creating Questions for Video Challenges
+
+### Access the Video Challenge Markdown Files
+
+You can find the markdown files for video challenges at the following locations in the curriculum:
+
+- [Data Analysis with Python Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/data-analysis-with-python-course)
+- [TensorFlow 2.0 Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/tensorflow)
+- [Numpy Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/08-data-analysis-with-python/numpy)
+- [How Neural Networks Work Course](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/11-machine-learning-with-python/how-neural-networks-work)
+
+Pick a challenge markdown file from the options above.
+
+### Guarda velocemente il video associato alla sfida e crea una domanda a scelta multipla
+
+Come prima cosa, trova `videoId`.
+
+Ad esempio, nel seguente codice preso dall'intestazione di un file di markdown di una sfida video, `videoId` è "nVAaxZ34khk". Su GitHub, le informazioni dovrebbero essere visibili in una tabella.
+
+```
+
+---
+
+id: 5e9a093a74c4063ca6f7c14d
+title: Data Analysis Example A challengeType: 11
+videoId: nVAaxZ34khk
+
+---
+
+````
+
+Come cosa successiva, accedi al video YouYube con quel `videoId`. L'URL di quel video sarà:
+https://www.youtube.com/watch?v=[videoId] (sostituisci `videoId` nell'URL con l'ID del video - senza parentesi quadre)
+
+Nell'esempio sopra, l'URL è
+https://www.youtube.com/watch?v=nVAaxZ34khk
+
+Guarda velocemente il video YouTube con quel `videoId` e pensa a una domanda a crocette basata sul contenuto del video.
+
+### Add the Question to the Markdown File
+
+You can add the question locally or using the GitHub interface. Per aggiungere la domanda localmente, è necessario [impostare freeCodeCamp localmente](how-to-setup-freecodecamp-locally). Puoi anche trovare il file su GitHub e fare clic sul pulsante Modifica per aggiungere la domanda nel tuo browser.
+
+Se una domanda non è ancora stata aggiunta a una sfida video, avrà la seguente domanda di default:
+
+```md
+# --question--
+
+## --text--
+
+Question text
+
+## --answers--
+
+Answer 1
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+1
+````
+
+Aggiungi/Cambia il testo della domanda sotto la parte che dice:
+
+```
+# --question--
+
+## --text--
+```
+
+Add/Update answers (`Answer 1`, `Answer 2`, and so on) sotto `## --answers--`. Assicurati di aggiornare il numero sotto `## --video-solution--` con il numero della risposta corretta. Puoi aggiungere altre possibili domande seguendo lo stesso formato. The questions and answers can be surrounded with quotation marks.
+
+### Esempi di domande
+
+````md
+# --question--
+
+## --text--
+
+What does this JavaScript code log to the console?
+
+```js
+console.log('hello world');
+```
+````
+
+## --answers--
+
+hello _world_
+
+---
+
+**hello** world
+
+---
+
+hello world
+
+---
+
+## --video-solution--
+
+3
+
+`````
+
+````md
+# --question--
+
+## --text--
+
+Cosa verrà visualizzato dopo l'esecuzione di questo codice:
+
+```py
+width = 15
+height = 12.0
+print(height/3)
+`````
+
+## --answers--
+
+39
+
+---
+
+4
+
+---
+
+4.0
+
+---
+
+5.0
+
+---
+
+5
+
+## --video-solution--
+
+3 ````
+
+Per altri esempi, puoi guardare i file markdown dei seguenti corsi video. Tutte le sfide che hanno già domande: [Corso Python per tutti](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges/english/07-scientific-computing-with-python/python-for-everybody)
+
+## Open a Pull Request
+
+Dopo aver creato una o più domande, puoi fare un commit delle tue modifiche su un nuovo ramo e [aprire una pull request](how-to-open-a-pull-request).
diff --git a/src/content/docs/it/how-to-open-a-pull-request.md b/src/content/docs/it/how-to-open-a-pull-request.md
new file mode 100644
index 00000000..0bf2b568
--- /dev/null
+++ b/src/content/docs/it/how-to-open-a-pull-request.md
@@ -0,0 +1,211 @@
+---
+title: Come aprire una Pull Request (PR)
+---
+
+A pull request (PR), enables you to send changes from your fork on GitHub to freeCodeCamp.org's main repository. Una volta che hai fatto delle modifiche al codice, puoi seguire queste linee guida per aprire una PR.
+
+Ci aspettiamo che i nostri contributori siano consapevoli del processo specifico di questo progetto. Following the guidelines carefully earns you the respect of fellow maintainers and saves everyone time.
+
+Alcuni esempi di ciò sono:
+
+1. Non modificare i file direttamente attraverso GitHub – nonostante sia possibile, non è una buona idea.
+2. Make sure the PR title follows [our convention](#prepare-a-good-pr-title).
+3. Assicurati di seguire la checklist della PR e non solo spuntare le cose; altrimenti, non ti prenderemo sul serio.
+4. Usa il modo corretto per linkare le issue nella descrizione della PR aggiornando `XXXXXX`. Non basta aggiungere numeri di issue dappertutto o ovunque ti pare.
+5. Non "@menzionare" o richiedere qualcuno per la revisione troppe volte.
+
+ Sappiamo che sei entusiasta di contribuire. Per quanto a un manutentore faccia piacere risponderti, si tratta di una persona impegnata che si occupa di centinaia di richieste proprio come la tua. Sii paziente, qualcuno ti risponderà prima o poi.
+
+6. Non lavorare direttamente sul ramo (branch) `main` - crea un nuovo ramo per le modifiche su cui stai lavorando.
+
+> [!NOTE] La tua PR dovrebbe essere rivolta a modifiche del solo curriculum inglese. Per contribuire alle traduzioni invece, leggi [questa guida](index#traduzioni).
+
+## Prepare a Good PR Title
+
+We use [conventional title and messages](https://www.conventionalcommits.org/) for commits and pull requests. La convenzione ha il seguente formato:
+
+> `([ambito/i opzionale/i]): `
+>
+> Per esempio:
+>
+> `fix(learn): tests for the do...while loop challenge`
+
+Whenever you open a Pull Request (PR), you can use the below to determine the type, scope (optional), and description.
+
+**Tipo:**
+
+| Tipo | Quando selezionare |
+| :---- | :------------------------------------------------------------------------------ |
+| fix | Changed or updated/improved functionality, tests, the wording of a lesson, etc. |
+| feat | Solo se si aggiungono nuove funzionalità, test, ecc. |
+| chore | Cambiamenti che non sono legati a codice, test, o testo di una lezione. |
+| docs | Modifiche alla directory `/docs` o alle linee guida per i contributi, ecc. |
+
+**Ambito:**
+
+Puoi selezionare un ambito da [questo elenco di etichette](https://github.com/freeCodeCamp/freeCodeCamp/labels?q=scope).
+
+**Descrizione:**
+
+Mantienila breve (meno di 30 caratteri) e semplice; puoi aggiungere ulteriori informazioni nella casella di descrizione PR e nei commenti.
+
+Alcuni esempi di buoni titoli di PR sono:
+
+- `fix(a11y): improved search bar contrast`
+- `feat: add more tests to HTML and CSS challenges`
+- `fix(api,client): prevent CORS errors on form submission`
+- `docs(i18n): fix links to be relative instead of absolute`
+
+## Proporre una Pull Request
+
+1. Una volta che le modifiche sono state effettuate, ti verrà chiesto di creare una pull request sulla pagina GitHub del tuo fork.
+
+
+ Vedi screenshot
+
+ 
+
+
+
+2. Di default, tutte le pull request dovrebbero essere sul repository principale di freeCodeCamp, nel ramo `main`.
+
+ Assicurati che il tuo Base Fork sia impostato su freeCodeCamp/freeCodeCamp quando sollevi una Pull Request.
+
+
+ Vedi screenshot
+
+ 
+
+
+
+3. Fai la pull request dal tuo ramo al ramo `main` di freeCodeCamp.
+
+4. Includi un riassunto più dettagliato delle modifiche apportate e di come sono d'aiuto nel corpo della tua PR.
+
+ - Ti sarà presentato un modello di pull request. Questa è una lista di controllo che avresti dovuto seguire prima di aprire la pull request.
+
+ - Compila i dettagli come ritieni opportuno. Ensure that you give the reviewers enough context to review the changes. If the PR makes changes to the UI, be sure to include screenshots of the changes as well. All of this information will be reviewed and the reviewers will decide whether or not your pull request is accepted.
+
+ - Se la PR ha lo scopo di affrontare un'issue GitHub esistente, alla fine del corpo della descrizione della tua PR, usa la parola chiave _Closes_ con il numero dell'issue per [chiudere automaticamente questa issue se la PR è accettata](https://help.github.com/en/articles/closing-issues-using-keywords).
+
+ > Esempio: `Closes #123` chiuderà l'issue 123
+
+5. Indica se hai testato i tuoi cambiamenti su una copia locale del sito oppure no.
+
+ - Questo è molto importante quando si fanno cambiamenti che non sono solo modifiche a contenuto testuale come documentazione o descrizioni di sfide. Examples of changes that need local testing include JavaScript, CSS, or HTML, which could change the functionality or layout of a page.
+
+ - If your PR affects the behavior of a page, it should be accompanied by corresponding [Playwright integration tests](how-to-add-playwright-tests).
+
+## Feedback on Pull Requests
+
+> :tada: Congratulazioni per avere creato un PR e grazie mille per aver dedicato il tuo tempo a contribuire.
+
+I nostri moderatori ora daranno un'occhiata e ti lasceranno un feedback. Ti preghiamo di essere paziente con i colleghi moderatori e di rispettare il loro tempo. Tutte le pull request sono riviste a tempo debito.
+
+E come sempre, poni liberamente le tue domande [nella categoria 'Contributors' sul nostro forum](https://forum.freecodecamp.org/c/contributors) o [nella chat room per i contributori](https://discord.gg/PRyKn3Vbay).
+
+:::tip
+Se vuoi contribuire a più di una PR, ti raccomandiamo di leggere la [guida su fare modifiche e sincronizzare](how-to-setup-freecodecamp-locally#making-changes-locally) per evitare di dover cancellare il tuo fork.
+:::
+
+## Conflicts on a Pull Request
+
+I conflitti possono sorgere perché molti contributori lavorano sul repository e le modifiche possono interrompere la tua PR in attesa di una revisione e di un merge.
+
+Since we squash all commits, you may not need to do a rebase. However, if a rebase is requested, check our [For Usual Bug Fixes and Features](#for-usual-bug-fixes-and-features) or [For Upcoming Curriculum and Features](#for-upcoming-curriculum-and-features) guides to learn how to do this process for your corresponding PR.
+
+### For Usual Bug Fixes and Features
+
+Quando stai lavorando su normali bug e funzionalità sul nostro ramo di sviluppo `main`, puoi fare un semplice rebase:
+
+1. Esegui un rebase della tua copia locale:
+
+ ```bash
+ git checkout
+ git pull --rebase upstream main
+ ```
+
+2. Risolvi eventuali conflitti e aggiungi / modifica i commit
+
+ ```bash
+ # O
+ git add .
+ git commit -m "chore: resolve conflicts"
+
+ # O
+ git add .
+ git commit --amend --no-edit
+ ```
+
+3. Fai il push dei tuoi cambiamenti alla PR
+
+ ```bash
+ git push --force origin
+ ```
+
+### For Upcoming Curriculum and Features
+
+When you are working on features for our upcoming curriculum `next-*` branches, you have to do a `cherry-pick`:
+
+1. Assicurati che il tuo upstream sia sincronizzato con il tuo repository locale:
+
+ ```bash
+ git checkout main
+ git fetch --all --prune
+ git checkout next-python-projects
+ git reset --hard upstream/next-python-projects
+ ```
+
+2. Take a backup
+
+ a. Elimina il ramo locale dopo aver effettuato un backup (se lo hai ancora localmente):
+
+ ```bash
+ git checkout
+
+ # esempio:
+ # git checkout feat/add-numpy-video-question
+
+ git checkout -b
+
+ # esempio:
+ # git checkout -b backup-feat/add-numpy-video-question
+
+ git branch -D
+ ```
+
+ b. Or just a backup of your PR branch (if you do not have it locally):
+
+ ```bash
+ git checkout -b origin/
+
+ # esempio:
+ # git checkout -b backup-feat/add-numpy-video-question origin/feat/add-numpy-video-question
+ ```
+
+3. Inizia con una slate pulita:
+
+ ```bash
+ git checkout -b next-python-projects
+ git cherry-pick
+ ```
+
+4. Resolve any conflicts, cleanup, and install dependencies and run tests
+
+ ```bash
+ pnpm run clean
+
+ pnpm install
+ FCC_SUPERBLOCK='' pnpm run test:curriculum
+
+ # esempio:
+
+ # FCC_SUPERBLOCK='python-for-everybody' pnpm run test:curriculum
+
+ ```
+
+5. If everything looks good, push back to the PR
+
+ ```bash
+ git push --force origin
+ ```
diff --git a/src/content/docs/it/how-to-proofread-files.md b/src/content/docs/it/how-to-proofread-files.md
new file mode 100644
index 00000000..90c22d1e
--- /dev/null
+++ b/src/content/docs/it/how-to-proofread-files.md
@@ -0,0 +1,56 @@
+---
+title: Come revisionare le traduzioni
+---
+
+Il nostro team di revisione è responsabile di controllare che le traduzioni riflettano accuratamente il testo originale. Ci affidiamo ai revisori per avere delle traduzioni di alta qualità.
+
+Tutte le nostre traduzioni sono fatte a mano, da veri esseri umani. Proofreading ensures that there is a consistent tone across all our translated resources like the curriculum.
+
+Per iniziare a revisionare visita [la nostra piattaforma di traduzione](https://translate.freecodecamp.org) e fai il login. Seleziona "Go to console" nella barra di navigazione in alto per passare da public view a workspace view.
+
+## Selezionare un file
+
+Dovresti vedere la lista di progetti a cui ti è stato dato accesso. Seleziona il progetto che vorresti revisionare, poi seleziona la lingua.
+
+
+
+Ora dovresti vedere la lista dei file disponibili. Scegli il file selezionando il pulsante `Proofread` a destra del file, e scegliendo quindi `Proofreading` dal menu che compare.
+
+> [!NOTE] Se sei in workspace view, ma vuoi lavorare sulla [traduzione di un file](how-to-translate-files) invece di revisionare, puoi selezionare `Crowdsourcing` dal menu.
+
+## Revisionare le traduzioni
+
+
+
+
+
+Qui vedrai la lista delle stringhe nel file selezionato con le relative traduzioni. La traduzione che è mostrata qui è la traduzione che ha ricevuto il maggior punteggio (tra voti positivi e negativi) dalla comunità di traduttori.
+
+Anche se puoi vedere _tutte_ le traduzioni proposte per una certa stringa, il punteggio della comunità (determinato da voti positivi e voti negativi) dovrebbe essere preso in considerazione quando scegli quale traduzione approvare. La comunità può rivedere le traduzioni proposte e raccomandare quale è la più chiara e accurata.
+
+1. Questa è la stringa originale (in inglese).
+2. Questa è la corrispondente stringa tradotta. La proposta di traduzione più popolare, basata su voti positivi e negativi, sarà mostrata qui.
+3. Cliccando il pulsante di spunta approverai la traduzione.
+4. Crowdin mostrerà lo stato di ogni stringa. `Done` significa che una traduzione è stata approvata e sarà scaricata nel prossimo aggiornamento delle traduzioni. `Todo` significa che la stringa non è stata revisionata. `Hidden` significa che la stringa è bloccata e _non deve essere tradotta_. `Comment` significa che la stringa è relativa a un commento.
+5. Le traduzioni possono essere selezionate con i checkbox e approvate in un'azione cumulativa.
+6. Qui puoi vedere le traduzioni proposte dalla comunità, i punteggi di popolarità e le traduzioni suggerite da Crowdin.
+7. Questo pulsante mostra/nasconde la scheda a destra, dove puoi vedere traduzioni, commenti, traduzioni in memoria e termini del glossario.
+8. Crowdin mostra qui i messaggi di errore dai controlli di qualità. In altre parole, se qualcosa non sembra corretto nella traduzione, Crowdin te lo dirà. Queste traduzioni devono essere approvate con attenzione.
+
+Non sono necessarie altre azioni una volta che un file è stato revisionato.
+
+> [!NOTE] Approvare una stringa in modalità di revisione la segnerà come completata e farà sì che sia scaricata nel prossimo pull da Crowdin a GitHub.
+
+## Becoming a Proofreader
+
+Se hai domande o sei interessato a diventare proofreader, puoi contattarci nella [chat room per i contributori](https://discord.gg/PRyKn3Vbay). In genere diamo i permessi di revisore se è da un po' che contribuisci a freeCodeCamp.
+
+Il nostro staff e i moderatori della community sono sempre alla ricerca di volontari come te che ci aiutino a rendere disponibili al mondo traduzioni di alta qualità.
+
+> [!NOTE] Crowdin ti permette di approvare le tue traduzioni. In genere, è meglio permettere ad un altro proofreader di rivedere le tue proposte di traduzione per maggior sicurezza che non ci siano errori.
+
+## Creating a Channel on Chat for a World Language
+
+For the most part, we encourage you to use the [contributors chat](https://discord.gg/PRyKn3Vbay) room for all correspondence. However if the team of volunteer translators grows for a certain language, we can consider creating an additional break-out channel for the language.
+
+Se sei un proofreader e sei interessato ad avere un canale dedicato sul server di chat per una specifica lingua, [compila questo modulo](https://forms.gle/XU5CyutrYCgDYaVZA).
diff --git a/src/content/docs/it/how-to-setup-freecodecamp-locally.md b/src/content/docs/it/how-to-setup-freecodecamp-locally.md
new file mode 100644
index 00000000..5a7f39f3
--- /dev/null
+++ b/src/content/docs/it/how-to-setup-freecodecamp-locally.md
@@ -0,0 +1,306 @@
+---
+title: Setup freeCodeCamp locally
+---
+
+Follow these guidelines for setting up a development environment for freeCodeCamp. Te lo raccomandiamo caldamente se desideri contribuire regolarmente.
+
+## Choose between Gitpod or your Own Machine (local setup)
+
+:::danger
+
+- freeCodeCamp does not build and run natively on Windows, you will [need to use WSL2](how-to-setup-wsl) for a Linux-like setup on Windows. - You can't use Windows Command Prompt, Git Bash or PowerShell to build and run the codebase. - Note that if using Windows, the hardware requirements need to be more than [what we mention](how-to-setup-freecodecamp-locally?id=how-to-prepare-your-local-machine) to accommodate for WSL-based setup.
+
+:::
+
+If you are looking to make a one-off contribution, you should use Gitpod to make changes. The Gitpod setup launches a ready-to-code environment in a few minutes in your web browser. To contribute long-term, we recommend you set up freeCodeCamp on your local machine.
+
+Here are some pros and cons which should help you decide which option is best for you:
+
+| Gitpod | Your own machine (local setup) |
+| ----------------------------------------------------------------- | --------------------------------------------------------------------- |
+| No minimum hardware requirements | Specific and minimum requirements |
+| No need to install any software | Additional software required |
+| Always up to date copy of repository | Need to maintain a local copy of the repository |
+| Slower and can take a few minutes to launch | Faster and can be launched in seconds |
+| Need an internet connection to work | Minimal internet connection required (once setup) |
+| Some tasks like compilation and tests can take longer to complete | Faster completion of tasks (depending on your machine's capabilities) |
+
+### How to Prepare a Gitpod Workspace
+
+We have automated the process of installing all the dependencies & tools you will need. With Gitpod you get a free ready-to-code environment in a few minutes, and is useful if you do not have access to a computer or want to make one-time changes.
+
+There are various ways to launch a Gitpod workspace:
+
+1. **(Fastest)** Prepend `gitpod.io/#` in front of any URL from GitHub.
+
+ For example, if you visit your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp.git`, add `gitpod.io/#` in the front of the URL in the address bar and hit enter.
+
+ That is you can navigate to `gitpod.io/#https://github.com/YOUR_USER_NAME/freeCodeCamp.git` and you should see a workspace created for you. This works for any repository or pull-request on GitHub.
+
+2. Alternatively install one of the below extensions for your browser.
+
+ - [Chrome Webstore](https://chrome.google.com/webstore/detail/gitpod-always-ready-to-co/dodmmooeoklaejobgleioelladacbeki) - funziona con browser basati su Chromium come Google Chrome, Brave, Edge, ecc.
+ - [Firefox Add-on](https://addons.mozilla.org/en-US/firefox/addon/gitpod) - Firefox
+
+ Once installed you will see a 'Gitpod' button on every repository, pull-request, etc. as a handy shortcut to launch a workspace from there. Vedi la pagina delle estensioni per i dettagli, screenshot, ecc.
+
+That's it, you can now skip to the 'syncing up from parent' section after you have launched a Gitpod workspace. Most parts of this guide applies to Gitpod workspaces, but be mindful of [how the URLs & Ports work within a Gitpod](https://www.gitpod.io/docs/configure/workspaces/ports) workspace.
+
+**Note: Troubleshooting port issues on Gitpod**
+
+Sometimes the service on port `8000` doesn't go live. This is common when you are restarting an inactive workspace.
+
+If the service is not coming up on port `8000`, you can troubleshoot using these steps:
+
+- **Start the server**: Run `pnpm run develop:server` in one terminal window from the root project directory (`/workspace/freeCodeCamp`) to start the server.
+
+- **Start the client**: In another terminal window, run `pnpm run develop -- -H '0.0.0.0'` from the client directory (`/workspace/freeCodeCamp/client`) to start the client.
+
+This should make port `8000` available.
+
+### How to Prepare your Local Machine
+
+Here is a minimum system requirement for running freeCodeCamp locally:
+
+- 8 GB RAM
+- Relatively fast CPU (4+ cores)
+- Windows 10 or 11 (with WSL), macOS, or Linux
+
+Start by installing the prerequisite software for your operating system.
+
+We primarily support development on Linux and Unix-based systems like Ubuntu and macOS. You can develop on Windows 10 or 11 with WSL2 only. You can follow [this guide](how-to-setup-wsl) to set up WSL2. You can't use Command Prompt, Git Bash or PowerShell to run freeCodeCamp natively within windows.
+
+#### Prerequisiti:
+
+| Prerequisite | Version | Notes |
+| --------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------- |
+| [Node.js](http://nodejs.org) | `20.x` | We use the "Active LTS" version, See [LTS Schedule](https://nodejs.org/en/about/releases/). |
+| [pnpm](https://pnpm.io/installation) | `8.x` | - |
+| [MongoDB Community Server](https://docs.mongodb.com/manual/administration/install-community/) | `5.0.x` | - |
+
+:::danger
+If you have a different version, please install the recommended version. We can only support installation issues for recommended versions. See [troubleshooting section](troubleshooting-development-issues) for details.
+:::
+
+If Node.js is already installed on your machine, run the following commands to validate the versions:
+
+```bash
+node -v
+pnpm -v
+```
+
+:::tip
+We highly recommend updating to the latest stable releases of the software listed above, also known as Long Term Support (LTS) releases.
+:::
+
+Once you have the prerequisites installed, you need to prepare your development environment. This is common for many development workflows, and you will only need to do this once.
+
+##### Segui questi passaggi per preparare il tuo ambiente di sviluppo:
+
+1. Install [Git](https://git-scm.com/) or your favorite Git client, if you haven't already. Update to the latest version; the version that came bundled with your OS may be outdated.
+
+2. (Optional but recommended) [Set up an SSH Key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub.
+
+3. Install a code editor of your choice. If you aren't sure which one to use, we recommend [Visual Studio Code](https://code.visualstudio.com/) — it's free and open source.
+
+4. Set up linting for your code editor.
+
+ You should have [ESLint running in your editor](http://eslint.org/docs/user-guide/integrations.html), and it will highlight anything that doesn't conform to [freeCodeCamp's JavaScript Style Guide](http://forum.freecodecamp.org/t/free-code-camp-javascript-style-guide/19121).
+
+ :::tip
+ Please do not ignore any linting errors. They are meant to **help** you and to ensure a clean and simple codebase.
+ :::
+
+## Fork the Repository on GitHub
+
+[Forking](https://help.github.com/articles/about-forks/) is a step where you get your own copy of freeCodeCamp's main repository (a.k.a _repo_) on GitHub.
+
+This is essential, as it allows you to work on your own copy of freeCodeCamp on GitHub, or to download (clone) your repository to work on locally. Later, you will be able to request changes to be pulled into the main repository from your fork via a pull request (PR).
+
+:::tip
+The main repository at `https://github.com/freeCodeCamp/freeCodeCamp` is often referred to as the `upstream` repository.
+Your fork at `https://github.com/YOUR_USER_NAME/freeCodeCamp` is often referred to as the `origin` repository. `YOUR_USER_NAME` would be replaced with your GitHub username.
+:::
+
+**Follow these steps to fork the `https://github.com/freeCodeCamp/freeCodeCamp` repository:**
+
+1. Go to the freeCodeCamp repository on GitHub:
+
+2. Click the "Fork" Button in the upper right-hand corner of the interface ([More Details Here](https://help.github.com/articles/fork-a-repo/))
+
+3. After the repository has been forked, you will be taken to your copy of the freeCodeCamp repository at `https://github.com/YOUR_USER_NAME/freeCodeCamp` (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
+
+
+
+ How to fork freeCodeCamp on GitHub (screenshot)
+
+
+
+
+
+
+## Clone your Fork from GitHub
+
+[Cloning](https://help.github.com/articles/cloning-a-repository/) is where you **download** a copy of a repository from a `remote` location that is either owned by you or by someone else. In your case, this remote location is your `fork` of freeCodeCamp's repository that should be available at `https://github.com/YOUR_USER_NAME/freeCodeCamp`. (`YOUR_USER_NAME` would be replaced with your GitHub user name.)
+
+> [!WARNING] Se stai lavorando su una Distro di Linux su WSL2, potresti avere problemi di performance e stabilità eseguendo il progetto in una cartella che è condivisa tra Windows e WSL2 (per esempio `/mnt/c/Users/`). Quindi ti raccomandiamo di clonare il repo in una cartella che è usata principalmente dalla Distro di Linux su WSL2 e non condivisa direttamente con Windows (per esempio `~/PROJECTS/`).
+>
+> Vedi [questa issue su GitHub](https://github.com/freeCodeCamp/freeCodeCamp/issues/40632) per ulteriori informazioni su questo problema.
+
+Run these commands on your local machine:
+
+1. Apri un terminale / prompt dei comandi / Shell nella directory dei progetti
+
+ _cioè: `/yourprojectsdirectory/`_
+
+2. Clona il tuo fork di freeCodeCamp, sostituendo `YOUR_USER_NAME` con il tuo nome utente GitHub
+
+ ```bash
+ git clone --depth=1 https://github.com/YOUR_USER_NAME/freeCodeCamp.git
+ ```
+
+This will download the entire freeCodeCamp repository to your projects directory.
+
+Note: `--depth=1` creates a shallow clone of your fork, with only the most recent history/commit.
+
+## Set up Syncing from Parent
+
+Now that you have downloaded a copy of your fork, you will need to set up an `upstream` remote to the parent repository.
+
+[As mentioned earlier](#fork-the-repository-on-github), the main repository is referred to as the `upstream` repository. Your fork is referred to as the `origin` repository.
+
+You need a reference from your local clone to the `upstream` repository in addition to the `origin` repository. This is so that you can sync changes from the main repository without the requirement of forking and cloning repeatedly.
+
+1. Change the directory to the new freeCodeCamp directory:
+
+ ```bash
+ cd freeCodeCamp
+ ```
+
+2. Aggiungi un riferimento remoto al repository freeCodeCamp principale:
+
+ ```bash
+ git remote add upstream https://github.com/freeCodeCamp/freeCodeCamp.git
+ ```
+
+3. Assicurati che la configurazione sia corretta:
+
+ ```bash
+ git remote -v
+ ```
+
+ L'output dovrebbe apparire simile al seguente (sostituendo `YOUR_USER_NAME` con il tuo username di GitHub):
+
+ ```bash
+ origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (fetch)
+ origin https://github.com/YOUR_USER_NAME/freeCodeCamp.git (push)
+ upstream https://github.com/freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream https://github.com/freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+## Running freeCodeCamp Locally
+
+Now that you have a local copy of freeCodeCamp, you can follow these instructions to run it locally. This will allow you to:
+
+- Preview edits to pages as they would appear on the learning platform.
+- Work on UI related issues and enhancements.
+- Debug and fix issues with the application servers and client apps.
+
+If you do run into issues, first perform a web search for your issue and see if it has already been answered. If you cannot find a solution, please search our [GitHub issues](https://github.com/freeCodeCamp/freeCodeCamp/issues) page for a solution and report the issue if it has not yet been reported.
+
+And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [our chat server](https://discord.gg/PRyKn3Vbay).
+
+### Configuring Dependencies
+
+#### Step 1: Set up the Environment Variable File
+
+The default API keys and environment variables are stored in the file `sample.env`. This file needs to be copied to a new file named `.env` that is accessed dynamically during the installation step.
+
+```bash
+# Creare una copia del "sample.env" e denominarlo ".env".
+# Populate it with the necessary API keys and secrets
+```
+
+```bash
+cp sample.env .env
+```
+
+The keys in the `.env` file are _not_ required to be changed to run the app locally. You can leave the default values copied over from `sample.env` as-is.
+
+:::tip
+Tieni a mente che se vuoi usare servizi come Auth0 o Algolia, dovrai ottenere delle chiavi API per questi servizi per conto tuo e modificare gli elementi nel file `.env` di conseguenza.
+:::
+
+#### Step 2: Install Dependencies
+
+This step will install the dependencies required for the application to run:
+
+```bash
+pnpm install && pnpm run create:shared
+```
+
+#### Step 3: Start MongoDB and Seed the Database
+
+Before you can run the application locally, you will need to start the MongoDB service.
+
+> [!NOTE] A meno che tu non abbia MongoDB in esecuzione in un setup differente da quello predefinito, l'URL salvato come `MONGOHQ_URL` nel file `.env` dovrebbe andare bene. Se usi una configurazione personalizzata, modifica il valore come necessario.
+>
+> Se hai seguito la [Guida di configurazione Windows 10 via WSL2](how-to-setup-wsl), allora dovresti essere in grado di saltare questo passaggio se il server MongoDB di quella guida è già in esecuzione. Puoi averne conferma controllando di poter raggiungere `http://localhost:27017` sulla tua macchina locale.
+
+Start the MongoDB server in a separate terminal:
+
+```bash
+mongod
+```
+
+:::tip
+Puoi evitare di dover avviare MongoDB ogni volta se lo installi come servizio in background. Puoi [saperne di più nella loro documentazione per il tuo sistema operativo](https://docs.mongodb.com/manual/administration/install-community/)
+:::
+
+Next, let's seed the database. In this step, we run the below command that fills the MongoDB server with some initial data sets that are required by services. These include a few schemas, among other things.
+
+```bash
+pnpm run seed
+```
+
+By default, you will be signed in as a new user without any completed certifications. Run the following command if you need to develop with completed certifications or write Playwright tests:
+
+```bash
+pnpm run seed:certified-user
+```
+
+> [!WARNING] Running `pnpm run seed:certified-user` will log you out. You will have to clear your browser cookies and sign in again.
+
+#### Step 4: Start the freeCodeCamp Client Application and API Server
+
+You can now start up the API server and the client applications.
+
+```bash
+pnpm run develop
+```
+
+This single command will fire up all the services, including the API server and the client applications available for you to work on.
+
+Once ready, open a web browser and visit . If the app loads, sign in. Congratulations – you're all set! You now have a copy of freeCodeCamp's entire learning platform running on your local machine.
+
+The API server serves endpoints at `http://localhost:3000`. The Gatsby app serves the client application at `http://localhost:8000`.
+
+While you are logged in, if you visit you should see the available APIs.
+
+> [!WARNING] Clearing your cookies or running `pnpm run seed:certified-user` will log you out, and you will have to sign in again.
+
+If you have issues while installing it, check out the [troubleshooting section](troubleshooting-development-issues).
+
+## Quick Commands Reference
+
+A quick reference to the commands that you will need when working locally.
+
+| command | description |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------- |
+| `pnpm install` | Installs / re-installs all dependencies and bootstraps the different services. |
+| `pnpm run seed` | Creates authorized test users and inserts them into MongoDB. Also runs `seed:exams` and `seed:surveys` below. |
+| `pnpm run seed:certified-user` | Creates authorized test users with certifications fully completed, and inserts them into MongoDB. |
+| `pnpm run seed:exams` | Creates exams and inserts them into MongoDB. |
+| `pnpm run seed:surveys` | Creates surveys for defaults users and inserts them into MongoDB. |
+| `pnpm run develop` | Starts the freeCodeCamp API Server and Client Applications. |
+| `pnpm run clean` | Uninstalls all dependencies and cleans up caches. |
diff --git a/src/content/docs/it/how-to-setup-freecodecamp-mobile-app-locally.md b/src/content/docs/it/how-to-setup-freecodecamp-mobile-app-locally.md
new file mode 100644
index 00000000..129dadbf
--- /dev/null
+++ b/src/content/docs/it/how-to-setup-freecodecamp-mobile-app-locally.md
@@ -0,0 +1,511 @@
+---
+title: Setup freeCodeCamp locally
+---
+
+Segui questa guida per impostare l'app mobile di freeCodeCamp localmente sul tuo sistema. È altamente raccomandato se vuoi contribuire regolarmente.
+
+Some of the contribution workflows – like fixing bugs in the codebase – need you to run the freeCodeCamp app locally.
+
+## How to Prepare your Local Machine
+
+Inizia installando i prerequisiti software per il tuo sistema operativo.
+
+### Prerequisites
+
+| Prerequisito | Versione | Note |
+| --------------------------------------------- | -------- | -------------------------------------------- |
+| [Flutter](https://flutter.dev/) | `3.x` | - |
+| Dart (viene fornito in dotazione con Flutter) | `3.x` | Usiamo la versione in dotazione con Flutter. |
+
+:::danger
+Se hai una versione diversa, per favore installa la versione raccomandata. Possiamo supportare solo i problemi di installazione per le versioni consigliate.
+:::
+
+Se Flutter è già installato sulla macchina, eseguire i seguenti comandi per convalidare le versioni:
+
+```bash
+flutter --version
+dart --version
+```
+
+:::tip
+Raccomandiamo vivamente di eseguire gli aggiornamenti all'ultima versione stabile dei software elencati qui sopra.
+:::
+
+Una volta che avrai installato i prerequisiti, dovrai preparare il tuo ambiente di sviluppo. Questo è comune a molti flussi di lavoro di sviluppo, e si dovrà fare solo una volta.
+
+#### Follow these steps to get your development environment ready:
+
+1. Installa [Git](https://git-scm.com/) o il tuo client Git preferito, se non lo hai già. Aggiorna alla versione più recente; la versione fornita con il tuo sistema operativo potrebbe essere obsoleta.
+
+2. Set up [Android Studio](https://developer.android.com/studio) and [Android Emulators](https://developer.android.com/studio/run/managing-avds) with the latest released Android version. Consigliamo di utilizzare Pixel 3a XL e Nexus One(per simulare schermi più piccoli).
+
+3. (Optional for MacOS) Set up Xcode and iOS Simulator with the latest released iOS version.
+
+4. (Opzionale ma raccomandato) [Imposta una chiave SSH](https://help.github.com/articles/generating-an-ssh-key/) per GitHub.
+
+5. Installa un editor di codice di tua scelta.
+
+ Consigliamo vivamente di utilizzare [Visual Studio Code](https://code.visualstudio.com/) o Android Studio. Consigliamo anche di installare le [estensioni](https://docs.flutter.dev/get-started/editor?tab=vscode) ufficiali.
+
+## Fork the Repository on GitHub
+
+Fare il [fork](https://help.github.com/articles/about-forks/) è il passaggio grazie a cui ottieni la tua copia del repository (_repo_) su GitHub.
+
+This is essential, as it allows you to work on your own copy of the freeCodeCamp mobile app on GitHub, or to download (clone) your repository to work on locally. Più tardi, potrai richiedere che le tue modifiche siano integrate (pull) nel repository principale dal tuo fork tramite una pull request (PR).
+
+:::tip
+Il repository principale su `https://github.com/freeCodeCamp/mobile` è spesso indicato come il repository `upstream`.
+Il tuo fork che si trova a `https://github.com/YOUR_USER_NAME/mobile` è spesso chiamato il repository `origin`. `YOUR_USER_NAME` è sostituito dal tuo nome utente GitHub.
+:::
+
+**Segui questi passaggi per effettuare il fork del repository `https://github.com/freeCodeCamp/mobile`:**
+
+1. Vai al repository freeCodeCamp mobile su GitHub:
+
+2. Fai clic sul pulsante "Fork" nell'angolo in alto a destra dell'interfaccia ([Maggiori dettagli qui](https://help.github.com/articles/fork-a-repo/))
+
+3. Dopo che è stato creato un fork del repository, sarai portato alla tua copia del repository su `https://github.com/YOUR_USER_NAME/mobile` (`YOUR_USER_NAME` è sostituito dal tuo nome utente GitHub.)
+
+## Clone your Fork from GitHub
+
+La [Clonazione](https://help.github.com/articles/cloning-a-repository/) consiste nello **scaricare** una copia di un repository da una `posizione remota` che è di proprietà tua o di qualcun altro. In your case, this remote location is your `fork` of freeCodeCamp's repository which should be available at `https://github.com/YOUR_USER_NAME/mobile`. (`YOUR_USER_NAME` è sostituito dal tuo nome utente GitHub.)
+
+Esegui questi comandi sulla tua macchina locale:
+
+1. Apri un terminale / prompt dei comandi / Shell nella directory dei progetti
+
+ _cioè: `/yourprojectsdirectory/`_
+
+2. Clona il tuo fork di freeCodeCamp, sostituendo `YOUR_USER_NAME` con il tuo nome utente GitHub
+
+ ```bash
+ git clone --depth=1 https://github.com/YOUR_USER_NAME/mobile.git
+ ```
+
+Questo scaricherà l'intero repository mobile freeCodeCamp nella directory dei tuoi progetti.
+
+Nota: `--depth=1` crea un clone superficiale del fork, con la sola cronologia dei commit più recente.
+
+## Set up Syncing from Parent
+
+Ora che hai scaricato una copia del fork, dovrai configurare un `upstream` remoto che punti al repository genitore.
+
+[As mentioned earlier](#fork-the-repository-on-github), the main repository is referred to as the `upstream` repository. Your fork is referred to as the `origin` repository.
+
+Hai bisogno di un riferimento dal tuo clone locale al repository `upstream` oltre che al repository `origin`. In questo modo potrai sincronizzare le modifiche dal repository principale senza bisogno di fare ripetuti fork e clonazioni.
+
+1. Spostati nella directory `mobile`:
+
+ ```bash
+ cd mobile
+ ```
+
+2. Aggiungi un riferimento remoto al repository freeCodeCamp mobile:
+
+ ```bash
+ git remote add upstream https://github.com/freeCodeCamp/mobile.git
+ ```
+
+3. Assicurati che la configurazione sia corretta:
+
+ ```bash
+ git remote -v
+ ```
+
+ L'output dovrebbe apparire simile al seguente (sostituendo `YOUR_USER_NAME` con il tuo username di GitHub):
+
+ ```bash
+ origin https://github.com/YOUR_USER_NAME/mobile.git (fetch)
+ origin https://github.com/YOUR_USER_NAME/mobile.git (push)
+ upstream https://github.com/freeCodeCamp/mobile.git (fetch)
+ upstream https://github.com/freeCodeCamp/mobile.git (push)
+ ```
+
+## Running freeCodeCamp Mobile App Locally
+
+Ora che disponi di una copia locale dell'app mobile, potrai seguire queste istruzioni per eseguirla localmente.
+
+Se incontri un problema, fai prima una ricerca del problema sul web per vedere se ha già una risposta. Se non riesci a trovare una soluzione, ti preghiamo di fare una ricerca nelle nostra pagina delle [Issues su GitHub](https://github.com/freeCodeCamp/mobile/issues) per trovare una soluzione o segnalare il problema se non è ancora stato fatto.
+
+E come sempre, fai liberamente le tue domande nella [categoria 'Contributors' sul forum](https://forum.freecodecamp.org/c/contributors) o [sul server di chat](https://discord.gg/PRyKn3Vbay).
+
+> [!NOTE] La directory `mobile` contiene le cartelle `mobile-api` e `mobile-app`. `mobile-api` contiene il codice delle API utilizzate per i podcast. `mobile-app` contiene l'app Flutter ed è dove dovresti trovarti per seguire i passaggi successivi.
+
+### Configuring Dependencies
+
+#### Step 1: Set Up the Environment Variable File
+
+Le chiavi API predefinite e le variabili d'ambiente sono memorizzate nel file `sample.env`. This file needs to be copied to a new file named `.env` which is accessed dynamically during the installation step. Ricordati di spostarti nella directory `mobile-app` prima di eseguire i seguenti comandi.
+
+```bash
+# Crea una copia di "sample.env" e chiamalo ".env".
+# Popolalo con le chiavi API e i segreti necessari:
+```
+
+#### **macOS/Linux**
+
+```bash
+cp sample.env .env
+```
+
+#### **Windows**
+
+```bash
+copy sample.env .env
+```
+
+_Non_ è necessario cambiare le chiavi nel file `.env` per eseguire l'applicazione localmente. Puoi lasciare i valori predefiniti copiati da `sample.env` così come sono.
+
+#### Step 2: Installare le dipendenze
+
+Questo passaggio installerà le dipendenze richieste per l'esecuzione dell'applicazione:
+
+```bash
+flutter pub get
+```
+
+#### Step 3: Avviare l'app mobile freeCodeCamp
+
+Avvia un emulatore di tua scelta (Android o iOS) e aspetta il processo di avvio per completare.
+
+Ora puoi avviare l'app eseguendo il seguente comando:
+
+```bash
+flutter run
+```
+
+:::tip
+Se stai usando VSCode o Android Studio puoi avviare facilmente l'app senza eseguire comandi dal terminale. Maggiori informazioni [qui](https://docs.flutter.dev/get-started/test-drive).
+:::
+
+## Making Changes Locally
+
+You can now make changes to files and commit your changes to the local clone of your fork.
+
+Segui questi passaggi:
+
+1. Controlla di essere sul branch `main`:
+
+ ```bash
+ git status
+ ```
+
+ Dovresti ottenere un output come questo:
+
+ ```bash
+ On branch main
+ Your branch is up-to-date with 'origin/main'.
+
+ nothing to commit, working directory clean
+ ```
+
+ Se non sei sul branch main o la directory su cui stai lavorando non è pulita, risolvi file e commit in sospeso e fai il checkout da `main`:
+
+ ```bash
+ git checkout main
+ ```
+
+2. Sincronizza il tuo branch main locale con gli ultimi aggiornamenti dal branch upstream `main`:
+
+ > [!WARNING] Se hai delle pull request in sospeso fatte dal branch `main` del tuo fork, le perderai alla fine di questi passaggi.
+ >
+ > Prima di eseguire questo passaggio, dovresti assicurarti che un moderatore abbia eseguito il merge della tua pull request. Per evitare questa situazione, dovresti **sempre** lavorare su un branch che non sia `main`.
+
+ Questo passaggio **sincronizzerà le ultime modifiche** dal repository principale di freeCodeCamp mobile. È importante che tu faccia un rebase del tuo branch utilizzando l'ultima versione di `upstream/main` quanto più spesso possibile per evitare conflitti successivamente.
+
+ Aggiorna la tua copia locale del repository upstream freeCodeCamp mobile:
+
+ ```bash
+ git fetch upstream
+ ```
+
+ Fai un hard reset del tuo branch main con il branch main di freeCodeCamp mobile:
+
+ ```bash
+ git reset --hard upstream/main
+ ```
+
+ Fai un push del branch main al tuo origin per avere una cronologia pulita nel tuo fork su GitHub:
+
+ ```bash
+ git push origin main --force
+ ```
+
+ You can validate that your current main matches the upstream/main by performing a diff:
+
+ ```bash
+ git diff upstream/main
+ ```
+
+ L'output risultante dovrebbe essere vuoto.
+
+3. Crea un nuovo branch:
+
+ Lavorare su un branch separato per ogni problema ti aiuta a mantenere pulita la tua copia di lavoro locale. Non dovresti mai lavorare su `main`. Questo sporcherebbe la tua copia di freeCodeCamp mobile e potrebbe essere necessario ricominciare da capo con un nuovo clone o fork.
+
+ Controlla di essere su `main`, come spiegato in precedenza, e crea un branch da lì:
+
+ ```bash
+ git checkout -b fix/update-guide-for-xyz
+ ```
+
+ Il nome del branch dovrebbe iniziare con un `fix/`, `feat/`, `docs/`, ecc. Evita di utilizzare i numeri delle issue nei branch. Keep them short, meaningful, and unique.
+
+ Alcuni esempi di nomi buoni per un branch sono:
+
+ ```md
+ fix/update-challenges-for-react
+ fix/update-guide-for-html-css
+ fix/platform-bug-sign-in-issues
+ feat/add-guide-article-for-javascript
+ translate/add-spanish-basic-html
+ ```
+
+4. Modifica le pagine e lavora sul codice nel tuo editor di testo preferito.
+
+5. Una volta che sei soddisfatto delle modifiche, dovresti opzionalmente eseguire l'app mobile localmente per visualizzarle in anteprima.
+
+6. Assicurati di correggere eventuali errori e controlla la formattazione delle modifiche.
+
+7. Controlla e conferma i file che stai aggiornando:
+
+ ```bash
+ git status
+ ```
+
+ Questo dovrebbe mostrare un elenco di file `unstaged` che hai modificato.
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes were not staged for commit:
+ (use "git add/rm ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in the working directory)
+
+ modified: README.md
+ modified: mobile-app/lib/main.dart
+ ...
+ ```
+
+8. Fai lo stage delle modifiche e crea un commit:
+
+ In questo passaggio, dovresti contrassegnare solo i file che hai modificato o aggiunto tu stesso. Se necessario è possibile eseguire un reset e risolvere i file che non hai intenzione di modificare.
+
+ ```bash
+ git add path/to/my/changed/file.ext
+ ```
+
+ Oppure puoi aggiungere tutti i file `unstaged` all'area di staging:
+
+ ```bash
+ git add .
+ ```
+
+ Solo i file che sono stati spostati nell'area di staging verranno aggiunti quando effettui un commit.
+
+ ```bash
+ git status
+ ```
+
+ Output:
+
+ ```bash
+ On branch feat/documentation
+ Your branch is up to date with 'upstream/feat/documentation'.
+
+ Changes to be committed:
+ (use "git reset HEAD ..." to unstage)
+
+ modified: README.md
+ modified: mobile-app/lib/main.dart
+ ```
+
+ Ora, è possibile eseguire il commit delle modifiche con un breve messaggio come questo:
+
+ ```bash
+ git commit -m "fix: breve messaggio di commit"
+ ```
+
+ Alcuni esempi:
+
+ ```md
+ fix: update guide article for Java - for loop
+ feat: add guide article for alexa skills
+ ```
+
+ Facoltativo:
+
+ Raccomandiamo caldamente di creare un messaggio di commit convenzionale. Questa è una buona pratica che vedrai su alcuni dei più popolari repository Open Source. Come sviluppatore, questo ti incoraggia a seguire le pratiche standard.
+
+ Alcuni esempi di messaggi di commit convenzionali sono:
+
+ ```md
+ fix: update HTML guide article
+ fix: update build scripts for Travis-CI
+ feat: add article for JavaScript hoisting
+ docs: update contributing guidelines
+ ```
+
+ Mantieni questi messaggi brevi, non più di 50 caratteri. È sempre possibile aggiungere ulteriori informazioni nella descrizione del messaggio di commit.
+
+ Questo non richiede tempo aggiuntivo rispetto a un messaggio non convenzionale come 'update file' o 'add index.md'
+
+ Puoi sapere di più sul perché dovresti usare i commit convenzionali [qui](https://www.conventionalcommits.org/en/v1.0.0-beta.2/#why-use-conventional-commits).
+
+9. Se ti accorgi di dover modificare un file o aggiornare il messaggio del commit dopo aver fatto un commit puoi farlo dopo aver modificato i file con:
+
+ ```bash
+ git commit --amend
+ ```
+
+ Questo aprirà un editor di testo predefinito come `nano` o `vi` dove potrai modificare il titolo del messaggio di commit e aggiungere/modificare la descrizione.
+
+10. Successivamente, è possibile inviare le modifiche al fork:
+
+ ```bash
+ git push origin branch/name-here
+ ```
+
+## Running mobile curriculum tests
+
+> [!NOTE] You only need to follow this section if you're modifying the challenge test runner in the mobile app. Otherwise, you can go to the next section on [how to open a pull request](#proposing-a-pull-request-pr).
+
+1. Clone a copy of the [freeCodeCamp repo](https://github.com/freeCodeCamp/freeCodeCamp) locally outside of your local copy of the freeCodeCamp mobile repo. Your folder structure should look like this:
+
+ ```bash
+ ├── freeCodeCamp
+ ├── mobile
+ ```
+
+2. Change the directory to the freeCodeCamp repo:
+
+ ```bash
+ cd freeCodeCamp
+ ```
+
+3. Make a copy of the `.env` file:
+
+ #### **macOS/Linux**
+
+ ```bash
+ cp sample.env .env
+ ```
+
+ #### **Windows**
+
+ ```bash
+ copy sample.env .env
+ ```
+
+4. Install the dependencies for the freeCodeCamp repo:
+
+ ```bash
+ pnpm install && pnpm run create:shared
+ ```
+
+5. Generate the challenge data JSON file:
+
+ ```bash
+ pnpm run build:curriculum
+ ```
+
+6. Copy the generated JSON file to the mobile app:
+
+ #### **macOS/Linux**
+
+ ```bash
+ cp ./shared/config/curriculum.json ../mobile/mobile-app/curriculum.json
+ ```
+
+ #### **Windows**
+
+ ```bash
+ copy .\shared\config\curriculum.json ..\mobile\mobile-app\curriculum.json
+ ```
+
+7. Change directory to the mobile app:
+
+ ```bash
+ cd ../mobile/mobile-app
+ ```
+
+8. Install the dependencies for the mobile app:
+
+ ```bash
+ flutter pub get
+ ```
+
+9. Update the test file to use the challenge data JSON file:
+
+ ```bash
+ sed -i '' 's/..\/..\/shared\/config\/curriculum.json/.\/curriculum.json/g' test/widget_test.dart
+ ```
+
+10. Generate the challenge files:
+
+ ```bash
+ flutter test test/widget_test.dart
+ ```
+
+11. Start a local server to serve the challenge files with the help of `serve` package:
+
+ ```bash
+ npx serve
+ ```
+
+12. In a different terminal go back to the freeCodeCamp repo:
+
+ ```bash
+ cd ../../freeCodeCamp
+ ```
+
+13. Run the cypress tests:
+
+ ```bash
+ pnpm cypress run --config retries=1,screenshotOnRunFailure=false,video=false,baseUrl=http://localhost:3000/generated-tests/,specPattern=cypress/e2e/mobile-learn/test-challenges.js -s cypress/e2e/mobile-learn/test-challenges.js -b chrome
+ ```
+
+## Proposing a Pull Request (PR)
+
+Dopo aver fatto il commit delle tue modifiche, controlla qui per [come aprire una Pull Request](how-to-open-a-pull-request).
+
+
+
+## Troubleshooting
+
+### Problemi con l'installazione dei prerequisiti raccomandati
+
+Sviluppiamo regolarmente sui sistemi operativi più nuovi o più popolari come macOS 10.15 o successivi, Ubuntu 18.04, e Windows 10 con WSL2.
+
+Ti raccomandiamo di fare ricerche sui tuoi problemi specifici usando risorse come Google, Stack Overflow e Stack Exchange. C'è una buona probabilità che qualcuno abbia incontrato lo stesso problema e ci sia già una risposta alla tua domanda specifica.
+
+Se sei su un sistema operativo diverso e/o continui ad avere dei problemi, visita [ottenere aiuto](#ottenere-aiuto).
+
+### Problemi con UI, errori di build, ecc.
+
+If you face issues with the UI, or build errors a cleanup can be useful:
+
+```bash
+flutter clean
+```
+
+### Issues Installing Dependencies
+
+If you get errors while installing the dependencies, please make sure that you are not in a restricted network or that your firewall settings do not prevent you from accessing resources.
+
+Be patient as the first-time setup can take a while depending on your network bandwidth.
+
+## Getting Help
+
+Se sei bloccato e hai bisogno di aiuto, poni liberamente le tue domande nella [categoria 'Contributors' sul nostro forum](https://forum.freecodecamp.org/c/contributors) o [nella chat room per i contributori](https://discord.gg/PRyKn3Vbay).
+
+Potrebbe esserci un errore nella console del browser o in Bash / Terminal / Linea di comando che ti aiuterà a identificare il problema. Fornisci questo messaggio di errore nella descrizione del problema in modo che gli altri possano identificare più facilmente il problema e aiutarti a risolverlo.
diff --git a/src/content/docs/it/how-to-setup-wsl.md b/src/content/docs/it/how-to-setup-wsl.md
new file mode 100644
index 00000000..74d6ad04
--- /dev/null
+++ b/src/content/docs/it/how-to-setup-wsl.md
@@ -0,0 +1,231 @@
+---
+title: Impostare freeCodeCamp sul sottosistema Windows per Linux (WSL)
+---
+
+> [!NOTE] Before you follow these instructions make sure your system meets the requirements.
+>
+> **WSL 2**: Windows 10 a 64 bit (Versione 2004, Build 19041 o superiore) - disponibile per tutte le distribuzioni tra cui Windows 10 Home.
+>
+> **Docker Desktop per Windows**: Vedi i rispettivi requisiti per [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/#system-requirements) e [Windows 10 Home](https://docs.docker.com/docker-for-windows/install-windows-home/#system-requirements)
+
+Questa guida copre alcuni passi comuni con la configurazione di WSL2. Una volta che i problemi più comuni con WSL2 sono stati considerati, dovresti essere in grado di seguire [questa guida per settare freeCodeCamp in locale](how-to-setup-freecodecamp-locally) per lavorare su Windows usando una distribuzione WSL come Ubuntu.
+
+## Abilita WSL
+
+Follow the instructions on the [official documentation](https://docs.microsoft.com/en-us/windows/wsl/install-win10) to install WSL2.
+
+## Installare Ubuntu
+
+1. Si consiglia l'uso di Ubuntu-18.04 o superiore con WSL2.
+
+ > [!NOTE]
+ >
+ > While you may use other non-Debian-based distributions, they all come with their own 'gotchas' that are beyond the scope of this guide.
+
+ As of November 2023, Ubuntu and Debian are the only Linux distributions [officially supported by Playwright](https://playwright.dev/docs/intro#system-requirements), the end-to-end testing library used by freeCodeCamp.
+
+2. Aggiorna le dipendenze per il sistema operativo
+
+ ```bash
+ sudo apt update
+ sudo apt upgrade -y
+
+ # cleanup
+ sudo apt autoremove -y
+ ```
+
+## Imposta Git
+
+Git è preinstallato in Ubuntu 18.04, verifica la versione di git con `git --version`.
+
+```output
+~
+❯ git --version
+git version 2.25.1
+```
+
+(Facoltativo ma consigliato) Ora puoi procedere alla [impostazione delle tue chiavi ssh](https://help.github.com/articles/generating-an-ssh-key) con GitHub.
+
+## Installazione di un editor di codice
+
+Consigliamo vivamente di installare [Visual Studio Code](https://code.visualstudio.com) su Windows 10. It has great support for WSL and automatically installs all the necessary extensions on your WSL distribution.
+
+Essenzialmente, modificherai e memorizzerai il tuo codice su Ubuntu-18.04 con Visual Studio Code installato su Windows.
+
+If you use [IntelliJ Idea](https://www.jetbrains.com/idea/), you may need to update your Node interpreter and npm package manager to what is installed on your WSL distro.
+
+You can check these settings by going to Settings > Languages & Frameworks > Node.js and npm.
+
+## Installazione di Docker Desktop
+
+**Docker Desktop per Windows** ti permette di installare e eseguire database come MongoDB e altri servizi come NGINX. Questo è utile per evitare problemi comuni con l'installazione di MongoDB o altri servizi direttamente su Windows o WSL2.
+
+Segui le istruzioni nella [documentazione ufficiale](https://docs.docker.com/docker-for-windows/install) e installa Docker Desktop per la tua distribuzione Windows.
+
+Ci sono dei requisiti hardware minimi per un'esperienza migliore.
+
+## Configura Docker Desktop per WSL
+
+Una volta che Docker Desktop sarà installato, [segui queste istruzioni](https://docs.docker.com/docker-for-windows/wsl) e configuralo per usare l'installazione di Ubuntu 18.04 come Backend.
+
+Questo fa si che i container siano eseguiti su WSL invece che su Windows. Sarai in grado di accere ai servizi da `http://localhost` sia su Windows che su Ubuntu.
+
+## Installa MongoDB da Docker Hub
+
+Una volta che hai configurato Docker Desktop per lavorare con WSL2, segui questi step per avviare un servizio MongoDB:
+
+1. Launch a new Ubuntu terminal
+
+2. Pull MongoDB from Docker Hub. Please refer to the [Prerequisites](how-to-setup-freecodecamp-locally#Prerequisites) table for the current version of MongoDB used by freeCodeCamp. For example, if the version number is `5.0.x`, replace `` with `5.0` in the following two code snippets.
+
+ ```bash
+ docker pull mongo:
+ ```
+
+3. Avvia il servizio MongoDB sulla porta `27017` e configuralo perché sia eseguito automaticamente al riavvio del sistema
+
+ ```bash
+ docker run -it \
+ -v mongodata:/data/db \
+ -p 27017:27017 \
+ --name mongodb \
+ --restart unless-stopped \
+ -d mongo:
+ ```
+
+4. Ora puoi accedere al servizio sia da Windows che da Ubuntu da `mongodb://localhost:27017`.
+
+## Installazione di Node.js e pnpm
+
+Raccomandiamo di installare la release LTS di Node.js con un gestore di versioni di node (node version manager): [nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
+
+Once installed use this command to install and use the latest Node.js LTS version:
+
+```bash
+nvm install --lts
+```
+
+For instructions on installing and using a different version of Node.js, please refer to the [nvm docs](https://github.com/nvm-sh/nvm#usage).
+
+Node.js comes bundled with `npm`, which you can use to install `pnpm`:
+
+```bash
+npm install -g pnpm
+```
+
+## Set up freeCodeCamp Locally
+
+Now that you have installed the pre-requisites, follow [our local setup guide](how-to-setup-freecodecamp-locally) to clone, install and set up freeCodeCamp locally on your machine.
+
+> [!WARNING]
+>
+> Please note, at this time the setup for Cypress tests (and related GUI needs) is a work in progress. Dovresti essere comunque in grado di lavorare sulla maggior parte del codebase.
+
+## Optimize Windows and WSL
+
+> [!NOTE]
+>
+> The following tips were collected from across the web and have not gone through vigorous testing. Your mileage may vary.
+
+### Adjust processor scheduling for background services
+
+This may reduce incidents of Docker containers crashing due to lack of resources.
+
+Open the System Properties control panel by pressing Win + R and entering `sysdm.cpl`
+
+
+
+ Enter sysdm.cpl
in the Run dialog (screenshot)
+
+
+
+
+
+
+
+
+Go to Advanced -> Performance -> Settings…
+
+
+
+ Performance Settings button under Advanced tab in System Properties (screenshot)
+
+
+
+
+
+
+
+
+Under Advanced -> Processor scheduling, choose "Background services". Do not close the window. Continue to the next tip.
+
+
+
+ Background services radio button under Advanced tab in Performance Options (screenshot)
+
+
+
+
+
+
+
+### Increase the size of Windows paging file for the system drive
+
+Under Advanced -> Virtual memory, click "Change…"
+
+
+
+ Change virtual memory button under Advanced tab in Performance Options (screenshot)
+
+
+
+
+
+
+
+
+Choose "Custom size". Set the initial size to 1.5x and the maximum size to 3x of your physical memory. Then click "Set".
+
+
+
+ Set custom size button in Virtual Memory window (screenshot)
+
+
+
+
+
+
+
+### Increase the size of memory allocated to WSL
+
+Create a [`.wslconfig` file](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) in your [`%UserProfile%` directory](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#wslconfig) (typically `C:\Users\\.wslconfig`). Please read the [WSL documentation](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) carefully and replace `x` with values that suit your own needs:
+
+```ini
+# Settings apply across all Linux distros running on WSL 2
+[wsl2]
+
+# How much memory to assign to the WSL 2 VM. The default value might not be enough
+memory=xGB
+
+# How much swap space to add to the WSL 2 VM, default is 25% of available RAM
+swap=xGB
+```
+
+### Increase Node.js max old space size
+
+This fixes the ["JavaScript heap out of memory" error](https://stackoverflow.com/a/54456814) with ESLint. Add the following to your `~/.bashrc` or `~/.zshrc`:
+
+```sh
+export NODE_OPTIONS="--max-old-space-size=4096"
+```
+
+### Avoid `pnpm run test`
+
+Instead, use the script [appropriate to your PR](https://forum.freecodecamp.org/t/wsl-performance-issues-while-working-on-the-codebase/644215/2#:~:text=usually%2C%20you%20just%20want%20to%20test%20something%20specific%20to%20either%20the%20curriculum%20or%20the%20client%20or%20the%20api%20-%20almost%20never%20all%203.); either `pnpm run test:api`, `pnpm run test:curriculum`, or `pnpm run test-client`.
+
+## Useful Links
+
+- [A WSL2 Dev Setup with Ubuntu 20.04, Node.js, MongoDB, VS Code, and Docker](https://hn.mrugesh.dev/wsl2-dev-setup-with-ubuntu-nodejs-mongodb-and-docker) - an article by Mrugesh Mohapatra (Staff Developer at freeCodeCamp.org)
+- Domande frequenti su:
+ - [Sottosistema Windows per Linux](https://docs.microsoft.com/en-us/windows/wsl/faq)
+ - [Docker Desktop per Windows](https://docs.docker.com/docker-for-windows/faqs)
diff --git a/src/content/docs/it/how-to-test-translations-locally.md b/src/content/docs/it/how-to-test-translations-locally.md
new file mode 100644
index 00000000..f4095137
--- /dev/null
+++ b/src/content/docs/it/how-to-test-translations-locally.md
@@ -0,0 +1,226 @@
+---
+title: Come testare le traduzioni in locale
+---
+
+> [!NOTE] Questo processo non è richiesto, ma documentato nel caso tu voglia vedere la preview delle tue traduzioni.
+
+Se vuoi testare le tue traduzioni in una istanza locale della piattaforma `/learn` di freeCodeCamp, assicurati prima di aver [preparato il codebase](how-to-setup-freecodecamp-locally).
+
+## Attivare una lingua
+
+Ci sono alcuni step da fare per avere una build del codebase nella lingua di tua scelta.
+
+Prima, visita il file `config/i18n/all-langs.ts` per aggiungere la lingua alle lingue disponibili nella lista e configurare i valori. Ci sono quattro oggetti qui.
+
+- `availableLangs`: Aggiungi il nome testuale della lingua agli array `client` e `curriculum`. Questo è il valore che sarà usato nel file `.env` più tardi.
+- `auditedCerts`: Aggiungi il nome testuale della lingua come _chiave_, e aggiungi un array di variabili `SuperBlocks.{cert}` come _valori_. Questo dice al client quali certificazioni sono completamente tradotte.
+- `i18nextCodes`: questi sono i codici ISO per le varie lingue. Dovrai aggiungere il codice ISO appropriato per la lingua che stai attivando. Questi devono essere unici per ogni lingua.
+- `LangNames`: Questi sono i nomi delle lingue visualizzati nel menù di navigazione.
+- `LangCodes`: Questi sono i codici delle lingue usati per formattare date e numeri. Questi devono essere codici Unicode CLDR invece di codici ISO.
+
+Per esempio, se vuoi attivare la lingua Dothraki, il tuo oggetto `all-langs.js` dovrebbe essere come segue:
+
+```js
+export const availableLangs = {
+ client: ['english', 'espanol', 'chinese', 'chinese-traditional', 'dothraki'],
+ curriculum: [
+ 'english',
+ 'espanol',
+ 'chinese',
+ 'chinese-traditional',
+ 'dothraki'
+ ]
+};
+
+export const auditedCerts = {
+ espanol: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis
+ ],
+ chinese: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ 'chinese-traditional': [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs,
+ SuperBlocks.DataVis,
+ SuperBlocks.BackEndDevApis,
+ SuperBlocks.QualityAssurance,
+ SuperBlocks.SciCompPy,
+ SuperBlocks.DataAnalysisPy,
+ SuperBlocks.InfoSec,
+ SuperBlocks.MachineLearningPy
+ ],
+ dothraki: [
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+};
+
+export const i18nextCodes = {
+ english: 'en',
+ espanol: 'es',
+ chinese: 'zh',
+ 'chinese-traditional': 'zh-Hant',
+ dothraki: 'mis'
+};
+
+export enum LangNames = {
+ english: 'English',
+ espanol: 'Español',
+ chinese: '中文(简体字)',
+ 'chinese-traditional': '中文(繁體字)',
+ dothraki: 'Dothraki'
+};
+
+export enum LangCodes = {
+ english: 'en-US',
+ espanol: 'es-419',
+ chinese: 'zh',
+ 'chinese-traditional': 'zh-Hant',
+ dothraki: 'mis'
+};
+```
+
+Poi, apri il file `client/src/utils/algolia-locale-setup.ts`. Questi dati sono usati dalla barra di ricerca che carica gli articoli in `/news`. Anche se è poco probabile che tu stia testando questa funzione, se questi dati mancano per la tua lingua possono esserci degli errori nel costruire il codebase localmente.
+
+Aggiungi un oggetto per la tua lingua all'oggetto `algoliaIndices`. Dovresti usare gli stessi valori dell'oggetto `english` per testare in locale, sostituendo la chiave `english` con il valore della tua lingua in `availableLangs`.
+
+> [!NOTE] Se abbiamo già distribuito un'istanza della pubblicazione nella tua lingua target, puoi aggironare i valori per riflettere le istanze live. Altrimenti, usa i valori della pubblicazione inglese.
+
+Se volessi aggiungere Dothraki:
+
+```js
+const algoliaIndices = {
+ english: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ },
+ espanol: {
+ name: 'news-es',
+ searchPage: 'https://www.freecodecamp.org/espanol/news/search/'
+ },
+ chinese: {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search/'
+ },
+ 'chinese-traditional': {
+ name: 'news-zh',
+ searchPage: 'https://chinese.freecodecamp.org/news/search'
+ },
+ dothraki: {
+ name: 'news',
+ searchPage: 'https://www.freecodecamp.org/news/search/'
+ }
+};
+```
+
+Infinine, nel file `.env`, dai a `CLIENT_LOCALE` e `CURRICULUM_LOCALE` il valore della tua nuova lingua (usando il valore in `availableLangs`.)
+
+```txt
+CLIENT_LOCALE=dothraki
+CURRICULUM_LOCALE=dothraki
+```
+
+### RIlasciare un superblocco
+
+Dopo che un superblocco è stato completamente tradotto in una lingua, ci sono due step per rilasciarlo. Come prima cosa aggiungi il superblocco enum all'array `auditedCerts` di quella lingua. Quindi, se vuoi rilasciare il nuovo superblocco Web Design Responsivo per Dothraki, l'array dovrebbe essere così:
+
+```ts
+export const auditedCerts = {
+ // other languages
+ dothraki: [
+ SuperBlocks.RespWebDesignNew, // the newly translated superblock
+ SuperBlocks.RespWebDesign,
+ SuperBlocks.JsAlgoDataStruct,
+ SuperBlocks.FrontEndDevLibs
+ ]
+```
+
+Infine, l'array `languagesWithAuditedBetaReleases` dovrebbe essere aggiornato per includere la nuova lingua in questo modo:
+
+```ts
+export const languagesWithAuditedBetaReleases: ['english', 'dothraki'];
+```
+
+Questo sposterà il nuovo superblocco nel posto corretto nella mappa del curriculum su `/learn`.
+
+## Attivare video localizzati
+
+Per le sfide video, devi cambiare alcune cose. Come prima cosa aggiungi la nuova lingua alla query per GraphQL nel file `client/src/templates/Challenges/video/Show.tsx`. Per esempio, in questo modo aggiungeresti Dothraki alla query:
+
+```tsx
+ query VideoChallenge($slug: String!) {
+ challengeNode(fields: { slug: { eq: $slug } }) {
+ videoId
+ videoLocaleIds {
+ espanol
+ italian
+ portuguese
+ dothraki
+ }
+ ...
+```
+
+Quindi aggiungi un id per la nuova lingua ogni sfida video in un blocco verificato (`auditedCerts`). Per esempio, se `auditedCerts` in `all-langs.ts` include `scientific-computing-with-python` per `dothraki`, allora devi aggiungere `dothraki` in `videoLocaleIds`. Il frontespizio dovrebbe essere simile a questo:
+
+```yml
+videoLocaleIds:
+ espanol: 3muQV-Im3Z0
+ italian: hiRTRAqNlpE
+ portuguese: AelGAcoMXbI
+ dothraki: nuovo-id-qui
+dashedName: introduction-why-program
+---
+```
+
+Aggiorna l'interfaccia `VideoLocaleIds` in `client/src/redux/prop-types` così che includa la nuova lingua.
+
+```ts
+export interface VideoLocaleIds {
+ espanol?: string;
+ italian?: string;
+ portuguese?: string;
+ dothraki?: string;
+}
+```
+
+Infine aggiorna lo schema delle sfide in `curriculum/schema/challengeSchema.js`.
+
+```js
+videoLocaleIds: Joi.when('challengeType', {
+ is: challengeTypes.video,
+ then: Joi.object().keys({
+ espanol: Joi.string(),
+ italian: Joi.string(),
+ portuguese: Joi.string(),
+ dothraki: Joi.string()
+ })
+}),
+```
+
+## Caricare le traduzioni
+
+Poiché la lingua non è ancora stata approvata per la produzione, i nostri script ancora non scaricheranno automaticamente le traduzioni. Solo lo staff ha accesso al download diretto delle traduzioni - sei il benvenuto a rivolgerti a noi attraverso la [chat room per i contributori](https://discord.gg/PRyKn3Vbay), o puoi tradurre i file markdown inglesi per le esigenze di test.
+
+Una volta che avrai i file, li dovrai mettere nelle cartelle giuste. Per le sfide del curriculum, dovresti mettere le cartelle dei certificati (ad esempio `01-responsive-web-design`) nella cartella `curriculum/challenges/{lang}`. Per la nostra traduzione in Dothraki, questo sarebbe `curriculum/challenges/dothraki`. I file `.json` con le traduzioni del client vanno nella cartella `client/i18n/locales/{lang}`.
+
+Una volta che questi saranno in posizione, dovresti essere in grado di eseguire `npm run develop` per vedere la versione tradotta di freeCodeCamp.
+
+:::danger
+Anche se puoi farei delle traduzioni localmente per i test, ricordiamo che le traduzioni _non_ devono essere inviate attraverso GitHub ma solo tramite Crowdin. Assicurati di resettare il tuo codebase locale dopo che avrai finito con i test.
+:::
diff --git a/src/content/docs/it/how-to-translate-files.md b/src/content/docs/it/how-to-translate-files.md
new file mode 100644
index 00000000..d7805578
--- /dev/null
+++ b/src/content/docs/it/how-to-translate-files.md
@@ -0,0 +1,343 @@
+---
+title: Come tradurre le risorse di freeCodeCamp
+---
+
+## Prepare yourself for Contributions
+
+> Il piano d'azione per la localizzazione di freeCodeCamp – Non ci sono limiti di velocità
+
+:::tip
+Puoi iniziare a leggere [questo articolo](https://www.freecodecamp.org/italian/news/come-aiutare-a-tradurre-freecodecamp-nella-tua-lingua/). Ti raccomandiamo di unirti al [forum della nostra comunità](https://forum.freecodecamp.org/c/contributors/3) e alla [chat Discord](https://discord.gg/PRyKn3Vbay).
+:::
+
+Puoi tradurre quanto vuoi e quando vuoi. È solo una questione di quante energie e quanto tempo desideri impiegare come traduttore volontario.
+
+Ti chiediamo soltanto di comprendere che:
+
+1. **Le traduzioni sono uno sforzo di gruppo.**
+
+ Tradurre le risorse di freeCodeCamp è una delle esperienze più divertenti e gratificanti come contributore, e funziona meglio se coinvolgi i tuoi amici e colleghi che parlano la tua stessa lingua.
+
+ Puoi iniziare leggendo [questo articolo](https://www.freecodecamp.org/italian/news/come-aiutare-a-tradurre-freecodecamp-nella-tua-lingua/). Ti raccomandiamo di unirti al [forum della nostra community](https://forum.freecodecamp.org/c/contributors/3) e alla [chat Discord](https://discord.gg/PRyKn3Vbay) insieme ai tuoi amici e di manifestare il tuo interesse prima di iniziare con la traduzione. Crowdin e altri strumenti renderanno più semplice contribuire alla traduzione, ma c'è comunque tanto lavoro da fare.
+
+ Vogliamo che tu ti diverta a contribuire e non che ti annoi e perda interesse.
+
+ Un piccolo gruppo di 4-5 persone è una buona dimensione per iniziare la nicchia per la tua lingua. Poi, puoi reclutare ancora più amici perché si uniscano alla squadra.
+
+2. **Costa un sacco creare i server per ogni lingua.**
+
+ In superficie lo stack tecnico può non sembrare complicato, ma costa un sacco tenere i motori in funzione. Questo include avere dei server aggiuntivi e il personale incaricato di controllarli.
+
+ freeCodeCamp.org si impegna a offrire queste cose gratuitamente come sempre, ma dobbiamo dare priorità alle risorse per chi ne ha più bisogno. L'ultima cosa che vogliamo è dover disattivare i server per una lingua se l'attività di traduzione si ferma e il materiale diventa obsoleto.
+
+ Per tradurre il curriculum, una volta che la lingua raggiunge almeno qualche certificazione tradotta, possiamo iniziare a metterle live su [`/learn`](https://www.freecodecamp.org/learn), mentre continui a tradurre le certificazioni rimanenti.
+
+ Per esempio, vorremmo fare il deploy almeno di tutte le certificazioni front-ent quando attiviamo una nuova lingua per la prima volta.
+
+3. **E per le lingue non elencate sulla piattaforma di traduzione?**
+
+ Abbiamo analizzato la nostra user base e aggiunto le 30+ lingue più usate alla lista delle lingue disponibili sulla piattaforma di traduzione. Al momento alcune lingue come cinese, spagnolo e italiano sono già disponibili live su **"/learn"**.
+
+ Sfortunatamente, la lista non include centinaia di lingue esistenti. Abbiamo dozzine di richieste da contributori come te ogni giorno che vogliono aiutare a tradurre il sito in una lingua che parlano.
+
+ Vogliamo decisamente aggiungere più lingue alla lista, ma come puoi già indovinare, questo è fattibile soltanto se raggiungiamo un coinvolgimento sufficiente per una certa lingua.
+
+ Se vuoi includere una nuova lingua, ti raccomandiamo di entusiasmare i tuoi amici.
+
+ Una volta che avrai un piccolo gruppo di persone (almeno 4-5) interessate e volenterose a impegnarsi, potremo fare una videochiamata. Spiegheremo tutti i dettagli e vi guideremo nell'uso degli strumenti e sui processi.
+
+## Panoramica di Crowdin
+
+Il nostro sogno è fornirti le risorse per imparare, indipendentemente dalla lingua che parli. To help us with this massive effort, we have integrated our open-source codebase & curriculum with [Crowdin](https://crowdin.com/) - A tool to help us localize our code-base.
+
+> [!NOTE] Utilizziamo uno strumento e una procedura differenti per la traduzione degli [articoli](https://www.freecodecamp.org/news). Se sei davvero interessato a tradurre articoli, leggi [questo articolo](https://www.freecodecamp.org/news/help-translate-freecodecamp-language/) e rivolgiti al leader della tua lingua.
+
+La procedura di traduzione è divisa in due attività principali:
+
+- **Tradurre** i file del curriculum, la documentazione e gli elementi dell'interfaccia come pulsanti, etichette, ecc.:
+
+ Come traduttore puoi iscriverti alla [nostra piattaforma di traduzione](https://translate.freecodecamp.org) e contribuire a tradurre in una qualsiasi delle oltre 30 lingue disponibili sulla piattaforma.
+
+- **Revisionare** (Proofread) le traduzioni per gli elementi nominati in precedenza.
+
+ I revisori verificano che le traduzioni dei volontari della community abbiano un tono uniforme e non abbiano problemi comuni come errori di spelling, ecc. In breve, si occupano di assicurare un'alta qualità della traduzione. Nota che non usiamo traduzioni automatiche per una ragione.
+
+> [!WARNING] Se hai contribuito in passato e non conosci le novità, sappi che non stiamo utilizzando più GitHub per tradurre file direttamente, quindi dirigiti alla nostra [piattaforma di traduzione](https://translate.freecodecamp.org/).
+
+## Getting Started
+
+Prima di tutto, passa a salutarci sul nostro [Discord](https://discord.gg/PRyKn3Vbay). Lì postiamo aggiornamenti regolari sulla traduzione delle risorse e rispondiamo a un sacco delle vostre domande.
+
+Poi, vai alla nostra [piattaforma di traduzione](https://translate.freecodecamp.org/) e fai login (se è la prima volta che contribuisci alle traduzioni, dovrai creare un account).
+
+Infine, segui la guida dettagliata qua sotto per capire come funzionano gli strumenti di traduzione e il workflow a tua disposizione.
+
+Buona traduzione.
+
+## Selezionare un progetto e un file
+
+Quando visiti la piattaforma di traduzione, dovresti vedere vari "progetti" disponibili per la traduzione:
+
+1. Il progetto della [documentazione per contribuire (Contributing documentation)](https://translate.freecodecamp.org/contributing-docs) che contiene i file per questo sito di documentazione.
+2. Il progetto del [Coding Curriculum](https://translate.freecodecamp.org/curriculum), che contiene i file delle sfide del curriculum per programmatori.
+3. Il progetto dell'[interfaccia della piattaforma di apprendimento (Learn User Interface)](https://translate.freecodecamp.org/learn-ui), che contiene le stringhe per gli elementi dell'interfaccia come pulsanti, etichette, ecc.
+
+Seleziona il progetto a cui vuoi contribuire, e vedrai una lista con le lingue disponibili per la traduzione.
+
+
+
+Seleziona la lingua su cui vuoi lavorare, e vedrai l'albero dei file completo.
+
+
+
+Ogni file e cartella mostrerà una barra di avanzamento. La parte **blu** della barra di avanzamento indica che percentuale del file è stata tradotta, mentre la parte **verde** indica quale percentuale del file è stata approvata dal team di revisione.
+
+Seleziona un file su cui lavorare e Crowdin aprirà l'editor.
+
+> [!NOTE] Quando l'editor si apre, dovrai cliccare sull'icona delle impostazioni (settings, mostrata come un ingranaggio) e impostare 'HTML tags displaying' sull'opzione 'SHOW'. Così sarai in grado di vedere i tag come `
` invece di `<0>0>`.
+
+## Tradurre il Curriculum
+
+
+
+Crowdin separa un documento in "stringhe" (strings) da tradurre, in genere frasi. Ogni stringa è tradotta individualmente. Con riferimento all'immagine sopra:
+
+1. Una stringa evidenziata in verde ha già una traduzione proposta.
+2. Una stringa evidenziata in rosso _non_ ha una traduzione proposta.
+3. Una stringa con testo in grigio non è traducibile. Questo è il caso per blocchi di codice e altro contenuto che non deve essere tradotto. Non sarai in grado di selezionare queste stringhe nell'editor.
+4. Se un contributore ha già proposto una traduzione per una stringa, Crowdin mostrerà qui queste proposte. Non sarai in grado di salvare una traduzione identica, invece se una traduzione è accurata dovresti usare l'icona `+` per darle un voto positivo. Una traduzione inaccurata può ricevere un voto negativo con l'icona `-`.
+5. Crowdin proporrà delle traduzioni basate sulla Memoria di Traduzione (Translation Memory - TM) e Traduzioni Automatiche (Machine Translation - MT). La Memoria di Traduzione si riferisce a stringhe simili o identiche che sono state tradotte/approvate in altri file. Le Traduzioni Automatiche si riferiscono a traduzioni raccomandate dalla loro libreria integrata.
+6. Questo è il pannello di modifica, dove puoi scrivere la tua proposta di traduzione per la stringa selezionata.
+7. La stringa attualmente selezionata nell'editor è evidenziata in giallo.
+8. Qui vedrai dei tag indicanti lo stato della stringa. `Done` significa che la stringa ha almeno una traduzione proposta. `Todo` significa che la stringa non ha alcuna proposta di traduzione.
+9. Qui puoi vedere la finestra dei commenti. Se hai domande o dubbi su una particolare stringa, puoi lasciare un commento sulla stringa qui perché altri traduttori li vedano.
+10. Questi due pulsanti dei pannelli nasconderanno i pannelli a sinistra (documento) e a destra (commenti).
+
+> [!NOTE] Se vedi una stringa nascosta che include delle traduzioni, per favore, faccelo sapere su [Discord](https://discord.gg/PRyKn3Vbay), così potremo rimuovere la traduzione dalla memoria.
+
+Quando hai finito la traduzione per una stringa, usa il pulsante `Save` per salvare la tua traduzione in Crowdin. Altri contributori potranno quindi votare la tua traduzione e i revisori potranno approvarla.
+
+Sentiti libero di tradurre quante stringhe vuoi, non ci sono step addizionali richiesti quando completi un intero file o proponi una nuova traduzione. Usare il pulsante `Save` è tutto quello che serve per memorizzare una traduzione.
+
+> [!NOTE] Se vedi qualcosa nel file originale inglese che è inaccurato o non corretto, per favore non aggiustarlo con il processo di traduzione. Invece lascia un commento sulla stringa per farci sapere che c'è una discrepanza o crea una issue su GitHub.
+
+## Tradurre l'interfaccia di apprendimento
+
+La nostra interfaccia `/learn` si basa su dei file JSON caricati nel plugin i18n per generare il testo tradotto. Questo processo di traduzione è diviso tra Crowdin e GitHub.
+
+### Su GitHub
+
+I file `links.json`, `meta-tags.json`, `motivation.json` e `trending.json` contengono informazioni che devono essere aggiornate per rispecchiare la tua lingua. Tuttavia, non possiamo caricarle su Crowdin, dato che il contenuto non è adatto per traduzioni individuali.
+
+Questi file verranno probabilmente gestiti dal leader della tua lingua ma sei vuoi puoi [leggere qui come tradurli](language-lead-handbook).
+
+### Su Crowdin
+
+:::danger
+Non modificare i seguenti file con una PR su GitHub.
+:::
+
+I file `intro.json` e `translations.json` sono tradotti entrambi su Crowdin, nel progetto Learn User Interface. La traduzione di questi file può essere complicata, dato che ogni singolo valore JSON appare come una singola stringa e a volte manca di contesto.
+
+Tuttavia, le informazioni fornite da `Context` su Crowdin possono aiutarti a capire il ruolo della stringa all'interno della struttura che la contiene.
+
+
+
+Se hai domande sul ruolo di una stringa, puoi chiedere informazioni nella nostra [chat per i contributori](https://discord.gg/PRyKn3Vbay).
+
+## Tradurre la documentazione
+
+La traduzione della documentazione per la contribuzione si svolge in modo simile alla traduzione dei file del curriculum.
+
+> [!NOTE] La nostra documentazione per la contribuzione sfrutta `docsify` e abbiamo delle regole particolari per riquadri informativi come questo. Se vedi stringhe che iniziano con `[!NOTE]`, `[!WARNING]` o `[!TIP]`, queste parole NON devono essere tradotte.
+
+### How to Translate Documentation with Internal Links
+
+Quando lavori sulla traduzione della documentazione per la contribuzione, stai attento ai link esterni che rimandano a sezioni diverse della documentazione.
+
+Assicurati di sostituire l'id della sezione (la parte dopo `#`) con l'id del documento tradotto. Ad esempio, in giapponese:
+
+Prima della traduzione
+
+```
+// in HTML
+Link text
+Link text
+
+// in Markdown
+[Link text](target-file-name#target-section-heading-id)
+[Link text](#target-section-heading-id)
+```
+
+Dopo la traduzione
+
+```
+// in HTML
+翻訳後のリンクテキスト
+翻訳後のリンクテキスト
+
+// in Markdown
+[翻訳後のリンクテキスト]($1#$2)
+[翻訳後のリンクテキスト](#翻訳後の-id)
+```
+
+I file reali in docs sono scritti in Markdown, ma appaiono come tag HTML su Crowdin.
+
+Puoi scoprire come `docsify` converte una stringa nella tua lingua in un id guardando le pagine tradotte. Se la traduzione non è stata ancora distribuita, puoi avere una preview [eseguendo il sito della documentazione in locale](how-to-work-on-the-docs-theme#sservire-localmente-il-sito-di-documentazione).
+
+Puoi avere più informazioni sui [link esterni in docs qui](how-to-work-on-the-docs-theme#howcome-creare-un-link-interno).
+
+## Tradurre LearnToCode RPG
+
+LearnToCode RPG gira su Ren'Py, che utilizza una sintassi speciale per le stringhe tradotte: (Vedi [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
+
+- Le frasi da tradurre sono sempre tra virgolette `""`. Queste sono dialoghi o stringhe di UI. Le parole chiave che vengono prima o dopo i dialoghi sono parole chiave di controllo del game engine e saranno spiegate in regole seguenti. Nota che questa prima regola governa le seguenti regole elencate.
+- Nel caso di `new "..."`, non tradurre la parola chiave `new`.
+- Prefissi come `player`, `annika`, `layla`, `marco` (o varianti come `player happy`, `player @ happy`) non devono essere tradotti. Questi sono le parole chiave per visualizzare correttamente gli sprite dei personaggi nel gioco.
+- Suffissi come `nointeract` non devono essere tradotti.
+- Non tradurre stringhe tra `[]` e `{}`. Queste sono variabili interpolate e tag di testo. Queste devono rimanere parentesi a mezza larghezza `[]` e `{}` invece delle loro controparti a larghezza intera `【】` e `「」`
+- Non tradurre la parola chiave `nointeract` alla fine di una frase.
+- Se proviamo a usare parentesi a larghezza intera `()` ci sarà un avviso QA. Per evitarlo, usa parentesi a mezza larghezza `()`
+
+### Esempi
+
+---
+
+#### Prima della traduzione
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- questa è la riga da tradurre. vedi la traduzione sotto
+```
+
+#### Dopo la traduzione
+
+```renpy
+# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
+"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
+```
+
+Nota: I tag `[]` e `{}` non devono essere modificati.
+
+---
+
+#### Prima della traduzione
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} Skip" <-- traduci questa riga, vedi sotto
+```
+
+#### Dopo la traduzione
+
+```renpy
+old "{icon=icon-fast-forward} Skip"
+new "{icon=icon-fast-forward} 跳过"
+```
+
+Nota: Di nuovo, il prefisso `new` e il tag `{icon=icon-fast-forward}` non devono essere modificati.
+
+---
+
+#### Prima della traduzione
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+```
+
+#### Dopo la traduzione
+
+```renpy
+# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
+layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
+```
+
+Nota: `layla @ neutral` e `[player_name]` restano inalterati.
+
+---
+
+#### Prima della traduzione
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "Maybe this is all a dream?" nointeract
+```
+
+#### Dopo la traduzione
+
+```renpy
+# player "Maybe this is all a dream?" nointeract
+player "也许这都是一场梦?" nointeract
+```
+
+---
+
+### Nota sulla segmentazione delle frasi in Crowdin
+
+Fai attenzione a come Crowdin segmenta le frasi dei dialoghi circondate da virgolette `""`. Quando stiamo traducendo un dialogo, dobbiamo essere sicuri di mantenere le virgolette di apertura e di chiusura, anche se appaiono in segmenti diversi.
+
+Ecco la riga che deve essere tradotta:
+
+```renpy
+player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
+```
+
+Crowdin la divide in tre parti:
+
+
+
+```renpy
+# originale
+player @ surprised "{b}Full-stack{/b}
+# tradotta, mantenendo le virgolette di apertura `"`
+player @ surprised "{b}全栈{/b}
+```
+
+
+
+```renpy
+# originale
+What is that?
+# tradotta, nessuna virgoletta
+这是什么?
+```
+
+
+
+```renpy
+# originale
+I better take notes so I can learn more about it."
+# tradotta, mantenendo le virgolette di chiusura `"`
+我最好做笔记,这样我可以学习更多东西。"
+```
+
+## Votare le traduzioni
+
+Crowdin ti permette di votare le traduzioni esistenti. Se tenti di salvare una traduzione, potresti vedere un messaggio che ti avverte che non puoi il duplicato di una traduzione - questo significa che un altro contributore ha già proposto una traduzione identica. Se sei d'accordo con quella traduzione, clicca il pulsante `+` per darle un voto positivo.
+
+Se vedi una traduzione che non è accurata o non fornisce la stessa chiarezza della stringa originale, clicca il pulsante `-` per darle un voto negativo.
+
+Crowdin utilizza questi voti per dare un punteggio a ogni traduzione proposta per una stringa, facilitando il team di revisori che sceglie la traduzione che si adatta meglio a ogni stringa.
+
+## Controlli di Qualità
+
+Abbiamo abilitato alcuni passaggi relativi ai controlli di qualità che verificheranno che una traduzione sia la più accurata possibile - questo aiuta i nostri revisori a valutare le traduzioni proposte.
+
+Quando stai cercando di salvare una traduzione, potresti veder apparire un messaggio di avvertimento con una notifica circa la traduzione proposta.
+
+
+
+Questo messaggio appare quando il sistema QA di Crowdin identifica un potenziale errore nella traduzione proposta. In questo esempio, abbiamo modificato il testo di un tag `` e Crowdin lo ha notato.
+
+> [!WARNING] Sei in grado di salvare una traduzione nonostante gli errori. Se lo fai, cliccando su "Save Anyway", dovresti anche taggare un revisore o un responsabile del progetto e spiegare perché il messaggio QA deve essere ignorato in questo caso.
+
+## Buone pratiche di traduzione
+
+Segui le linee guida per far sì che le traduzioni siano le più accurate possibile:
+
+- Non tradurre il contenuto dei tag ``. Questi tag indicano testo trovato nel codice e dovrebbero essere lasciati in inglese.
+- Non inserire contenuto aggiuntivo. Se pensi che una sfida richieda delle modifiche nel testo o informazioni aggiuntive dovresti proporre i cambiamenti tramite una issue su GitHub o una pull request che modifica i file inglesi.
+- Non cambiare l'ordine del contenuto.
+
+Se hai delle domande, puoi contattarci su [Discord](https://discord.gg/PRyKn3Vbay) e saremo felici di aiutarti.
diff --git a/src/content/docs/it/how-to-use-docker-on-windows-home.md b/src/content/docs/it/how-to-use-docker-on-windows-home.md
new file mode 100644
index 00000000..e1a34efb
--- /dev/null
+++ b/src/content/docs/it/how-to-use-docker-on-windows-home.md
@@ -0,0 +1,17 @@
+---
+title: Come usare Docker su Windows Home
+---
+
+Ci sono alcuni pericoli da evitare quando si setta Docker su Windows Home. Per prima cosa devi usare [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) come amministratore. Purtroppo Windows Home non supporta Docker per Windows Desktop, quindi deve essere usata la Toolbox. Essa deve essere eseguita come Amministratore in quanto l'installazione utilizza collegamenti simbolici che non possono essere creati altrimenti.
+
+Dopo aver installato la toolbox, esegui Docker Quickstart Terminal come amministratore. Questo creerà una virtual machine di `default`, se ancora non esiste. Dopo averlo fatto, chiudi il terminale e apri VirtualBox (ancora come Amministratore). Dovresti essere in grado di vedere la macchina di `default`. Il sito richiede molte risorse, quindi ferma la virtual machine e alza le impostazioni per quanto puoi, soprattutto la memoria. It has been confirmed to work with 4GB of RAM.
+
+Una volta che sarai felice perché Docker sta funzionando, clona il repository di freeCodeCamp in una directory all'interno di `C:\Users`. Queste directory sono condivise dando a Docker accesso alle directory locali, di cui ha bisogno durante l'installazione.
+
+Se vedi messaggi come
+
+```shell
+bash: change_volumes_owner.sh: No such file or directory
+```
+
+quando usi `pnpm run docker:init` questa è molto probabilmente la causa.
diff --git a/src/content/docs/it/how-to-work-on-coding-challenges.md b/src/content/docs/it/how-to-work-on-coding-challenges.md
new file mode 100644
index 00000000..e21415fe
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-coding-challenges.md
@@ -0,0 +1,737 @@
+---
+title: Come lavorare sulle sfide di programmazione
+---
+
+Il nostro obiettivo è quello di sviluppare un'esperienza di apprendimento interattiva divertente e chiara.
+
+Progettare le sfide di programmazione interattiva è difficile. Sarebbe molto più facile scrivere una spiegazione lunga o creare un video tutorial. Ma per il nostro curriculum di base, ci atteniamo a ciò che funziona meglio per la maggior parte delle persone - un'esperienza completamente interattiva, come il videogioco.
+
+Vogliamo che i camper raggiungano uno stato di flusso. Vogliamo che costruiscano slancio e sfondino attraverso il nostro curriculum con il minor numero di intoppi possibile. We want them to go into the projects with confidence and gain wide exposure to programming concepts.
+
+Nota che per la versione 7.0 del curriculum freeCodeCamp, ci stiamo muovendo verso [un modello interamente orientato al progetto con molta più ripetizione](https://www.freecodecamp.org/news/python-curriculum-is-live/).
+
+La creazione di queste sfide richiede un'immensa creatività e attenzione ai dettagli. C'è un sacco di aiuto disponibile. Avrai il supporto di un intero team di collaboratori a cui puoi rimbalzare le idee e mostrare le tue sfide.
+
+E come sempre, poni liberamente le tue domande [nella categoria 'Contributors' sul nostro forum](https://forum.freecodecamp.org/c/contributors) o [nella chat room per i contributori](https://discord.gg/PRyKn3Vbay).
+
+Con il tuo aiuto possiamo creare un curriculum interattivo di programmazione che aiuterà milioni di persone a imparare a programmare per gli anni a venire.
+
+Il contenuto di ogni sfida è immagazzinato nel suo file markdown. Questo file markdown viene successivamente convertito in HTML utilizzando i nostri strumenti per creare pagine web interattive.
+
+Puoi trovare tutto il contenuto del curriculum di freeCodeCamp nella directory [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges).
+
+## Imposta lo strumento per il curriculum
+
+Prima di lavorare sul curriculum, è necessario impostare alcuni strumenti per aiutarti a testare le modifiche. È possibile utilizzare qualsiasi opzione delle seguenti:
+
+- È possibile [impostare freeCodeCamp localmente](how-to-setup-freecodecamp-locally). Questo è **altamente raccomandato** per contributi regolari/ripetuti. Questa configurazione ti permette di lavorare e testare le modifiche.
+- Usa Gitpod, un ambiente di sviluppo online gratuito. Facendo clic sul pulsante qui sotto si avvierà un ambiente di sviluppo ready-to-code per freeCodeCamp nel tuo browser. Ci vogliono solo pochi minuti.
+
+ [](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
+
+### Come lavorare sui progetti di pratica
+
+I progetti di pratica hanno degli strumenti addizionali per aiutare a creare i nuovi progetti e gli step. Per saperne di più, leggi [questa documentazione](how-to-work-on-practice-projects)
+
+## Template delle sfide
+
+````md
+---
+id: Unique identifier (alphanumerical, MongoDB_id)
+title: 'Challenge Title'
+challengeType: Integer, defined in `client/utils/challenge-types.js`
+videoUrl: 'url of video explanation'
+forumTopicId: 12345
+---
+
+# --description--
+
+Challenge description text, in markdown
+
+```html
+example code
+```
+````
+
+# --instructions--
+
+Testo di itroduzione alla sfida, in markdown
+
+# --hints--
+
+I test da eseguire sul codice scritto dall'utente, in coppie di testo markdown e blocco di codice col codice del test.
+
+```js
+Codice per test uno
+```
+
+Se vuoi output dinamico basato sul codice dell'utente --fcc-expected-- e --fcc-actual-- saranno sostituiti con i valori aspettati e i valori veri dell'asserzione del test. Fai attenzione se hai più di una asserzione, visto che la prima asserzione fallita determinerà i valori di --fcc-expected-- e fcc-actual--.
+
+```js
+assert.equal(
+ 'this will replace --fcc-actual--',
+ 'this will replace --fcc-expected--'
+);
+```
+
+# --notes--
+
+Ulteriori informazioni per una sfida, in markdown
+
+# --seed--
+
+## --before-user-code--
+
+```lang
+Codice eseguito prima del codice dell'utente.
+```
+
+## --after-user-code--
+
+```lang
+Codice eseguito dopo il codice dell'utente, ma prima dei test
+```
+
+## --seed-contents--
+
+Codice di partenza da far apparire nell'editor. Questa sezione deve contenere solo codice in backtick, come il seguente:
+
+```html
+
+ Hello world!
+
+```
+
+```css
+body {
+ margin: 0;
+ background-color: #3a3240;
+}
+
+.main-text {
+ color: #aea8d3;
+}
+```
+
+```js
+console.log('freeCodeCamp is awesome!');
+```
+
+# --solutions--
+
+Le soluzioni sono usate dai test CI per assicurarsi che i cambiamenti alla sezione hints facciano eseguire i test correttamente
+
+```js
+// prima soluzione - il linguaggio deve combaciare con il seed.
+```
+
+---
+
+```js
+// seconda soluzione - quindi se il seed è scritto in HTML...
+```
+
+---
+
+```js
+// terza soluzione ecc. - La tua soluzione deve essere in HTML.
+```
+
+# --assignments--
+
+This will show a checkbox that campers have to check before completing a challenge
+
+---
+
+This will show another checkbox that campers have to check before completing a challenge
+
+# --question--
+
+These fields are currently used for the multiple-choice Python challenges.
+
+## --text--
+
+The question text goes here.
+
+## --answers--
+
+Answer 1
+
+### --feedback--
+
+This will be shown as feedback when campers guess this answer
+
+---
+
+Answer 2
+
+---
+
+More answers
+
+## --video-solution--
+
+The number for the correct answer goes here.
+
+# --fillInTheBlank--
+
+These are for the English curriculum challenges.
+
+## --sentence--
+
+Sentence to be shown with with blanks that campers have to fill in. Example:
+
+`Hello, You _ the new graphic designer, _?`
+
+The two underscores will show up as blanks. The sentence must be surrounded in backticks.
+
+## --blanks--
+
+The solution for the first blank in the sentence above. Example:
+
+`are`
+
+### --feedback--
+
+Feedback shown when campers input the wrong solution for this blank.
+
+---
+
+Solution for the second blank. Example:
+
+`right`
+
+If no feedback is here, a generic "wrong answer" message will be shown.
+
+# --scene--
+
+```json
+// # --scene-- can only consist of a single json object
+{
+ // Setup the scene. Properties not marked optional are required.
+ "setup": {
+ // Background file to start the scene. A list of scene asset filenames can be found here: https://github.com/freeCodeCamp/cdn/pull/233/files
+ "background": "company2-center.png",
+ // Array of all characters that will appear in the scene
+ "characters": [
+ {
+ // Name of character. See list of available characters in scene-assets.tsx
+ "character": "Maria",
+ // Where to start the character. Maria will start off screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 }
+ },
+ {
+ "character": "Tom",
+ // Tom will start 70% from the left of the screen and 1.5 times regular size
+ "position": { "x": 70, "y": 0, "z": 1.5 },
+ // Optional, defaults to 1. Tom will start invisible
+ "opacity": 0
+ }
+ ],
+ "audio": {
+ // Audio filename
+ "filename": "1.1-1.mp3",
+ // Seconds after the scene starts before the audio starts playing
+ "startTime": 1.3,
+ // Optional. Timestamp of the audio file where it starts playing from.
+ "startTimestamp": 0,
+ // Optional. Timestamp of the audio file where is stops playing. If these two aren't used, the whole audio file will play.
+ "finishTimestamp": 8.4
+ },
+ // Optional, defaults to false. Use this for the long dialogues. It stops the accessibility icon from showing which gives campers the option to show or hide the dialogue text
+ "alwaysShowDialogue": true
+ },
+ // Array of commands that make up the scene
+ "commands": [
+ {
+ // Character that will have an action for this command
+ "character": "Maria",
+ // Optional, defaults to previous value. Maria will move to 25% from the left of the screen. The movement takes 0.5 seconds
+ "position": { "x": 25, "y": 0, "z": 1 },
+ // When the command will start. Zero seconds after the camper presses play
+ "startTime": 0
+ },
+ {
+ "character": "Tom",
+ // Optional, defaults to previous value. Tom will fade into view. The transition take 0.5 seconds. Movement and Opacity transitions take 0.5 seconds
+ "opacity": 1,
+ // Tom will fade into view 0.5 seconds into the scene (immediately after Maria finishes moving on screen)
+ "startTime": 0.5
+ },
+ {
+ "character": "Maria",
+ // When the command starts: Maria will start saying this line 1.3 seconds into the scene. Note that this is the same time as the audio.startTime above. It doesn't have to match that (maybe there's a pause at the beginning of the audio or something)
+ "startTime": 1.3,
+ // The character will stop moving their mouth at the finishTime
+ "finishTime": 4.95,
+ "dialogue": {
+ // Text that will appear if the dialogue is visible
+ "text": "Hello! You're the new graphic designer, right? I'm Maria, the team lead.",
+ // Where the dialogue text will be aligned. Can be 'left', 'center', or 'right'
+ "align": "left"
+ }
+ },
+ {
+ // background will change to this at 5.4 seconds into the scene
+ "background": "company2-breakroom.png",
+ "character": "Tom",
+ "startTime": 5.4,
+ "finishTime": 9.4,
+ "dialogue": {
+ "text": "Hi, that's right! I'm Tom McKenzie. It's a pleasure to meet you.",
+ // Tom's text will be aligned to the right since he is on the right side of the screen
+ "align": "right"
+ }
+ },
+ {
+ "character": "Tom",
+ // Tom will fade to 0 opacity
+ "opacity": 0,
+ // I like to move characters off screen or fade them 0.5 second after the last talking command
+ "startTime": 9.9
+ },
+ {
+ "character": "Maria",
+ // Maria will slide back off the screen to the left
+ "position": { "x": -25, "y": 0, "z": 1 },
+ // The animation will stop playing 0.5 seconds after the 'finishTime' of the last command - or 0.5 seconds after 'startTime' if 'finishTime' isn't there.
+ "startTime": 10.4
+ }
+ ]
+}
+```
+
+````
+
+> [!NOTE]
+>
+> 1. Nella sezione sopra, esempi di `lang` sono:
+>
+> - `html` - HTML/CSS
+> - `js` - JavaScript
+> - `jsx` - JSX
+
+## Numerare le sfide
+
+Ogni sfida ha bisogno di un `id`. Se non ne specifichi uno, MongoDB creerà un nuovo id casuale salvando i dati; ma non vogliamo che questo accada, visto che vogliamo che gli id delle sfide siano consistenti su tutti i diversi ambienti (staging, production, diversi sviluppatori, ecc.).
+
+Per generarne un nuovo in una shell (assumendo che MongoDB sia eseguito separatamente):
+
+1. Esegui il comando `mongo`.
+2. Esegui il comando `ObjectId()`.
+
+Per esempio:
+
+```bash
+$ mongo
+MongoDB shell version v3.6.1
+connecting to: mongodb://127.0.0.1:27017
+MongoDB server version: 3.4.10
+...
+$ ObjectId()
+ObjectId("5a474d78df58bafeb3535d34")
+````
+
+The result is a new id, for example, `5a474d78df58bafeb3535d34` above.
+
+Once you have your id, put it into the markdown file as the `id` field at the top, e.g.
+
+```yml
+---
+id: 5a474d78df58bafeb3535d34
+title: Challenge Title
+```
+
+## Dare un nome alle sfide
+
+Naming things is hard. We've made it easier by imposing some constraints.
+
+All challenge titles should be explicit and should follow this pattern:
+
+\[verb\]\[object clause\]
+
+Here are some example challenge names:
+
+- Usare la notazione in senso orario per specificare il padding di un elemento
+- Condensare array usando .reduce
+- Usare la notazione a parentesi per trovare il primo carattere in una stringa
+
+## Istruzioni e descrizione di una sfida
+
+Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English.
+
+Keep paragraphs short (around 1-4 sentences). People are more likely to read several short paragraphs than a wall of text.
+
+Use american english, e.g., use `labeled` instead of `labelled`.
+
+Challenge text should use the second person ("you") to help to give it a conversational tone. This way the text and instructions seem to speak directly to the camper working through the challenge. Try to avoid using the first person ("I", "we", "let's", and "us").
+
+Don't use outbound links. These interrupt the flow. Campers should never have to google anything during these challenges. If there are resources you think campers would benefit from, add them to the challenge's Guide-related article.
+
+You can add diagrams if necessary.
+
+Don't use emojis or emoticons in challenges. freeCodeCamp has a global community, and the cultural meaning of an emoji or emoticon may be different around the world. Also, emojis can render differently on different systems.
+
+Proper nouns should use correct capitalization when possible. Below is a list of words as they should appear in the challenges.
+
+- JavaScript (lettere maiuscole in "J" e "S" e senza abbreviazioni)
+- Node.js
+- Anche se a volte inaccurate, le forme senza trattino di "back end" e "front end" dovrebbero essere usate, poiché sono le forme più comuni.
+
+### The 2-minute rule
+
+Each challenge should be solvable within 120 seconds by a native English speaker who has completed the challenges leading up to it. This includes the amount of time it takes to read the directions/instructions understand the seeded code, write their code and get all the tests to pass.
+
+If it takes longer than two minutes to complete the challenge, you have two options:
+
+- Semplificare la sfida, o
+- Dividere la sfida in due sfide.
+
+The 2-minute rule forces you, the challenge designer, to make your directions concise, your seed code clear, and your tests straightforward.
+
+We track how long it takes for campers to solve challenges and use this information to identify challenges that need to be simplified or split.
+
+### Modularity
+
+Each challenge should teach exactly one concept, and that concept should be apparent from the challenge's name.
+
+We can reinforce previously covered concepts through repetition and variations - for example, introducing h1 elements in one challenge, then h3 elements a few challenges later.
+
+Our goal is to have thousands of 2-minute challenges. These can flow together and reiterate previously-covered concepts.
+
+### Formatting challenge text
+
+Here are specific formatting guidelines for challenge text and examples:
+
+- Le parole chiave del linguaggio vanno in `` \` `` backtick. Per esempio i nomi dei tag HTML o i nomi delle proprietà CSS.
+- Riferimenti a parti di codice (come nomi di funzioni, metodi o variabili) dovrebbero essere in `` \` `` backtick. Vedi gli esempi seguenti:
+
+```md
+Usa `parseInt` per convertire la variabile `realNumber` a un numero intero.
+```
+
+- I riferimenti a nomi di file o percorsi di cartelle (come `package.json`, `src/components`) dovrebbero essere in `` \` `` backtick.
+- I blocchi di codice multi-riga **devono essere preceduti da una riga vuota**. La riga successiva deve iniziare con tre backticks seguiti immediatamente da uno dei [linguaggi supportati](https://prismjs.com/#supported-languages). To complete the code block, you must start a new line that only has three backticks and **another empty line**. Vedi l'esempio seguente:
+- Gli spazi bianchi hanno significato in Markdown, raccomandiamo di renderli visibili nel tuo editor.
+
+**Note:** If you are going to use an example code in YAML, use `yaml` instead of `yml` for the language to the right of the backticks.
+
+The following is an example of code:
+
+````md
+```{language}
+
+[IL TUO CODICE QUI]
+```
+````
+
+````
+
+- Informazioni aggiuntive nella forma di una nota dovrebbero essere circondate da linee vuote, e formattate così: `**Note:** Resto del testo della nota...`
+- Se è necessaria più di una nota, elencale in frasi separate usando il formato: `**Notes:** Testo della prima nota. Second note text.`
+- Use single quotes where applicable
+
+**Note:** The equivalent _Markdown_ should be used in place of _HTML_ tags.
+
+## Scrivere i test
+
+Le sfide dovrebbero avere il numero minimo di test per verificare che un camper abbia compreso il concetto della sfida.
+
+Il nostro obbiettivo è comunicare il singolo punto che la sfida sta cercando di insegnare, e testare che abbiano capito il punto.
+
+I test delle sfide possono fare uso delle librerie di asserzioni Node.js e Chai.js. E, se necessario, il codice generato dall'utente può essere acceduto dalla variabile `code`. In aggiunta, l'oggetto `__helpers` mette a disposizione diverse funzioni che semplificano il processo di scrittura dei test. The available functions are defined in the [curriculum-helpers](https://github.com/freeCodeCamp/curriculum-helpers/blob/main/lib/index.ts) repo.
+
+## Formatting Seed Code
+
+Here are specific formatting guidelines for the challenge seed code:
+
+- Use two spaces to indent
+- JavaScript statements end with a semicolon
+- Use double quotes where applicable
+
+### Seed Code Comments
+
+We have a [comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) that contains the only comments that can be used within the seed code. I commenti devono essere usati esattamente in quel modo, ricopiando maiuscole, minuscole, e spazi. Il dizionario dei commenti non deve essere allargato senza previa discussione con il team di sviluppo.
+
+I commenti dovrebbero avere uno spazio tra il carattere del commento e il testo del commento. In generale, i commenti dovrebbero essere usati raramente. Considera sempre la possibilità di riscrivere la descrizione o le istruzioni di una sfida se questo ti permetterebbe di evitare l'uso di un commento nel codice seed.
+
+Example of a valid single-line JavaScript comment:
+
+```js
+// Only change code below this line
+````
+
+Example of a valid CSS comment:
+
+```css
+/* Only change code above this line */
+```
+
+If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made.
+
+```js
+var a = 3;
+var b = 17;
+var c = 12;
+
+// Only change code below this line
+a = a + 12;
+b = 9 + b;
+c = c + 7;
+```
+
+If a challenge has multiple places where the user is expected to change code (i.e. the React challenges)
+
+```jsx
+class MyComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ text: 'Hello'
+ };
+ // Change code below this line
+
+ // Change code above this line
+ }
+ handleClick() {
+ this.setState({
+ text: 'You clicked!'
+ });
+ }
+ render() {
+ return (
+
+ {/* Change code below this line */}
+
+ {/* Change code above this line */}
+ {this.state.text}
+
+ );
+ }
+}
+```
+
+### Translation of Seed Code Comments
+
+There are separate comment dictionaries for each language. The [English version of the comment dictionary](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/curriculum/dictionaries/english/comments.json) is the basis for the translations found in the corresponding non-English versions of the files. The non-English version of the Chinese comment dictionary would be located at `/curriculum/dictionaries/chinese/comments.json`. Each dictionary consists of an array of objects with a unique `id` property and a `text` property. Only the `text` should be modified to encompass the translation of the corresponding English comment.
+
+Some comments may contain a word/phrase that should not be translated. For example, variable names or proper library names like "React" should not be translated. See the comment below as an example. The word `myGlobal` should not be translated.
+
+```text
+Declare the myGlobal variable below this line
+```
+
+> [!NOTE]
+>
+> Stiamo lavorando su un'integrazione per rendere possibile lavorare su i18n per il dizionario dei commenti.
+
+## Suggerimenti e soluzioni
+
+Each challenge has a `Get a Hint` button, so a user can access any hints/solutions which have been created for the challenge. Curriculum hints/solutions topics are located on [our forum](https://forum.freecodecamp.org/c/guide) under the `Guide` category.
+
+If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic.
+
+### Adding new Challenge hints/solutions Topics
+
+Take the following steps when adding a new challenge hints/solutions-related topic.
+
+1. Inizia seguendo gli stessi passaggi per creare un nuovo argomento, ma rivedi il successivo per creare il titolo.
+2. Il titolo dell'argomento dovrebbe iniziare con `freeCodeCamp Challenge Guide:` concatenato con il titolo effettivo della sfida del curriculum. Ad esempio, se la sfida è chiamata "`Chunky Monkey`", il titolo dell'argomento sarebbe "`freeCodeCamp Challenge Guide: Chunky Monkey`".
+3. `camperbot` dovrebbe essere il proprietario di questi argomenti/post, quindi dovrai chiedere a un amministratore di cambiare la proprietà del post principale a `camperbot`.
+4. Una volta creato il nuovo argomento, verrà creato un id del topic nel forum. Esso si trova alla fine dell'URL dell'argomento del forum. Questo id deve essere aggiunto alla parte frontale del file di sfida del curriculum tramite il normale processo di pull request per il pulsante `Ottieni un suggerimento` in modo da collegarlo all'argomento.
+
+### Guidelines for Content of Hints and Solutions Topics
+
+When proposing a solution for a curriculum challenge-related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics:
+
+````md
+# [Qui il nome della sfida]
+
+---
+
+## Spiegazione del problema
+
+Qui un riassunto di cosa deve essere fatto senza includere semplicemente le istruzioni e la descrizione della sfida. [This is an optional section]
+
+#### Relevant Links
+
+- [Link Text](link_url_goes_here)
+- [Link Text](link_url_goes_here)
+
+---
+
+## Hints
+
+### Hint 1
+
+[Suggerimento 1 va qui]
+
+### Hint 2
+
+[Suggerimento va qui]
+
+---
+
+## Solutions
+
+Solution 1 (Click to Show/Hide)
+
+```js
+function myFunc() {
+ console.log('Hello World!');
+}
+```
+````
+
+#### Spiegazione Del Codice
+
+- La spiegazione del codice va qui
+- La spiegazione del codice va qui
+
+#### Collegamenti utili
+
+- [Testo del collegamento](link_url_goes_here)
+- [Testo Collegamento](link_url_goes_here)
+
+
+````
+
+## Testare le sfide
+
+Prima di [creare una pull request](how-to-open-a-pull-request), devi verificare che i cambiamenti che hai fatto non causino inavvertitamente problemi con la sfida.
+
+1. Per testare tutte le sfide esegui il comando seguente nella directory root
+
+````
+pnpm run test:curriculum
+```
+
+2. To test single challenge, you can use it challenge id with following command
+
+```
+FCC_CHALLENGE_ID=646cf6cbca98e258da65c979 pnpm run test:curriculum
+```
+
+3. You can also test a block or a superblock of challenges with these commands
+
+```
+FCC_BLOCK='Basic HTML and HTML5' pnpm run test:curriculum
+```
+
+```
+FCC_SUPERBLOCK='responsive-web-design' pnpm run test:curriculum
+```
+
+You are also able to test challenges by title by performing the following steps:
+
+1. Switch to the `curriculum` directory:
+
+ ```
+ cd curriculum
+ ```
+
+2. Run the following for each challenge file for which you have changed (replacing `challenge-title-goes-here` with the full title of the challenge):
+
+ ```
+ pnpm run test -- -g challenge-title-goes-here
+ ```
+
+> [!TIP]
+> You can set the environment variable `LOCALE` in the `.env` to the language of the challenge(s) you need to test.
+>
+> The currently accepted values are `english` and `chinese`, with `english` being set by default.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Useful Links
+
+Creating and Editing Challenges:
+
+1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/client/utils/challenge-types.js#L1-L13) - what the numeric challenge type values mean (enum).
+
+2. [Contributing to FreeCodeCamp - Writing ES6 Challenge Tests](https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s) - a video following [Ethan Arrowood](https://twitter.com/ArrowoodTech) as he contributes to the old version of the curriculum.
+
+## Helper Scripts
+
+> [!NOTE]
+> If you are working with the step-based challenges, refer to the [Work on Practice Projects](how-to-work-on-practice-projects) section.
+
+There are a few helper scripts that can be used to manage the challenges in a block. Note that these commands should all be run in the block directory. For example:
+
+```bash
+cd curriculum/challenges/english/02-javascript-algorithms-and-data-structures/basic-algorithm-scripting
+```
+
+### Add New Challenge
+
+To add a new challenge at the end of a block, call the script:
+
+```bash
+pnpm run create-next-challenge
+```
+
+This will prompt you for the challenge information and create the challenge file, updating the `meta.json` file with the new challenge information.
+
+### Delete a Challenge
+
+To delete a challenge, call the script:
+
+```bash
+pnpm run delete-challenge
+```
+
+This will prompt you to select which challenge should be deleted, then delete the file and update the `meta.json` file to remove the challenge from the order.
+
+### Insert a Challenge
+
+To insert a challenge before an existing challenge, call the script:
+
+```bash
+pnpm run insert-challenge
+```
+
+This will prompt you for the challenge information, then for the challenge to insert before. For example, if your choices are:
+
+```bash
+a
+b
+c
+```
+
+If you choose `b`, your new order will be:
+
+```bash
+a
+new challenge
+b
+c
+```
+
+### Update Challenge Order
+
+If you need to manually re-order the challenges, call the script:
+
+```bash
+pnpm run update-challenge-order
+```
+
+This will take you through an interactive process to select the order of the challenges.
+
+## Troubleshooting
+
+### Infinite Loop Detected
+
+If you see the following error in the console while previewing a challenge:
+
+```text
+Potential infinite loop detected on line ...
+```
+
+This means that the loop-protect plugin has found a long-running loop or recursive function. If your challenge needs to do that (e.g. it contains an event loop that is supposed to run indefinitely), then you can prevent the plugin from being used in the preview. To do so, add `disableLoopProtectPreview: true` to the block's `meta.json` file.
+
+If your tests are computationally intensive, then you may see this error when they run. If this happens then you can add `disableLoopProtectTests: true` to the block's `meta.json` file.
+
+It's not typically necessary to have both set to true, so only set them as needed.
+````
diff --git a/src/content/docs/it/how-to-work-on-localized-client-webapp.md b/src/content/docs/it/how-to-work-on-localized-client-webapp.md
new file mode 100644
index 00000000..dba8a919
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-localized-client-webapp.md
@@ -0,0 +1,284 @@
+---
+title: How to Work on Localized Client Webapp
+---
+
+The React-based client web app that powers our learning platform is built using Gatsby. È tradotta in varie lingue internazionali usando [react-i18next](https://react.i18next.com/) e [i18next](https://www.i18next.com/).
+
+Puoi scoprire di più su come configurare l'applicazione client localmente per lo sviluppo seguendo [la nostra guida alla configurazione in locale](how-to-setup-freecodecamp-locally). By default, the application is available only in English.
+
+Once you have set up the project locally you should be able to follow this documentation to run the client in the language of your choice from the list of available languages.
+
+Questo può essere utile quando stai lavorando su una caratteristica che riguarda specificatamente qualcosa che coinvolge la localizzazione e ti richiede ad esempio l'etichetta di un bottone in una lingua diversa.
+
+:::tip
+You do not need to follow this document to translate freeCodeCamp's curriculum or contributing documentation. Invece, leggi [questa guida](how-to-translate-files).
+:::
+
+Andiamo a vedere come funzionano il framework e gli strumenti.
+
+## Struttura dei file
+
+Most of the files for translating the platform are located in the [`client/i18n`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/client/i18n) folder. Each language has a directory that contains JSON files with the translations.
+
+```bash
+ config
+ └── i18n.ts
+ ...
+ client/i18n
+ ├── configForTests.js
+ ├── config.js
+ ├── locales
+ │ ├── chinese
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── dothraki
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ ... ...
+ │ ├── english
+ │ │ ├── intro.json
+ │ │ ├── links.json
+ │ │ ├── meta-tags.json
+ │ │ ├── motivation.json
+ │ │ └── translations.json
+ │ └── espanol
+ │ ├── intro.json
+ │ ├── links.json
+ │ ├── meta-tags.json
+ │ ├── motivation.json
+ │ └── translations.json
+ ├── locales.test.js
+ ├── schema-validation.js
+ └── validate-keys.ts
+```
+
+Some of these files are translated on our translation platform (Crowdin) and some are translated or created via PRs on GitHub.
+
+**File tradotti con la nostra piattaforma di traduzione:**
+
+- Il file `translations.json` contiene la maggior parte del testo che compare sugli elementi dell'interfaccia utente. Le chiavi sono usate nel codice per ottenere i testo corretto per qualunque lingua sia impostata. This file needs to have the same keys in all languages.
+
+- Il file `intro.json` contiene le coppie chiave-valore relative al testo introduttivo sulle pagine delle certificazioni.
+
+ Se vuoi aggiungere/aggiornare le traduzioni per le chiavi, per favore [leggi questa guida](how-to-translate-files).
+
+**File NON tradotti con la nostra piattaforma di traduzione:**
+
+- I file `motivation.json` non devono avere per forza le stesse frasi, complimenti o lunghezze degli array. Basta che abbiano la stessa struttura JSON.
+
+- Il file `meta-tags.json` contiene le informazioni per il tag meta del nostro sito.
+
+ I cambiamenti su questi file sono tipicamente fatti dallo staff. Se vedi qualcosa fuori dall'ordinario, ti raccomandiamo di metterti in contatto con noi sulla [chat dei contributori](https://discord.gg/PRyKn3Vbay).
+
+## Testing the Client App in a World Language
+
+You can test the client app in any language available in the [list of `availableLangs` here](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts).
+
+```js
+export const availableLangs = {
+ client: [
+ Languages.English,
+ Languages.Espanol,
+ Languages.Chinese,
+ Languages.ChineseTraditional,
+ Languages.Italian,
+ Languages.Portuguese,
+ Languages.Ukrainian,
+ Languages.Japanese,
+ Languages.German,
+ Languages.Arabic
+ ],
+ ...
+};
+```
+
+Se stai testando una nuova lingua, crea una cartella con il nome della lingua come titolo accanto alle altre lingue e copia i file JSON da un'altra lingua alla tua cartella.
+
+Add the new language to the `Languages` enum and the `client` array at the top of the [`shared/config/i18n.ts`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/i18n.ts) file.
+
+Successivamente, segui le istruzioni nei commenti nello stesso file per aggiungere/aggiornare il resto delle variabili secondo necessità.
+
+Infine, imposta la variabile `CLIENT_LOCALE` nel tuo file `.env` con la stringa della lingua di cui vuoi eseguire il build dall'enum `Languages` nel file qui sopra.
+
+## Come strutturare i componenti
+
+Se stai lavorando su una caratteristica o un bug per la client web app, ad esempio aggiungendo nuovi elementi di interfaccia utente sulla pagina delle impostazioni, dovresti seguire le linee guida qui sotto. Ti aiuteranno a preparare i componenti per la localizzazione in tutte le lingue supportate.
+
+### Componenti funzionali
+
+```js
+import { useTranslation } from 'react-i18next';
+
+// nel metodo render:
+const { t } = useTranslation();
+
+// chiama la funzione "t" con una chiave dal file JSON:
+{t('key')}
; // altri dettagli sotto
+```
+
+### Componenti classe
+
+```js
+import { withTranslation } from 'react-i18next';
+
+// withTranslation aggiunge la funzione "t" alle props:
+const { t } = this.props;
+
+// chiama la funzione "t" con una chiave dal file JSON:
+{t('key')}
// più dettagli sotto
+
+// esporta senza redux:
+export default withTranslation()(Component);
+
+// o con redux:
+export default connect(...)(withTranslation()(Component));
+```
+
+## Tradurre usando la funzione "t"
+
+### Traduzione di base
+
+```js
+// nel componente:
+{t('p1')}
+
+// nel file JSON:
+{
+ "p1": "My paragraph"
+}
+
+// output:
+My paragraph
+```
+
+### Con dati dinamici
+
+```js
+// nel componente:
+const username = 'moT';
+
+{t('welcome', { username: username })}
+
+// nel file JSON:
+{
+ "welcome": "Welcome {{username}}"
+}
+
+// output:
+Welcome moT
+```
+
+L'esempio qui sopra passa alla funzione `t` un oggetto con una variabile `username`. La variabile verrà usata nel valore JSON al posto di `{{username}}`.
+
+## Traduci con il componente `Trans`
+
+La regola generale è usare la funzione "t" quando puoi. Ma c'è un componente `Trans` per quando questo non basta, solitamente quando hai elementi incorporati nel testo. Puoi usare il componente `Trans` con ogni tipo di componente react.
+
+### Elementi di base annidati
+
+```js
+// nel componente:
+import { Trans } from 'react-i18next'
+
+
+ fcc.greeting
+
+
+// nel file JSON:
+{
+ "fcc": {
+ "greeting": "Welcome to freeCodeCamp"
+ }
+}
+
+// output:
+Welcome to freeCodeCamp
+```
+
+You can place the key inside the component tags like in the above example if the text contains "simple" tags with no attributes. `br`, `strong`, `i`, e `p` sono quelli predefiniti, ma la lista può essere ampliata nel file i18n config.
+
+### Elementi complessi annidati
+
+Altre volte, vorrai avere un certo testo all'interno di un altro elemento, un buon esempio è il tag anchor:
+
+```js
+// nel componente:
+
+
+ placeholder
+
+
+
+// nel file JSON:
+{
+ "check-forum": "Check out <0>our forum0>."
+}
+
+// output:
+Check out our forum
+```
+
+Nell'esempio sopra, la chiave è impostata negli attributi del componente `Trans`. I tag `<0>` e `0>` nel JSON rappresentano il primo figlio del componente, in questo caso l'elemento anchor. Se ci fossero più elementi figli, verrebbero contati a partire da lì, usando la stessa sintassi. Puoi trovare i figli di un componente negli strumenti per sviluppatori react ispezionandolo. `placeholder` è lì semplicemente perché il linter protesterebbe per un elemento `` lasciato vuoto.
+
+### Con una variabile
+
+```js
+// nel componente:
+const email = 'team@freecodecamp.org';
+
+
+
+
+ {{ email }}
+
+
+
+
+// nel file JSON:
+{
+ "fcc": {
+ "email": "Send us an email at: <0>{{email}}0>"
+ }
+}
+
+// output:
+Send us an email at: team@freecodecamp.org
+```
+
+Nell'esempio sopra, la chiave e una variabile sono impostate negli attributi del componente `Trans`. Anche `{{ email }}` deve essere da qualche parte nel componente `Trans`, non importa dove.
+
+## Cambiare il testo
+
+Per cambiare il testo sul lato client, vai al relativo file `.json`, trova la chiave che viene usata nel componente React e cambiane il valore con il nuovo testo che vuoi. Dovresti cercare quella chiave nel codice, per assicurarti che non venga usata da qualche altra parte. O, se lo è, che il cambiamento abbia senso ovunque.
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Aggiungere testo
+
+Se il testo che vuoi aggiungere al client esiste nel relativo file `.json`, usa la chiave esistente. Altrimenti, crea un'altra chiave.
+
+Il file in inglese è la "fonte della verità" per tutti i file `.json` che condividono lo stesso nome. Se hai bisogno di aggiungere una nuova chiave, aggiungila lì. Dopodiché, aggiungi la chiave a **tutti** i file `translations.json`.
+
+> [!NOTE] Usa del testo in inglese per tutte le lingue se il file è tradotto tramite Crowdin. Se non lo fai, i test falliranno.
+
+Sarebbe utile anche tenere tutte le chiavi nello stesso ordine in tutti i file. Also, try to put all punctuation, spacing, quotes, etc. in the JSON files and not in the components or server files.
+
+> [!NOTE] The underscore (`_`) is a reserved character for keys in the client-side files. Vedi [la documentazione](https://www.i18next.com/translation-function/plurals) per il suo utilizzo.
+
+Run `pnpm run clean-and-develop` to apply the change.
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Helpful Documentation
+
+- [Documentazione react-i18next ](https://react.i18next.com/latest/usetranslation-hook)
+- [Documentazione i18next](https://www.i18next.com/translation-function/essentials)
diff --git a/src/content/docs/it/how-to-work-on-practice-projects.md b/src/content/docs/it/how-to-work-on-practice-projects.md
new file mode 100644
index 00000000..d45477a5
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-practice-projects.md
@@ -0,0 +1,155 @@
+---
+title: Come lavorare sui progetti di pratica
+---
+
+I nostri progetti di pratica utilizzano un approccio graduale per insegnare concetti agli studenti. Un progetto consisterà in vari file, ai quali ci riferiamo come **"step"**. Questi file sono identificati dall'ID della sfida, per evitare problemi con il processo di traduzione. Sfortunatamente, questo rende difficile trovare il file associato a uno step specifico.
+
+Abbiamo costruito uno strumento editor per le sfide per rimediare a questo problema. Questo strumento consente di navigare nei progetti disponibili e negli step di ogni progetto (in ordine). Inoltre è presente un editor di codice incorporato che puoi utilizzare per lavorare direttamente sui file.
+
+## Usare l'editor per le sfide
+
+Queste istruzioni ti diranno come utilizzare il nostro strumento editor per le sfide per lavorare sui progetti per fare pratica.
+
+### Avviare l'editor
+
+To start the editor, make sure you are in the root freeCodeCamp directory. Poi esegui `pnpm run challenge-editor` per avviare sia il client che l'API di cui fa uso l'editor.
+
+Il client verrà avviato sulla porta `3300`, così puoi accedervi su `http://localhost:3300`. L'API gira sulla porta `3200`, per evitare conflitti con il client learn e con il server. Questo ti permetterà di eseguire l'applicazione freeCodeCamp contemporaneamente all'editor, in modo che tu possa testare le tue modifiche localmente.
+
+### Navigare nell'editor
+
+La visualizzazione predefinita elencherà i `superblocks` disponibili - ovvero le certificazioni. Clicca sul link della certificazione sulla quale vuoi lavorare.
+
+Verrai portato all'elenco dei blocchi. Questi sono i progetti per fare pratica. Clicca sul link del progetto sul quale vuoi lavorare.
+
+Verrai indirizzato alla lista con gli step del progetto. Se stai lavorando su uno step esistente puoi cliccare sul link dello step per aprire l'editor. Se stai aggiungendo o rimuovendo step clicca il link `Use the step tools` per passare agli strumenti degli step per quella sfida.
+
+### Modificare gli step
+
+Quando clicchi sullo step verrai portato sull'editor. Questo è un editor di testo di base che permette la colorazione della sintassi.
+
+Dopo aver apportato le modifiche, clicca sul pulsante `Save Changes` per salvarle. Riceverai un avviso dal browser che ti comunica che le tue modifiche sono pronte per il commit. Nota che dovrai utilizzare manualmente `git` per aggiungere i file all'area di staging e per fare commit - questo strumento non lo farà per te.
+
+### Strumenti degli step
+
+Quando fai clic sul link `Use the step tools`, sarai portato sulla pagina degli strumenti degli step. Da qui potrai aggiungere o rimuovere gli step dal progetto.
+
+#### Creare uno step successivo
+
+Cliccando questo pulsante aggiungerai un nuovo step alla fine del progetto. Questo step utilizzerà il precedente step come seed.
+
+#### Creare step vuoti
+
+Inserisci nell'input il numero di step che vuoi aggiungere. Then, clicking the button will create many empty steps at the end of the project.
+
+#### Inserire uno step
+
+Inserisci il numero dello step che vuoi eliminare. Poi, clicca sul pulsante `Insert Step` per aggiungere lo step. Gli step successivi verranno riordinati.
+
+#### Eliminare uno step
+
+Inserisci il numero dello step che vuoi eliminare. Poi clicca il pulsante `Delete Step` per eliminarlo. In questo modo, il numero degli step rimanenti verrà aggiornato automaticamente.
+
+#### Aggiornare i titoli degli step
+
+Non dovresti usare questo strumento a meno che tu non abbia manualmente cancellato o aggiunto degli step. Questo strumento riordinerà i numeri degli step.
+
+## Usare gli script manualmente
+
+Se desideri lavorare sugli step manualmente, nel tuo IDE locale, puoi eseguire direttamente gli script di gestione degli step.
+
+La cartella `tools/challenge-helper-scripts` contiene strumenti per aiutare a facilitare la creazione e il mantenimento del curriculum basato su progetti di freeCodeCamp.
+
+### Create a New Project
+
+Change directory to `tools/challenge-helper-scripts` and run `pnpm run create-project`. This opens up a command line UI that guides you through the process. Una volta finito, dovrebbe esserci una nuova sfida nel curriculum inglese che puoi usare come primo passo del progetto. Ad esempio, se hai creato un progetto chiamato `test-project` nella certificazione Web Design Responsivo, sarebbe in `curriculum/challenges/english/01-responsive-web-design/test-project`.
+
+Se vuoi creare nuovi step, i seguenti strumenti semplificano il processo.
+
+### create-next-step
+
+Uno script una tantum che aggiungerà automaticamente lo step successivo in base all'ultimo step del progetto. Il codice seed della sfida userà il codice seed di quella precedente.
+
+#### How to Run the Script
+
+1. Vai alla directory del progetto.
+2. Esegui il seguente comando:
+
+```bash
+pnpm run create-next-step
+```
+
+### create-empty-steps
+
+Uno script eseguito una sola volta che aggiunge automaticamente un determinato numero di step. Il codice seed della sfida per tutti gli step creati sarà vuoto.
+
+**Nota:** Questo script esegue anche [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Vai alla directory del progetto.
+2. Esegui il seguente comando:
+
+```bash
+pnpm run create-empty-steps X # dove X è il numero di step da creare.
+```
+
+### insert-step
+
+Uno script una tantum che aggiunge automaticamente un nuovo step in una posizione specificata, incrementando tutti gli step successivi (sia i loro titoli che in meta.json). Il codice seed della sfida userà il codice seed di quella precedente, rimuovendo i marcatori delle regioni editabili (MRE).
+
+**Nota:** Questo script esegue anche [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Vai alla directory del progetto.
+2. Esegui il seguente comando:
+
+```bash
+pnpm run insert-step X # dove X è la posizione in cui inserire il nuovo step.
+```
+
+### delete-step
+
+Uno script una tantum che rimuove uno step esistente, decrementando tutti gli step successivi (sia i loro titoli che in meta.json)
+
+**Nota:** Questo script esegue anche [update-step-titles](#update-step-titles).
+
+#### How to Run the Script
+
+1. Vai alla directory del progetto.
+2. Esegui il seguente comando:
+
+```bash
+pnpm run delete-step X # dove X è il numero dello step da eliminare.
+```
+
+### update-step-titles
+
+Uno script una tantum che aggiorna automaticamente il frontmatter nei file di markdown di un progetto in modo che siano coerenti con il progetto meta.json. It ensures that each step's title (and dashedName) matches the meta's `challengeOrder`.
+
+#### How to Run the Script
+
+1. Vai alla directory del progetto.
+2. Esegui il seguente comando:
+
+```bash
+pnpm run update-step-titles
+```
+
+### repair-meta
+
+One-off script to parse the step names from the project and update the meta.json order to reflect those steps. Useful if you've accidentally lost the changes to the meta.json file when adding/removing steps.
+
+#### How to Run the Script
+
+1. Change to the directory of the project.
+2. Run the following command:
+
+```bash
+pnpm run repair-meta
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/it/how-to-work-on-the-component-library.md b/src/content/docs/it/how-to-work-on-the-component-library.md
new file mode 100644
index 00000000..1aca07a0
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-the-component-library.md
@@ -0,0 +1,113 @@
+---
+title: Come lavorare sulla libreria dei componenti
+---
+
+Benvenuti nella libreria `ui-components` di freeCodeCamp. I componenti sono principalmente creati da zero con elementi HTML base e [Tailwind CSS](https://tailwindcss.com/).
+
+> [!NOTE]
+>
+> freeCodeCamp stava utilizzando componeti Bootstrap nell'UI. Ma, ci stiamo pian piano allontanando da ciò e creando la nostra libreria componenti, il che aiuta a standardizzare i pattern UI/UX e a migliorare l'accessibilità. Teniamo traccia del progetto in [questa issue su GitHub](https://github.com/freeCodeCamp/freeCodeCamp/issues/44668).
+
+I seguenti step sono raccomandati quando lavori su un nuovo componente:
+
+- Ricerca e pianificazione
+- Implementazione del componente
+- Visualizzazione degli use case in Storybook
+- Scrittura dei test unitari
+
+## Researching and Planning
+
+Prima di creare un componente, devi ricercare e documentare il comportamento e l'aspetto della versione esistente, per assicurarti che il nuovo componente combaci in stile e supporti tutti gli usi correnti. In modo da soddisfare tutti i requisiti di accessibilità web, dovresti prestare attenzione all'aspetto di accessibilità del componente, vedere quali elementi HTML e attributi ARIA sono usati.
+
+Una volta che hai raccolto abbastanza informazioni sul componente, puoi iniziare a pensare alle proprietà dell'interfaccia. Idealmente, l'interfaccia dovrebbe essere quanto più simile possibile alla versione corrente, per renderne più semplice l'adozione in futuro. Visto che stiamo usando componenti Bootstrap, l'approccio più semplice è mimare [la loro implementazione](https://github.com/react-bootstrap/react-bootstrap/tree/master/src).
+
+Preferiamo pull request piccole piuttosto che grandi, perché riducono la velocità di revisione e il carico cognitivo per i revisori. Per questa ragione dovresti pensare a come dividere l'implementazione in pezzi più piccoli e creare un piano di delivery.
+
+Raccomandiamo di aprire una issue su GitHub separata per ogni componente e includere tutte le note nella descrizione della issue. Può essere usato come posto per ospitare tutte le tue note di lavoro, come pure un modo per comunicare l'approccio con i revisori. Useremo i commenti dell'issue per discussioni ulteriori se necessario. [La issue per il componente Button](https://github.com/freeCodeCamp/freeCodeCamp/issues/45357) può essere usata come referenza.
+
+## Implementing the Component
+
+Un nuovo componente può essere creato usando i seguenti comandi dalla root directory:
+
+```bash
+cd tools/ui-components
+
+pnpm run gen-component MyComponent
+```
+
+Il comando genererà una nuova cartella dentro la directory `ui-components`, con i seguenti file:
+
+| Nome file | Scopo |
+| -------------------------- | ---------------------------------------------------- |
+| `index.ts` | Usato per esportare il componente e i suoi tipi. |
+| `my-component.stories.tsx` | Usato per fare la demo del componente con Storybook. |
+| `my-component.test.tsx` | file di test. |
+| `my-component.tsx` | Dove implementiamo il componente. |
+| `types.ts` | Dove mettiamo l'interfaccia e i tipi del componente. |
+
+Each component is different, but in general, a component should:
+
+- Supportare l'invio a ref
+- Essere stilizzato sia per il tema chiaro che scuro
+- Essere stilizzato internamente basato sulle proprietà (Il consumatore non dovrebbe avere bisogno di stilizzare il componente con la proprietà `className`)
+- Utilizzare il sistema integrato di stilizzazione di Tailwind invece di usare stili personalizzati
+
+### Using Colors
+
+Ci sono due strati di colori nella libreria dei componenti:
+
+- Lo strato base, dove i nomi dei colori descrivono cosa sono i colori, per esempio `gray00`, `blue50`
+- Lo strato semantico, dove i nomi dei colori descrivono lo scopo de colori, per esempio `foreground-primary`, `background-danger`
+
+Generally, when using colors in a component, you should choose semantic variables over the base ones. Però ci sono eccezioni, specialmente quando stai dando uno stile agli stati del componente, tipo hover, attivo, disabilitato, ecc. In these cases, we recommend using the base variables directly instead of creating new semantic variables, since each component can have different styles for its states.
+
+> [!NOTE] Le definizioni dei colori possono essere trovate nel [file `colors.css`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/src/colors.css). Un colore è disponibile per l'uso solo se è aggiunto al [file `tailwind.config.js`](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/tools/ui-components/tailwind.config.js) sotto la proprietà `colors`.
+
+### Useful Links
+
+- [Tailwind CSS Configuration](https://tailwindcss.com/docs/configuration)
+- [React Bootstrap v0.33 Docs](https://react-bootstrap-v3.netlify.app)
+- [Bootstrap 3.3.7 stylesheet](https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css)
+- [Implementazione corrente di React Bootstrap](https://github.com/react-bootstrap/react-bootstrap/tree/master/src)
+- [Test attuali di React Bootstrap](https://github.com/react-bootstrap/react-bootstrap/tree/master/test)
+
+## Displaying the Use Cases on Storybook
+
+Gli use case di un componente dovrebbero essere aggiunti al file Storybook (`.stories.tsx`).
+
+Per far partire Storybook, esegui i seguenti comandi dalla directory root:
+
+```bash
+pnpm run storybook
+```
+
+La pagina Storybook è disponibile a [http://localhost:6006](http://localhost:6006).
+
+## Writing Unit Tests
+
+Usiamo [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) per scrivere i test dell'unità. I test dovrebbero verificare che i componenti si comportano come previsto e sono accessibili.
+
+Per eseguire i test sulla libreria componenti, esegui il seguente comando dalla directory root:
+
+```bash
+pnpm run test-ui-components
+```
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
+
+## Adding Packages to the UI-Component Library
+
+We restrict adding new packages to the UI Components to help with the project's maintainability. In the rare chance that you think a dependency is needed, please check with the maintainers first and then use the following command to add a package:
+
+```bash
+cd tools/ui-components
+pnpm add package_name
+```
+
+## Useful Links
+
+- [Testare per accessibilità](https://testing-library.com/docs/dom-testing-library/api-accessibility)
+- [Ordine di priorità delle query di React Testing Library](https://testing-library.com/docs/queries/about/#priority)
+- [Errori comuni con React Testing Library](https://kentcdodds.com/blog/common-mistakes-with-react-testing-library)
diff --git a/src/content/docs/it/how-to-work-on-the-docs-theme.md b/src/content/docs/it/how-to-work-on-the-docs-theme.md
new file mode 100644
index 00000000..80457319
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-the-docs-theme.md
@@ -0,0 +1,60 @@
+---
+title: How to Work on Documentation
+---
+
+## Work on the Content of the Docs
+
+Per lavorare sulle linee guida per i contributori, puoi modificare o aggiungere file nella cartella `docs` [disponibile qui](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/docs). Quando i tuoi cambiamenti sono accettati, saranno resi disponibili automaticamente nel sito della documentazione.
+
+Quando aggiungi un nuovo file alla cartella `docs`, dovresti valutare se il file dovrebbe essere aggiunto anche alla barra laterale di navigazione. Generalmente creiamo un link nel file [`_sidebar.md`](_sidebar) per guide nuove e indipendenti. In alternativa, è possibile seguire le istruzioni qui sotto sulla creazione di un link interno per le guide di supporto.
+
+### How to Create an Internal Link
+
+Se vuoi creare un link che punta a una sezione diversa delle linee guida per contribuire, segui questo formato:
+
+```md
+[Link text](target-file-name#target-section-heading-id)
+
+// Se la sezione target è nella stessa pagina puoi omettere il nome del file
+[Link text](#target-section-heading-id)
+```
+
+Assicurati di includere l'estensione del file (`.md`). Non specificare l'URL completo o aggiungere `/` prima del nome del file.
+
+È necessario fare così per rendere questi link funzionanti anche nella versione tradotta del documento. Altrimenti, punterebbero alla versione inglese della pagina a discapito della lingua.
+
+#### Tradurre documentazione con link interni
+
+Quando lavori per tradurre la documentazione su Crowdin, assicurati di sostituire la parte `#target-section-heading-id` con l'id del documento tradotto. [Impara di più su come tradurre la documentazione qui](how-to-translate-files#tradurre-la-documentazione).
+
+## Work on the Docs Theme
+
+> [!NOTE] Non devi impostare nulla per lavorare sul contenuto della documentazione.
+>
+> Per lavorare sulle linee guida per la contribuzione, vedi [la sezione su come lavorare sul contenuto della documentazione](#work-on-the-docs-content).
+
+### Structure of the Docs Website
+
+Il sito viene generato utilizzando [`docsify`](https://docsify.js.org) e servito utilizzando le pagine di GitHub.
+
+In genere non è necessario modificare alcuna configurazione o costruire il sito localmente. Nel caso in cui tu sia interessato, ecco come funziona:
+
+- La sorgente della homepage per questo sito è disponibile in [`docs/index.html`](index.html).
+- Serviamo questo file come SPA (Single Page Application) usando `docsify` e GitHub Pages.
+- Lo script `docsify` genera il contenuto del `file markdown` nella directory `docs` su richiesta.
+- La homepage è generata dal file [`_coverpage.md`](_coverpage).
+- La barra laterale di navigazione è generata da [`_sidebar.md`](_sidebar).
+
+### Serving the Documentation Site Locally
+
+Install freeCodeCamp locally ([see the local setup guide](how-to-setup-freecodecamp-locally)), we bundled the CLI with the development tools so you can run the command below as needed from the root of the repo:
+
+```bash
+pnpm run docs:serve
+```
+
+> Il sito di documentazione dovrebbe essere disponibile su
+
+## Proposing a Pull Request (PR)
+
+After you've committed your changes, check here for [how to open a Pull Request](how-to-open-a-pull-request).
diff --git a/src/content/docs/it/how-to-work-on-the-news-theme.md b/src/content/docs/it/how-to-work-on-the-news-theme.md
new file mode 100644
index 00000000..1068eaca
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-the-news-theme.md
@@ -0,0 +1,102 @@
+---
+title: Come lavorare sul tema delle news degli sviluppatori di freeCodeCamp.org
+---
+
+Le notizie degli sviluppatori conosciute anche come il sito [`/news`](https://www.freecodecamp.org/news) è alimentato da [Ghost](https://ghost.org/). Usiamo un tema personalizzato per l'aspetto del sito. Il codice sorgente del tema è disponibile qui: .
+
+## Il Tema
+
+Ghost utilizza un semplice linguaggio di modellazione chiamato [Handlebars](http://handlebarsjs.com/) per i suoi temi. Il tema utilizzato su `/news` è basato sul [tema casper](https://github.com/TryGhost/Casper) predefinito.
+
+Il tema di default ha molti commenti così è abbastanza facile capire cosa sta succedendo semplicemente leggendo il codice e i commenti. Una volta che ti senti a tuo agio con il funzionamento del tutto, Ghost ha anche una completa [documentazione API per i temi](https://themes.ghost.org) che spiega ogni possibile helper Handlebars e modello.
+
+**I file principali sono:**
+
+- `default.hbs` - Il file del modello principale
+- `index.hbs` - Utilizzato per la home page
+- `post.hbs` - Utilizzato per singoli post
+- `page.hbs` - Utilizzato per singole pagine
+- `tag.hbs` - Utilizzato per archivi di tag
+- `author.hbs` - Utilizzato per archivi d'autore
+
+Uno trucco davvero pulito è che è anche possibile creare modelli una tantum personalizzati solo aggiungendo lo slug di una pagina a un file di modello. Per esempio:
+
+- `page-about.hbs` - Modello personalizzato per la pagina `/about/`
+- `tag-news.hbs` - Modello personalizzato per l'archivio `/tag/news/`
+- `author-ali.hbs` - Modello personalizzato per l'archivio `/author/ali/`
+
+## Sviluppo
+
+1. Installare Ghost localmente.
+
+ ```sh
+ npm install -g ghost-cli@latest
+ mkdir ghost-local-site
+ cd ghost-local-site
+ ```
+
+ ```sh
+ ghost install local
+ ghost start
+ ```
+
+ > Nota: Attualmente freeCodeCamp utilizza la versione Ghost `2.9.0`, quindi assicurati di usare una versione superiore.
+
+ Assicurati di eseguire i comandi `ghost` dalla directory `ghost-local-site`. Segui le istruzioni aggiuntive sulla documentazione ufficiale di [Ghost](https://docs.ghost.org) se non ha familiarità con la sua interfaccia.
+
+2. Forka e clona il repository nella directory del tuo tema (sostituendo `YOUR_USERNAME` con il tuo username di GitHub):
+
+ ```sh
+ cd content/themes/
+ git clone https://github.com/YOUR_USERNAME/news-theme.git
+ ```
+
+3. Assicurati di avere tutti i prerequisiti.
+
+ Gli stili del tema sono compilati usando Gulp/PostCSS per rispettare le future specifiche CSS. Avrai bisogno di [Node.js](https://nodejs.org/). Assicurati che la tua versione Node.js sia compatibile con `ghost`.
+
+4. Installa le dipendenze e sviluppa il tema
+
+ ```sh
+ npm ci
+ npm run develop
+ ```
+
+5. Ora puoi modificare automaticamente i file `/assets/css/`, che saranno compilati in `/assets/built/`.
+
+6. Accedi al sito di sviluppo.
+
+ a. Inserisci `http://localhost:2368/ghost/` nella barra degli indirizzi. Continua con la configurazione richiesta sulla pagina (se stai eseguendo ghost per la prima volta).
+
+ b. _(Una sola volta durante la configurazione)_ Riavvia Ghost in un terminale separato per garantire che il tema sia disponibile.
+
+ ```sh
+ cd ghost-local-site
+ ghost restart
+ ```
+
+ c. _(Una sola volta durante l'installazione)_ Una volta fatto, vai su `http://localhost:2368/ghost/#/settings/design` e scorri verso il basso. Assicurati di cliccare attiva su `freecodecamp-news-theme`.
+
+7. Zippa il codice finale e fai una pull request
+
+ Il task `zip` di Gulp impacchetta i file del tema in `dist/. ip`, che potremo poi caricare sul sito di produzione.
+
+ Quando fai una PR, assicurati di aver eseguito lo script sottostante prima di effettuare il commit del codice e di inviare una PR.
+
+ ```sh
+ npm run zip
+ ```
+
+## Altri riferimenti e risorse
+
+### Funzionalità PostCSS Utilizzate
+
+- Autoprefixer - Non preoccuparti di scrivere prefissi del browser di alcun tipo, è tutto fatto automaticamente con il supporto per le ultime 2 versioni principali di ogni browser.
+- Variabili - Semplici variabili CSS pure
+- [Funzione Color](https://github.com/postcss/postcss-color-function)
+
+### Icone SVG
+
+Il tema utilizza icone SVG in linea, incluse tramite dei partial di Handlebars. Puoi trovare tutte le icone all'interno di `/partials/icons`. Per usare un'icona basta includere il nome del file pertinente, ad es. Per includere l'icona SVG in `/partials/icons/rss.hbs` - usa `{{> "icons/rss"}}`.
+
+È possibile aggiungere le proprie icone SVG nello stesso modo.
diff --git a/src/content/docs/it/how-to-work-on-tutorials-that-use-coderoad.md b/src/content/docs/it/how-to-work-on-tutorials-that-use-coderoad.md
new file mode 100644
index 00000000..2dcaad01
--- /dev/null
+++ b/src/content/docs/it/how-to-work-on-tutorials-that-use-coderoad.md
@@ -0,0 +1,142 @@
+---
+title: How to work on CodeRoad
+---
+
+Questa pagina descrive come contribuire ai tutorial e progetti di freeCodeCamp che sono completati usando l'estensione di VS Code chiamata CodeRoad.
+
+## How the Tutorials Work
+
+Each of the freeCodeCamp tutorials that use CodeRoad has its own repo under the freeCodeCamp GitHub organization. Il nome inizia sempre con `learn-`. Per esempio, `https://github.com/freeCodeCamp/learn-bash-by-building-a-boilerplate/`.
+
+Ogni repo di un tutorial ha un branch principale `main` e un branch di versione, per esempio `v1.0.0`.
+
+I due file principali sul branch `main` sono `TUTORIAL.md` e `coderoad.yaml`. `TUTORIAL.md` contiente tutte le istruzioni, suggerimenti, titoli, ecc, per il tutorial. `coderoad.yaml` contiene istruzioni per CodeRoad, tipo quali comandi eseguire e quando, quali file sorvegliare per cambiamenti e quale branch di versione usare per gli step.
+
+Il branch " di versione" contiene i commit che vengono caricati per ogni step del tutorial. I messaggi di commit di questo branch devono essere specifici. Il primo commit deve avere come messaggio `INIT` e contiene tutti i file da caricare prima della prima lezione.
+
+I seguenti messaggi di commit devono combaciare con il numero dello step in `TUTORIAL.md` dal branch `main`. Per esempio, il commit con messaggio `10.1` sarà caricato quando un utente raggiunge lo step `10.1`.
+
+Per fare cambiamenti ai commit di un branch di versione, dovresti fare un rebase e cambiare i commit che vuoi cambiare. Questo riscrive la storia di Git, quindi non possiamo accettare PR a questo tipo di branch. Una volta che un branch di versione è sul repo di GitHub non deve mai cambiare.
+
+:::caution
+Non fare mai cambiamenti a un branch di versione che si trova su un repo di freeCodeCamp. Creane sempre uno nuovo
+:::
+
+## How to Contribute
+
+### Prerequisiti
+
+Installa [CodeRoad CLI tools](https://www.npmjs.com/package/@coderoad/cli) con `npm install -g @coderoad/cli`.
+
+Ci sono stati alcuni problemi con l'ultima versione. Se `coderoad --version` non funziona dopo aver installato, fai un downgrade a `0.7.0` con `npm install -g @coderoad/cli@0.7.0`.
+
+### Lavorare su `main`
+
+Queste istruzioni sono per PR che fanno solo piccoli cambiamenti su `main` a **lezioni esistenti**. Che consistono principalmente in errori di spelling e grammatica, suggerimenti, cambiamenti alle struzioni e aggiustamenti nel file `TUTORIAL.md`.
+
+Per qualsiasi altra cosa, incluso aggiungere o cancellare lezioni, segui le istruzioni [per lavorare su un branch di versione](#working-on-version-branch). Avrai bisogno di creare un nuovo branch di versione per questo - puoi creare un PR seguendo le istruzioni seguenti.
+
+> [!NOTE]
+>
+> Questi cambiamenti useranno il branch di versione esistente. Se sono sostanziali, aggiungili a `CHANGELOG.md`. La maggior parte delle volte, un buon messaggio di commit dovrebbe essere sufficiente
+
+Non hai mai bisogno di cambiare il file `tutorial.json` direttamente. Quello sarà creato con gli strumenti di CLI.
+
+Se stai facendo solo cambiamenti minori come sistemare un errore di spelling o grammatica, non hai bisogno di testare i tuoi cambiamenti.
+
+Segui queste istruzioni per creare un PR, tenendo a mente che le istruzioni usando in genere le lezioni attorno a loro per contesto:
+
+- Crea una copia dell'ultimo branch di versione con `git branch vX.X.X upstream/vX.X.X` - non hai bisogno di aprire questo branch, ha solo bisogno di esistere.
+- Crea e muoviti su un nuovo branch ramificato da `main`
+- Fai e **commit** i tuoi cambiamenti. Promemoria: non devi cambiare nulla nel file `tutorial.json`. Probabilmente devi solo fare cambiamenti a `TUTORIAL.md`
+- Esegui `coderoad build` per ricreare il file `tutorial.json`
+- Fai un commit con i tuoi cambiamenti con `update json` come messaggio
+- Crea un PR
+
+### Testing Changes on `main`
+
+Se vuoi testare i tuoi cambiamenti a `main` dopo aver usato le istruzioni precedenti, segui queste istruzioni:
+
+- Segui le istruzioni nel repo [rdb-alpha repo](https://github.com/freeCodeCamp/rdb-alpha) per creare un contenitore
+- Inizia il tutorial usando `tutorial.json` nel nuovo branch
+
+### Reviewing PRs to `main`
+
+Se stai revisionando un PR che fa cambiamenti a `main`solo con istruzioni o errori di grammatica come descritto sopra, i cambiamenti in `TUTORIAL.md` devono combaciare con i cambiamenti in `tutorial.json`.
+
+Il file `tutorial.json` non deve avere cambiamenti agli hash di commit, o agli id degli step/livelli. E pure i comandi di startup o di livello o gli osservatori dei file probabilmente non dovrebbero essere cambiati. Ci sono eccezioni se c'è un problema con uno step, ma dovrebbero essere trattati con più cautela.
+
+Inoltre, tieni a mente che le istruzioni usano in genere le lezioni attorno a loro come contesto, quindi assicurati che abbiano senso.
+
+### Working on Version Branch
+
+> [!WARNING]
+>
+> Promemoria: Non fare mai cambiamenti a un branch di versione che si trova su un repo di freeCodeCamp. Creane sempre uno nuovo
+
+Non c'è un modo semplice per vedere esattamente cosa cambia tra i branch di versione visto che la storia di Git sarà riscritta. Accettare un nuovo branch di versione dovrà essere fatto con attenta considerazione e testing.
+
+Queste istruzioni sono per cambiare qualunque cosa su un branch di versione, come test, testo dei test, file di reset, aggiungere e eliminare step, tra le altre cose.
+
+Segui queste istruzioni per creare una nuova versione:
+
+- Vai sull'**ultimo** branch di versione con `git checkout -b vX.X.X upstream/vX.X.X`
+- Crea un nuovo branch da quel branch, incrementando la versione, con `git checkout -b vX.X.Y`
+- Fai i tuoi cambiamenti al branch di versione. Puoi trovare maggiori informazioni su come lavorare con i tutorial nella [documentazione di CodeRoad](https://coderoad.github.io/docs/edit-tutorial)
+- Invia il nuovo branch al tuo fork con `git push -u origin vX.X.Y`
+- Vai sul branch `main`
+- Crea un nuovo branch da `main`. Per esempio `feat/version-X.X.Y`
+- Cambia l'`uri` in `coderoad.yaml` al tuo fork del repo. Questo è per far si che tu e i tuoi revisori possono testare prima di spingere i cambiamenti al repo di freeCodeCamp. Cambia la versione al nuovo branch nei due punti di quel file. Aggiungi i tuoi cambiamenti per la nuova versione in `CHANGELOG.md`. Fai qualsiasi altro cambiamento di cui hai bisogno.
+- Fai un commit dei tuoi cambiamenti con il messaggio `feat: release version X.X.Y - `
+- Esegui `coderoad build` per creare un nuovo file `tutorial.json`
+- Aggiungi il file e fai un commit
+- Spingi i cambiamenti al tuo fork con push
+- Testa i tuoi cambiamenti seguendo le [istruzioni di testing più sotto](#testing-changes-to-a-version-branch). Fai i cambiamenti aggiuntivi necessari e fai un commit con loro come hai apena fatto, o se sei soddisfatto, segui il resto delle istruzioni
+- Fai un PR a `main` usando il tuo nuovo branch `feat/version-X.X.Y`. Dagli un titolo di `version X.X.Y ready for review`. Questo non sarà unito al database, è solo per far sapere ai revisori che c'è una nuova versione pronta
+- Lascialo qui per i revisori
+
+### Testing Changes to a Version Branch
+
+- Segui le istruzioni nel repo [rdb-alpha repo](https://github.com/freeCodeCamp/rdb-alpha) per creare un contenitore
+- Inizia il tutorial usando il file `tutorial.json` nel fork in cui sono i cambiamenti. Assicurati di usare il file nel branch `feat: version-X.X.Y` e non nel branch `main`
+
+### Pushing a New Version
+
+Prima del push di una nuova versione, visualizza il nuovo branch `feat/version-vX.X.Y` (di cui sarà fatto il merge con `main`) sul fork dell'utente. Assicurati che ci siano cambiamenti al file `CHANGELOG.md` che includono i nuovi cambiamenti, e che la versione nei due punti del file `coderoad.yaml` corrisponda al nuovo branch di versione.
+
+Se hai permessi di scrittura al repo di freeCodeCamp, hai verificato i file `CHANGELOG` e `coderoad.yaml`, hai testato i cambiamenti seguendo le istruzioni qua sopra, e vuoi fare il push di una nuova versione del tutorial:
+
+> [!WARNING]
+>
+> Promemoria: Non fare mai cambiamenti a un branch di versione che si trova su un repo di freeCodeCamp. Creane sempre uno nuovo
+
+- Se non hai un remote a dove esistono i cambiamenti, crea un remote al fork dell'utente con `git remote add `
+- Elimina qualsiasi branch **locale** che condivide un nome con i nuovi branch. Probabilmente denominato `vX.X.Y` o `feat/version-X.X.Y`
+- Vai sul nuovo branch di versione con `git checkout -b vX.X.X remote/vX.X.X`
+- Fai il push del nuovo branch di versione al repo di freeCodeCamp con `git push -u upstream/vX.X.Y`. Devi fare il push del nuovo branch prima di aggiornare `main` con il nuovo file `tutorial.json`
+- Vai su il ramo degli utenti di cui sarà fatto il merge in `main` con `git checkout -b feat/version-X.X.Y /feat/version-X.X.Y`
+- Cambia l'`uri` in `coderoad.yaml` di nuovo al repo di freeCodeCamp
+- Aggiungi i cambiamenti e fai un commit
+- Esegui `coderoad build` per creare il nuovo file `tutorial.json`
+- Aggiungi il file e fai un commit
+- Fai il push dei cambiamenti al tuo fork con `git push -u origin/feat/version-X.X.Y`
+- Fai un PR a `main` sul repo di freeCodeCamp
+- Se sei soddisfatto, fai il merge, o lascialo e chiedi una review da parte di qualcun altro
+- Dopo che è stato fatto il merge del PR, apri il tutotial seguendo le istruzioni nel [repo rdb-alpha](https://github.com/freeCodeCamp/rdb-alpha) per assicurarti che si carichi come si deve e che puoi procedere per qualche step
+- Finally, if any PRs for this version exist, close them
+
+### How to Revert to a Previous Version
+
+- Create a new branch off of the latest `main` with `git checkout -b revert/to-version-X.X.X`
+- Fai il revert di tutti i commit di questo branch fino a e includendo il commit della versione successiva a quella a cui vuoi tornare. Per esempio, se hai dei commit tipo questi:
+
+```
+fix: typo
+release: version 1.0.1
+fix: typo
+release: version 1.0.0
+```
+
+E vuoi tornare a v1.0.0, fai il revert di tutti i commit a partire da `release: version 1.0.1`
+
+- Crea un PR. Dagli un titolo tipo `revert: to version X.X.X`
diff --git a/src/content/docs/it/intro.md b/src/content/docs/it/intro.md
new file mode 100644
index 00000000..9ec51fb8
--- /dev/null
+++ b/src/content/docs/it/intro.md
@@ -0,0 +1,51 @@
+---
+title: Contribute to the freeCodeCamp.org Community
+---
+
+La comunità [freeCodeCamp.org](https://freecodecamp.org) è composta da migliaia di volontari come te. Se vuoi contribuire con il tuo tempo e le tue competenze, saremo entusiasti di darti il benvenuto a bordo.
+
+:::note
+Prima di procedere, prenditi due minuti per leggere il nostro [Codice di condotta](https://www.freecodecamp.org/code-of-conduct). Lo applichiamo rigorosamente in tutta la nostra comunità in modo che contribuire a freeCodeCamp.org sia un'esperienza sicura e inclusiva per tutti.
+:::
+
+Siete invitati a creare, aggiornare e correggere i bug nel nostro [curriculum](#curriculum), aiutarci a correggere i bug nella [piattaforma di apprendimento](#piattaforma-di-apprendimento) di freeCodeCamp.org, o [aiutarci a tradurre](#traduzioni) freeCodeCamp.org nelle diverse lingue del mondo.
+
+Rispondiamo alle domande più comuni su come contribuire [nelle nostre FAQ per i contributori](FAQ).
+
+Buon lavoro.
+
+---
+
+## Curriculum
+
+Il nostro curriculum è curato dalla comunità globale freeCodeCamp. In questo modo, siamo in grado di incorporare le utili conoscenze di volontari come te.
+
+Puoi aiutare ad espandere e migliorare il curriculum. Puoi anche aggiornare le user story del progetto per spiegare meglio i concetti. E puoi migliorare i nostri test automatici in modo da poter testare più accuratamente il codice degli studenti.
+
+**Se sei interessato a migliorare il nostro curriculum, ecco [come contribuire al curriculum](how-to-work-on-coding-challenges).**
+
+## Traduzioni
+
+Stiamo traducendo freeCodeCamp.org nelle maggiori lingue del mondo.
+
+Le certificazioni sono già disponibili in alcuni delle principali lingue, come:
+
+- [Cinese (中文)](https://www.freecodecamp.org/chinese/learn)
+- [Spagnolo (Español)](https://www.freecodecamp.org/espanol/learn)
+- [Italiano](https://www.freecodecamp.org/italian/learn)
+- [Portoghese (Português)](https://www.freecodecamp.org/portuguese/learn)
+- [Ucraino (Українська)](https://www.freecodecamp.org/ukrainian/learn)
+- [Giapponese (日本語)](https://www.freecodecamp.org/japanese/learn)
+- [Tedesco (Deutsch)](https://www.freecodecamp.org/german/learn)
+
+Ti incoraggiamo a leggere l'[annuncio qui](https://www.freecodecamp.org/italian/news/come-aiutare-a-tradurre-freecodecamp-nella-tua-lingua/) e a condividerlo con i tuoi amici.
+
+**Se sei interessato a tradurre, ecco [come tradurre le risorse di freeCodeCamp](how-to-translate-files).**
+
+## Piattaforma di apprendimento
+
+La nostra piattaforma di apprendimento esegue uno stack JavaScript moderno. Ha vari componenti, strumenti e librerie. Questi comprendono Node.js, MongoDB, OAuth 2.0, React, Gatsby, Webpack e altro.
+
+In generale, abbiamo un server API basato su Node.js, un set di applicazioni client basate su React, script per i test di valutazione dei progetti degli utenti del curriculum e altro. Se vuoi contribuire produttivamente alla piattaforma di apprendimento, raccomandiamo di avere familiarità con questi strumenti.
+
+**Se vuoi aiutarci a migliorare il nostro codebase, ecco [come impostare freeCodeCamp](how-to-setup-freecodecamp-locally).**
diff --git a/src/content/docs/it/language-lead-handbook.md b/src/content/docs/it/language-lead-handbook.md
new file mode 100644
index 00000000..81da7139
--- /dev/null
+++ b/src/content/docs/it/language-lead-handbook.md
@@ -0,0 +1,376 @@
+---
+title: La guida ufficiale dei Leader di lingua di freeCodeCamp
+---
+
+Questa guida ti aiuterà a configurare e utilizzare gli strumenti per la localizzazione dei contenuti nella tua lingua.
+
+## How to Invite New Contributors to Ghost
+
+Ghost allows you to set contributors with different levels of authorization.
+
+La maggior parte dei tuoi inviti sarà per il livello "Contributor". Questo livello consente all'utente di creare bozze. Seleziona questo ruolo quando inviti un nuovo traduttore.
+
+Il livello "Author" consente all'utente di creare bozze e pubblicarle.
+
+Il livello "Editor" consente all'utente di accedere a tutte le bozze e pubblicarle. Seleziona questo ruolo quando inviti un nuovo revisore (proofreader).
+
+Il livello "Administrator" è riservato allo staff di freeCodeCamp e ai leader di lingua.
+
+### How are the Articles Built
+
+Usiamo un approccio basato su [JAMStack](https://www.google.com/search?q=what+is+jamstack) per il build e il deployment degli articoli. Questa strategia rende un rapido sito statico memorizzato nella cache e servito da un CDN.
+
+[Ghost](https://ghost.org) costituisce la nostra piattaforma di gestione dei contenuti e [11ty](https://11ty.dev) si occupa del build degli articoli in risorse statiche – semplice HTML, JavaScript e CSS. Solo queste risorse statiche sono distribuite sui nostri server.
+
+Questo processo è automatizzato e viene eseguito periodicamente. Se pubblichi qualcosa ora, sarà disponibile sul sito di notizie in poche ore.
+
+Qui puoi trovare gli orari di build aggiornati e lo stato: https://github.com/freeCodeCamp/news#build
+
+## How to Mention the Original Author of a Translated Article
+
+The original author and the original article are linked automatically adding this code to the Code Injection -> head section in the Draft Settings on Ghost.
+
+```html
+
+```
+
+`link` è il link all'articolo originale.
+
+## How to Update Trending Articles
+
+:::tip
+Changing the articles in the footer at least once a month means giving a boost to the linked articles on Google results.
+:::
+
+To update the trending articles in the footer, you need to update the [yaml file in the CDN repository](https://github.com/freeCodeCamp/cdn/tree/main/build/universal/trending) for your language. Both the curriculum and the publication reference this file.
+
+For example, here is the file content for the first 6 articles:
+
+```yaml
+article0
+title: "Unire CSV con Python"
+article0link: "https://www.freecodecamp.org/italian/news/come-combinare-file-multipli-in-formato-csv-con-8-righe-di-codice/"
+article1
+title: "Il comando Git push"
+article1link: "https://www.freecodecamp.org/italian/news/il-comando-git-push-spiegato/"
+article2
+title: "Centrare immagini in CSS"
+article2link: "https://www.freecodecamp.org/italian/news/come-centrare-un-immagine-usando/"
+article3
+title: "I codici Alt"
+article3link: "https://www.freecodecamp.org/italian/news/codici-alt/"
+article4
+title: "Tenere a bada il footer"
+article4link: "https://www.freecodecamp.org/italian/news/come-mantenere-il-footer-al-suo-posto/"
+article5
+title: "Cosa è API?"
+article5link: "https://www.freecodecamp.org/italian/news/cose-un-api-in-italiano-per-favore/"
+```
+
+Each number represents one of the 30 articles in the footer. Assicurati di abbinare correttamente il titolo e il link.
+
+For each article, you will need to create a shorter title to use in the footer. Ogni titolo deve rimanere su una sola riga e non andare sulla successiva.
+
+Dovrai [fare il build in locale del client tradotto](how-to-enable-new-languages) per vedere se i titoli hanno la giusta lunghezza. You can preview the changes by editing the `trending.json` file in your local environment:
+
+1. Update your `.env` file to use your language for `CLIENT_LOCALE` and `CURRICULUM_LOCALE`.
+
+2. Run `pnpm run create:shared`. This will automatically generate the `trending.json` file for your language under the `/client/i18n/locales/` directory.
+
+3. Start the server by running `pnpm run develop:server` in one terminal window.
+
+4. Edit the `trending.json` to contain the titles you want to preview. You may want to convert your `.yaml` file into JSON format with an automatic tool.
+
+5. In another terminal window, run `pnpm run clean:client`, and then `pnpm run develop:client`
+
+## How to Translate Articles in the Footer Links
+
+There are some links listed at the bottom of the footer (About, Alumni Network, Open Source, etc.) and some of them can be translated into your language in the same way as other articles.
+
+Articoli che possono essere tradotti:
+
+- About
+- Support
+- Academic Honesty
+- Code of Conduct
+
+I seguenti articoli **non** dovrebbero essere tradotti:
+
+- Shop
+- Sponsors
+- Privacy Policy
+- Terms of Service
+- Copyright Policy
+
+I seguenti link puntano a siti esterni e non possono essere tradotti:
+
+- Alumni Network
+- Open Source
+
+### Change the Footer Links in the News
+
+Una volta che hai tradotto e pubblicato gli articoli elencati come "possono essere tradotti", puoi aggiornare i link a piè di pagina per `/news` modificando il file `news/config/i18n/locales//links.json` nel repository [freeCodeCamp/news](https://github.com/freeCodeCamp/news).
+
+> [!NOTE] Le pull request a questo repository sono attualmente limitate allo staff. Se vuoi aggiornare questo file, chiedi aiuto a qualcuno del team dello staff.
+
+Aggiorna la seguente parte nel file:
+
+```json
+{
+ ...
+ "footer": {
+ "about": "https://www.freecodecamp.org/news/about/",
+ "support": "https://www.freecodecamp.org/news/support/",
+ "honesty": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc": "https://www.freecodecamp.org/news/code-of-conduct/"
+ }
+}
+```
+
+### Change the Footer Links in the Curriculum
+
+Una volta che hai tradotto e pubblicato gli articoli elencati come "possono essere tradotti", così come quando il curriculum è pronto per il rilascio nella tua lingua, puoi aggiornare i link a piè di pagina per `/learn` modificando il file `client/i18n/locales//links.json` nel repository [freeCodeCamp/freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp).
+
+> [!WARNING] Solo "About", "Support", "Academic Honesty", e "Code of Conduct" possono essere tradotti. Lascia gli altri URL invariati.
+
+Update the following part in the file:
+
+```json
+{
+ ...
+ "footer": {
+ "about-url": "https://www.freecodecamp.org/news/about/",
+ "shop-url": "https://www.freecodecamp.org/shop/",
+ "support-url": "https://www.freecodecamp.org/news/support/",
+ "sponsors-url": "https://www.freecodecamp.org/news/sponsors/",
+ "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/",
+ "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/",
+ "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/",
+ "tos-url": "https://www.freecodecamp.org/news/terms-of-service/",
+ "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
+ },
+ ...
+}
+```
+
+## How to Translate the Info Boxes Headers in the Documentation
+
+Puoi trovare questi riquadri in tutta la documentazione:
+
+> [!NOTE] Sono una nota
+
+:::tip
+Sono un suggerimento
+:::
+
+> [!WARNING] Sono un avvertimento
+
+:::danger
+Sono un avviso per richiamare la tua attenzione
+:::
+
+Di default, le loro intestazioni appaiono in inglese anche nella documentazione tradotta.
+
+Puoi avere le intestazioni tradotte nella documentazione nella tua lingua cambiando il file `docs/index.html`, in questo modo:
+
+All'interno dell'elemento `script` c'è un oggetto, trova la proprietà `flexibleAlerts`, che ha questa struttura:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+All'interno dell'oggetto della proprietà label, prima della proprietà `'/'`, dovrai aggiungere una nuova proprietà per la tua lingua, come `/i18n//`.
+
+Ad esempio, per aggiungere le traduzioni in portoghese:
+
+```js
+flexibleAlerts: {
+ note: {
+ label: {
+ '/i18n/portuguese/': 'Observação',
+ '/': 'Note'
+ }
+ },
+ tip: {
+ label: {
+ '/i18n/portuguese/': 'Dica',
+ '/': 'Tip'
+ }
+ },
+ warning: {
+ label: {
+ '/i18n/portuguese/': 'Aviso',
+ '/': 'Warning'
+ }
+ },
+ attention: {
+ label: {
+ '/i18n/portuguese/': 'Atenção',
+ '/': 'Attention'
+ }
+ }
+}
+```
+
+## How to Translate the Motivational Quotes
+
+Le citazioni motivazionali possono essere trovate nel [repository del curriculum](https://github.com/freeCodeCamp/freeCodeCamp/) nel file `/client/i18n/locales//motivation.json`.
+
+Il file ha questa struttura generale:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": []
+}
+```
+
+I complimenti sono brevi frasi che appaiono al termine di una sfida.
+
+Non è necessario tradurre direttamente le frasi usate in inglese, è possibile scrivere una serie di frasi corte che sono appropriate per essere mostrate al completamento di una sfida.
+
+The `compliments` array is an array of strings. So, for example, you would write:
+
+```json
+{
+ "compliments": ["A tutta birra!", "Pikachu, scelgo te!"],
+ "motivationalQuotes": []
+}
+```
+
+:::tip
+Dovresti iniziare almeno con una dozzina di complimenti per avere un po' di varietà quando gli utenti completano le sfide.
+:::
+
+Le citazioni motivazionali sono le frasi che appaiono su https://freecodecamp.org/learn.
+
+`motivationalQuotes` è un array di oggetti, i quali includono una proprietà `quote` e una proprietà `author`. Come questo:
+
+```json
+{
+ "compliments": [],
+ "motivationalQuotes": [
+ {
+ "quote": "Se i costruttori costruissero come i programmatori programmano, il primo picchio che passa potrebbe distruggere la civiltà.",
+ "author": "Artur Bloch, Seconda legge di Weinberg"
+ },
+ {
+ "quote": "I bravi programmatori sanno cosa scrivere. I migliori sanno cosa riscrivere.",
+ "author": "Eric Steven Raymond"
+ }
+ ]
+}
+```
+
+:::tip
+Dovresti iniziare con almeno una dozzina di citazioni, per avere un po' di varietà. A new quote is shown every time the user reloads the page.
+:::
+
+## How to Update the Common Links
+
+Gestiamo un file di link comuni usati in tutto il [curriculum](https://github.com/freecodecamp/freecodecamp) nel file `/client/i18n/locales//links.json`.
+
+Alcuni di questi link non cambieranno - ma dovresti aggiornare gli articoli in `/news` per rimandare alla versione tradotta nella tua lingua di un articolo, una volta pubblicato.
+
+Dovresti anche aggiornare le categorie `help` in modo che rimandino nel subforum nella tua lingua (di solito `language/category`, come `Italiano/HTML-CSS`). Questo permetterà agli utenti di freeCodeCamp di creare delle "richieste di aiuto" nella posizione corretta del forum.
+
+## How to Update the Site Meta-Data
+
+I meta-dati del sito si trovano nel file `/client/i18n/locales//meta-tags.json`. Questo file ha cinque chiavi: `title`, `description`, `social-description`, `keywords` e `youre-unsubscribed`.
+
+Il valore `youre-unsubscribed` dovrebbe essere tradotto direttamente. Gli altri valori dovranno essere tradotti nel miglior modo possibile, tenendo conto anche dei termini e delle frasi di ricerca comunemente utilizzati nella tua lingua.
+
+Se hai bisogno di aiuto, contattaci nella chat per i [contributori](https://discord.gg/PRyKn3Vbay)
+
+## Effettuare il Pre-Translate su Crowdin
+
+La funzionalità Pre-Translate può essere usata per applicare le traduzioni da Translation Memory alle stringhe.
+
+:::tip
+È molto utile per ripristinare le traduzioni da Translation Memory in blocco quando sono stati aggiornati molti file.
+:::
+
+Puoi trovare il Pre-Translate nella parte superiore della pagina nella console di un progetto. Se vedi "Go to console" nell'angolo in alto a destra, clicca prima lì.
+
+
+
+
+
+Puoi scegliere "From Machine Translation" o "From Translation Memory". Scegli "Translation Memory" per recuperare le traduzioni dalla memoria.
+
+Poi ci sono tre passaggi da completare:
+
+1. Files. Choose which files to translate, you can do all the projects, or specific folders or files.
+2. Languages. Imposta qui la tua lingua.
+3. Existing Translations. La migliore combinazione è "100% match" e "Apply to untranslated strings only". Non approvare automaticamente, in quanto è sempre meglio che ci sia una persona a effettuare la revisione.
+
+
+
+Quando hai finito con le impostazioni, premi il pulsante Pre-Translate e attendi. Ti avviserà al termine. Può richiedere più o meno tempo a seconda di quante stringhe non tradotte sono presenti nei file scelti.
+
+## How to Update Crowdin Glossary
+
+:::tip
+An updated glossary helps in having a homogeneous translation of technical terms.
+:::
+
+Puoi trovare il glossario di Crowdin nel repository [crowdin-glossaries](https://github.com/freeCodeCamp/crowdin-glossaries).
+
+In the `glossaries` folder, there are various `*.csv` (comma,separated values) files, one for each of the crowdin projects that have a glossary that can be updated from this workflow.
+
+Il file `client.csv` è per il progetto Learn User Interface, il file `curriculum.csv` è per il progetto Coding Curriculum, il file `docs.csv` è per il progetto Contributing Documentation.
+
+To update the Crowdin Glossaries, you need to clone this repo locally. Open the `.csv` file with an appropriate program, for example, Microsoft Excel.
+
+Nel file `.csv` troverai che la lingua inglese occupa le prime tre colonne, `Term:English` è la colonna per i termini inglesi, `Description:English` è la colonna per le descrizioni inglesi, `Part:English` è la parte del discorso (sostantivo, verbo, ecc.).
+
+Poi, ogni lingua ha due colonne. Se traduci in Dothraki, sarai interessato alle colonne `Term:Dothraki` e `Description:Dothraki`. La colonna `Term:Dothraki` è per la traduzione dei termini dothraki e la colonna `Description:Dothraki` è per la descrizione dei termini dothraki.
+
+:::tip
+In programs like Microsoft Excel, you can hide the columns of the other languages to free up screen real-estate and see the English columns and the target language columns near each other.
+:::
+
+Dopo aver apportato le modifiche e salvato il file, dovrai effettuare una PR con le modifiche proposte. Una volta che la PR è stata accettata, dovrai eseguire le procedure GitHub Action per aggiornare il glossario. I cambiamenti apportati al glossario non saranno immediati.
+
+## Come Promuovere un Contributore a Revisore
+
+If you consider that a contributor could become a Crowdin Proofreader, you can give the proofreader role to them this way:
+
+In Crowdin, individuate the `User management` on the left-hand side menu.
+
+Aprirà gli strumenti di gestione degli utenti e sarai in grado di vedere la lista di tutti gli utenti.
+
+Search for the user who will become a proofreader. Utilizzare il menu a tre punti nella riga dell'utente per aprire un menu e selezionare "Add to team". I team di revisori hanno il nome standard di `Proof Readers ()`, puoi cercare il team usando il nome della lingua. Una volta selezionato il team, utilizza il pulsante "ADD" in fondo alla pagina per finalizzare il processo.
+
+L'utente ora è un revisore.
+
+:::tip
+I revisori appena promossi possono trarre vantaggio dalla lettura della documentazione [Come revisionare le traduzioni](how-to-proofread-files).
+:::
+
+## How to Add or Update a Language
+
+Check out the [how to enable new language](how-to-enable-new-languages) docs. If you are updating a language the section on [set translated superblocks](how-to-enable-new-languages#set-translated-superblocks) should be helpful.
diff --git a/src/content/docs/it/moderator-handbook.md b/src/content/docs/it/moderator-handbook.md
new file mode 100644
index 00000000..5ab31ae3
--- /dev/null
+++ b/src/content/docs/it/moderator-handbook.md
@@ -0,0 +1,370 @@
+---
+title: Il manuale ufficiale del moderatore di freeCodeCamp
+---
+
+Questo manuale ti aiuterà a moderare diversi luoghi nella nostra comunità. Questo comprende le conversazioni e le interazioni nei thread delle issue e delle pull request su GitHub, nel forum della community, nelle chat room e nelle altre comunità ufficiali che ospitiamo.
+
+> [!NOTE] Tutti i moderatori di freeCodeCamp sono moderatori di tutta la comunità. Cioè confidiamo che tu supervisioni uno di questi posti.
+
+Puoi fare da moderatore su qualunque piattorma ti interessi di più. Alcuni moderatori aiutano solo su GitHub, mentre altri aiutano solo sul forum. Alcuni sono attivi ovunque.
+
+L'idea di fondo è che vogliamo che ti diverta ad essere un moderatore, e che tu investa il tuo poco tempo in luoghi che sono di tuo interesse.
+
+> "Da grandi poteri derivano grandi responsabilità." - Zio Ben
+
+Come moderatore, il carattere è più importante dell'abilità tecnica.
+
+Ascolta. Sii utile. Non abusare del tuo potere.
+
+freeCodeCamp è una comunità inclusiva ed è necessario lasciarla così.
+
+Abbiamo un singolo [Codice di Condotta](https://code-of-conduct.freecodecamp.org) per gestire tutta la nostra comunità. Meno sono le regole, più facile sarà ricordarle. Puoi leggere queste regole e impegnarti a ricordarle [qui](https://code-of-conduct.freecodecamp.org).
+
+> [!NOTE] As a moderator, we would add you to one or more teams on GitHub, our community forums & chat servers. If you are missing access to a platform that you would like to moderate, please [reach out to a staff member](FAQ#additional-assistance).
+
+## Moderare GitHub
+
+I moderatori hanno due responsabilità principali su GitHub:
+
+1. Fare lo smistamento e rispondere alle issue.
+2. Verificare e fare il merge delle pull request (cioè controllo qualità).
+
+### Moderare gli issue di Github
+
+Usiamo il repository principale [`freeCodeCamp/freeCodeCamp`](https://github.com/freeCodeCamp/freeCodeCamp/issues) per tenere traccia delle issue su tutti i nostri repository. Riceviamo nuove issue ogni giorno e per tutte occorre fare lo smistamento, assegnare un'etichetta e indirizzarle. Questo è anche un ottimo posto per iniziare ad aiutare contribuendo al codice open source.
+
+#### Smistamento delle issue
+
+[Lo smistamento (triage)](https://en.wikipedia.org/wiki/Triage) è un processo in cui si decide con quale priorità rivolgere l'attenzione ad ogni nuovo problema riportato. Abbiamo una lunga lista di etichette che usiamo per contrassegnare priorità, categoria, status e scopo di ogni issue.
+
+Puoi aiutarci ad organizzare e fare lo smistamento delle issue riportate applicando etichette da [questa lista](https://github.com/freeCodeCamp/freeCodeCamp/labels). Solitamente, è disponibile una descrizione accanto all'etichetta che ne spiega il significato.
+
+Per favore, fai particolare attenzione alle etichette `"help wanted"` e `"first timers only"`. Queste devono essere aggiunte ai thread che pensi possano essere aperti a potenziali contributori per creare una pull request.
+
+For triaging a trivial issue such as a typo fix, it is recommended to apply a "first timers only" label along with additional information. You can utilize the [reply template](reply-templates#first-timer-only-issues) provided for this purpose.
+
+#### Chiudere issues e pull request stantii, obsoleti e inattivi
+
+- Le issue e le pull request stantie sono quelli che non hanno visto alcuna attività dall'autore per 21 giorni (3 settimane dall'ultima attività), ma solo dopo che un moderatore ha richiesto più informazioni/modifiche.
+
+- L'attività è definita come: Commenti che richiedono un aggiornamento sulla PR e sullo smistamento come l'etichetta `status: update needed` etc.
+
+- Se il contributore chiede ulteriore assistenza o anche del tempo, quanto sopra può essere rilassato e rivisitato dopo che è stata data una risposta. In ogni caso, i moderatori dovrebbero usare il loro buon senso per prendere una decisione sullo status in sospeso della PR.
+
+:::tip
+We recommend you use this list of standard [reply templates](reply-templates) while triaging issues.
+:::
+
+### Moderare le pull request
+
+Le pull request (PR) sono il modo in cui i contributori sottopongono cambiamenti al repository di freeCodeCamp. Dobbiamo eseguire il Controllo Qualità sulle pull request prima di decidere se fare il merge, richiedere delle modifiche o chiuderle.
+
+#### Tipi di Pull Request
+
+1. **Modifiche alle istruzioni delle sfide**
+
+ Queste sono le modifiche ai testi delle sfide - la descrizione, le istruzioni o il testo dei test.
+
+ Puoi anche farne la revisione direttamente su GitHub e decidere se fare il merge. Dobbiamo fare un po' attenzione su questo perché milioni di persone incontreranno questo testo lavorando sul curriculum di freeCodeCamp. La pull request rende il testo più chiaro senza allungarlo troppo? Le modifiche sono rilevanti e non troppo pedanti? Ricorda che il nostro obbiettivo è che le sfide siano più chiare e più corte possibile. Non sono il luogo per dettagli incomprensibili. I contributori possono provare ad aggiungere link e risorse alle sfide.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ Se la modifica va bene, assicurati di lasciare un'approvazione con un commento "LGTM" (Looks Good To Me). Una volta che una pull request riceve almeno due approvazioni (inclusa la tua) dai moderatori o dal dev-team, puoi procedere e farne il merge.
+
+2. **Modifiche al codice delle sfide**
+
+ Queste sono modifiche al codice in una sfida - il seed della sfida, la soluzione della sfida e le stringhe di test.
+
+ Queste pull request devono essere scaricate (pull) da GitHub e testate nel tuo computer locale o su Gitpod per assicurarti che i test della sfida possano essere superati con la soluzione corrente, e il nuovo codice non introduca errori.
+
+ Alcuni contributori potrebbero provare ad aggiungere test addizionali per coprire casi limite pedanti. Dobbiamo fare attenzione a non rendere le sfide troppo complicate. Queste sfide e i loro test dovrebbero essere più semplici e intuitivi possibile. Ad eccezione delle sfide sugli algoritmi e della sezione di preparazione al colloquio di lavoro, gli studenti dovrebbero essere in grado di risolvere ogni sfida entro due minuti.
+
+ You can close invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+ If the changes look good, please ensure to leave an approval with an "LGTM" comment. Una volta che una pull request ha ricevuto almeno due approvazioni (inclusa la tua) dai moderatori o dal dev-team, puoi procedere e farne il merge.
+
+3. **Modifiche alla piattaforma**
+
+ Queste modifiche al codice cambiano la funzionalità della piattaforma freeCodeCamp stessa.
+
+ A volte i contributori cercano di apportare cambiamenti senza troppe spiegazioni, ma per le modifiche al codice, dobbiamo essere sicuri che ci sia un'autentica necessità di cambiamento. Queste pull request dovrebbero fare riferimento a un'issue esistente su GitHub dove vengono discusse le ragioni della modifica. Quindi puoi aprire la pull request sul tuo computer e testarla localmente.
+
+ Dopo averlo fatto, se le modifiche funzionano, non farne ancora il merge. Puoi commentare le pull request scrivendo "LGTM", quindi menzionando **"@freeCodeCamp/dev-team"** in modo che possano dare un'occhiata finale.
+
+4. **PR automatizzate (Dependabot)**
+
+ Alcune PR sono aggiornamenti di dipendenze automatizzati fatti attraverso un'integrazione. Non dovresti fare il merge o approvare queste PR. Uno dei membri del dev-team si prenderà carico di rivedere queste PR automatizzate e di farne il merge.
+
+#### How to Review, Merge, or Close Pull Requests
+
+##### Assign yourself to a Pull Request:
+
+Prima di tutto, quando scegli una pull request da rivedere, dovresti assegnarla a te stesso. Puoi farlo facendo clic sul collegamento "assign yourself" sotto la parte "assegnatari" nella colonna di destra dell'interfaccia di GitHub.
+
+A seconda del tipo di pull request, segui le regole corrispondenti elencate in precedenza.
+
+##### Ensure the CI Checks are Passing:
+
+Prima di fare il merge di qualsiasi pull request, assicurati che GitHub contrassegni come superati tutti i controlli da fare (segni di spunta verdi) sulle pull request. Se noti che uno dei controlli non va a buon fine, indaga e chiarisci la causa principale. La modifica che viene apportata blocca i nostri test? Il sito verrà creato correttamente se la PR sarà unita? Questi controlli sono fondamentali per la stabilità della piattaforma.
+
+> [!WARNING] L'unione di una PR che non supera i controlli CI/CD può causare difficoltà a tutte le parti interessate, incluso il team di sviluppo e i contributori.
+
+##### Gestire i conflitti di merge:
+
+A volte ci sarà un conflitto di merge.
+
+Ciò significa che un'altra pull request ha apportato una modifica alla stessa parte di quello stesso file. GitHub ha uno strumento per affrontare questi conflitti di unione direttamente su GitHub. Puoi provare ad affrontare questi conflitti. Giudica al meglio.
+
+Le modifiche della pull request saranno in alto e le modifiche del ramo main saranno in basso. A volte ci saranno informazioni ridondanti che possono essere cancellate. Prima di finire, assicura di cancellare i simboli `<<<<<<`, `======`, e `>>>>>>` che Git aggiunge per indicare le aree in conflitto.
+
+Se non sei sicuro, chiedi assistenza a uno degli altri moderatori o al team di sviluppo.
+
+##### Merging a Valid Pull Request:
+
+Se la pull request sembra pronta per il merge (e non richiede ulteriori approvazioni, ricorda che ne servono almeno due), puoi procedere e unirla. Assicurati di utilizzare l'opzione predefinita **"Squash and Merge"**. Questo ridurrà tutti i commit della pull request a un singolo commit, rendendo la cronologia di Git molto più facile da leggere.
+
+> Dovresti quindi commentare la pull request, ringraziando il contributore in modo personale!
+
+Se l'autore della pull request è un "contributore per la prima volta" dovresti anche congratularti con lui per la sua prima pull request unita al repository. Puoi guardare nell'angolo in alto a destra nel corpo della PR per determinare chi ha contribuito per la prima volta. Mostrerà `First-time contributor` come nella figura:
+
+
+
+ Badge first-time contributor sulle pull request (screenshot)
+
+
+
+
+
+
+Se la pull request non sembra pronta per il merge, puoi rispondere educatamente dicendo all'autore cosa dovrebbe fare per prepararla. Si spera che rispondano e che la loro pull request sia più vicina ad essere pronta.
+
+Se hai bisogno di una seconda opinione su una pull request, vai avanti e lascia i tuoi commenti sulla pull request, quindi aggiungi l'etichetta "discussing".
+
+##### Chiudere una pull request invalida:
+
+Spesso una pull request avrà richiesto uno sforzo minimo. Puoi capirlo immediatamente quando il contributore non si è preoccupato di selezionare le caselle di spunta nel template per le Pull Request o ha utilizzato un titolo generico per la Pull Request come "made changes" o "Update index.md".
+
+Ci sono anche situazioni in cui il contributore sta cercando di aggiungere un collegamento al proprio sito Web, includere una libreria che ha creato o apportare una modifica frivola che non aiuta nessuno tranne se stesso.
+
+You can close these invalid pull requests and reply to them with these [reply templates](reply-templates#closing-invalid-pull-requests).
+
+#### Filtering Pull Requests
+
+To sort Pull Requests for Quality Assurance for quick access to PRs that are ready for review, do not have a merge conflict, are not blocked, and have all status checks in green, use the following link to apply the filters:
+
+[Direct link with filter applied](https://github.com/freeCodeCamp/freeCodeCamp/pulls?q=is%3Aopen+is%3Apr+-label%3A%22status%3A+blocked%22+-label%3A%22status%3A+merge+conflict%22+status%3Asuccess+draft%3Afalse)
+
+#### Other Guidelines for Moderators on GitHub
+
+Though you will have write access to freeCodeCamp's repository, **you should never push code directly to freeCodeCamp repositories**. All code should enter freeCodeCamp's codebase in the form of a pull request from a fork of the repository.
+
+Also, you should never accept your own PRs. They must be reviewed by another moderator, just like any other PR.
+
+If you notice anyone breaking the [Code of Conduct](https://code-of-conduct.freecodecamp.org) on GitHub issues, or opening pull requests with malicious content or code, email `support[at]freecodecamp.org` with a link to the offending pull request, and we can consider banning them from freeCodeCamp's GitHub organization entirely.
+
+## Moderazione del Forum
+
+As a moderator, you help keep our community an enjoyable place for anyone to learn and get help. You will deal with flagged posts and handle spam, off-topic, and other inappropriate conversations.
+
+Note that once you are a moderator on the forum, you will start to see blue moderator hints about forum members, like "this is the first time [person] has posted - let's welcome them to the community!" or "[person] hasn't posted in a long time - let's welcome them back."
+
+![A blue text message saying "This is the first time [person] has posted - let's welcome them to the community!](https://i.imgur.com/mPmVgzK.png)
+
+These are opportunities for you to welcome them and make them feel extra special. You never know which person who's marginally involved may become our next super-helper, helping many other people in their coding journey. Even the slightest kindness may trigger a cascade of good deeds.
+
+### Eliminare dei post del forum
+
+Forum moderators can delete users' posts. You should only do this for the following instances:
+
+1. Qualcuno ha postato immagini pornografiche o graficamente violente.
+2. Qualcuno ha postato un link o del codice di natura malevola e che potrebbe danneggiare altri camper che ci cliccano sopra.
+3. Qualcuno ha inondato un thread con un sacco di spam.
+4. Un account è stato creato, oltre ogni ragionevole dubbio, per spammare.
+
+### Affrontare lo spam
+
+For the first spam post of a legitimate user (ie. whose intent isn't to spam the forum but to learn/contribute to the forum), send them a message explaining the problem, and remove the link or post as appropriate. Leave a note on the user's profile explaining the action you have taken. If the problem persists, then quietly block the user from posting (using the silence option on the User Admin panel). Send the user a warning with the [Code of Conduct](https://code-of-conduct.freecodecamp.org). Check the box in the private message indicating that your message is a "formal warning."
+
+As a moderator, you can ask questions and report incidents in the [mod-team forum section](https://forum.freecodecamp.org/c/mod-team/4).
+
+### Affrontare conversazioni off-topic
+
+Posts or topics that seem to be in the wrong place can be recategorized or renamed to whatever would be appropriate.
+
+In exceptional circumstances, it may be appropriate for a moderator to fork a discussion into multiple threads.
+
+Again, if you have any problems or questions, make a post with your actions in the `"Staff"` category, and tag another moderator if you want them to review your moderating actions.
+
+### Affrontare le soluzioni postate
+
+If a user replies in a help thread for the freeCodeCamp curriculum with a solution, remove it and use the **Solution Instead of Help** canned reply (or a similar response in your own words).
+
+If the OP (Original Poster) replies within a freeCodeCamp curriculum help thread with their final solution, blur it, and use the **Blurred Spoiler Solution** canned reply.
+
+If a user creates a thread asking for feedback on a solution, move the thread to the feedback subforum and blur the solution, as necessary. If the user is only posting the solution to show it off, then unlist the thread and use the **Solutions Thread** canned reply.
+
+### Utenti Minorenni
+
+Our [Terms of Service](https://freecodecamp.org/terms) require that freeCodeCamp users be at least 13 years of age. If a user reveals that they are under the age of 13, send them the message below, suspend their account, then email the link of their forum account to `support[at]freecodecamp.org` for their freeCodeCamp /learn and forum accounts removal.
+
+```markdown
+OGGETTO: Gli utenti al di sotto dei 13 anni di età non possono utilizzare il forum per i nostri Termini di Servizio.
+
+Ci è stato fatto notare che hai un età inferiore ai 13 anni. Secondo i [termini di servizio di freeCodeCamp](https://freecodecamp.org/terms), devi avere almeno 13 anni per utilizzare il sito o il forum. Elimineremo sia il tuo account freeCodeCamp che il tuo account del forum. Questa restrizione ci mantiene in conformità con le leggi degli Stati Uniti.
+
+Per favore, iscriviti nuovamente una volta compiuti 13 anni di età.
+
+Grazie per la comprensione.
+```
+
+### Account Deletion Requests
+
+If a user requests their account to be deleted, send the following:
+
+```markdown
+Deleting an account with many posts disrupts the flow of conversation, and could remove helpful information for other Campers.
+
+We can anonymize your account, which will remove your username along with any other public information associated with your forum account. Your posts will remain, but will be attributed to an anonymous user, and you will be unable to log in to the account, as it will no longer be associated with an email address.
+
+If you would like to proceed with this, please reply to this message with your consent.
+```
+
+If a user insists on having their account deleted, ask them to email `support[at]freecodecamp.org` with a link to their forum account.
+
+### Moderating Via Cell Phone
+
+Moderating the forum is possible via a cell phone but you may encounter some usage quirks. This is not an exhaustive list.
+
+- Quando provi a includere una "risposta pronta" in una risposta, se il menu non si apre (dopo aver cliccato sull'ingranaggio), clicca sull'area del testo e poi riprova.
+- La 'chiave inglese' del moderatore è nella parte inferiore del viewport ma se ci clicchi su e non riesci a vedere il pulsante "Select Posts" perché è fuori dal campo visivo, potresti aver di scorrere le opzioni, ma a volte ciò non funziona e in tal caso potrebbe essere necessario spostarsi su un monitor fisso o di un portatile.
+- A volte cliccare sul menu con tre puntini sotto un post può nascondere l'icona reply. Ricarica la pagina per recuperarla.
+
+## Moderazione di Facebook
+
+If you see anything that seems to break our [Code of Conduct](https://code-of-conduct.freecodecamp.org/), you should delete it immediately.
+
+Sometimes people will post things that they think are funny. They don't realize that what they said or what they shared could be interpreted as offensive. You should delete such posts, but not necessarily ban the person. Hopefully, the user will come to understand that what they posted was inappropriate because the post was deleted.
+
+But if it is an egregious offense that can't reasonably be attributed to a cultural difference or a misunderstanding of the English language. In that case, you should strongly consider blocking the member from the Facebook group.
+
+## Moderare Discord
+
+Here's how moderators deal with violations of our [Code of Conduct](https://code-of-conduct.freecodecamp.org/) on our chat server:
+
+> [!NOTE] Camperbot agisce come bot di moderazione e tutti i comandi utilizzano l'interfaccia di comando di Discord con la barra obliqua (slash). Puoi vedere la lista dei comandi digitando `/` in qualsiasi canale.
+
+1. **Assicurati che l'utente abbia violato intenzionalmente il [Codice di Condotta](https://code-of-conduct.freecodecamp.org).**
+
+ Non tutte le violazioni del [Codice di Condotta](https://code-of-conduct.freecodecamp.org) sono intenzionali. A new camper might post a large amount of code for help, unaware that this can be disruptive to the conversation. In questi casi puoi chiedergli di incollare il codice tramite servizi come CodePen o Pastebin.
+
+2. **Se un utente viola chiaramente e intenzionalmente il [Codice di Condotta](https://code-of-conduct.freecodecamp.org), il moderatore procederà come segue:**
+
+ Per violazioni minori, può essere emesso un avviso con il comando `/warn`. Per violazioni più importanti, puoi rimuovere un membro dal server temporaneamente con il comando `/kick`, o permanentemente con il comando `/ban`. In alcuni casi, un membro potrebbe aver solo bisogno di tempo per calmarsi e riflettere - il comando `/mute` ti permette di impedirgli di dialogare con la community per un determinato periodo. Un membro su cui è stato usato il comando mute può vedere le conversazioni, ma non può pubblicare messaggi o aggiungere reazioni.
+
+ Tutti i comandi di moderazione richiederanno un parametro `reason`, che dovrebbe essere una breve spiegazione del perché l'azione è stata intrapresa. Moderation actions done with the bot will be logged in `#mod-actions`, which allows us all to stay on the same page. Dovremmo evitare di utilizzare gli strumenti di moderazione integrati di Discord, in quanto non saranno registrati.
+
+ > [!WARNING] La ragione fornita al comando di moderazione sarà anche inclusa nel messaggio di notifica all'utente. Per favore, ricorda di essere professionale.
+
+3. **Creare una discussione privata**
+
+ Potrebbero esserci situazioni in cui hai bisogno di rivolgerti a un camper in privato. Questo non dovrebbe essere fatto tramite messaggi diretti, che possono portare a situazioni in cui tu sostieni una cosa e il camper ne sostiene un'altra. Invece, usa la funzione del bot per creare una discussione privata:
+
+ - Chiama il comando `/private`, dove `target` è l'utente con cui vuoi aprire un canale privato.
+ - Il bot creerà un nuovo canale, e vi aggiungerà l'utente menzionato e tutti i moderatori con il ruolo `Your Friendly Moderator`. Anche se vengono aggiunti al canale tutti i moderatori per trasparenza, il moderatore che ha chiamato il comando dovrebbe essere l'unico ad interagire con l'utente a meno che non abbia bisogno di assistenza.
+ - Quando la conversazione è conclusa, clicca il pulsante `❌ Close` _sul primo messaggio nel canale privato_ per fare in modo che il bot chiuda e cancelli il canale.
+
+4. **Cancellare i messaggi**
+
+ Our moderation bot is configured to log deleted messages automatically in the `#mod-actions` channel. Se un messaggio non è in linea con il nostro Codice di Condotta o non appropriato per la nostra comunità, in genere puoi eliminarlo con certezza.
+
+ Nota che se il messaggio contiene contenuti che violano i termini di servizio di Discord, dovrai segnalarlo tramite https://dis.gd/report **prima** di eliminarlo.
+
+5. **Non minacciare di prendere provvedimenti**
+
+ Se un utente infrange il [Codice di Condotta](https://code-of-conduct.freecodecamp.org), non minacciarlo di intraprendere un'azione da moderatore e non avvertirlo mai in pubblico. Invece, parlagli privatamente usando il comando `/private` del bot o usa i comandi di moderazione del bot.
+
+ Se una violazione era chiaramente involontaria e non richiede una sospensione o una conversazione privata, rendi l'utente consapevole delle sue azioni senza farlo sembrare un ammonimento.
+
+ Per esempio:
+
+ - Un utente posta un muro di testo per chiedere aiuto:
+
+ Moderatore: **@username** Per favore usa CodePen o Pastebin quando posti una grande quantità di codice.
+
+ - O se devi proprio spiegare il perché:
+
+ Moderatore: **@username** Per favore usa CodePen o Pastebin quando riporti grandi quantità di codice, perché disturba la chat per tutti e può essere considerato spam secondo il nostro [Codice di Condotta](https://code-of-conduct.freecodecamp.org).
+
+ - Per violazioni minori e non intenzionali del [Codice di Condotta](https://code-of-conduct.freecodecamp.org):
+
+ Moderatore: Questo è un promemoria amichevole per invitare tutti a seguire il [Codice di Condotta](https://code-of-conduct.freecodecamp.org): https://code-of-conduct.freecodecamp.org/
+
+6. **Non vantarti di essere un moderatore**
+
+ Non vederti come se fossi al di sopra della comunità. **Fai parte della community.**E la community si è affidata a te per proteggere qualcosa di raro che tutti condividiamo: un luogo _accogliente_ per i nuovi sviluppatori.
+
+ Se ti vanti di essere un moderatore, le persone potrebbero sentirsi a disagio intorno a te, nello stesso modo in cui si sentono a disagio accanto a un agente di polizia, anche quando non hanno fatto niente di male. Questa è semplicemente la natura umana.
+
+7. **Non contraddire gli altri moderatori**
+
+ Se sei in disaccordo con l'azione di un moderatore, parla con loro in privato o faglielo presente nel canale #mod-chat. Non scavalcare mai l'azione di un moderatore e non contraddire mai gli altri moderatori pubblicamente. Invece, discuti a mente fredda su `#mod-chat` e convinci il moderatore che egli stesso dovrebbe annullare il ban o cambiare il proprio punto di vista.
+
+ _Ricorda: siamo tutti nella stessa squadra. Vogliamo dare dignità al ruolo dei moderatori ed essere un fronte unito._
+
+8. **Parla con gli altri moderatori**
+
+ Abbiamo una stanza `#mod-chat` solo per i moderatori. Usala! Se ti senti a disagio nel gestire una determinata situazione, chiedi aiuto ad altri moderatori. Se pensi che qualcosa dovrebbe essere discusso, fallo. Fai parte di una squadra, e noi apprezziamo il contributo di ogni membro! Anche se sei totalmente in disaccordo con qualcosa presente in queste linee guida o nel [Codice di Condotta](https://code-of-conduct.freecodecamp.org)!
+
+9. **Inattività temporanea**
+
+ Se non sarai attivo come Moderatore per un po' a causa di vacanze, malattia o qualsiasi altro motivo, assicurati di farlo sapere agli altri nel canale `#mod-chat`. In questo modo sapremo se possiamo contare sul fatto che sei regolarmente attivo sul server oppure no.
+
+## Come diventare un moderatore
+
+Suppose you are helping people in the community consistently over time. In that case, our moderator team will eventually take notice, and one of them will mention you as a possible moderator to [our staff](https://forum.freecodecamp.org/g/Team). There are no shortcuts to becoming a moderator.
+
+If you are approved, we will add you to our moderator teams on [GitHub](https://github.com/orgs/freeCodeCamp/teams/moderators), [forum](https://forum.freecodecamp.org/g/moderators), chat, etc.
+
+> [!NOTE] Per GitHub: Dopo essere stato accettato come moderatore, riceverai l'invito a un repository Github. Dovrai andare all'[invito all'Organizzazione GitHub di freeCodeCamp](https://github.com/orgs/freeCodeCamp/invitation) per essere in grado di accettare l'invito.
+>
+> Questo è necessario per consentirci di darti i permessi di scrittura su alcuni dei nostri repository.
+
+## How Our Contributors Room Works
+
+Anyone is welcome in the [contributors room on our chat server](https://discord.gg/PRyKn3Vbay). It is the designated chat room for moderators and other campers who contribute to our community in any number of ways, including through study groups.
+
+We assume contributors will read anything in this room that directly mentions them with an **@username**. Everything else is optional, but feel free to read anything anyone posts in there and interact.
+
+## Dealing with Solicitors
+
+You may be approached by organizations who want to partner or co-brand with freeCodeCamp somehow. Once you realize that this is what they're after, **please stop talking to them** and tell them to email `team[at]freecodecamp.org`.
+
+We get proposals like this all the time, and the staff are in the best position to judge whether such a relationship will be worth it for our community (and it rarely is).
+
+## Dealing with (Mental) Health Inquiries
+
+You may come across situations where users seek medical advice or are dealing with mental health issues and are looking for support.
+
+As a matter of policy, you should avoid talking privately about these matters. Should the situation reflect back to freeCodeCamp, we want to have the conversation(s) on record. Make it clear that we are not medical professionals and that you encourage the user to find professional help.
+
+As difficult as it sometimes can be, avoid giving any tips or advice and rather point the user in the direction of seeking professional help!
+
+If this happens on our chat server: Create a private channel for the user and the moderator team. This can be done with the bot's `private` command.
+
+- All'utente viene garantita privacy.
+- La chat pubblica non è più interrotta.
+- Altri membri del team possono contribuire, nel caso tu sia a disagio nell'affrontare la situazione da solo.
+
+Helpful URLs:
+
+http://suicide.org/international-suicide-hotlines.html
+
+## A Note on Free Speech
+
+Sometimes people will defend something offensive or incendiary that they said as "free speech."
+
+This XKCD comic summarizes perfectly most communities' thoughts on free speech.
+
+
+
+Thanks for reading this, and thanks for helping the developer community!
diff --git a/src/content/docs/it/moderator-onboarding-guide.md b/src/content/docs/it/moderator-onboarding-guide.md
new file mode 100644
index 00000000..9be367cf
--- /dev/null
+++ b/src/content/docs/it/moderator-onboarding-guide.md
@@ -0,0 +1,54 @@
+---
+title: La guida di onboarding ufficiale del moderatore di freeCodeCamp
+---
+
+This guide will help new moderators get up and running with the processes and procedures followed by experienced moderators on the freeCodeCamp community forum and other official communities we foster.
+
+> [!NOTE] Se non hai ancora letto [Il manuale del moderatore](https://contribute.freecodecamp.org/#/i18n/italian/moderator-handbook) dovresti iniziare da lì.
+
+## Il Forum
+
+### Primi Passi
+
+La prima cosa che puoi notare dopo aver ricevuto lo status di moderatore sul forum è che la tua interfaccia sarà un po' diversa, con nuovi strumenti da admin per esplorare e accedere al subforum Mod-Team.
+
+Alcuni dei nuovi strumenti appariranno all'interno di una nuova voce di menu che assomiglia a una chiave inglese. Alcuni appariranno come nuove schede o pulsanti, o anche nuove opzioni abilitate nei menu del forum.
+
+Per acquisire familiarità con i nuovi strumenti e poteri, puoi combinare uno o più dei seguenti metodi durante la prima settimana con questo ruolo elevato:
+
+:::tip
+I primi due sono i più importanti.
+:::
+
+### Acquisisci familiarità con gli strumenti admin di Discourse
+
+The freeCodeCamp forum is a Discourse forum and follows many of the same guidelines of other forums built on Discourse. Per iniziare a prendere confidenza con il ruolo di moderatore di Discourse, inizia a leggere la [guida per i nuovi utenti](https://meta.discourse.org/t/discourse-new-user-guide/96331) di Discourse e la[guida per i nuovi moderatori](https://meta.discourse.org/t/discourse-moderation-guide/63116) di Discourse.
+
+### Seguire un moderatore
+
+Tutte le azioni da moderatore possono essere seguite rivedendo gli [action log](https://forum.freecodecamp.org/admin/logs/staff_action_logs). The actions taken by automated tools like `Akismet` or `system` can mostly be ignored until they result in a post that needs to be reviewed. I post da revisionare appariranno nell'area [Review](https://forum.freecodecamp.org/review) del forum.
+
+Per la prima settimana o giù di lì, presta attenzione a ciò che viene contrassegnato e ciò che è in fase di revisione, e confrontalo con le azioni intraprese sui post contrassegnati. Potresti vedere l'account di sistema contrassegnare un post perché l'utente lo ha creato troppo rapidamente. In molti casi, i moderatori cancelleranno il flag del post cliccando sul pulsante "Approve Post" o contrassegnandolo come "Not Spam" (a seconda del tipo di flag).
+
+Comunemente, i flag di spam possono anche essere usati da membri o moderatori. Common duplicitous behavior would involve opening an account, making a post that seems harmless, then editing that post later on to add a link to an external site to advertise it. In this case, the member account is usually fairly new and has only made this one post thus far, which indicates that the account was opened solely for spamming the community. The decision should be made to delete the account after the first offense in this case. The same applies to accounts whose first post is deemed to be spam.
+
+Puoi notare moderatori che eseguono una procedura chiamata 'split topic'. Questo può essere un caso in cui un moderatore ha smistato un post che è stato fatto erroneamente su un argomento esistente in un nuovo argomento, o un moderatore ha unito argomenti duplicati che un singolo utente ha creato per la stessa domanda. Guardare questa procedura metterà in evidenza le diverse azioni e le loro cause.
+
+Another useful feature that becomes enabled for all moderators is the ability to post a "Canned Reply" which is a pre-written response that was worked out with the mod team to quickly respond to some well-known and repetitive scenarios. Questi comprendono:
+
+- Accogliere un nuovo membro del forum che ha postato del codice senza una domanda -> "Welcome - remind question"
+- Ricordare ai membri di non postare il codice delle soluzioni ma di fornire indizi e suggerimenti -> "Solutions Instead of Help"
+- Rispondere a una situazione in cui il codice di qualcuno funziona per te ma non per lui -> "Browser Issues"
+- Incoraggiare i membri ad aprire una issue su GitHub quando viene trovato un possibile bug -> "Bug Report"
+
+Ce ne sono altre, che puoi leggere per acquisire familiarità con i rispettivi utilizzi. You can also find discussions around the templates in the mod-team subforum, and you are welcome to ask questions if you aren't sure how a template should be used.
+
+### Leggere i post del subforum Mod-Team
+
+The Mod-Team subforum contains several posts from past and current moderators discussing the different requirements and/or challenges of moderating the forum.
+
+Reading back through these posts can help uncover some of the underlying goals and processes that concern forum moderators. Some of the threads may also shed some light on the handling of spam and inappropriate content on the forum.
+
+## Dove chiedere aiuto
+
+Per ottenere aiuto con delle situazioni con cui non ti senti a tuo agio o che non sei sicuro di come gestire, discuti con i tuoi compagni moderatori nel [Subforum Mod-Team](https://forum.freecodecamp.org/c/mod-team/4) o nella [#mod-chat](https://discord.com/channels/692816967895220344/693157007418720277) su Discord.
diff --git a/src/content/docs/it/reply-templates.md b/src/content/docs/it/reply-templates.md
new file mode 100644
index 00000000..43bbabfd
--- /dev/null
+++ b/src/content/docs/it/reply-templates.md
@@ -0,0 +1,255 @@
+---
+title: Reply Templates
+---
+
+These are some of the standard reply templates that you may use while reviewing pull requests and triaging issues/pull requests.
+
+> You can make your own saved replies with GitHub's built-in [saved replies](https://github.com/settings/replies/) feature or use the ones below.
+
+## Thank You
+
+```markdown
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 🎉
+```
+
+## Thank you and congrats
+
+> For thanking and encouraging first-time contributors.
+
+```markdown
+Hi @username. Congrats on your first pull request (PR)! 🎉
+
+Thank you for your contribution to the page! 👍
+We are happy to accept these changes and look forward to future contributions. 📝
+```
+
+## Build Error
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes but it looks like there is an error with the CI build. ⚠️
+
+Once you resolve these issues, we will be able to review your PR and merge it. 😊
+
+---
+
+Feel free to reference the [contributing guidelines](https://contribute.freecodecamp.org/#/how-to-work-on-coding-challenges.md?id=testing-challenges) for instructions on running the CI build locally. ✅
+```
+
+## Syncing Fork
+
+> When PR is not up to date with the `main` branch.
+
+````markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like the branch is not up to date. ⚠️
+
+To resolve this error, you will have to sync the latest changes from the `main` branch of the `freeCodeCamp/freeCodeCamp` repo.
+
+Using the command line, you can do this in three easy steps:
+
+```bash
+git remote add upstream git://github.com/freeCodeCamp/freeCodeCamp.git
+
+git fetch upstream
+
+git pull upstream main
+```
+
+If you're using a GUI, you can simply `Add a new remote...` and use the link `git://github.com/freeCodeCamp/freeCodeCamp.git` from above.
+
+Once you sync your fork and pass the build, we will be able to review your PR and merge it. 😊
+
+---==crwdHRulesLBB_2_BBsuleRHdwrc==
+
+Feel free to reference the ["Syncing a fork"](https://help.github.com/articles/syncing-a-fork/) article on GitHub for more insight on how to keep your fork up-to-date with the upstream repository. 🔄
+````
+
+## Merge Conflicts
+
+> When PR has merge conflicts that need to be resolved.¹
+
+```markdown
+Hey @username
+
+We would love to be able to merge your changes, but it looks like you have some merge conflicts. ⚠️
+
+Once you resolve these conflicts, we will be able to review your PR and merge it. 😊
+
+---
+
+If you're not familiar with the merge conflict process, feel free to look over GitHub's guide on ["Resolving a merge conflict"](https://help.github.com/articles/resolving-a-merge-conflict-on-github/). 🔍️
+
+Also, it's good practice on GitHub to write a brief description of your changes when creating a PR. 📝
+```
+
+¹ If a first-time-contributor has a merge conflict, maintainers will resolve the conflict for them.
+
+## Duplicate
+
+> When PR is repetitive or a duplicate.
+
+```markdown
+Hey @username
+
+This PR seems to make similar changes as the existing PR <#number>. As such, we are going to close this as a duplicate.
+
+If you feel you have additional changes to expand upon this PR, please feel free to push your commits and request this PR be reopened.
+
+Thanks again! 😊
+
+---
+
+If you have any questions, feel free to ask questions on the ["Contributors" category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay).
+```
+
+## Closing Invalid Pull Requests
+
+> When PR is invalid.
+
+```markdown
+Hey there,
+
+Thank you for opening this pull request.
+
+This is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
+
+Thank you and happy coding.
+```
+
+> When PR adds links to external resources.
+
+```markdown
+Thank you for your pull request.
+
+We are closing this pull request. Please suggest links and other details to add the challenge's corresponding guide post through [a forum topic](https://forum.freecodecamp.org/new-topic?category=Contributors&title=&body=**What%20is%20your%20hint%20or%20solution%20suggestion%3F**%0A%0A%0A%0A%0A**Challenge%3A**%0A%0A%0A**Link%20to%20the%20challenge%3A**) instead.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## Adding Comment About Newbie Mistakes
+
+```markdown
+Hello,
+
+Firstly, thank you for submitting this pull request!
+
+As you navigate through the process, we have a PR checklist to ensure consistency and quality in our contributions. We kindly ask that you genuinely follow through with each point. This not only facilitates the review process but also demonstrates a mutual respect for the community's efforts.
+
+If you're unfamiliar with certain aspects, our [contributing guidelines](https://contribute.freecodecamp.org) are a helpful resource to get you up to speed.
+
+
+**Friendly Pointers (click to expand)**
+
+1. **Editing on GitHub:** While it's possible to edit files directly on GitHub, it's typically better not to. This helps avoid inadvertent mistakes like typos that can disrupt tests.
+
+2. **Pull Request
+ title: ** Please ensure the PR title follows [our convention](https://contribute.freecodecamp.org/#/how-to-open-a-pull-request?id=prepare-a-good-pr-title).
+
+3. **Linking Issues:** Please ensure you link issues using the designated method. Simply update the `XXXXXX` in the PR description to include the issue number. This keeps our records organized and clear.
+
+4. **Engaging with the Team:** We know you're eager, but kindly keep mentions and review requests limited. Our maintainers are always on the lookout and will attend to PRs in the order they come in.
+
+5. **Branch Management:** It's a good practice not to work directly off your `main` branch. Creating separate branches for different changes allows you to smoothly update your PR even as the main repository progresses.
+
+
+
+Please note, there's no need to close this PR. If you have questions or need guidance refining your contribution, don't hesitate to ask. Our community is here to assist.
+
+Thank you for your enthusiasm in contributing to our project. We eagerly await more contributions from you!
+
+**Happy Contributing!** 🌟
+```
+
+## PR Opened While Issue Is Not Triaged
+
+> When a PR is opened for an issue that hasn't been triaged and marked as ready for contribution.
+
+```markdown
+Hi there,
+
+Thanks for creating this pull request.
+
+The linked issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to update this pull request to reflect the issue consensus. Until the issue is open for contribution, we will not be able to review your pull request.
+```
+
+## Closing Invalid Issues
+
+> When an issue relates to the camper's code.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the **"Get Help"** button on the challenge on freeCodeCamp and choose the **"Ask for help"** option, which will help you create a question in the right part of the forum. Volunteers on the forum usually respond to questions within a few hours and can help determine if there is an issue with your code or the challenge's tests.
+
+If the forum members determine there is nothing wrong with your code, you can request this issue to be reopened.
+
+Thank you and happy coding.
+```
+
+> When an issue is a duplicate of an earlier issue.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that this issue appears to be very similar to issue #XXXXX, so we are closing it as a duplicate.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+> When an issue is fixed in staging.
+
+```markdown
+Thank you for reporting this issue.
+
+This is a standard message notifying you that the problem you mentioned here is present in production, but that it has already been fixed in staging. This means that the next time we push our staging branch to production, this problem should be fixed. Because of this, we're closing this issue.
+
+If you think we're wrong in closing this issue, please request for it to be reopened and add further clarification. Thank you and happy coding.
+```
+
+## `first timer only` Issues
+
+> When an issue is deemed to be eligible for first-time code contributors.
+
+```markdown
+Thanks for opening this issue.
+
+This looks like something that can be fixed by "first-time" code contributors to this repository. Here are the files that you should be looking at to work on a fix:
+
+List of files:
+
+1. ...
+2. ...
+3. ...
+
+Please make sure you read our [guidelines for contributing](https://contribute.freecodecamp.org/#/), we prioritize contributors following the instructions in our guides. Join us in our [chat room](https://discord.gg/PRyKn3Vbay) or our [forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing; our moderators will guide you through this.
+
+Sometimes we may get more than one pull request. We typically accept the most quality contribution followed by the one that is made first.
+
+Happy contributing.
+```
+
+## Requests for Assignment
+
+```md
+We typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+
+Issues labeled with `help wanted` or `first timers only` are open for contributions.
+
+Please make sure you read [our guidelines for contributing](https://contribute.freecodecamp.org/#/). We prioritize contributors following the instructions in our guide. Join us in [our chat room](https://discord.gg/PRyKn3Vbay) or [the forum](https://forum.freecodecamp.org/c/contributors/3) if you need help contributing - our community will be happy to assist you.
+```
+
+## Requests for Assignment While Issue Is Not Triaged
+
+> When a contributor requests for assignment but the issue hasn't been triaged or marked as ready for contribution.
+
+```md
+Hi there,
+
+Thanks for your interest in contributing.
+
+This issue has not been triaged yet, and a solution has not been agreed upon. Once the issue is open for contribution, you are welcome to create a pull request to reflect the issue consensus. Please also note that we typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue.
+```
diff --git a/src/content/docs/it/security-hall-of-fame.md b/src/content/docs/it/security-hall-of-fame.md
new file mode 100644
index 00000000..bd350992
--- /dev/null
+++ b/src/content/docs/it/security-hall-of-fame.md
@@ -0,0 +1,14 @@
+---
+title: Report responsabile - Hall of Fame
+---
+
+Apprezziamo qualsiasi notifica responsabile di vulnerabilità che possa impattare l'integrità delle nostre piattaforme e i nostri utenti. Se sei interessato a contribuire alla sicurezza della nostra piattaforma, leggi la nostra [politica di sicurezza descritta qui](security).
+
+Anche se al momento non offriamo ricomplete, siamo grati a queste fantastiche persone che ci aiutano a mantenere la piattaforma al sicuro per tutti:
+
+- Mehul Mohan da [codedamn](https://codedamn.com) ([@mehulmpt](https://twitter.com/mehulmpt)) - [Vulnerability Fix](https://github.com/freeCodeCamp/freeCodeCamp/blob/bb5a9e815313f1f7c91338e171bfe5acb8f3e346/client/src/components/Flash/index.js)
+- Peter Samir https://www.linkedin.com/in/peter-samir/
+- Laurence Tennant ([@hyperreality](https://github.com/hyperreality)) lavorando con IncludeSecurity.com - [GHSA-cc3r-grh4-27gj](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-cc3r-grh4-27gj)
+- Michal Biesiada ([@mbiesiad](https://github.com/mbiesiad)) - [GHSA-6c37-r62q-7xf4](https://github.com/freeCodeCamp/freeCodeCamp/security/advisories/GHSA-6c37-r62q-7xf4)
+
+> **Thank you for your contributions :pray:**
diff --git a/src/content/docs/it/security.md b/src/content/docs/it/security.md
new file mode 100644
index 00000000..54473f6e
--- /dev/null
+++ b/src/content/docs/it/security.md
@@ -0,0 +1,56 @@
+---
+title: Politica di sicurezza di freeCodeCamp.org
+---
+
+Questo documento delinea la nostra politica di sicurezza per i codebase, le piattaforme su cui operiamo e come riportare delle vulnerabilità.
+
+## Segnalare una vulnerabilità
+
+> [!NOTE] Se pensi di aver trovato una vulnerabilità, **per favore riportala responsabilmente**. Non creare una issue su GitHub per problemi di sicurezza. Invece, segui questa guida.
+
+### Linee guida
+
+Apprezziamo la notifica responsabile di vulnerabilità che possa impattare l'integrità delle nostre piattaforme e i nostri utenti. Nell'interesse di risparmiare il tempo di tutti, ti incoraggiamo a riportare vulnerabilità tenendo i seguenti punti a mente:
+
+1. Assicurati di star usando l'**ultima** versione **aggiornata** e **stabile** del tuo sistema operativo e del browser web che sono disponibili sulla tua macchina.
+2. Consideriamo l'ultilizzo di strumenti e utility online per riportare problemi con le configurazioni SPF & DKIM, o test SSL Server, nella categoria ["beg bounties"](https://www.troyhunt.com/beg-bounties) e non siamo in grado di rispondere a questi report.
+3. While we do not offer any bounties or swags at the moment, we'll be happy to list your name in our [Hall of Fame](security-hall-of-fame) list, provided the reports are not low-effort.
+
+### Segnalare
+
+Dopo aver confermato le linee guida di qui sopra, sentiti libero di mandare una mail a `possible-security-issue [at] freecodecamp.org`. Puoi anche mandare un messaggio crittografato PGP a `flowcrypt.com/me/freecodecamp`.
+
+Una volta che riporti una vulnerabilità, la investigheremo e ci assicureremo che non sia un falso positivo. Se abbiamo bisogno di chiarimenti e dettagli, ti ricontatteremo. Puoi fare segnalazioni separate per ogni problema che trovi. Per favore nota che non saremo in grado di rispondere a qualsiasi problema che pensiamo sia al di fuori delle linee guida.
+
+## Platforms and Codebases
+
+Ecco una lista delle piattaforme e codebase per cui accettiamo segnalazioni:
+
+### Piattaforma di apprendimento
+
+| Versione | Branch | Supportata | Website attivo |
+| ---------- | -------------- | ---------- | ------------------------ |
+| production | `prod-current` | Sì | `freecodecamp.org/learn` |
+| staging | `prod-staging` | Sì | `freecodecamp.dev/learn` |
+| sviluppo | `main` | No | |
+
+### Piattaforma di pubblicazione
+
+| Versione | Supportata | Website attivo |
+| ----------- | ---------- | ---------------------------------- |
+| production | Sì | `freecodecamp.org/news` |
+| localizzata | Sì | `freecodecamp.org//news` |
+
+### App mobile
+
+| Versione | Supportata | Website attivo |
+| ---------- | ---------- | ---------------------------------------------------------------- |
+| production | Sì | `https://play.google.com/store/apps/details?id=org.freecodecamp` |
+
+### Altre Piattaforme
+
+Oltre queste, accettiamo report per repository ospitate su GitHub sotto l'organizzazione freeCodeCamp.
+
+### Altre Applicazioni self-hosted
+
+Facciamo l'host noi stessi di alcune delle nostre piattaforme usando software open-source come Ghost & Discourse. Se stai riportando una vulnerabilità per favore assicurati che non sia un bug nel software a monte.
diff --git a/src/content/docs/it/troubleshooting-development-issues.md b/src/content/docs/it/troubleshooting-development-issues.md
new file mode 100644
index 00000000..3cf8ea62
--- /dev/null
+++ b/src/content/docs/it/troubleshooting-development-issues.md
@@ -0,0 +1,95 @@
+---
+title: Troubleshooting Development Issues
+---
+
+If you are facing an issue, there is a high chance that the resolution is in this documentation.
+
+## Issues with Installing the Recommended Prerequisites
+
+Sviluppiamo regolarmente sui sistemi operativi più nuovi o più popolari come macOS 10.15 o successivi, Ubuntu 18.04 e Windows 10 (con WSL2).
+
+Ti raccomandiamo di fare ricerche sui tuoi problemi specifici usando risorse come Google, Stack Overflow e Stack Exchange. C'è una buona probabilità che qualcuno abbia incontrato lo stesso problema e ci sia già una risposta alla tua domanda specifica.
+
+Se sei su un sistema operativo diverso o continui ad avere dei problemi, visita [ottenere aiuto](#ottenere-aiuto).
+
+:::caution
+Per favore, evita di creare issue su GitHub per problemi con i prerequisiti. Sono al di fuori dell'ambito di questo progetto.
+:::
+
+## Issues with Missing UI, Fonts, Language Strings, or Build Errors
+
+When you build the client, Gatsby will cache the fonts, language strings, and UI. Se uno di loro non è memorizzato nella cache, esegui quanto segue:
+
+```bash
+pnpm run clean
+pnpm install
+pnpm run seed
+pnpm run develop
+```
+
+O
+
+Usa la scorciatoia
+
+```
+pnpm run clean-and-develop
+```
+
+If you continue to face issues with the build, cleaning up the workspace is recommended.
+
+Usa `git clean` in modalità interattiva:
+
+```
+git clean -ifdX
+```
+
+
+
+ Come pulire i file git non tracciati (screenshot)
+
+
+
+
+
+
+## Issues with API, login, Challenge Submissions, etc.
+
+If you can't sign in, and instead you see a banner with an error message saying that the error will be reported to freeCodeCamp, please double-check that your local port `3000` is not in use by a different program.
+
+#### **From Terminal:**
+
+```bash
+netstat -a | grep "3000"
+
+tcp4 0 0 0.0.0.0:3000 DESKTOP LISTEN
+```
+
+## Issues Signing Out while Navigating
+
+Durante lo sviluppo, la sessione viene memorizzata come cookie. Cancellarli ti farà uscire dal tuo account di sviluppo.
+
+Ti disconnetterai anche eseguendo `pnpm run seed:certified-user`. Sovrascriverà l'utente di sviluppo nel database locale.
+
+## Issue Getting 404 when Navigating Profile Page
+
+Quando provi a navigare su http://localhost:8000/developmentuser per visualizzare la pagina del profilo, Gatsby prende in consegna le pagine lato client, quindi otterrai una pagina 404 per il profilo utente quando lavori.
+
+C'è un pulsante "Preview Custom 404 Page", cliccalo per vedere il profilo.
+
+## Issues Installing Dependencies
+
+Se incontri degli errori durante l'installazione delle dipendenze, assicurati di non essere in una rete ristretta o che le impostazioni del tuo firewall non ti impediscano di accedere alle risorse.
+
+La prima configurazione può richiedere un po' di tempo a seconda della larghezza di banda della rete. Be patient, and if you are still stuck we recommend using Gitpod instead of an offline setup.
+
+> [!NOTE] Se stai usando un dispositivo Apple con Chip M1 per eseguire l'applicazione in locale, suggeriamo di usare Node v14.7 o superiore. Altrimenti potresti avere problemi con dipendenze come Sharp.
+
+## Working With Other Languages
+
+To see how the client renders in another language go to [testing the client app in a world language.](how-to-work-on-localized-client-webapp#Testing-the-Client-App-in-a-World-Language)
+
+## Getting Help
+
+Se sei bloccato e hai bisogno di aiuto, poni liberamente le tue domande nella [categoria 'Contributors' sul nostro forum](https://forum.freecodecamp.org/c/contributors) o [nella chat room per i contributori](https://discord.gg/PRyKn3Vbay).
+
+Potrebbe esserci un errore nella console del browser o in Bash / Terminale / Linea di comando che ti aiuterà a identificare il problema. Fornisci questo messaggio di errore nella descrizione del problema in modo che gli altri possano identificarlo più facilmente e aiutarti a risolverlo.
diff --git a/src/content/docs/it/user-token-workflow.md b/src/content/docs/it/user-token-workflow.md
new file mode 100644
index 00000000..bf11980e
--- /dev/null
+++ b/src/content/docs/it/user-token-workflow.md
@@ -0,0 +1,17 @@
+---
+title: Come funziona il flusso di lavoro con i token utente
+---
+
+I token utente sono utilizzati per identificare gli utenti con terze parti in modo tale che le sfide completate usando tali servizi possano essere salvate nell'account dell'utente.
+
+## How they are Created
+
+Al momento, i token sono utilizzati solo per completare le sfide della certificazione Database Relazionale. Un token viene creato quando un utente loggato clicca sui pulsanti "Clicca qui per iniziare il corso" o "Clicca qui per iniziare il progetto" per iniziare uno dei corsi o progetti della certificazione Database Relazionali.
+
+## When they Get Deleted
+
+Un token utente viene cancellato quando un utente fa log out da freeCodeCamp, resetta i propri progressi, cancella il proprio account, o cancella manualmente il token usando il widget nella pagina delle impostazioni.
+
+## How they Work
+
+I token sono memorizzati in una raccolta `UserToken` nel database. Ogni record ha un `_id` unico, che è il token, e un `user_id` che collega all'account dell'utente dalla collezione `user`. Il token è codificato usando JWT e inviato al client quando viene creato. Questo token codificato viene quindi dato a servizi di terze parti che ne hanno bisogno e inviato alla nostra API da loro quando una sfida è completata. Quando la nostra API lo riceve, è decodificato in modo da poter identificare l'utente che presenta una sfida e salvare la sfida completata nella lista delle sfide completate `completedChallenges` dell'utente.
diff --git a/src/content/docs/jp/authors-analytics-manual.md b/src/content/docs/jp/authors-analytics-manual.md
new file mode 100644
index 00000000..a33bb9ed
--- /dev/null
+++ b/src/content/docs/jp/authors-analytics-manual.md
@@ -0,0 +1,29 @@
+---
+title: Authors Analytics Manual
+---
+
+If you are an author with access to the publication's Google Analytics Property (News), you can use this guide to view your article engagement and search for articles by publication language.
+
+## Search by Language
+
+To search for engagement reports in a specific language:
+
+
+
+1. From the top dropdown menu, select `News`.
+1. From the sidebar, click on `Reports`.
+1. From the secondary sidebar, select `Engagement`.
+1. Click on `Pages and Screens`.
+1. In the search bar, type the subpath for the desired language.
+1. From the dropdown under the search bar, choose `Page path and screen class`.
+
+## Filter Reports by Author
+
+After arriving at the `Pages and Screens` reports mentioned above, use the following steps to filter the results by specific authors.
+
+
+
+1. Click on the `Add filter` button.
+1. From the side navigation include `Author`.
+1. From the `Dimensions values` dropdown, choose an author's name.
+1. Click on the `Apply` button to apply changes.
diff --git a/src/content/docs/jp/codebase-best-practices.md b/src/content/docs/jp/codebase-best-practices.md
new file mode 100644
index 00000000..2c334ee7
--- /dev/null
+++ b/src/content/docs/jp/codebase-best-practices.md
@@ -0,0 +1,190 @@
+---
+title: コードベースのベストプラクティス
+---
+
+## Styling a component
+
+We recommend styling components using our [design style guide](https://design-style-guide.freecodecamp.org/).
+
+The colors are defined in [`variable.css`](/client/src/components/layouts/variables.css), and the fonts are in [`fonts.css`](/client/src/components/layouts/fonts.css).
+
+We are strongly opinionated about adding new variables/tokens to the colors. After careful research, the colors have been chosen to respect the freeCodeCamp brand identity, developer experience, and accessibility.
+
+The `!important` keyword may be used to override values in some cases (e.g. accessibility concerns). You should add a comment describing the issue, so it doesn't get removed in future refactoring.
+
+### RTL support
+
+We are striving to support right-to-left (RTL) layout in the codebase for languages that are read in this direction. For this, you need to be mindful of how to style components. Here are some quick rules of thumb to follow:
+
+- Don't use `float` properties
+ - Use Flexbox and Grid layouts instead, as they have RTL support already built-in, and those will be easier to maintain and review.
+- Don't define the direction while using `margin` and `padding`: it may seem harmless to use `padding-right` and `margin-left`, but these directions aren't mirrored when the layout changes to RTL, and adding counter values for them in the RTL file makes maintaining the codebase harder.
+ - Use logical properties for them: You can add the same spacing by using `padding-inline-end` and `margin-inline-start`, and you won't need to worry about RTL layout, as they follow where the line starts and ends, and you won't need to add any extra values in the RTL files, so people won't need to remember to change the same values in two files.
+- Don't use `!important` in `font-family`: RTL layout uses different fonts compared to the LTR layout, when you add `!important` in the `font-family` property it affects the RTL layout too.
+
+## General JavaScript
+
+In most cases, our [linter](how-to-setup-freecodecamp-locally#follow-these-steps-to-get-your-development-environment-ready) will warn of any formatting which goes against this codebase's preferred practice.
+
+It is encouraged to use functional components over class-based components.
+
+## Specific TypeScript
+
+### Migrating a JavaScript File to TypeScript
+
+#### Git のファイル履歴を保持する
+
+Sometimes changing the file from `.js` to `.ts` (or `.tsx`) causes the original file to be deleted, and a new one created, and other times the filename just changes - in terms of Git. Ideally, we want the file history to be preserved.
+
+The best bet at achieving this is to:
+
+1. ファイル名を変更する
+2. フラグ `--no-verify` でコミットして、Husky がリントエラーについて不平を言うことを防ぐ
+3. 別のコミットで、移行のために TypeScript にリファクタリングする
+
+> [!NOTE] VScode 等のエディターは、ファイルが削除され新しいファイルが作成されたことを表示する可能性があります。 `git add .` に CLI を使用すると、VSCode はファイル名が変更されたものとしてステージに表示します。
+
+### Naming Conventions
+
+#### インターフェースと型
+
+For the most part, it is encouraged to use interface declarations over type declarations.
+
+React Component Props - suffix with `Props`
+
+```typescript
+interface MyComponentProps {}
+// type MyComponentProps = {};
+const MyComponent = (props: MyComponentProps) => {};
+```
+
+React Stateful Components - suffix with `State`
+
+```typescript
+interface MyComponentState {}
+// type MyComponentState = {};
+class MyComponent extends Component {}
+```
+
+Default - object name in PascalCase
+
+```typescript
+interface MyObject {}
+// type MyObject = {};
+const myObject: MyObject = {};
+```
+
+
+
+
+
+## Redux
+
+### Action Definitions
+
+```typescript
+enum AppActionTypes = {
+ actionFunction = 'actionFunction'
+}
+
+export const actionFunction = (
+ arg: Arg
+): ReducerPayload => ({
+ type: AppActionTypes.actionFunction,
+ payload: arg
+});
+```
+
+### How to Reduce
+
+```typescript
+// Base reducer action without payload
+type ReducerBase = { type: T };
+// Logic for handling optional payloads
+type ReducerPayload =
+ T extends AppActionTypes.actionFunction
+ ? ReducerBase & {
+ payload: AppState['property'];
+ }
+ : ReducerBase;
+
+// Switch reducer exported to Redux combineReducers
+export const reducer = (
+ state: AppState = initialState,
+ action: ReducerPayload
+): AppState => {
+ switch (action.type) {
+ case AppActionTypes.actionFunction:
+ return { ...state, property: action.payload };
+ default:
+ return state;
+ }
+};
+```
+
+### How to Dispatch
+
+Within a component, import the actions and selectors needed.
+
+```tsx
+// Add type definition
+interface MyComponentProps {
+ actionFunction: typeof actionFunction;
+}
+// Connect to Redux store
+const mapDispatchToProps = {
+ actionFunction
+};
+// Example React Component connected to store
+const MyComponent = ({ actionFunction }: MyComponentProps): JSX.Element => {
+ const handleClick = () => {
+ // Dispatch function
+ actionFunction();
+ };
+ return ;
+};
+
+export default connect(null, mapDispatchToProps)(MyComponent);
+```
+
+
+
+
+## API
+
+### Testing
+
+The `api/` tests are split into two parts:
+
+1. Unit tests
+2. Integration tests
+
+#### Unit Tests
+
+Unit tests isolate a single function or component. The tests do not need mocking, but will require fixtures.
+
+The unit tests are located in a new file adjacent to the file exporting that is being tested:
+
+```text
+api/
+├── src/
+│ ├── utils.ts
+│ ├── utils.test.ts
+```
+
+#### Integration Tests
+
+Integration tests test the API as a whole. The tests will require mocking and should not require fixtures beyond the database seeding data and a method for authentication.
+
+Typically, each integration test file will be directly related to a route. The integration tests are located in the `api/tests/` directory:
+
+```text
+api/
+├── tests/
+│ ├── settings.ts
+```
+
+## Further Literature
+
+- [TypeScript Docs](https://www.typescriptlang.org/docs/)
+- [TypeScript with React CheatSheet](https://github.com/typescript-cheatsheets/react#readme)
diff --git a/src/content/docs/jp/courses-vscode-extension.md b/src/content/docs/jp/courses-vscode-extension.md
new file mode 100644
index 00000000..a1a52f87
--- /dev/null
+++ b/src/content/docs/jp/courses-vscode-extension.md
@@ -0,0 +1,43 @@
+---
+title: VSCode 拡張機能「Courses」について
+---
+
+ここでは、[freeCodeCamp/courses-vscode-extension](https://github.com/freeCodeCamp/courses-vscode-extension) リポジトリのメンテナンス方針について説明します。このリポジトリには、[freeCodeCamp - Courses](https://marketplace.visualstudio.com/items?itemName=freeCodeCamp.freecodecamp-courses) 拡張機能のソースコードが含まれています。
+
+## 拡張機能を公開する
+
+新たな GitHub リリースが公開されると、自動的に GitHub Action が拡張機能を Visual Studio Marketplace へ公開します。
+
+1. 新しいバージョンの拡張機能をパッケージ化します。
+
+```bash
+npm run pack --
+```
+
+`` は `major`, `minor`, `patch` のいずれかになります。
+
+2. `main` へ新しいバージョンをプッシュします。
+
+```bash
+git commit -am "(): "
+git push
+```
+
+Optionally, you can push directly to `upstream/main`, but opening a new PR is recommended for a sanity check.
+
+3. Create a new GitHub Release using the GitHub UI:
+
+- Correctly increment the version number, when creating a new tag.
+- Upload the `.vsix` file with the release.
+- Publish the release, and confirm the action succeeded.
+
+> [!NOTE] Creating a release requires write access to the `freeCodeCamp/courses-vscode-extension` repository.
+
+## 拡張機能を手動で公開する
+
+A manual upload to the Visual Studio Marketplace can be achieved, by following these steps:
+
+1. Visit https://marketplace.visualstudio.com/ and sign in
+2. Navigate to the [freeCodeCamp Publisher page](https://marketplace.visualstudio.com/manage/publishers/freecodecamp)
+3. Select the relevant extension, and select `Update`
+4. Upload the file from your local files
diff --git a/src/content/docs/jp/curriculum-file-structure.md b/src/content/docs/jp/curriculum-file-structure.md
new file mode 100644
index 00000000..cd1ec652
--- /dev/null
+++ b/src/content/docs/jp/curriculum-file-structure.md
@@ -0,0 +1,109 @@
+---
+title: カリキュラムファイルの構造
+---
+
+名前が付けられた `curriculum` ディレクトリ内に、コア教育コンテンツがあります。 このページでは、それらのファイルがどのように整理されているのかを説明します。
+
+## 用語
+
+カリキュラム内容を説明する際に使用する用語がいくつかあります。
+
+- `certification`: この場合、ユーザーが求める実際の認定講座を意味します。 これは、スーパーブロック名とは別のものです。
+- `superBlock`: スーパーブロックは、チャレンジの最上位レベルのコレクションです。 Each superblock corresponds to a certification in the curriculum (e.g. Responsive Web Design).
+- `block`: ブロックは、スーパーブロック内のセクションです。 A block corresponds to a group of challenges in a given certification (e.g. Basic HTML and HTML5)
+- `challenge` : A challenge is a single lesson within the curriculum (e.g. Say Hello to HTML Elements)
+
+## ファイルツリー
+
+これらの用語を使用して、以下のようにファイル構造が定義されます。
+
+
+```md
+
+curriculum/
+├─ _meta/
+│ ├─ {block}/
+│ │ ├─ meta.json
+├─ {language}/
+│ ├─ {superBlock}/
+│ │ ├─ {block}/
+│ │ │ ├─ {challenge}.md
+```
+
+## `_meta` ディレクトリ
+
+`_meta` ディレクトリは、`.json` ファイルを含む特別なディレクトリです。 これらのファイルは、カリキュラム内の各ブロックに相当します。ブロックが属するスーパーブロックと、そのブロック内のチャレンジの順序を決めるために使用されます。
+
+## ファイル名を変更する
+
+認定講座、スーパーブロック名、ブロック名、もしくはチャレンジ名を変更する必要がある場合があります。 このセクションでは、ビルドエラーを避けるために必要な手順を概説します。
+
+:::danger
+カリキュラム構造内のファイル名を変更すると、メインの Web ページ上のコンテンツパス (または URL) が変更されることがあります。 変更ごとにリダイレクトを設定する必要があるため、注意して行ってください。
+:::
+
+### 認定講座名を変更する
+
+認定講座名を変更する際、関連付けられているスーパーブロック名も一緒に変更することも検討するでしょう。 以下は、認定講座名のみを変更するための手順です。
+
+1. `curriculum/challenges/_meta/{superBlock}-certificate` フォルダ名を変更します。
+1. フォルダの `meta.json` ファイル内で、`name`、`dashedName`、`challengeOrder` の値を新しい認定講座名に変更します。
+1. `curriculum/challenges/english/12-certificate` 内で、`{superBlock}-certificate` フォルダ名と、その中の YAML ファイル名を変更します。
+1. YAML ファイルの `title` 名を変更します。
+1. Rename the file and folder from step 3 for the rest of the curriculum languages.
+1. `client/src/redux/index.ts` を更新して、正しい `title` を使用してください。
+1. 必要に応じて、同じファイル内のスーパーブロックの `certSlug` を更新します。**注:** `certSlug` 名を変更すると、認定講座の URL が変更されるため、慎重に変更します。
+1. `client/src/resources/cert-and-project-map.ts` 内の `title` を新しい値に更新してください。**注:** ここで `title` を変更すると、関連する認定講座のスーパーブロックのページ が **壊れます**。 そのページは、スーパーブロックのタイトルに依存しており、認定講座タイトルと一致します。 スーパーブロック名も同時に変更したい場合があるからです。
+1. 手順 7 で、`certSlug` 名を変更した場合は、認定講座とネストされた `projects` の値を変更します。
+1. In `shared/config/certification-settings.js`, update the value of `certTypeTitleMap` to the new name.
+1. 手順 7 で `certSlug` を変更した場合、同じファイル内の `certSlugTypeMap` のキーを更新します。
+1. 必要に応じて、`client/src/client-only-routes/show-project-links.tsx` の `legacyCerts` 配列内の認定講座名を更新します。
+1. メイン `README.md` ファイル名を新しい名前に更新します。
+
+### スーパーブロック名を変更する
+
+> [!NOTE] スーパーブロック名を変更すると、新しいフォルダ名がパスとして使用され、「正しい」フォルダ名とみなされます。 その変更を反映するために、その他のすべての値を更新する必要があります。
+
+Also, you will likely want to rename the certificate and the `{superBlock}-projects` block when you rename a superBlock since they all share a name. 以下は、スーパーブロック名のみを変更するための手順です。
+
+1. スーパーブロックのフォルダ名を `curriculum/challenges/english` ディレクトリに変更します。
+1. _他の_ すべての `curriculum/challenges/{language}` ディレクトリのスーパーブロックフォルダ名を変更します。
+1. スーパーブロック内の各ブロックについて、`meta.json` ファイル内の `superBlock` の値をその dashedName に更新します。 ここでは、フォルダ名を変更する必要はありません。 ブロック名変更時に、フォルダ名を変更します。
+1. `client/src/pages/learn` 内のスーパーブロックのフォルダ名を変更します。
+1. 上記フォルダの `index.md` ファイルを更新し、`title` と `superBlock` の値を新しい名前に変更します。
+1. 上記の各ブロックフォルダで、`index.md` を更新して、正しい `superBlock` の値を使用します。
+1. `client/src/resources/cert-and-project-map.ts` ファイルで、ファイルの先頭にある認定講座パスと、スーパーブロックの `title` 値を更新します。**注:** ここで `title` を変更すると、スーパーブロックの実際の認定講座を表示する機能が **壊れます**。 表示機能は、スーパーブロックのタイトルに依存しており、認定講座タイトルと一致します。 認定講座名も同時に変更したいものです。
+1. Update the `superBlockCertTypeMap` key in `shared/config/certification-settings.js` to the new superBlock name.
+1. `client/src/assets/icons/index.tsx` のパス値を更新します。
+1. `client/i18n/locales` の言語ごとに、`intro.json` ファイルを更新して新しいスーパーブロック `dashedName` を使用します。英語のファイルの `title` も更新します。
+1. Check the `shared/config/i18n/all-langs.js` file to see if the superBlock is enabled in i18n builds. 使用しているすべての値を更新します。
+1. メイン `README.md` ファイルを新しい名前に更新します。
+
+### ブロック名を変更する
+
+以下の手順に従い、カリキュラムブロック名を変更します。
+
+1. `curriculum/challenges/english/{superBlock}` ディレクトリ内のブロックフォルダ名を変更します。
+1. 他の言語ディレクトリ _すべて_ において、同じブロックフォルダの名前を一致させます。 これらすべてが英語の構造と同じでないと、ビルドエラーになります。
+1. `_meta` ディレクトリ内のブロックフォルダ名を変更します。
+1. ブロックの `meta.json` ファイルの `name` と `dashedName` プロパティを更新します。
+1. Update the block folder in `client/src/pages/learn/{superBlock}`.
+1. In the `index.md` file of the above folder, update the `block` value in the frontmatter.
+1. In the `client/i18n/locales/{language}/intro.json` files, update the block name to the new name for all the languages. In the English `intro.json` file, update the `title` as well.
+1. Update the main `README.md` file to the new name.
+
+### チャレンジ名を変更する
+
+以下の手順に従い、単一のチャレンジファイル名を変更します。
+
+1. `urriculum/challenges/english` ディレクトリのチャレンジファイル名を変更します。
+1. ファイル内の `title` 名と `dashedName` 名を変更します。
+1. ファイル名と他の言語ディレクトリ _すべて_ のファイルの `dashedName` を変更して一致させます。
+1. 該当する `meta.json` ファイルのチャレンジ名を更新します。 ここでのチャレンジ名は、ビルドでは使用されませんが、チャレンジの順序を識別するためのユーザーフレンドリーな方法を提供します。
+1. チャレンジが認定講座プロジェクトの場合、 `curriculum/english/12-certificates/` 内の YAML ファイルを新しい名前に更新します。
+1. チャレンジが認定講座プロジェクトの場合、`client/src/resources/cert-and-project-map.ts` の `title` と `link` を更新します。
+1. チャレンジが認定講座プロジェクトの場合、メイン `README.md` ファイルを新しい名前に更新します。
+
+## `dashedName` プロパティ
+
+`dashedName` プロパティは、スーパーブロック、ブロック、またはチャレンジの URL パスを生成するために使用されます。これらは通常 `/utils/slugs.js` ヘルパーがファイル名に対して出力するものと一致します。
diff --git a/src/content/docs/jp/curriculum-help.md b/src/content/docs/jp/curriculum-help.md
new file mode 100644
index 00000000..82848d65
--- /dev/null
+++ b/src/content/docs/jp/curriculum-help.md
@@ -0,0 +1,165 @@
+---
+title: Using the Curriculum Helpers
+---
+
+The test runner has access to a few helpers that can assist with testing campers' code.
+
+## CSS Helper
+
+To instantiate the helper within a test block, use this:
+
+```js
+const helper = new __helpers.CSSHelp(document);
+```
+
+In that example, the `document` variable refers to the document object of the test runner's iframe.
+
+### Methods
+
+There are a few methods available for parsing and testing CSS.
+
+#### `.getStyle()`
+
+The `.getStyle()` method takes a CSS selector and returns a CSS style declaration object.
+
+For example, if the camper has written the following CSS:
+
+```css
+body {
+ background: linear-gradient(45deg, rgb(118, 201, 255), rgb(247, 255, 222));
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+}
+```
+
+You would get an object that looks like this:
+
+```js
+{
+ 0: "background-image",
+ 1: "background-position-x",
+ 2: "background-position-y",
+ 3: "background-size",
+ 4: "background-repeat-x",
+ 5: "background-repeat-y",
+ 6: "background-attachment",
+ 7: "background-origin",
+ 8: "background-clip",
+ 9: "background-color",
+ 10: "margin-top",
+ 11: "margin-right",
+ 12: "margin-bottom",
+ 13: "margin-left",
+ 14: "padding-top",
+ 15: "padding-right",
+ 16: "padding-bottom",
+ 17: "padding-left",
+ 18: "width",
+ 19: "height",
+ 20: "overflow-x",
+ 21: "overflow-y",
+ "accentColor": "",
+ "additiveSymbols": "",
+ "alignContent": "",
+ "alignItems": "",
+ ...
+}
+```
+
+This method allows you to test that specific properties have been set:
+
+```js
+assert.strictEqual(helper.getStyle('body')?.width, '100%');
+```
+
+The helper attaches a `.getPropVal()` method to the style declaration object that allows you to get the value of a specific property:
+
+```js
+assert.strictEqual(helper.getStyle('body').getPropVal('width'), '100%');
+```
+
+#### `.getCSSRules()`
+
+The `.getCSSRules()` takes an at-rule type from the union `media | fontface | import | keyframes`, and returns an array of CSS rules matching that at-rule.
+
+For example, if the camper has written the following code:
+
+```css
+@media (max-width: 100px) {
+ body {
+ background-color: green;
+ }
+}
+```
+
+Then the returned value of `helper.getCSSRules('media')` would be this array:
+
+```js
+[
+ {
+ conditionText: "(max-width: 100px)",
+ cssRules: [
+ selectorText: 'body',
+ style: CSSStyleDeclaration,
+ styleMap: StylePropertyMap,
+ cssRules: CSSRuleList,
+ type: 1,
+ ...
+ ],
+ cssText: "@media (max-width: 100px) {\n body { background-color: green; }\n}",
+ ...
+ }
+]
+```
+
+You can then test that the camper has written the correct media query:
+
+```js
+const hasCorrectHeight = helper
+ .getCSSRules('media')
+ .some(x => x.style.height === '3px');
+assert.isTrue(hasCorrectHeight);
+```
+
+#### `.getRuleListsWithinMedia()`
+
+The `.getRuleListsWithinMedia()` method takes a media text (e.g. `("max-width: 200")`) and returns the CSS rules within that media query.
+
+The return result is the equivalent of that media rule's `cssRules` property from the return value of `.getCSSRules("media")`.
+
+### Less Frequent Methods
+
+These methods are not as commonly used, but are available if needed.
+
+#### `.getStyleDeclarations()`
+
+The `.getStyleDeclarations()` method takes a CSS selector and returns an array of CSS style declaration objects (from the `.getStyle()` method).
+
+#### `.isPropertyUsed()`
+
+The `.isPropertyUsed()` method takes a CSS **property** and checks if it has been set/used anywhere in the camper's CSS.
+
+#### `.getStyleRule()`
+
+The `.getStyleRule()` method takes a CSS selector and returns the CSS Style Declaration, much like `.getStyle()`. However, the declaration returned from this method includes an additional `.isDeclaredAfter()` method which takes a selector and returns whether this rule is declared after the selector passed in.
+
+#### `.getStyleSheet()`
+
+The `.getStyleSheet()` method returns the camper's CSS, parsed into a CSS Style Sheet object.
+
+## Strip Content
+
+There are a few methods on the `__helpers` object to remove content from the camper's code.
+
+These do NOT need to be instantiated they are static methods.
+
+### Removing Comments
+
+Using `__helpers.removeCssComments()`, `__helpers.removeHTMLComments()`, or `__helpers.removeJSComments()` allows you to pass the camper's code (through the `code` variable) to remove comments matching the language's comment syntax.
+
+### Removing Whitespace
+
+Using `__helpers.removeWhitespace()` allows you to pass the camper's code (through the `code` variable) to remove all whitespace.
diff --git a/src/content/docs/jp/devops.md b/src/content/docs/jp/devops.md
new file mode 100644
index 00000000..18e69501
--- /dev/null
+++ b/src/content/docs/jp/devops.md
@@ -0,0 +1,989 @@
+---
+title: DevOps ハンドブック
+---
+
+このガイドは、インフラストラクチャスタックとプラットフォームをどのように維持するかを理解するのに役立ちます。 このガイドで、すべての操作について詳しく説明しているわけではありませんが、システムを理解する上での参考になります。
+
+Let us know if you have feedback or queries and we will be happy to clarify.
+
+## Flight Manual - Code Deployments
+
+This repository is continuously built, tested, and deployed to **separate sets of infrastructure (Servers, Databases, CDNs, etc.)**.
+
+これには 3 つのステップが含まれます。
+
+1. 新規変更 (修正および機能変更の両方を含む) は、プルリクエストによりプライマリ開発ブランチ (`main`) にマージされます。
+2. これらの変更は、一連の自動テストで実行されます。
+3. テストに合格すると、インフラストラクチャ上でのデプロイメントに対して変更をリリースします(または必要に応じて更新します)。
+
+### Building the codebase - Mapping Git Branches to Deployments
+
+通常、[`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) (デフォルトの開発ブランチ) は、[`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) ブランチに 1 日 1 回マージされ、分離されたインフラストラクチャにリリースされます。
+
+これは開発者とボランティアのコントリビューター用の中間リリースです。 「ステージング」または「ベータ」リリースとも呼ばれます。
+
+それは `freeCodeCamp.org` のライブプロダクション環境と同じで、データベース、サーバー、Web プロキシなどの別々のセットを使用しています。 この分離により、freeCodeCamp.org の main プラットフォームの正規ユーザーに影響を与えることなく、「本番」のようなシナリオで継続的な開発と機能をテストすることができます。
+
+開発者チーム [`@freeCodeCamp/dev-team`](https://github.com/orgs/freeCodeCamp/teams/dev-team/members) が、ステージングプラットフォームでの変更に満足したら、これらの変更は数日ごとに [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current) ブランチに移されます。
+
+これが freeCodeCamp.org で本番プラットフォームに変更を加えた最終リリースです。
+
+### Testing changes - Integration and User Acceptance Testing
+
+私たちは、コードの品質を確認するために、様々なレベルの統合と受け入れテストを採用しています。 すべてのテストは、[GitHub Actions CI](https://github.com/freeCodeCamp/freeCodeCamp/actions) や [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp) のようなソフトウェアにより実行されます。
+
+We have unit tests for testing our challenge solutions, Server APIs, and Client User interfaces. これらは、異なるコンポーネント間の統合をテストするのに役立ちます。
+
+> [!NOTE] We are also in the process of writing end user tests which will help in replicating real-world scenarios like updating an email or making a call to the API or third-party services.
+
+これらのテストを組み合わせることで、問題が繰り返されるのを防ぎ、別のバグや機能の作業中にバグが発生しないようにします。
+
+### Deploying Changes - Pushing changes to servers
+
+開発サーバーと本番サーバーに変更をプッシュする継続的デリバリーソフトウェアを設定しています。
+
+保護されたリリースブランチに変更がプッシュされると、そのブランチに対してビルドパイプラインが自動的にトリガーされます。 ビルドパイプラインは、アーティファクトを構築し、後で使用するためにコールドストレージに保管する責任があります。
+
+実行が正常に完了すると、ビルドパイプラインは対応するリリースパイプラインをトリガーします。 The release pipelines are responsible for collecting the build artifacts, moving them to the servers, and going live.
+
+The statuses of builds and releases are [available here](#build-test-and-deployment-status).
+
+## Trigger a Build, Test, and Deploy
+
+Currently, only members of the developer team can push to the production branches. `production-*` ブランチへの変更は、[`upstream`](https://github.com/freeCodeCamp/freeCodeCamp) への早送りマージによってのみ可能です。
+
+> [!NOTE] In the upcoming days, we would improve this flow to be done via pull requests, for better access management and transparency.
+
+### Pushing changes to Staging Applications
+
+1. リモートを正しく構成します。
+
+ ```sh
+ git remote -v
+ ```
+
+ **結果:**
+
+ ```
+ origin git@github.com:raisedadead/freeCodeCamp.git (fetch)
+ origin git@github.com:raisedadead/freeCodeCamp.git (push)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (fetch)
+ upstream git@github.com:freeCodeCamp/freeCodeCamp.git (push)
+ ```
+
+2. `main` ブランチが初期状態であり、アップストリームと同期していることを確認してください。
+
+ ```sh
+ git checkout main
+ git fetch --all --prune
+ git reset --hard upstream/main
+ ```
+
+3. GitHub CI がアップストリームの `main` ブランチを渡していることを確認してください。
+
+ [継続的インテグレーション](https://github.com/freeCodeCamp/freeCodeCamp/actions) テストは、`main` ブランチに関して、緑色であり PASSING でなければなりません。 `main` ブランチコードを表示する際、コミットハッシュの横にある緑色のチェックマークをクリックします。
+
+ GitHub Actionsでステータスを確認する (スクリーンショット)
+
+ 
+
+
+ これに失敗した場合は、停止してエラーの確認をします。
+
+4. リポジトリをローカルにビルドできることを確認します。
+
+ ```
+ pnpm run clean-and-develop
+ ```
+
+5. 早送りマージにより、変更を `main` から `prod-staging` に移行します。
+
+ ```
+ git checkout prod-staging
+ git merge main
+ git push upstream
+ ```
+
+ > [!NOTE] You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+ >
+ > エラーになったとしたら、誤った操作をしたかもしれませんので、やり直します。
+
+上記手順では、`prod-staging` ブランチのビルドパイプラインで自動的に実行がトリガーされます。 ビルドが完了すると、アーティファクトは `.zip` ファイルとしてコールドストレージで保存され、後で取り出され使用されます。
+
+接続されたビルドパイプラインから新たなアーティファクトが利用可能になると、リリースパイプラインが自動的にトリガーされます。 For staging platforms, this process does not involve manual approval, and the artifacts are pushed to the Client CDN and API servers.
+
+### Pushing changes to Production Applications
+
+プロセスはほとんどステージングプラットフォームと同じですが、いくつかの追加のチェックが行われます。 これは、何百人ものユーザーが常に使用している freeCodeCamp.org 上で何も壊さないようにするためです。
+
+| すべてがステージングプラットフォームで動作していることを確認しない限り、これらのコマンドを実行しないでください。 先に進む前に、ステージング上のテストを回避またはスキップしないでください。 |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| |
+
+1. `prod-staging` ブランチが初期状態であり、アップストリームと同期していることを確認してください。
+
+ ```sh
+ git checkout prod-staging
+ git fetch --all --prune
+ git reset --hard upstream/prod-staging
+ ```
+
+2. 早送りマージにより、変更を `prod-staging` から `prod-current` に移行します。
+
+ ```
+ git checkout prod-current
+ git merge prod-staging
+ git push upstream
+ ```
+
+ > [!NOTE] You will not be able to force push and if you have re-written the history in any way, these commands will error out.
+ >
+ > エラーになったとしたら、誤った操作をしたかもしれませんので、やり直します。
+
+上記手順では、`prod-current` ブランチのビルドパイプラインで自動的に実行がトリガーされます。 ビルドアーティファクトの準備が完了すると、リリースパイプラインで実行がトリガーされます。
+
+**スタッフアクションの追加手順**
+
+Once a release run is triggered, members of the developer staff team will receive an automated manual intervention email. 彼らはリリース実行を _承認_、または _拒否_ することができます。
+
+変更がうまく動作し、ステージングプラットフォームでテストされている場合は、承認することができます。 承認は、自動的に拒否される前に、リリースがトリガーされてから 4 時間以内に行われる必要があります。 拒否された実行が拒否された場合、スタッフは手動でリリース実行を再トリガーするか、リリースの次のサイクルを待つことになります。
+
+スタッフ用:
+
+| ビルドの実行が完了したら、直接リンクについて E メールを確認するか、[リリースダッシュボードにアクセス](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_release) してください。 |
+| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| |
+
+スタッフがリリースを承認すると、パイプラインは freeCodeCamp.org の本番用 CDN および API サーバーにその変更を反映させます。
+
+## Build, Test and Deployment Status
+
+ここでは、コードベースの現在のテスト、ビルド、およびデプロイの状況を示します。
+
+| ブランチ | 単体テスト | 統合テスト | ビルド & デプロイ |
+| :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------- |
+| [`main`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | - |
+| [`prod-staging`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-staging) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-staging) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| [`prod-current`](https://github.com/freeCodeCamp/freeCodeCamp/tree/prod-current) | [](https://github.com/freeCodeCamp/freeCodeCamp/actions?query=workflow%3A%22Node.js+CI%22+branch%3Aprod-current) | [](https://dashboard.cypress.io/projects/ke77ns/analytics/runs-over-time) | [Azure Pipelines](https://dev.azure.com/freeCodeCamp-org/freeCodeCamp/_dashboards/dashboard/d59f36b9-434a-482d-8dbd-d006b71713d4) |
+| `prod-next` (試験的、予定) | - | - | - |
+
+## Early Access and Beta Testing
+
+皆さんがこれらのリリースを **"パブリックベータテスト"** モードでテストし、プラットフォームの今後の機能に早期アクセスできるようにします。 これらの機能 / 変更は、**ネクスト、ベータ、ステージング** などと呼ばれます。
+
+Your contributions via feedback and issue reports will help us in making the production platforms at `freeCodeCamp.org` more **resilient**, **consistent**, and **stable** for everyone.
+
+見つけたバグの報告や、freeCodeCamp.org をより良くする支援に感謝します。 素晴らしい皆さんです!
+
+### Identifying the Upcoming Version of the Platforms
+
+Currently, a public beta testing version is available at:
+
+| アプリケーション | 言語 | URL |
+| :--------------- | :--------- | :--------------------------------------- |
+| 学習 | 英語 | |
+| | スペイン語 | |
+| | 中国語 | |
+| ニュース | 英語 | |
+| フォーラム | 英語 |