diff --git a/courses/accessing-nested-arrays.md b/courses/accessing-nested-arrays.md
index 410eec8..250f78b 100644
--- a/courses/accessing-nested-arrays.md
+++ b/courses/accessing-nested-arrays.md
@@ -1,6 +1,6 @@
---
title: الوصول إلى المصفوفات المتداخلة
-snippet: الكائنات تشبه المصفوفات باستثناء أنه بدلاً من استخدام الفهارس
+snippet: يمكن استعمال تدوين اقواس المصفوفة للوصول إلى المصفوفات المتداخلة
order: 13
---
diff --git a/courses/arrays/intro.md b/courses/arrays/intro.md
index 5c0946e..93687ff 100644
--- a/courses/arrays/intro.md
+++ b/courses/arrays/intro.md
@@ -1,6 +1,6 @@
---
title: المصفوفات والتعامل معها
-snippet: هو نوع بيانات في JavaScript يمثل بيانات مجموعة معا.
+snippet: هو نوع بيانات في JavaScript يمثل بيانات مجموعة معا
order: 1
---
@@ -59,5 +59,5 @@ Array[0] = 15;
لدينا الآن قيمة المصفوفة `[30, 40, 15]`.
-قم بإنشاء مصفوفة تحتوي على أسماء الأشخاص الذين تعرفهم.
-
\ No newline at end of file
+قم بإنشاء مصفوفة تحتوي على أسماء الأشخاص الذين تعرفهم.
+
diff --git a/courses/arrays/manipulate-arrays.md b/courses/arrays/manipulate-arrays.md
index 33b0e9c..2747f75 100644
--- a/courses/arrays/manipulate-arrays.md
+++ b/courses/arrays/manipulate-arrays.md
@@ -1,6 +1,6 @@
---
title: التعامل مع المصفوفات
-snippet: push, pop, shift, unshift
+snippet: استعمال push, pop, shift, unshift
order: 3
---
@@ -53,8 +53,9 @@ console.log(threeArr);
const ourArray = ["Stimpson", "J", ["cat"]];
const removedFromOurArray = ourArray.shift();
```
-والدالة `()shift` ستزيل القيمة `Stimpson` من `ourArray` وستعيدها كقيمة. يعني قيمة `removedFromOurArray` ستكون `Stimpson` و `ourArray` ستكون `["J", "cat"]`.
+والدالة `()shift` ستزيل القيمة `Stimpson` من `ourArray` وستعيدها كقيمة. يعني
+قيمة `removedFromOurArray` ستكون `Stimpson` و `ourArray` ستكون `["J", "cat"]`.
## unshift
diff --git a/courses/arrays/multidimensional-index.md b/courses/arrays/multidimensional-index.md
index 2e94359..8d69f06 100644
--- a/courses/arrays/multidimensional-index.md
+++ b/courses/arrays/multidimensional-index.md
@@ -1,6 +1,6 @@
---
title: الوصول إلى المصفوفات متعددة الأبعاد
-snippet: احدى طرق التفكير في المصفوفة متعددة الأبعاد
+snippet: أنها تتكون مصفوفة من عده مصفوفات
order: 2
---
diff --git a/courses/compound-operators.md b/courses/compound-operators.md
index 11329f8..f05becd 100644
--- a/courses/compound-operators.md
+++ b/courses/compound-operators.md
@@ -1,6 +1,6 @@
---
title: عوامل مركبه
-snippet: في عالم البرمجة، تُستخدم المشغلات او العوامل
+snippet: في عالم البرمجة، تُستخدم المشغلات او العوامل او المهام لأداء العمليات
order: 5
---
diff --git a/courses/functions/early-return-pattern.md b/courses/functions/early-return-pattern.md
index dae810b..1d0c804 100644
--- a/courses/functions/early-return-pattern.md
+++ b/courses/functions/early-return-pattern.md
@@ -1,6 +1,6 @@
---
title: الإرجاع المبكر
-snippet: عند الوصول إلى بيان الإرجاع، يتوقف تنفيذ الوظيفة الحالية.
+snippet: عند الوصول إلى بيان الإرجاع، يتوقف تنفيذ الوظيفة الحالية
order: 7
---
diff --git a/courses/if-statements/chaining-if-else.md b/courses/if-statements/chaining-if-else.md
index 568e61b..c262a49 100644
--- a/courses/if-statements/chaining-if-else.md
+++ b/courses/if-statements/chaining-if-else.md
@@ -1,6 +1,6 @@
---
title: تسلسل العبارات المنطقية
-snippet: مكن ربط عبارات if/else معًا لتحقيق منطق معقد.
+snippet: يمكن ربط عبارات if/else معًا لتحقيق منطق معقد
order: 8
---
diff --git a/courses/if-statements/comparison-with-equality-operator.md b/courses/if-statements/comparison-with-equality-operator.md
index 4670d77..b16f7fe 100644
--- a/courses/if-statements/comparison-with-equality-operator.md
+++ b/courses/if-statements/comparison-with-equality-operator.md
@@ -1,6 +1,6 @@
---
title: مقارنة مع عامل المساواة
-snippet: يقارن عامل المساواة بين قيمتين
+snippet: يقارن عامل المساواة بين قيمتين
order: 2
---
diff --git a/courses/if-statements/comparison-with-strict-equality-operator.md b/courses/if-statements/comparison-with-strict-equality-operator.md
index 4f1d730..b7cc1d8 100644
--- a/courses/if-statements/comparison-with-strict-equality-operator.md
+++ b/courses/if-statements/comparison-with-strict-equality-operator.md
@@ -1,6 +1,6 @@
---
title: مقارنة مع عامل المساواة الصارمة
-snippet: لا يقوم عامل المساواة الصارم بإجراء تحويل النوع.
+snippet: لا يقوم عامل المساواة الصارم بإجراء تحويل النوع
order: 3
---
diff --git a/courses/if-statements/introducing-else-and-else-if-statements.md b/courses/if-statements/introducing-else-and-else-if-statements.md
index e3d6470..629c4a8 100644
--- a/courses/if-statements/introducing-else-and-else-if-statements.md
+++ b/courses/if-statements/introducing-else-and-else-if-statements.md
@@ -1,6 +1,6 @@
---
title: التعريف بي ( else و else if )
-snippet: لا يوجد
+snippet: وماذا عندما يكون هذا الشرط خطأ
order: 6
---
diff --git a/courses/loops/_data.json b/courses/loops/_data.json
new file mode 100644
index 0000000..a86c1c6
--- /dev/null
+++ b/courses/loops/_data.json
@@ -0,0 +1,5 @@
+{
+ "label": "الحلقات",
+ "lableSlug": "loops",
+ "order": 14
+}
diff --git a/courses/loops/count-backwards-with-a-for-loop.md b/courses/loops/count-backwards-with-a-for-loop.md
new file mode 100644
index 0000000..63ae3b3
--- /dev/null
+++ b/courses/loops/count-backwards-with-a-for-loop.md
@@ -0,0 +1,29 @@
+---
+title: العد التنازلي باستخدام حلقة ( for )
+snippet: يمكن أيضًا للحلقة أن تعد بشكل عكسي، طالما أننا نستطيع تحديد الشروط الصحيحة
+order: 3
+---
+
+يمكن أيضًا للحلقة أن تعد بشكل عكسي، طالما أننا نستطيع تحديد الشروط الصحيحة.
+
+من أجل إنقاص كل تكرار بمقدار اثنين، سنحتاج إلى تغيير التهيئة والحالة والتعبير
+النهائي.
+
+سنبدأ عند `i = 10` ونكرر الحلقة بينما `i > 0`. سننقص `i` بمقدار `2` في كل حلقة
+مع `i -= 2`.
+
+```js
+const ourArray = [];
+
+for (let i = 10; i > 0; i -= 2) {
+ ourArray.push(i);
+}
+
+console.log(ourArray);
+```
+
+سيحتوي `ourArray` الآن على [10، 8، 6، 4، 2].
+
+
+نعتذر عن عدم وجود اختبار لهذا الدرس حالياً. نحن نعمل بجد لإعداد اختبارات لجميع الدروس وسنقوم بتوفيرها في أقرب وقت ممكن.
+
diff --git a/courses/loops/iterate-using-for-loops.md b/courses/loops/iterate-using-for-loops.md
new file mode 100644
index 0000000..5e98dd2
--- /dev/null
+++ b/courses/loops/iterate-using-for-loops.md
@@ -0,0 +1,66 @@
+---
+title: التكرار باستخدام حلقات ( for )
+snippet: يُطلق على النوع الأكثر شيوعًا من الحلقات اسم حلقة for
+order: 2
+---
+
+يمكنك تشغيل نفس الكود عدة مرات باستخدام حلقة.
+
+يُطلق على النوع الأكثر شيوعًا من الحلقات اسم حلقة `for` لأنها تعمل لعدد محدد من
+المرات.
+
+يتم الإعلان عن حلقات `for` بثلاثة تعبيرات اختيارية مفصولة بفواصل منقوطة (`;`).
+
+`for (a; b; c)`، حيث `a` هو بيان التهيئة، و `b` هو بيان الشرط، و `c` هو التعبير
+النهائي.
+
+يتم تنفيذ عبارة التهيئة مرة واحدة فقط قبل بدء الحلقة. يتم استخدامه عادةً لتحديد
+وإعداد متغير الحلقة الخاص بك.
+
+يتم تقييم بيان الشرط في بداية كل تكرار للحلقة وسيستمر طالما تم تقييمه على أنه
+صحيح. عندما يكون الشرط خاطئًا في بداية التكرار، ستتوقف الحلقة عن التنفيذ. هذا
+يعني أنه إذا بدأ الشرط كخطأ، فلن يتم تنفيذ حلقتك أبدًا.
+
+يتم تنفيذ التعبير النهائي في نهاية كل تكرار للحلقة، قبل التحقق من الشرط ويستخدم
+عادةً لزيادة أو تقليل عداد الحلقة.
+
+في المثال التالي، قمنا بالتهيئة بـ `i = 0` ثم قمنا بالتكرار بينما يكون الشرط
+`i < 5` صحيحًا. سنقوم بزيادة `i` بمقدار `1` في كل تكرار للحلقة باستخدام `i++`
+كتعبير نهائي.
+
+```js
+const ourArray = [];
+
+for (let i = 0; i < 5; i++) {
+ ourArray.push(i);
+}
+
+console.log(ourArray);
+```
+
+سيكون لـ `ourArray` الآن القيمة [0, 1, 2, 3, 4].
+
+## تكرار الأرقام الزوجية باستخدام حلقة ( for )
+
+ليس من الضروري تكرار الحلقات واحدة تلو الأخرى. ومن خلال تغيير التعبير النهائي،
+يمكننا العد بالأرقام الزوجية.
+
+سنبدأ عند `i = 0` ونكرر الحلقة بينما `i < 10`. سنزيد `i` بمقدار `2` في كل حلقة
+باستخدام `i += 2`.
+
+```js
+const ourArray = [];
+
+for (let i = 0; i < 10; i += 2) {
+ ourArray.push(i);
+}
+
+console.log(ourArray);
+```
+
+سيحتوي `ourArray` الآن على [0، 2، 4، 6، 8].
+
+
+
+نعتذر عن عدم وجود اختبار لهذا الدرس حالياً. نحن نعمل بجد لإعداد اختبارات لجميع الدروس وسنقوم بتوفيرها في أقرب وقت ممكن.
+
diff --git a/courses/loops/iterate-using-while-loops.md b/courses/loops/iterate-using-while-loops.md
new file mode 100644
index 0000000..1b92271
--- /dev/null
+++ b/courses/loops/iterate-using-while-loops.md
@@ -0,0 +1,29 @@
+---
+title: التكرار باستخدام حلقات ( while )
+snippet: يمكنك تشغيل نفس الكود عدة مرات باستخدام حلقة
+order: 1
+---
+
+يمكنك تشغيل نفس الكود عدة مرات باستخدام حلقة.
+
+النوع الأول من الحلقات التي سنتعلمها يسمى حلقة `while` تعمل عندما يكون الشرط
+المحدد صحيحًا ويتوقف عندما يصبح الشرط غير صحيح.
+
+```js
+const ourArray = [];
+let i = 0;
+
+while (i < 5) {
+ ourArray.push(i);
+ i++;
+}
+
+console.log(ourArray);
+```
+
+في مثال السابق سيتم تنفيذ حلقة `while` 5 مرات وإلحاق الأرقام من 0 إلى 4 إلى
+`ourArray`.
+
+
+نعتذر عن عدم وجود اختبار لهذا الدرس حالياً. نحن نعمل بجد لإعداد اختبارات لجميع الدروس وسنقوم بتوفيرها في أقرب وقت ممكن.
+
diff --git a/courses/numbers/intro.md b/courses/numbers/intro.md
index 325c5a8..eb8c880 100644
--- a/courses/numbers/intro.md
+++ b/courses/numbers/intro.md
@@ -1,6 +1,6 @@
---
title: الأرقام والتعامل معها
-snippet: هو نوع بيانات في JavaScript يمثل بيانات رقمية.
+snippet: هو نوع بيانات في JavaScript يمثل بيانات رقمية
order: 1
---
diff --git a/courses/objects/accessing-nested-objects.md b/courses/objects/accessing-nested-objects.md
index 4a1d7e2..b219ebd 100644
--- a/courses/objects/accessing-nested-objects.md
+++ b/courses/objects/accessing-nested-objects.md
@@ -1,12 +1,12 @@
---
title: الوصول إلى الكائنات المتداخلة
-snippet: لا يوجد
+snippet: يمكن الوصول إلى للكائنات الفرعية عن طريق ربط تدوين النقطة أو القوس
order: 8
---
-يمكن الوصول إلى للكائنات الفرعية عن طريق ربط تدوين النقطة أو القوس معًا.
+يمكن الوصول إلى للكائنات الفرعية عن طريق ربط تدوين النقطة أو القوس.
-فيما يلي مثال على كائن متداخل::
+فيما يلي مثال على كائن متداخل:
```js
const ourStorage = {
diff --git a/courses/objects/accessing-object-properties-with-variables.md b/courses/objects/accessing-object-properties-with-variables.md
index 40d9019..f50c046 100644
--- a/courses/objects/accessing-object-properties-with-variables.md
+++ b/courses/objects/accessing-object-properties-with-variables.md
@@ -1,6 +1,6 @@
---
title: الوصول إلى خاصية مخزنة كقيمة متغير
-snippet: يمكن أن يكون هذا مفيدًا جدًا للتكرار على خصائص الكائن
+snippet: يمكن أن يكون هذا مفيدًا جدًا للتكرار على خصائص الكائن
order: 3
---
diff --git a/courses/objects/delete-properties-from-object.md b/courses/objects/delete-properties-from-object.md
index 72d5f7a..db85dfb 100644
--- a/courses/objects/delete-properties-from-object.md
+++ b/courses/objects/delete-properties-from-object.md
@@ -1,10 +1,10 @@
---
title: حذف الخصائص من كائن
-snippet: لا يوجد
+snippet: يمكننا أيضًا حذف الخصائص من كائنات
order: 5
---
-يمكننا أيضًا حذف الخصائص من كائنات بهذه الطريقة:
+يمكننا أيضًا حذف الخصائص من الكائنات بهذه الطريقة:
```js
delete ourDog.bark;
diff --git a/courses/objects/manipulating-complex-objects.md b/courses/objects/manipulating-complex-objects.md
index 79b0515..f58c77f 100644
--- a/courses/objects/manipulating-complex-objects.md
+++ b/courses/objects/manipulating-complex-objects.md
@@ -1,6 +1,6 @@
---
title: التعامل مع الكائنات المعقدة
-snippet: لا يوجد
+snippet: في بعض الأحيان قد ترغب في تخزين البيانات في بنية بيانات مرنة
order: 7
---
diff --git a/courses/objects/testing-objects-for-properties.md b/courses/objects/testing-objects-for-properties.md
index 7ebc276..48c3d2c 100644
--- a/courses/objects/testing-objects-for-properties.md
+++ b/courses/objects/testing-objects-for-properties.md
@@ -1,6 +1,6 @@
---
title: اختبار خصائص الكائنات
-snippet: لا يوجد
+snippet: للتحقق من وجود خاصية على كائن معين أم لا
order: 6
---
diff --git a/courses/objects/updating-object-properties.md b/courses/objects/updating-object-properties.md
index c8f1d01..d522c10 100644
--- a/courses/objects/updating-object-properties.md
+++ b/courses/objects/updating-object-properties.md
@@ -1,6 +1,6 @@
---
title: تحديث و إضافة خصائص جديدة للكائن
-snippet: لا يوجد
+snippet: يمكنك استخدام تدوين النقطة أو القوس للتحديث
order: 4
---
diff --git a/courses/returning-boolean-values-from-functions.md b/courses/returning-boolean-values-from-functions.md
index 7781ed0..5215696 100644
--- a/courses/returning-boolean-values-from-functions.md
+++ b/courses/returning-boolean-values-from-functions.md
@@ -1,6 +1,6 @@
---
title: إرجاع القيم المنطقية من الدوال
-snippet: لا يوجد
+snippet: قد تتذكر من المقارنة مع عامل المساواة أن جميع عوامل المقارنة تُرجع قيمة منطقية صحيحة أو خاطئة
order: 11
---
diff --git a/courses/strings/bracket-examples.md b/courses/strings/bracket-examples.md
index 804ff10..f4f7151 100644
--- a/courses/strings/bracket-examples.md
+++ b/courses/strings/bracket-examples.md
@@ -1,6 +1,6 @@
---
title: أمثلة على استخدام الأقواس
-snippet: استخدم الأقواس للعثور على الحرف N في سلسلة
+snippet: استخدم الأقواس للعثور على الحرف في سلسلة
order: 6
---
diff --git a/courses/strings/concatenating-strings.md b/courses/strings/concatenating-strings.md
index 1d790a7..d837535 100644
--- a/courses/strings/concatenating-strings.md
+++ b/courses/strings/concatenating-strings.md
@@ -1,6 +1,6 @@
---
title: سلاسل مترابطة
-snippet: في JavaScript، عندما يتم استخدام عامل التشغيل + مع قيمة سلسلة
+snippet: في JavaScript عندما يتم استخدام عامل التشغيل + مع قيمة سلسلة
order: 2
---
diff --git a/courses/strings/intro.md b/courses/strings/intro.md
index 32cb1fd..a6df6aa 100644
--- a/courses/strings/intro.md
+++ b/courses/strings/intro.md
@@ -1,6 +1,6 @@
---
title: السلاسل والتعامل معها
-snippet: هو نوع بيانات في JavaScript يمثل نص من عدا حروف.
+snippet: هو نوع بيانات في JavaScript يمثل نص من عدا حروف
order: 1
---
diff --git a/courses/strings/length.md b/courses/strings/length.md
index 98b5630..f9b5752 100644
--- a/courses/strings/length.md
+++ b/courses/strings/length.md
@@ -1,6 +1,6 @@
---
title: العثور على طول السلسلة
-snippet: يمكنك العثور على طول قيمة السلسلة عن طريق
+snippet: يمكنك العثور على طول قيمة السلسلة عن طريق
order: 3
---
diff --git a/courses/strings/understand-immutability.md b/courses/strings/understand-immutability.md
index 7857623..96e5b56 100644
--- a/courses/strings/understand-immutability.md
+++ b/courses/strings/understand-immutability.md
@@ -1,6 +1,6 @@
---
title: فهم ثبات السلسلة
-snippet: في JavaScript، تكون قيم السلسلة غير قابلة للتغيير
+snippet: في JavaScript تكون قيم السلسلة غير قابلة للتغيير
order: 5
---
@@ -23,7 +23,8 @@ myPet[0] = "B";
let myPet = "Cat";
myPet = "Bat";
```
+
يبدوا أني قد كتبت كلمة فيل بطريقة خاطئة. قم بتغيير الحرف الأول من
السلسلة animal
إلى ف.
-
\ No newline at end of file
+
diff --git a/courses/variables/uninitialized-variables.md b/courses/variables/uninitialized-variables.md
index 6e1dc0a..c0473d0 100644
--- a/courses/variables/uninitialized-variables.md
+++ b/courses/variables/uninitialized-variables.md
@@ -1,6 +1,6 @@
---
title: فهم المتغيرات غير المهيأة
-snippet: عندما يتم الإعلان عن متغيرات JavaScript، تكون قيمتها الأولية غير محددة
+snippet: عندما يتم الإعلان عن متغيرات تكون قيمتها الأولية غير محددة
order: 3
---
diff --git a/routes/[...slug].tsx b/routes/[...slug].tsx
index 1a96f34..057e205 100644
--- a/routes/[...slug].tsx
+++ b/routes/[...slug].tsx
@@ -55,9 +55,9 @@ export default function CoursePage(
{course.title}
-
+
-
+