🟢 الدرس 1: أول صفحة UI (Landing Page بسيطة)
🎯 الهدف:
تفهم:
- كيف يُبنى الموقع من الصفر
- معنى كل سطر في HTML
- كيف يرتبط بـ CSS
🧱 أولًا: الكود الكامل
📄 HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>UI UX First Page</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
<h1>UI/UX Course</h1>
<button>Login</button>
</header>
<section class="hero">
<h2>Learn UI/UX Step by Step</h2>
<p>Build real projects and become a designer</p>
<button class="primary">Start Now</button>
</section>
</body>
</html>
🧠 الآن شرح كل سطر
🔵 <!DOCTYPE html>
👉 هذا السطر يقول للمتصفح:
“أنا أستخدم HTML5”
بدونه:
- المتصفح قد يفهم الصفحة بشكل خاطئ
🔵 <html lang="en">
<html>= بداية الصفحةlang="en"= لغة الصفحة (إنجليزي)
💡 مهم لـ:
- SEO
- قارئات الشاشة
🔵 <head>
هذا الجزء لا يظهر للمستخدم
يحتوي على:
- إعدادات الصفحة
- العنوان
- ملفات CSS
🔵 <meta charset="UTF-8">
👉 يسمح بكتابة كل اللغات (عربي + إنجليزي)
بدونه:
- قد تظهر الرموز بشكل غريب
🔵 <title>UI UX First Page</title>
👉 اسم الصفحة في التبويب (Tab)
مثال:
- يظهر فوق في المتصفح
🔵 <link rel="stylesheet" href="style.css">
👉 ربط ملف CSS مع HTML
rel="stylesheet"= هذا ملف تصميمhref="style.css"= اسم ملف التصميم
💡 بدون هذا السطر: ➡ الصفحة ستكون بدون ألوان أو تصميم
🟣 الآن نبدأ جسم الصفحة
🔵 <body>
👉 هذا هو كل ما يراه المستخدم
أي شيء داخل هذا الجزء يظهر في الشاشة
🧱 HEADER (الجزء العلوي)
<header class="header">
👉 هذا “شريط علوي” (Navbar)
class="header"= اسم نستخدمه في CSS
🔵 <h1>UI/UX Course</h1>
👉 عنوان رئيسي
h1= أهم عنوان في الصفحة- يستخدمه Google لفهم المحتوى
🔵 <button>Login</button>
👉 زر عادي
- المستخدم يضغط عليه
🧱 HERO SECTION (أهم جزء في الصفحة)
<section class="hero">
👉 قسم رئيسي في الصفحة
عادة يحتوي على:
- عنوان قوي
- وصف
- زر
🔵 <h2>Learn UI/UX Step by Step</h2>
👉 عنوان ثانوي
- أقل أهمية من h1
- لكنه مهم جدًا للشرح
🔵 <p>Build real projects...</p>
👉 فقرة نصية
- توضح الفكرة للمستخدم
🔵 <button class="primary">Start Now</button>
👉 زر رئيسي
class="primary"= زر مهم نميزه في CSS
🧠 الآن الفكرة UX (مهم جدًا)
في هذا التصميم:
المستخدم يرى:
- عنوان كبير → ماذا هذا الموقع؟
- شرح بسيط → ماذا سأتعلم؟
- زر واضح → ماذا أفعل الآن؟
🎯 هذا يسمى:
🔥 UX Flow (تسلسل التجربة)
هدفه:
جعل المستخدم يفهم بدون تفكير
🎨 كيف يتحول إلى شكل جميل؟ (CSS)
لو تريد، في الدرس القادم سأشرح:
✔ كل سطر CSS
✔ كيف يصبح التصميم احترافي
✔ كيف نضيف ألوان ومسافات
✔ كيف نحول هذه الصفحة إلى UI حقيقي مثل التطبيقات
🧪 تمرين لك الآن
حاول تفهم:
- لماذا استخدمنا
<header>وليس<div>؟ - لماذا هناك
<h1>و<h2>؟ - لماذا قسمنا الصفحة إلى hero و header؟
🚀 إذا فهمت هذا الدرس، الخطوة القادمة:
🔥 الدرس 2: CSS من الصفر (تحويل الصفحة إلى تصميم احترافي)
وسأشرح:
- كل لون
- كل مسافة
- كل سطر CSS
- وكيف يصبح الموقع مثل شركات حقيقية
تمام 👌 نكمل الآن الدرس 2: CSS من الصفر (شرح كل سطر + تحويل الصفحة إلى UI احترافي)
🎨 الدرس 2: CSS (تحويل HTML إلى تصميم احترافي)
🎯 الهدف:
تفهم:
- كيف نلوّن الموقع
- كيف نرتب العناصر
- كيف نخلي التصميم احترافي مثل التطبيقات
🧱 الكود الكامل (CSS)
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
.header {
display: flex;
justify-content: space-between;
padding: 20px 40px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.hero {
text-align: center;
margin-top: 100px;
}
.hero h2 {
font-size: 40px;
}
.hero p {
color: gray;
}
button {
padding: 10px 20px;
border: none;
border-radius: 8px;
cursor: pointer;
}
.primary {
background: #2563eb;
color: white;
}
🧠 الآن شرح كل سطر
🟣 أول جزء: body
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
🔵 margin: 0;
👉 يلغي المسافة الافتراضية من المتصفح
💡 بدون هذا:
- الموقع يظهر فيه فراغ حول الأطراف
🔵 font-family: Arial;
👉 يغير الخط إلى Arial
💡 يعني:
- كل النصوص تستخدم هذا الخط
🔵 background: #f5f6fa;
👉 لون الخلفية
- هذا لون رمادي فاتح مريح للعين
- يستخدم في أغلب التطبيقات الحديثة
🟣 ثاني جزء: Header
.header {
display: flex;
justify-content: space-between;
padding: 20px 40px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
🔵 display: flex;
👉 أهم خاصية في CSS
💡 معناها:
ترتيب العناصر بجانب بعض
في الـ header:
- العنوان يسار
- الزر يمين
🔵 justify-content: space-between;
👉 يبعد العناصر عن بعض
يعني:
- عنصر في اليسار
- عنصر في اليمين
🔵 padding: 20px 40px;
👉 المسافات الداخلية
- 20px فوق وتحت
- 40px يمين ويسار
💡 يعطي شكل مريح بدل التصاق العناصر
🔵 background: white;
👉 خلفية بيضاء للـ header
🔵 box-shadow
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
👉 ظل خفيف
💡 يعطي إحساس:
- أن الـ header “طافي فوق الصفحة”
🟣 ثالث جزء: Hero
.hero {
text-align: center;
margin-top: 100px;
}
🔵 text-align: center;
👉 يجعل النص في المنتصف
🔵 margin-top: 100px;
👉 يبعد القسم عن الأعلى
💡 يعطي مساحة مريحة
🟣 العنوان
.hero h2 {
font-size: 40px;
}
🔵 font-size: 40px;
👉 يكبر الخط
💡 لأنه عنوان رئيسي مهم
🟣 النص
.hero p {
color: gray;
}
🔵 color: gray;
👉 يجعل النص أقل أهمية من العنوان
💡 هذا يسمى:
Hierarchy (ترتيب الأهمية)
🟣 الأزرار
button {
padding: 10px 20px;
border: none;
border-radius: 8px;
cursor: pointer;
}
🔵 padding
👉 يكبر حجم الزر من الداخل
🔵 border: none;
👉 إزالة الخط الخارجي الافتراضي
🔵 border-radius: 8px;
👉 يجعل الزر دائري الحواف
💡 هذا يعطي شكل حديث (Modern UI)
🔵 cursor: pointer;
👉 عند المرور على الزر يظهر شكل اليد
💡 هذا مهم جدًا في UX
🟣 الزر الأساسي
.primary {
background: #2563eb;
color: white;
}
🔵 background
👉 لون أزرق رئيسي (Primary Color)
🔵 color: white;
👉 لون النص داخل الزر
🧠 UX ماذا تعلمت هنا؟
✔ ترتيب العناصر مهم
✔ المسافات أهم من الألوان
✔ اللون يحدد أهمية العنصر
✔ الظل يعطي إحساس العمق
✔ الخط يحدد شخصية التصميم
🚀 كيف أصبح التصميم الآن؟
قبل CSS: ❌ نصوص فوق بعض
بعد CSS:
✔ تصميم مثل تطبيق حقيقي
✔ ترتيب واضح
✔ زر رئيسي واضح
✔ تجربة مستخدم مفهومة
🧪 تمرين مهم جدًا
عدّل هذا التصميم:
- غيّر اللون الأزرق إلى أخضر
- اجعل الزر أكبر
- أضف زر ثاني
- اجعل الخلفية أغمق قليلًا
🔥 الدرس القادم (مهم جدًا)
🧱 JavaScript + UX Interaction
سنتعلم:
- كيف نجعل الزر “يتفاعل”
- كيف نعرض رسائل
- كيف نجعل الموقع حي مثل التطبيقات
- أول مشروع تفاعلي كامل
تمام 👌 نكمل الآن الدرس 3: JavaScript + UX Interaction (جعل الموقع حي وتفاعلي)
⚡ الدرس 3: JavaScript (التفاعل داخل UI/UX)
🎯 الهدف:
تفهم:
- كيف يجعل JavaScript الموقع “يستجيب للمستخدم”
- كيف نربط الزر بتفاعل حقيقي
- كيف نضيف UX (تجربة مستخدم حقيقية)
🧠 الفكرة ببساطة:
- HTML = هيكل
- CSS = شكل
- JavaScript = حركة وتفاعل
🧱 الكود الأول (زر تفاعلي)
📄 HTML (نضيف ID للزر)
<button class="primary" id="startBtn">Start Now</button>
🧠 لماذا أضفنا ID؟
👉 لأن JavaScript يحتاج “يمسك العنصر” ويتحكم فيه
🧱 JavaScript
<script>
const button = document.getElementById("startBtn");
button.onclick = function () {
alert("Welcome to UI/UX Course 🚀");
}
</script>
🧠 شرح كل سطر
🔵 const button = document.getElementById("startBtn");
👉 هذا السطر يعني:
“ابحث لي عن الزر الذي اسمه startBtn”
💡 النتيجة:
- نخزن الزر داخل متغير اسمه button
🔵 button.onclick = function () {
👉 يعني:
“إذا المستخدم ضغط على الزر نفّذ هذه الوظيفة”
🔵 alert(...)
👉 تظهر رسالة للمستخدم
💡 مثال:
- نافذة صغيرة تقول: “مرحبا”
🧠 UX هنا
✔ المستخدم ضغط → حصل رد
✔ يشعر أن الموقع “حي”
✔ تفاعل مباشر
⚡ تحسين UX (أفضل من alert)
بدل الرسالة المزعجة، نستخدم داخل الصفحة 👇
🧱 مثال احترافي
📄 HTML
<button class="primary" id="startBtn">Start Now</button>
<p id="message"></p>
🧱 JavaScript
<script>
const button = document.getElementById("startBtn");
const message = document.getElementById("message");
button.onclick = function () {
message.innerText = "🎉 You started learning UI/UX!";
message.style.color = "green";
}
</script>
🧠 شرح مهم جدًا
🔵 message.innerText
👉 يكتب نص داخل الصفحة بدل popup
🔵 style.color = "green"
👉 يغير لون النص مباشرة
💡 UX هنا أقوى بكثير
✔ بدون نوافذ مزعجة
✔ المستخدم يبقى داخل الصفحة
✔ تجربة سلسة
⚡ الدرس المهم: Hover + UX
🧱 تحسين الزر عند الضغط
.primary {
transition: 0.2s;
}
.primary:hover {
transform: scale(1.05);
background: #1d4ed8;
}
.primary:active {
transform: scale(0.95);
}
🧠 UX هنا
✔ الزر يتحرك عند المرور
✔ يعطي إحساس واقعي
✔ المستخدم يعرف أنه قابل للضغط
⚡ مثال UX حقيقي (Loading)
🧱 HTML
<button id="loadBtn">Load</button>
<p id="status"></p>
🧱 JavaScript
<script>
const loadBtn = document.getElementById("loadBtn");
const status = document.getElementById("status");
loadBtn.onclick = function () {
status.innerText = "Loading...";
setTimeout(() => {
status.innerText = "Done ✔";
}, 2000);
}
</script>
🧠 شرح UX مهم جدًا
ماذا يحدث؟
- المستخدم يضغط
- يظهر "Loading..."
- بعد 2 ثانية → "Done"
💡 هذا يسمى:
🔥 Micro Interaction
🧠 لماذا هذا مهم؟
بدون هذا: ❌ المستخدم يعتقد أن الموقع لا يعمل
معه: ✔ المستخدم يفهم ما يحدث ✔ تجربة احترافية مثل التطبيقات
🚀 ماذا تعلمت الآن؟
✔ كيف نربط زر بتفاعل
✔ كيف نغير النصوص
✔ كيف نتحكم بالواجهة
✔ كيف نصنع UX حي
✔ مفهوم Micro Interaction
🧪 تمرين لك
جرب هذا:
- أضف زر "Login"
- عند الضغط:
- يظهر "Checking..."
- بعد ثانيتين:
- يظهر "Welcome 👋"
🔥 الدرس القادم (مهم جدًا)
🧱 مشروع صغير كامل (Mini App)
سنبني معًا:
- صفحة كاملة
- أزرار
- تفاعل
- تصميم احترافي
- UX حقيقي مثل التطبيقات
تمام 👌 نكمل الآن أهم مرحلة: مشروع صغير كامل (Mini UI/UX App)
وهذا هو أول شيء يشبه “تطبيق حقيقي” وليس مجرد أمثلة.
🚀 الدرس 4: Mini UI/UX App (تطبيق بسيط كامل)
🎯 فكرة المشروع:
تطبيق بسيط اسمه:
UI/UX Starter App
يحتوي على:
- زر بدء
- رسالة ترحيب
- حالة تحميل
- تفاعل بسيط
🧱 1. HTML (الواجهة)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mini App</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>UI/UX Starter App</h1>
<button id="startBtn">Start Learning</button>
<p id="status"></p>
</div>
<script src="script.js"></script>
</body>
</html>
🧠 شرح كل جزء
🔵 <div class="container">
👉 صندوق يجمع كل العناصر
💡 فائدته:
- تنظيم الصفحة
- التحكم في التصميم
🔵 <h1>
👉 عنوان التطبيق
🔵 <button id="startBtn">
👉 زر أساسي
- عند الضغط يبدأ التفاعل
🔵 <p id="status">
👉 مكان عرض الرسائل
مثل:
- Loading...
- Success
- Welcome
🔵 <script src="script.js">
👉 ربط JavaScript خارجي
💡 هذا أفضل تنظيم احترافي
🎨 2. CSS (التصميم)
body {
margin: 0;
font-family: Arial;
background: #f4f6f9;
}
.container {
text-align: center;
margin-top: 120px;
}
h1 {
font-size: 40px;
}
button {
padding: 12px 25px;
border: none;
border-radius: 8px;
background: #2563eb;
color: white;
cursor: pointer;
transition: 0.2s;
}
button:hover {
transform: scale(1.05);
}
button:active {
transform: scale(0.95);
}
#status {
margin-top: 20px;
font-size: 18px;
color: gray;
}
🧠 UX هنا
✔ زر واضح
✔ تصميم بسيط
✔ رسالة تظهر للمستخدم
✔ تفاعل سريع
⚡ 3. JavaScript (التفاعل الحقيقي)
const button = document.getElementById("startBtn");
const status = document.getElementById("status");
button.onclick = function () {
status.innerText = "Loading... ⏳";
setTimeout(() => {
status.innerText = "Welcome to UI/UX 🚀";
status.style.color = "green";
}, 2000);
};
🧠 شرح UX خطوة بخطوة
🔵 عند الضغط:
status.innerText = "Loading... ⏳";
👉 المستخدم يرى أن النظام يعمل
✔ هذا يمنع الإحساس بأن الموقع “معلق”
🔵 بعد 2 ثانية:
status.innerText = "Welcome...";
👉 يظهر نجاح العملية
✔ هذا يسمى Success Feedback
🔵 setTimeout
👉 تأخير زمني
💡 يستخدم لمحاكاة:
- تحميل بيانات
- اتصال سيرفر
🎯 ماذا بنيت الآن؟
لقد بنيت:
✔ واجهة UI
✔ تصميم CSS
✔ تفاعل JavaScript
✔ تجربة UX كاملة
🧠 هذا مهم جدًا
هذا المشروع هو نفس فكرة:
- تطبيقات التسجيل
- تطبيقات تسجيل الدخول
- تطبيقات التعليم
- تطبيقات بسيطة في الشركات
🚀 مستوى UX الذي وصلت له
أنت الآن تفهم:
1. UI
شكل الصفحة
2. UX
كيف يشعر المستخدم
3. Interaction
كيف يتفاعل النظام
🧪 تمرين قوي لك
عدّل المشروع:
- أضف زر "Reset"
- عند الضغط:
- يرجع النص فارغ
- غيّر اللون عند النجاح إلى أزرق
- أضف رسالة خطأ لو ضغط بدون سبب
تمام 👌 اخترت المتجر الإلكتروني (E-commerce UI/UX + كود)
هذا مشروع مهم جدًا لأنه نفس نوع المشاريع المستخدمة في الشركات والتطبيقات الحقيقية.
🛒 الدرس 5: متجر إلكتروني كامل (UI/UX + HTML/CSS/JS)
🎯 فكرة المشروع:
تطبيق بسيط يعرض منتجات + إضافة للسلة + تفاعل UX
🧠 ماذا ستتعلم هنا؟
✔ عرض منتجات (UI)
✔ تجربة مستخدم واضحة (UX)
✔ زر إضافة للسلة (Interaction)
✔ تحديث السلة مباشرة (Real-time UX)
🧱 1. HTML (هيكل المتجر)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mini Shop</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
<h1>Mini Shop 🛒</h1>
<div class="cart">
Cart: <span id="cartCount">0</span>
</div>
</header>
<main class="products">
<div class="product">
<h3>Headphones</h3>
<p>$50</p>
<button onclick="addToCart()">Add to Cart</button>
</div>
<div class="product">
<h3>Watch</h3>
<p>$80</p>
<button onclick="addToCart()">Add to Cart</button>
</div>
<div class="product">
<h3>Phone</h3>
<p>$300</p>
<button onclick="addToCart()">Add to Cart</button>
</div>
</main>
<script src="script.js"></script>
</body>
</html>
🧠 شرح HTML (مهم جدًا)
🔵 <header>
👉 يحتوي على:
- اسم المتجر
- السلة
💡 هذا يسمى:
Navigation + Status Area
🔵 <span id="cartCount">
👉 مكان عرض عدد المنتجات في السلة
💡 يتم تغييره بـ JavaScript
🔵 المنتجات
كل منتج يحتوي:
- اسم
- سعر
- زر شراء
🔵 onclick="addToCart()"
👉 عند الضغط ينفذ وظيفة JavaScript
🎨 2. CSS (تصميم المتجر)
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
/* Header */
.header {
display: flex;
justify-content: space-between;
padding: 20px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
/* Products layout */
.products {
display: flex;
gap: 20px;
padding: 40px;
}
/* Product card */
.product {
background: white;
padding: 20px;
border-radius: 10px;
width: 200px;
text-align: center;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
/* Button */
button {
padding: 10px;
border: none;
background: #2563eb;
color: white;
border-radius: 6px;
cursor: pointer;
transition: 0.2s;
}
button:hover {
transform: scale(1.05);
}
🧠 UX هنا
✔ المنتجات واضحة
✔ سعر + زر واضح
✔ تصميم بسيط بدون تعقيد
✔ سلة في الأعلى مباشرة
⚡ 3. JavaScript (تفاعل السلة)
let cart = 0;
function addToCart() {
cart++;
document.getElementById("cartCount").innerText = cart;
}
🧠 شرح JavaScript
🔵 let cart = 0;
👉 متغير يمثل عدد المنتجات في السلة
🔵 function addToCart()
👉 دالة تُستدعى عند الضغط على الزر
🔵 cart++
👉 زيادة العدد 1 كل مرة
🔵 innerText
👉 تحديث الرقم في الصفحة مباشرة
🧠 UX هنا مهم جدًا
✔ المستخدم يرى السلة تتغير فورًا
✔ هذا يسمى Feedback مباشر
✔ يشعر أن النظام “يفهمه”
🚀 تحسينات احترافية (مستوى أعلى)
🔵 1. رسالة نجاح
function addToCart() {
cart++;
document.getElementById("cartCount").innerText = cart;
alert("Added to cart ✔");
}
🔵 2. تحسين UX (بدون alert)
function addToCart() {
cart++;
document.getElementById("cartCount").innerText = cart;
const message = document.createElement("p");
message.innerText = "✔ Added successfully";
message.style.color = "green";
document.body.appendChild(message);
setTimeout(() => {
message.remove();
}, 1500);
}
🧠 هذا يسمى:
🔥 Micro Interaction UX
📱 تحسين Responsive (مهم جدًا)
@media (max-width: 768px) {
.products {
flex-direction: column;
align-items: center;
}
}
🧠 UX على الهاتف
✔ المنتجات تحت بعض
✔ سهل التصفح
✔ مناسب للمس
🎯 ماذا بنيت الآن؟
لقد بنيت:
✔ متجر إلكتروني UI
✔ سلة مشتريات
✔ تفاعل JavaScript
✔ UX حقيقي
✔ تصميم responsive
🚀 مستوى المشروع الآن
هذا نفس فكرة:
- Amazon mini UI
- Shopify store
- أي متجر إلكتروني بسيط
🧪 تمرين لك
طور المشروع:
- أضف زر "Remove from cart"
- أضف صورة لكل منتج
- اجعل السلة تنقص عند الحذف
- أضف صفحة Checkout وهمية
تمام 👌 نكمل ونرفع المستوى شوي خطوة مهمة جدًا في أي متجر حقيقي:
🛒 الدرس 6: تطوير المتجر (صفحة منتج + سلة + نظام أكثر واقعية)
اللي عملناه قبل كان “بداية”، الآن بنخليه أقرب لمتجر حقيقي مثل التطبيقات.
🎯 ماذا سنضيف الآن؟
✔ صور منتجات
✔ إضافة المنتج للسلة بشكل صحيح (كل منتج لوحده)
✔ عرض اسم المنتج في السلة
✔ صفحة “تفاصيل منتج” بسيطة
✔ تحسين UX (بدون alert مزعج)
🧱 1. HTML (نسخة مطورة)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Advanced Mini Shop</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
<h1>Mini Shop 🛒</h1>
<div>Cart: <span id="cartCount">0</span></div>
</header>
<main class="products">
<div class="product">
<img src="https://via.placeholder.com/150" />
<h3>Headphones</h3>
<p>$50</p>
<button onclick="addToCart('Headphones')">Add</button>
</div>
<div class="product">
<img src="https://via.placeholder.com/150" />
<h3>Watch</h3>
<p>$80</p>
<button onclick="addToCart('Watch')">Add</button>
</div>
<div class="product">
<img src="https://via.placeholder.com/150" />
<h3>Phone</h3>
<p>$300</p>
<button onclick="addToCart('Phone')">Add</button>
</div>
</main>
<section class="cartBox">
<h2>Cart Items</h2>
<ul id="cartItems"></ul>
</section>
<script src="script.js"></script>
</body>
</html>
🧠 شرح مهم (UX)
الآن صار عندك:
✔ منتجات حقيقية
✔ كل زر يعرف المنتج
✔ سلة تعرض أسماء المنتجات
✔ تجربة أقرب لمتجر حقيقي
🎨 2. CSS (تحسين الشكل)
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
.header {
display: flex;
justify-content: space-between;
padding: 20px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.products {
display: flex;
gap: 20px;
padding: 40px;
}
.product {
background: white;
padding: 15px;
border-radius: 10px;
width: 200px;
text-align: center;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.product img {
width: 100%;
border-radius: 8px;
}
button {
padding: 10px;
border: none;
background: #2563eb;
color: white;
border-radius: 6px;
cursor: pointer;
transition: 0.2s;
}
button:hover {
transform: scale(1.05);
}
.cartBox {
padding: 20px;
background: white;
margin: 20px;
border-radius: 10px;
}
🧠 UX هنا
✔ صورة لكل منتج
✔ تقسيم واضح
✔ سلة منفصلة
✔ وضوح في المعلومات
⚡ 3. JavaScript (نسخة احترافية)
let cart = [];
let count = 0;
function addToCart(productName) {
cart.push(productName);
count++;
document.getElementById("cartCount").innerText = count;
updateCartUI();
}
function updateCartUI() {
const list = document.getElementById("cartItems");
list.innerHTML = "";
cart.forEach((item) => {
const li = document.createElement("li");
li.innerText = item;
list.appendChild(li);
});
}
🧠 شرح JavaScript
🔵 let cart = []
👉 الآن السلة ليست رقم فقط
بل قائمة منتجات
🔵 cart.push(productName)
👉 نضيف اسم المنتج داخل السلة
🔵 updateCartUI()
👉 تحدث الشاشة مباشرة
🔵 innerHTML = ""
👉 تمسح القائمة القديمة قبل إعادة بناءها
🔵 forEach
👉 تمر على كل المنتجات وتعرضها
🧠 UX هنا أصبح أقوى
✔ المستخدم يرى كل المنتجات داخل السلة
✔ تحديث مباشر بدون إعادة تحميل
✔ تجربة أقرب لمواقع حقيقية
🚀 تحسينات احترافية (مستوى أعلى جدًا)
🔥 1. زر حذف منتج
function removeItem(index) {
cart.splice(index, 1);
count--;
document.getElementById("cartCount").innerText = count;
updateCartUI();
}
🔥 2. تحسين عرض السلة
cart.forEach((item, index) => {
const li = document.createElement("li");
li.innerHTML = `
${item}
<button onclick="removeItem(${index})">X</button>
`;
list.appendChild(li);
});
🧠 UX هنا
✔ المستخدم يتحكم بالكامل
✔ إضافة + حذف
✔ تجربة متجر حقيقية
📱 Responsive (مهم جدًا)
@media (max-width: 768px) {
.products {
flex-direction: column;
align-items: center;
}
}
🎯 ماذا أنجزت الآن؟
أنت بنيت:
✔ متجر إلكتروني شبه حقيقي
✔ سلة ديناميكية
✔ إضافة وحذف منتجات
✔ UI مرتب
✔ UX تفاعلي
🚀 أين وصلت الآن؟
هذا المستوى يعادل:
- مشاريع مبتدئين في الشركات
- أو مشاريع Freelance بسيطة
- أو Portfolio قوي
تمام 👌 نكمل ونرفع المستوى إلى أقرب شيء للأنظمة الحقيقية في الشركات.
سنختار الآن أهم خطوة في أي متجر إلكتروني:
💳 الدرس 7: Checkout System (صفحة الدفع + تجربة شراء حقيقية)
هذه المرحلة هي التي تفصل بين “مشروع مبتدئ” و “تطبيق حقيقي”.
🎯 ماذا سنبني الآن؟
✔ صفحة Checkout
✔ عرض المنتجات في السلة
✔ حساب الإجمالي
✔ زر “إتمام الشراء”
✔ رسالة نجاح احترافية
🧠 UX الهدف:
المستخدم يجب أن:
- يرى ماذا سيشتري
- يعرف السعر النهائي
- يكمل الدفع بسهولة بدون تعقيد
🧱 1. HTML (صفحة الدفع)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Checkout</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
<h1>Checkout 💳</h1>
</header>
<main class="checkout">
<h2>Your Order</h2>
<ul id="orderList"></ul>
<h3>Total: $<span id="totalPrice">0</span></h3>
<button id="payBtn">Pay Now</button>
<p id="message"></p>
</main>
<script src="script.js"></script>
</body>
</html>
🧠 شرح HTML
🔵 <ul id="orderList">
👉 مكان عرض المنتجات
🔵 totalPrice
👉 عرض السعر النهائي
🔵 payBtn
👉 زر الدفع
🔵 message
👉 رسالة نجاح أو فشل
🎨 2. CSS (شكل احترافي)
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
.header {
padding: 20px;
background: white;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.checkout {
max-width: 500px;
margin: 50px auto;
background: white;
padding: 20px;
border-radius: 10px;
}
button {
padding: 12px 20px;
background: #2563eb;
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
}
button:hover {
transform: scale(1.05);
}
#message {
margin-top: 15px;
font-weight: bold;
}
🧠 UX هنا
✔ صفحة بسيطة جدًا
✔ تركيز كامل على الدفع
✔ بدون تشتيت
✔ كل شيء واضح
⚡ 3. JavaScript (منطق الدفع)
let cart = [
{ name: "Phone", price: 300 },
{ name: "Watch", price: 80 }
];
function loadOrder() {
let list = document.getElementById("orderList");
let total = 0;
cart.forEach(item => {
let li = document.createElement("li");
li.innerText = item.name + " - $" + item.price;
list.appendChild(li);
total += item.price;
});
document.getElementById("totalPrice").innerText = total;
}
loadOrder();
🧠 شرح مهم
🔵 cart = [...]
👉 الآن كل منتج فيه:
- اسم
- سعر
🔵 forEach
👉 يعرض كل المنتجات في الصفحة
🔵 total += item.price
👉 حساب الإجمالي
🔵 loadOrder()
👉 تشغيل عند فتح الصفحة
💳 إضافة زر الدفع (UX مهم جدًا)
document.getElementById("payBtn").onclick = function () {
document.getElementById("message").innerText =
"Processing payment... ⏳";
setTimeout(() => {
document.getElementById("message").innerText =
"Payment Successful ✔";
document.getElementById("message").style.color = "green";
}, 2000);
};
🧠 UX هنا مهم جدًا
✔ المستخدم يرى “Processing”
✔ ثم “Success”
✔ إحساس نظام حقيقي
✔ لا يوجد توقف مفاجئ
🚀 تحسين احترافي (مستوى شركات)
🔥 1. منع الدفع إذا السلة فارغة
if (cart.length === 0) {
document.getElementById("message").innerText =
"Cart is empty ❌";
return;
}
🔥 2. تحسين الرسائل
- Success → أخضر
- Error → أحمر
- Loading → رمادي
🧠 ماذا بنيت الآن؟
أنت الآن بنيت:
✔ صفحة Checkout حقيقية
✔ عرض منتجات
✔ حساب السعر
✔ زر دفع
✔ UX احترافي
🚀 مستوى المشروع الآن
هذا يشبه:
- Shopify checkout (بسيط)
- Amazon checkout (نسخة مبسطة)
- أي متجر إلكتروني حقيقي
🎯 ماذا تعلمت؟
✔ UX في الدفع أهم شيء
✔ تقليل الخطوات = زيادة المبيعات
✔ الوضوح أهم من الجمال
✔ التفاعل مهم جدًا
تمام 👌 نكمل الآن إلى مستوى أقوى فعليًا: نظام تسجيل دخول (Login & Register System)
وهذا أهم جزء في أي تطبيق حقيقي.
🔐 الدرس 8: Login & Register System (UI/UX + كود)
🎯 الهدف:
تتعلم:
- كيف تبني صفحة تسجيل دخول
- كيف تتحقق من البيانات
- كيف تعمل UX احترافي (رسائل + تحقق + تفاعل)
- كيف تفكر مثل تطبيقات حقيقية
🧠 فكرة UX هنا
أي تطبيق حقيقي يحتاج:
✔ تسجيل دخول
✔ تسجيل حساب
✔ رسائل خطأ
✔ تأكيد نجاح
✔ تجربة سهلة بدون تعقيد
🧱 1. HTML (صفحة تسجيل الدخول)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>Login 🔐</h1>
<input type="text" id="username" placeholder="Username">
<input type="password" id="password" placeholder="Password">
<button id="loginBtn">Login</button>
<p id="message"></p>
</div>
<script src="script.js"></script>
</body>
</html>
🧠 شرح HTML
🔵 <input type="text">
👉 مكان إدخال اسم المستخدم
🔵 <input type="password">
👉 كلمة المرور (مخفية)
🔵 <button>
👉 زر تسجيل الدخول
🔵 <p id="message">
👉 لعرض الرسائل (نجاح أو خطأ)
🎨 2. CSS (تصميم احترافي)
body {
margin: 0;
font-family: Arial;
background: #f5f6fa;
}
.container {
width: 300px;
margin: 120px auto;
background: white;
padding: 20px;
border-radius: 10px;
text-align: center;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
input {
width: 90%;
padding: 10px;
margin: 10px 0;
border-radius: 6px;
border: 1px solid #ccc;
}
button {
width: 100%;
padding: 10px;
background: #2563eb;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
}
button:hover {
transform: scale(1.03);
}
#message {
margin-top: 10px;
}
🧠 UX هنا
✔ واجهة بسيطة جدًا
✔ تركيز على الإدخال فقط
✔ لا يوجد تشتيت
✔ تصميم يشبه التطبيقات الحقيقية
⚡ 3. JavaScript (التحقق + التفاعل)
document.getElementById("loginBtn").onclick = function () {
let user = document.getElementById("username").value;
let pass = document.getElementById("password").value;
let message = document.getElementById("message");
if (user === "" || pass === "") {
message.innerText = "Please fill all fields ❌";
message.style.color = "red";
return;
}
if (user === "admin" && pass === "1234") {
message.innerText = "Login successful ✔";
message.style.color = "green";
} else {
message.innerText = "Wrong credentials ❌";
message.style.color = "red";
}
};
🧠 شرح مهم جدًا
🔵 value
👉 يأخذ النص المكتوب داخل الحقل
🔵 شرط التحقق:
if (user === "" || pass === "")
👉 يمنع الإرسال الفارغ
🔵 تسجيل الدخول الصحيح:
admin / 1234
👉 هذا مجرد مثال (لاحقًا يكون سيرفر حقيقي)
🧠 UX هنا مهم جدًا
✔ منع الخطأ قبل حدوثه
✔ رسالة واضحة
✔ ألوان مختلفة (أخضر/أحمر)
✔ تجربة سهلة
⚡ تحسين UX احترافي
🔥 1. Loading عند الضغط
message.innerText = "Checking...";
message.style.color = "gray";
setTimeout(() => {
if (user === "admin" && pass === "1234") {
message.innerText = "Login successful ✔";
message.style.color = "green";
} else {
message.innerText = "Wrong credentials ❌";
message.style.color = "red";
}
}, 1500);
🔥 2. منع الضغط المتكرر
document.getElementById("loginBtn").disabled = true;
🧠 هذا يسمى:
🔥 Micro UX Flow
🚀 ماذا بنيت الآن؟
✔ صفحة Login حقيقية
✔ تحقق من البيانات
✔ رسائل UX
✔ ألوان حسب الحالة
✔ تجربة تطبيق حقيقي
🧠 مستوى هذا المشروع
هذا نفس فكرة:
- تسجيل دخول تطبيقات الجوال
- مواقع الشركات
- أنظمة الإدارة
🔥 ماذا تعلمت حتى الآن؟
✔ UI (شكل الواجهة)
✔ UX (تجربة المستخدم)
✔ JavaScript (التفاعل)
✔ Forms (إدخال البيانات)
✔ Validation (التحقق)
تمام 👌 نكمل ونرفع المستوى إلى شيء “يشبه الشركات فعليًا”:
📊 الدرس 9: Dashboard Admin Panel (لوحة تحكم احترافية)
هذا النوع من المشاريع هو الذي يُستخدم في الشركات الحقيقية لإدارة المستخدمين والطلبات والمبيعات.
🎯 ماذا سنبني؟
✔ Sidebar (قائمة جانبية)
✔ إحصائيات (Cards)
✔ تصميم احترافي
✔ تفاعل بسيط
✔ UX واضح وسريع
🧠 فكرة UX
لوحة التحكم لازم تكون:
- سريعة
- واضحة
- بدون تعقيد
- الأهم: “المعلومة تظهر بسرعة”
🧱 1. HTML (هيكل الداشبورد)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Admin Dashboard</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="layout">
<!-- Sidebar -->
<aside class="sidebar">
<h2>Admin</h2>
<ul>
<li>Dashboard</li>
<li>Users</li>
<li>Orders</li>
<li>Settings</li>
</ul>
</aside>
<!-- Main Content -->
<main class="main">
<h1>Dashboard 📊</h1>
<div class="cards">
<div class="card">
<h3>Users</h3>
<p id="users">1200</p>
</div>
<div class="card">
<h3>Orders</h3>
<p id="orders">320</p>
</div>
<div class="card">
<h3>Revenue</h3>
<p id="revenue">$15,000</p>
</div>
</div>
<button id="refreshBtn">Refresh Data</button>
</main>
</div>
<script src="script.js"></script>
</body>
</html>
🧠 شرح HTML
🔵 <aside class="sidebar">
👉 القائمة الجانبية
💡 تحتوي:
- صفحات النظام
🔵 <main class="main">
👉 المحتوى الرئيسي
🔵 Cards
👉 عرض الإحصائيات
🔵 refreshBtn
👉 زر لتحديث البيانات
🎨 2. CSS (تصميم احترافي)
body {
margin: 0;
font-family: Arial;
background: #f4f6f9;
}
/* Layout */
.layout {
display: flex;
}
/* Sidebar */
.sidebar {
width: 200px;
background: #111827;
color: white;
height: 100vh;
padding: 20px;
}
.sidebar ul {
list-style: none;
padding: 0;
}
.sidebar li {
padding: 10px;
cursor: pointer;
}
.sidebar li:hover {
background: #1f2937;
}
/* Main */
.main {
flex: 1;
padding: 20px;
}
/* Cards */
.cards {
display: flex;
gap: 20px;
margin-top: 20px;
}
.card {
background: white;
padding: 20px;
border-radius: 10px;
flex: 1;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
transition: 0.2s;
}
.card:hover {
transform: translateY(-5px);
}
/* Button */
button {
margin-top: 20px;
padding: 10px 20px;
background: #2563eb;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
}
🧠 UX هنا مهم جدًا
✔ Sidebar واضح
✔ أرقام كبيرة وسهلة القراءة
✔ مسافات مريحة
✔ Hover يعطي إحساس احترافي
⚡ 3. JavaScript (تفاعل البيانات)
document.getElementById("refreshBtn").onclick = function () {
document.getElementById("users").innerText = "Loading...";
document.getElementById("orders").innerText = "Loading...";
document.getElementById("revenue").innerText = "Loading...";
setTimeout(() => {
document.getElementById("users").innerText = "1300";
document.getElementById("orders").innerText = "450";
document.getElementById("revenue").innerText = "$18,200";
}, 2000);
};
🧠 شرح UX
🔵 Loading state
👉 المستخدم يرى أن النظام يعمل
🔵 بعد 2 ثانية
👉 تظهر بيانات جديدة
💡 هذا مهم جدًا في الشركات
يسمى:
🔥 Data Feedback UX
🚀 تحسين احترافي
🔥 1. منع الضغط المتكرر
let loading = false;
document.getElementById("refreshBtn").onclick = function () {
if (loading) return;
loading = true;
// ... update logic
setTimeout(() => {
loading = false;
}, 2000);
};
🔥 2. تأثير بصري عند التحديث
.card {
transition: 0.3s;
}
🧠 ماذا بنيت الآن؟
✔ Dashboard حقيقي
✔ Sidebar + Content
✔ Cards احترافية
✔ تحديث بيانات
✔ UX مثل الشركات
🚀 مستوى هذا المشروع
هذا نفس نوع:
- لوحات إدارة المتاجر
- أنظمة الشركات
- SaaS dashboards
- admin panels
🧠 ماذا تعلمت حتى الآن؟
✔ UI structure
✔ UX design
✔ JavaScript interaction
✔ State updates
✔ Layout systems
تمام 👌 نكمل الآن إلى مستوى أقوى فعليًا من كل ما سبق:
⚛ الدرس 10: React UI (بداية الاحتراف الحقيقي في UI/UX)
هذا هو المستوى الذي تُبنى به تطبيقات الشركات الحديثة مثل لوحات التحكم والمتاجر والتطبيقات الكبيرة.
🎯 ماذا ستتعلم اليوم؟
✔ ما هو React ولماذا يُستخدم
✔ كيف نبني UI بطريقة احترافية
✔ Components (مكوّنات)
✔ State (حالة التطبيق)
✔ تفاعل حقيقي بدون إعادة تحميل الصفحة
🧠 ما هو React؟
React هو مكتبة JavaScript تستخدم لبناء:
- واجهات المستخدم (UI)
- تطبيقات سريعة
- مواقع تفاعلية
💡 الفرق بين JavaScript العادي و React
JavaScript العادي:
- تعدّل الصفحة مباشرة (DOM)
- صعب في المشاريع الكبيرة
React:
- كل شيء مقسّم إلى “Components”
- أسهل في التطوير
- أسرع في الأداء
🧱 أول تطبيق React بسيط (Counter App)
🎯 الفكرة:
زر يزيد رقم عند الضغط
🟦 1. الكود الكامل (React)
import React, { useState } from "react";
function App() {
const [count, setCount] = useState(0);
return (
<div style={{ textAlign: "center", marginTop: "100px" }}>
<h1>React Counter App</h1>
<h2>{count}</h2>
<button onClick={() => setCount(count + 1)}>
Increase
</button>
</div>
);
}
export default App;
🧠 شرح كل جزء
🔵 import React, { useState }
👉 استيراد React + خاصية مهمة اسمها State
🔵 useState(0)
👉 هذا يخزن قيمة تبدأ من 0
💡 يعني:
الرقم الذي سيتغير في التطبيق
🔵 [count, setCount]
- count = القيمة الحالية
- setCount = تغيير القيمة
🔵 return (...)
👉 هذا هو UI (واجهة المستخدم)
🔵 {count}
👉 عرض الرقم داخل الصفحة
🔵 onClick
onClick={() => setCount(count + 1)}
👉 عند الضغط:
- يزيد الرقم 1
🧠 UX هنا مهم جدًا
✔ لا يوجد إعادة تحميل
✔ التغيير فوري
✔ تجربة سلسة جدًا
⚡ لماذا React مهم في UI/UX؟
لأنه يسمح لك بـ:
✔ تحديث الواجهة لحظيًا
✔ بناء تطبيقات ضخمة
✔ تقسيم UI إلى أجزاء
🧱 مفهوم مهم جدًا: Components
💡 يعني ماذا؟
بدل صفحة واحدة كبيرة…
نقسمها إلى أجزاء:
- Navbar
- Sidebar
- Cards
- Footer
🧱 مثال Component
function Button() {
return <button>Click Me</button>;
}
ثم نستخدمه:
<Button />
🧠 UX هنا
✔ إعادة استخدام
✔ تنظيم
✔ سرعة تطوير
📊 مثال React UI (Dashboard بسيط)
import React, { useState } from "react";
function App() {
const [users, setUsers] = useState(100);
return (
<div style={{ padding: "20px" }}>
<h1>Dashboard</h1>
<div>
<h3>Users: {users}</h3>
<button onClick={() => setUsers(users + 10)}>
Add Users
</button>
</div>
</div>
);
}
export default App;
🧠 ماذا يحدث هنا؟
✔ UI يعرض رقم
✔ زر يغير الرقم
✔ تحديث لحظي
🚀 مستوى هذا الدرس
أنت الآن وصلت إلى:
🔥 Frontend Level 1 React
وهذا يُستخدم في:
- شركات حقيقية
- تطبيقات SaaS
- لوحات تحكم احترافية
- متاجر إلكترونية ضخمة
🧠 أهم مفاهيم تعلمتها
✔ State (حالة التطبيق)
✔ Components (تقسيم الواجهة)
✔ Events (onClick)
✔ Dynamic UI (واجهة تتغير)
تمام 👌 نكمل الآن إلى مستوى الشركات الحقيقي داخل React:
🛒 الدرس 11: React E-Commerce App (متجر احترافي كامل)
هذا هو نفس النوع المستخدم في تطبيقات مثل Shopify / Amazon UI (نسخة مبسطة لكن نفس الفكرة)
🎯 ماذا سنبني؟
✔ عرض منتجات
✔ إضافة للسلة (Cart)
✔ حذف من السلة
✔ حساب الإجمالي
✔ UI ديناميكي بالكامل
🧠 فكرة UX هنا
المستخدم يجب أن:
- يرى المنتجات بسرعة
- يضيف بضغطة واحدة
- يشاهد السلة تتحدث فورًا
- يفهم السعر مباشرة
🧱 1. React App (الكود الكامل)
import React, { useState } from "react";
function App() {
const [products] = useState([
{ id: 1, name: "Headphones", price: 50 },
{ id: 2, name: "Watch", price: 80 },
{ id: 3, name: "Phone", price: 300 }
]);
const [cart, setCart] = useState([]);
// إضافة للسلة
function addToCart(product) {
setCart([...cart, product]);
}
// حذف من السلة
function removeFromCart(index) {
const newCart = [...cart];
newCart.splice(index, 1);
setCart(newCart);
}
// حساب المجموع
const total = cart.reduce((sum, item) => sum + item.price, 0);
return (
<div style={{ padding: "20px", fontFamily: "Arial" }}>
<h1>React Shop 🛒</h1>
{/* المنتجات */}
<div style={{ display: "flex", gap: "20px" }}>
{products.map((product) => (
<div key={product.id}
style={{
border: "1px solid #ddd",
padding: "10px",
borderRadius: "10px",
width: "150px"
}}>
<h3>{product.name}</h3>
<p>${product.price}</p>
<button onClick={() => addToCart(product)}>
Add to Cart
</button>
</div>
))}
</div>
{/* السلة */}
<h2>Cart 🧺</h2>
{cart.map((item, index) => (
<div key={index} style={{ marginBottom: "5px" }}>
{item.name} - ${item.price}
<button onClick={() => removeFromCart(index)}>
Remove
</button>
</div>
))}
<h3>Total: ${total}</h3>
</div>
);
}
export default App;
🧠 شرح كل جزء (مهم جدًا)
🔵 المنتجات
useState([
{ id: 1, name: "Headphones", price: 50 }
])
👉 هذه قاعدة بيانات وهمية
🔵 السلة
const [cart, setCart] = useState([]);
👉 تخزين المنتجات التي يضيفها المستخدم
🔵 إضافة للسلة
setCart([...cart, product]);
👉 معناها:
خذ القديم + أضف الجديد
🔵 حذف من السلة
splice(index, 1);
👉 حذف عنصر من القائمة
🔵 حساب المجموع
cart.reduce((sum, item) => sum + item.price, 0);
👉 جمع أسعار كل المنتجات
🧠 UX هنا قوي جدًا
✔ التحديث فوري
✔ لا يوجد إعادة تحميل
✔ تجربة متجر حقيقي
✔ تحكم كامل في السلة
🎨 كيف يبدو UX هنا؟
المستخدم يشعر أن:
- التطبيق سريع جدًا
- كل شيء يتغير أمامه
- لا يوجد تأخير
- التحكم كامل بيده
🚀 تحسينات احترافية (مستوى شركات)
🔥 1. منع تكرار المنتج
function addToCart(product) {
const exists = cart.find(item => item.id === product.id);
if (!exists) {
setCart([...cart, product]);
}
}
🔥 2. رسالة إضافة
alert("Added successfully ✔");
(لاحقًا نستبدلها بـ Toast احترافي)
🔥 3. تحسين UX (زر مميز)
<button style={{ background: "#2563eb", color: "white" }}>
🧠 ماذا تعلمت الآن؟
✔ React State
✔ Mapping Data
✔ Cart System
✔ UX Interaction
✔ Dynamic UI
📊 مستوى هذا المشروع
هذا يشبه:
- Shopify mini store
- Amazon basic UI
- تطبيقات بيع حقيقية
تمام 👌 نكمل الآن إلى مستوى أقوى جدًا وفعلي في الشركات:
💳 الدرس 12: Checkout + Payment Flow في React (نظام شراء كامل)
هذا هو الجزء الذي يحوّل المتجر من “عرض منتجات” إلى “تطبيق تجاري حقيقي”
🎯 ماذا سنبني اليوم؟
✔ صفحة Checkout
✔ نقل السلة
✔ عرض المنتجات المختارة
✔ حساب الإجمالي
✔ زر “إتمام الشراء”
✔ رسالة نجاح احترافية
🧠 UX الهدف
المستخدم يجب أن:
- يرى ملخص الطلب
- يفهم السعر النهائي
- يكمل الدفع بسهولة
- يحصل على تأكيد فوري
🧱 1. React Checkout App
import React, { useState } from "react";
function App() {
const [cart, setCart] = useState([
{ name: "Phone", price: 300 },
{ name: "Watch", price: 80 }
]);
const [message, setMessage] = useState("");
const total = cart.reduce((sum, item) => sum + item.price, 0);
function payNow() {
if (cart.length === 0) {
setMessage("Cart is empty ❌");
return;
}
setMessage("Processing payment... ⏳");
setTimeout(() => {
setMessage("Payment Successful ✔ Thank you!");
setCart([]);
}, 2000);
}
return (
<div style={{ padding: "20px", fontFamily: "Arial" }}>
<h1>Checkout 💳</h1>
{/* المنتجات */}
{cart.map((item, index) => (
<div key={index} style={{ marginBottom: "10px" }}>
{item.name} - ${item.price}
</div>
))}
{/* الإجمالي */}
<h2>Total: ${total}</h2>
{/* زر الدفع */}
<button onClick={payNow}>
Pay Now
</button>
{/* الرسالة */}
<p>{message}</p>
</div>
);
}
export default App;
🧠 شرح مهم جدًا
🔵 reduce
cart.reduce((sum, item) => sum + item.price, 0);
👉 يحسب مجموع الأسعار
🔵 التحقق
if (cart.length === 0)
👉 يمنع الدفع بدون منتجات
🔵 Loading UX
setMessage("Processing payment... ⏳");
👉 المستخدم يعرف أن النظام يعمل
🔵 التأخير
setTimeout(() => {
👉 محاكاة عملية الدفع
🧠 UX هنا مهم جدًا
✔ لا يوجد توقف مفاجئ
✔ يوجد “Processing”
✔ ثم نجاح واضح
✔ سلة تُفرغ بعد الدفع
🚀 تحسينات احترافية (مستوى شركات)
🔥 1. زر مع حالة Loading
const [loading, setLoading] = useState(false);
function payNow() {
setLoading(true);
setMessage("Processing...");
setTimeout(() => {
setLoading(false);
setMessage("Success ✔");
setCart([]);
}, 2000);
}
🔥 2. زر ديناميكي
<button onClick={payNow} disabled={loading}>
{loading ? "Loading..." : "Pay Now"}
</button>
🧠 UX هنا أقوى
✔ يمنع الضغط المتكرر
✔ يعطي حالة واضحة
✔ تجربة احترافية
💡 فكرة مهمة جدًا
في التطبيقات الحقيقية:
- Checkout = أهم صفحة
- أي تعقيد فيها = خسارة مستخدم
📊 ماذا بنيت الآن؟
✔ نظام Checkout
✔ حساب إجمالي
✔ نظام دفع وهمي
✔ UX احترافي
✔ إدارة حالة السلة
🚀 مستوى هذا المشروع
يشبه:
- Shopify checkout
- Amazon checkout (نسخة مبسطة)
- أي تطبيق تجارة إلكترونية
🧠 ماذا تعلمت حتى الآن؟
✔ React state management
✔ UX في الدفع
✔ التعامل مع السلة
✔ loading states
✔ conditional rendering
تمام 👌 نكمل الآن إلى مستوى “الشركات الحقيقي” فعليًا:
📊 الدرس 13: React Dashboard احترافي (Admin Panel + UX حقيقي)
هذا النوع هو الذي يُستخدم في أنظمة الشركات، المتاجر، ولوحات التحكم الحقيقية.
🎯 ماذا سنبني اليوم؟
✔ Sidebar احترافي
✔ Cards للإحصائيات
✔ بيانات ديناميكية
✔ زر تحديث
✔ UX يشبه أنظمة SaaS
🧠 فكرة UX
لوحة التحكم يجب أن تكون:
- سريعة
- واضحة
- بدون تشتيت
- كل المعلومات أمامك مباشرة
🧱 1. React Dashboard كامل
import React, { useState } from "react";
function App() {
const [users, setUsers] = useState(1200);
const [orders, setOrders] = useState(320);
const [revenue, setRevenue] = useState(15000);
const [loading, setLoading] = useState(false);
function refreshData() {
setLoading(true);
setUsers("Loading...");
setOrders("Loading...");
setRevenue("Loading...");
setTimeout(() => {
setUsers(1350);
setOrders(410);
setRevenue(18200);
setLoading(false);
}, 2000);
}
return (
<div style={{ display: "flex", fontFamily: "Arial" }}>
{/* Sidebar */}
<div style={{
width: "200px",
height: "100vh",
background: "#111827",
color: "white",
padding: "20px"
}}>
<h2>Admin</h2>
<p>Dashboard</p>
<p>Users</p>
<p>Orders</p>
<p>Settings</p>
</div>
{/* Main */}
<div style={{ padding: "20px", flex: 1 }}>
<h1>Dashboard 📊</h1>
<div style={{ display: "flex", gap: "20px" }}>
<div style={cardStyle}>
<h3>Users</h3>
<p>{users}</p>
</div>
<div style={cardStyle}>
<h3>Orders</h3>
<p>{orders}</p>
</div>
<div style={cardStyle}>
<h3>Revenue</h3>
<p>${revenue}</p>
</div>
</div>
<button onClick={refreshData} disabled={loading} style={buttonStyle}>
{loading ? "Refreshing..." : "Refresh Data"}
</button>
</div>
</div>
);
}
const cardStyle = {
background: "white",
padding: "20px",
borderRadius: "10px",
boxShadow: "0 2px 10px rgba(0,0,0,0.1)",
width: "150px"
};
const buttonStyle = {
marginTop: "20px",
padding: "10px 20px",
background: "#2563eb",
color: "white",
border: "none",
borderRadius: "6px",
cursor: "pointer"
};
export default App;
🧠 شرح مهم جدًا
🔵 Sidebar
width: 200px
👉 قائمة جانبية ثابتة
💡 UX الهدف:
- تنقل سريع
- بدون ضياع
🔵 Cards
👉 أهم جزء في الداشبورد
يعرض:
- Users
- Orders
- Revenue
🔵 Loading State
setUsers("Loading...");
👉 المستخدم يعرف أن البيانات يتم تحديثها
🔵 Refresh Button
👉 يعيد تحميل البيانات
🧠 UX هنا مهم جدًا
✔ المستخدم لا ينتظر بصمت
✔ يوجد “Loading” واضح
✔ البيانات تتغير أمامه
✔ كل شيء مباشر
🚀 تحسينات احترافية (مستوى شركات)
🔥 1. منع الضغط المتكرر
disabled={loading}
👉 يمنع الضغط أثناء التحديث
🔥 2. تحسين الشكل (Hover UX)
const hover = {
transform: "scale(1.05)",
transition: "0.2s"
};
🔥 3. تقسيم UI (مهم جدًا)
في الشركات يتم تقسيم:
- Sidebar Component
- Cards Component
- Header Component
🧠 ماذا بنيت الآن؟
✔ Dashboard كامل
✔ Sidebar + Content
✔ Dynamic Data
✔ Loading UX
✔ State management
📊 مستوى هذا المشروع
هذا نفس نوع:
- Google Admin Panels
- SaaS Dashboards
- Shopify Admin
- CRM Systems
🧠 ماذا تعلمت حتى الآن؟
✔ React UI
✔ State Management
✔ UX Feedback
✔ Loading States
✔ Layout Systems
تمام 👌 نكمل الآن إلى أهم خطوة في أي تطبيق حقيقي:
🔗 الدرس 14: ربط React بـ API (Backend حقيقي + بيانات حقيقية)
هنا نخرج من “بيانات وهمية” إلى “تطبيق حي يتكلم مع سيرفر”
🎯 ماذا ستتعلم اليوم؟
✔ كيف تجلب بيانات من الإنترنت
✔ كيف تستخدم API في React
✔ كيف تعرض بيانات حقيقية
✔ مفهوم loading & error UX
✔ بناء تطبيق قريب من الواقع
🧠 الفكرة ببساطة
بدل هذا:
const users = 1200;
نجيب البيانات من سيرفر:
📡 API → React → UI
🧱 1. أول مثال: جلب بيانات المستخدمين
API سنستخدم:
https://jsonplaceholder.typicode.com/users
🟦 الكود الكامل
import React, { useEffect, useState } from "react";
function App() {
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => res.json())
.then(data => {
setUsers(data);
setLoading(false);
});
}, []);
if (loading) {
return <h2>Loading users... ⏳</h2>;
}
return (
<div style={{ padding: "20px" }}>
<h1>Users List 👥</h1>
{users.map(user => (
<div key={user.id} style={{
padding: "10px",
marginBottom: "10px",
border: "1px solid #ddd"
}}>
<h3>{user.name}</h3>
<p>{user.email}</p>
</div>
))}
</div>
);
}
export default App;
🧠 شرح كل جزء
🔵 useState([])
👉 نخزن البيانات (قائمة المستخدمين)
🔵 useEffect
useEffect(() => { ... }, []);
👉 هذا يعني:
نفّذ الكود عند فتح الصفحة فقط
🔵 fetch
👉 جلب بيانات من الإنترنت
🔵 setUsers(data)
👉 نحط البيانات داخل React state
🔵 loading
👉 نعرض “Loading” أثناء الانتظار
🧠 UX هنا مهم جدًا
✔ المستخدم لا يرى صفحة فارغة
✔ يرى Loading
✔ ثم تظهر البيانات فجأة بشكل منظم
⚡ تحسين UX احترافي
🔥 1. Error Handling
const [error, setError] = useState(null);
fetch(url)
.then(res => res.json())
.then(data => setUsers(data))
.catch(err => setError("Failed to load data ❌"));
🔥 2. عرض الخطأ
if (error) {
return <h2>{error}</h2>;
}
🧠 UX هنا أصبح احترافي
✔ Loading state
✔ Success state
✔ Error state
📊 ماذا بنيت الآن؟
✔ تطبيق React متصل بالإنترنت
✔ عرض بيانات حقيقية
✔ UX احترافي
✔ إدارة حالات التطبيق
🚀 هذا المستوى يعني ماذا؟
أنت الآن قادر على بناء:
- مواقع تعتمد على API
- تطبيقات أخبار
- لوحات بيانات حقيقية
- تطبيقات SaaS بسيطة
🧠 أهم مفاهيم تعلمتها
✔ API Integration
✔ useEffect lifecycle
✔ Async data loading
✔ Error handling UX
✔ Real-world React flow
تمام 👌 نكمل إلى أهم مرحلة في أي تطبيق حقيقي في الشركات:
🔐 الدرس 15: Authentication (تسجيل دخول حقيقي + حماية الصفحات)
هنا نبدأ نفكر مثل تطبيقات: Instagram / Amazon / Shopify
🎯 ماذا ستتعلم اليوم؟
✔ تسجيل دخول حقيقي (Frontend logic)
✔ حفظ المستخدم (State)
✔ منع الوصول بدون تسجيل
✔ Logout
✔ UX احترافي للهوية (Auth Flow)
🧠 الفكرة ببساطة
أي تطبيق فيه:
- Login
- Register
- Protected pages
لازم يعرف:
“هل المستخدم مسجل دخول أم لا؟”
🧱 1. React Login System (بسيط واحترافي)
import React, { useState } from "react";
function App() {
const [user, setUser] = useState(null);
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [message, setMessage] = useState("");
function login() {
if (username === "" || password === "") {
setMessage("Please fill all fields ❌");
return;
}
if (username === "admin" && password === "1234") {
setUser({ name: username });
setMessage("Login successful ✔");
} else {
setMessage("Wrong credentials ❌");
}
}
function logout() {
setUser(null);
setUsername("");
setPassword("");
setMessage("Logged out ✔");
}
return (
<div style={{ padding: "20px", fontFamily: "Arial" }}>
<h1>Auth System 🔐</h1>
{/* إذا المستخدم مسجل */}
{user ? (
<div>
<h2>Welcome {user.name} 👋</h2>
<button onClick={logout}>Logout</button>
</div>
) : (
<div>
<input
placeholder="Username"
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
<br /><br />
<input
type="password"
placeholder="Password"
value={password}
onChange={(e) => setPassword(e.target.value)}
/>
<br /><br />
<button onClick={login}>Login</button>
</div>
)}
<p>{message}</p>
</div>
);
}
export default App;
🧠 شرح مهم جدًا
🔵 user
const [user, setUser] = useState(null);
👉 هذا يمثل:
هل المستخدم مسجل دخول أم لا؟
🔵 شرط العرض (Conditional UI)
{user ? (...) : (...)}
👉 إذا مسجل:
- يظهر محتوى التطبيق
إذا لا:
- يظهر login
🔵 تسجيل الدخول
if (username === "admin" && password === "1234")
👉 هذا مثال بسيط (لاحقًا يكون سيرفر حقيقي)
🔵 logout
setUser(null);
👉 إلغاء تسجيل الدخول
🧠 UX هنا مهم جدًا
✔ المستخدم يعرف حالته
✔ لا يختلط عليه المحتوى
✔ تجربة واضحة
✔ ردود فورية
⚡ تحسينات احترافية (مستوى شركات)
🔥 1. حفظ تسجيل الدخول
localStorage.setItem("user", JSON.stringify(user));
🔥 2. استرجاع الجلسة
useEffect(() => {
const savedUser = localStorage.getItem("user");
if (savedUser) {
setUser(JSON.parse(savedUser));
}
}, []);
🔥 3. حماية الصفحة
if (!user) {
return <h2>Please login first 🔐</h2>;
}
🧠 UX هنا أصبح قوي جدًا
✔ المستخدم يبقى مسجل حتى بعد إعادة التشغيل
✔ حماية المحتوى
✔ تجربة تطبيق حقيقي
📊 ماذا بنيت الآن؟
✔ نظام تسجيل دخول
✔ تسجيل خروج
✔ حماية واجهة المستخدم
✔ UX authentication flow
✔ State management متقدم
🚀 مستوى هذا المشروع
هذا نفس نظام:
- Instagram login
- Facebook login
- Shopify admin login
- SaaS dashboards
🧠 ماذا تعلمت حتى الآن؟
✔ Authentication logic
✔ Conditional rendering
✔ State control
✔ UX flow
✔ Local storage
تمام 👌 نكمل إلى أعلى مستوى عملي في هذا المسار:
🛒 الدرس 16: مشروع متجر احترافي كامل (Login + Products + Cart + Checkout + API)
هذا هو “مشروع بورتفوليو” حقيقي لو عرضته، يعتبر مستوى Junior Frontend Developer.
🎯 ماذا سنبني؟
✔ تسجيل دخول (Auth)
✔ جلب منتجات من API
✔ إضافة للسلة
✔ حذف من السلة
✔ صفحة Checkout
✔ حساب الإجمالي
✔ UX كامل مثل التطبيقات الحقيقية
🧠 فكرة المشروع
التطبيق = 3 أجزاء رئيسية:
- 🔐 Login (هوية المستخدم)
- 🛍 Products (المنتجات)
- 🧺 Cart + Checkout (السلة والدفع)
🧱 1. الكود الكامل (React App متكامل)
import React, { useState, useEffect } from "react";
function App() {
// Auth
const [user, setUser] = useState(null);
const [username, setUsername] = useState("");
// Products
const [products, setProducts] = useState([]);
// Cart
const [cart, setCart] = useState([]);
const [message, setMessage] = useState("");
const [loading, setLoading] = useState(false);
// 🔐 Login
function login() {
if (username === "") {
setMessage("Enter username ❌");
return;
}
setUser({ name: username });
setMessage("Welcome ✔");
}
// 🔓 Logout
function logout() {
setUser(null);
setCart([]);
}
// 🛍 Load products from API
useEffect(() => {
setLoading(true);
fetch("https://fakestoreapi.com/products")
.then(res => res.json())
.then(data => {
setProducts(data);
setLoading(false);
});
}, []);
// ➕ Add to cart
function addToCart(product) {
setCart([...cart, product]);
}
// ❌ Remove from cart
function removeFromCart(index) {
const newCart = [...cart];
newCart.splice(index, 1);
setCart(newCart);
}
// 💰 Total
const total = cart.reduce((sum, item) => sum + item.price, 0);
// 💳 Checkout
function checkout() {
if (cart.length === 0) {
setMessage("Cart is empty ❌");
return;
}
setMessage("Processing payment... ⏳");
setTimeout(() => {
setMessage("Payment Successful ✔ Thank you!");
setCart([]);
}, 2000);
}
// 🔐 إذا لم يسجل دخول
if (!user) {
return (
<div style={{ padding: "20px" }}>
<h1>Login 🔐</h1>
<input
placeholder="Username"
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
<button onClick={login}>Login</button>
<p>{message}</p>
</div>
);
}
// 🛍 التطبيق الرئيسي
return (
<div style={{ padding: "20px", fontFamily: "Arial" }}>
<h1>Mini Shop 🛒</h1>
<button onClick={logout}>Logout</button>
<h3>Welcome {user.name}</h3>
{loading ? (
<p>Loading products... ⏳</p>
) : (
<div style={{ display: "flex", gap: "10px", flexWrap: "wrap" }}>
{products.map(product => (
<div key={product.id} style={{
border: "1px solid #ddd",
padding: "10px",
width: "200px"
}}>
<img src={product.image} width="100" />
<h4>{product.title.slice(0, 20)}</h4>
<p>${product.price}</p>
<button onClick={() => addToCart(product)}>
Add to Cart
</button>
</div>
))}
</div>
)}
{/* 🧺 Cart */}
<h2>Cart 🧺</h2>
{cart.map((item, index) => (
<div key={index}>
{item.title.slice(0, 20)} - ${item.price}
<button onClick={() => removeFromCart(index)}>Remove</button>
</div>
))}
<h3>Total: ${total.toFixed(2)}</h3>
<button onClick={checkout}>Checkout 💳</button>
<p>{message}</p>
</div>
);
}
export default App;
🧠 شرح المشروع كامل
🔵 1. Login System
setUser({ name: username });
👉 يحدد من هو المستخدم
🔵 2. API Products
fetch("https://fakestoreapi.com/products")
👉 بيانات حقيقية من الإنترنت
🔵 3. Cart System
setCart([...cart, product]);
👉 إضافة منتجات
🔵 4. Total Calculation
reduce((sum, item) => sum + item.price)
👉 حساب السعر النهائي
🔵 5. Checkout UX
- Loading
- Success
- Reset cart
🧠 UX هنا احترافي جدًا
✔ تسجيل دخول
✔ تحميل بيانات
✔ سلة ديناميكية
✔ دفع وهمي
✔ رسائل واضحة
🚀 مستوى هذا المشروع
هذا يعتبر:
🔥 Junior Frontend Portfolio Project
يعني يمكنك عرضه في:
- GitHub
- CV
- Freelance
- مقابلات عمل
🧠 ماذا تعلمت في كل السلسلة؟
✔ UI Design
✔ UX Thinking
✔ JavaScript
✔ React Basics
✔ State Management
✔ API Integration
✔ Authentication
✔ Full App Structure
🧭 أنت الآن وصلت إلى ماذا؟
أنت قادر على بناء:
- متجر إلكتروني
- Dashboard
- Login system
- API apps
- React applications حقيقية
تمام 👌 الآن ندخل مرحلة “المستوى الحقيقي في الشركات”:
🧠 الدرس 17: Backend + Database + JWT Authentication (المستوى الحقيقي)
هنا يبدأ الفرق بين “Frontend فقط” و “Full Stack Developer”
🎯 ماذا سنبني اليوم؟
✔ سيرفر (Backend)
✔ تسجيل دخول حقيقي
✔ تشفير كلمات المرور
✔ JWT Token (هوية المستخدم)
✔ قاعدة بيانات بسيطة
✔ API حقيقية تتكلم معها React
🧠 الفكرة ببساطة
بدل هذا (اللي كنا نعمله سابقًا):
if (username === "admin")
نصبح نعمل:
📡 React → API → Database → JWT → React
🧱 1. إنشاء Backend (Node.js + Express)
📦 تثبيت الأدوات:
npm init -y
npm install express cors jsonwebtoken bcryptjs
🟦 2. كود السيرفر الأساسي
const express = require("express");
const cors = require("cors");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const app = express();
app.use(cors());
app.use(express.json());
// قاعدة بيانات وهمية
const users = [];
const SECRET = "mysecretkey";
// 🔐 Register
app.post("/register", async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
users.push({
username,
password: hashedPassword
});
res.json({ message: "User created ✔" });
});
// 🔐 Login
app.post("/login", async (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username);
if (!user) {
return res.status(400).json({ message: "User not found ❌" });
}
const valid = await bcrypt.compare(password, user.password);
if (!valid) {
return res.status(400).json({ message: "Wrong password ❌" });
}
const token = jwt.sign({ username }, SECRET);
res.json({ token });
});
// 🔒 Protected route
app.get("/dashboard", (req, res) => {
const token = req.headers.authorization;
if (!token) {
return res.status(401).json({ message: "No token ❌" });
}
try {
const decoded = jwt.verify(token, SECRET);
res.json({ message: "Welcome to dashboard ✔", user: decoded });
} catch {
res.status(401).json({ message: "Invalid token ❌" });
}
});
app.listen(5000, () => {
console.log("Server running on port 5000");
});
🧠 شرح مهم جدًا
🔵 bcrypt
👉 لتشفير كلمة المرور
💡 يعني:
- لا نخزن password مباشرة
- نخزن نسخة مشفرة فقط
🔵 JWT
👉 Token يمثل هوية المستخدم
مثل:
بطاقة دخول رقمية
🔵 protected route
if (!token)
👉 يمنع الدخول بدون تسجيل
🧱 3. React Frontend (الاتصال بالسيرفر)
import React, { useState } from "react";
function App() {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [token, setToken] = useState("");
const [message, setMessage] = useState("");
// 🔐 Register
async function register() {
await fetch("http://localhost:5000/register", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username, password })
});
setMessage("User registered ✔");
}
// 🔐 Login
async function login() {
const res = await fetch("http://localhost:5000/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username, password })
});
const data = await res.json();
setToken(data.token);
}
// 🔒 Dashboard
async function getDashboard() {
const res = await fetch("http://localhost:5000/dashboard", {
headers: {
Authorization: token
}
});
const data = await res.json();
setMessage(data.message);
}
return (
<div style={{ padding: "20px" }}>
<h1>Full Stack Auth 🔐</h1>
<input placeholder="Username" onChange={(e) => setUsername(e.target.value)} />
<input placeholder="Password" type="password" onChange={(e) => setPassword(e.target.value)} />
<br /><br />
<button onClick={register}>Register</button>
<button onClick={login}>Login</button>
<button onClick={getDashboard}>Dashboard</button>
<p>{message}</p>
</div>
);
}
export default App;
🧠 شرح الربط
🔵 register
👉 إرسال بيانات إلى السيرفر
🔵 login
👉 السيرفر يرجع token
🔵 dashboard
👉 نرسل token للتحقق
🧠 UX هنا احترافي جدًا
✔ تسجيل حقيقي
✔ حماية بيانات
✔ جلسة دخول
✔ API حقيقي
🚀 ماذا بنيت الآن؟
✔ Backend server
✔ Authentication حقيقي
✔ JWT system
✔ React + API integration
✔ Full Stack app
📊 هذا المستوى يعني ماذا؟
هذا نفس:
- Instagram login system
- Facebook authentication
- Amazon user system
- SaaS platforms
🧠 ماذا أصبحت تعرف الآن؟
✔ Frontend (React)
✔ Backend (Node.js)
✔ API design
✔ Authentication
✔ Database logic (basic)
✔ Security basics
تمام 👌 نكمل الآن إلى آخر مرحلة مهمة جدًا في المسار الحقيقي:
🗄️ الدرس 18: قاعدة بيانات حقيقية (MongoDB + Full Stack App)
هنا يتحول المشروع من “تجربة تعليمية” إلى “نظام حقيقي يُستخدم في الشركات”
🎯 ماذا سنبني اليوم؟
✔ ربط Node.js بـ MongoDB
✔ حفظ المستخدمين بشكل دائم
✔ تسجيل + دخول حقيقي
✔ بيانات لا تضيع بعد إعادة التشغيل
✔ API احترافية
🧠 لماذا هذا مهم؟
في الدروس السابقة:
❌ البيانات كانت تضيع عند إغلاق السيرفر
❌ كنا نستخدم Array فقط
الآن:
✅ البيانات محفوظة دائمًا
✅ مثل تطبيقات حقيقية
🧱 1. تثبيت MongoDB + Mongoose
npm install mongoose
🟦 2. الاتصال بقاعدة البيانات
const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/myapp")
.then(() => console.log("MongoDB Connected ✔"))
.catch(err => console.log(err));
🧠 شرح
🔵 MongoDB
👉 قاعدة بيانات NoSQL
تشبه:
- جداول (لكن بشكل مرن)
- تخزن JSON
🔵 mongoose
👉 وسيط بين Node.js و MongoDB
🧱 3. إنشاء User Model
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
username: String,
password: String
});
const User = mongoose.model("User", UserSchema);
module.exports = User;
🧠 شرح
🔵 Schema
👉 شكل البيانات
🔵 Model
👉 التعامل مع البيانات (CRUD)
🧱 4. تعديل Backend (تسجيل + دخول حقيقي)
const express = require("express");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const mongoose = require("mongoose");
const User = require("./User");
const app = express();
app.use(express.json());
const SECRET = "secretkey";
// 🔗 اتصال قاعدة البيانات
mongoose.connect("mongodb://127.0.0.1:27017/myapp");
// 🔐 Register
app.post("/register", async (req, res) => {
const { username, password } = req.body;
const hashed = await bcrypt.hash(password, 10);
const user = new User({
username,
password: hashed
});
await user.save();
res.json({ message: "User saved in DB ✔" });
});
// 🔐 Login
app.post("/login", async (req, res) => {
const { username, password } = req.body;
const user = await User.findOne({ username });
if (!user) {
return res.status(400).json({ message: "User not found ❌" });
}
const valid = await bcrypt.compare(password, user.password);
if (!valid) {
return res.status(400).json({ message: "Wrong password ❌" });
}
const token = jwt.sign({ id: user._id }, SECRET);
res.json({ token });
});
// 🔒 Dashboard
app.get("/dashboard", (req, res) => {
const token = req.headers.authorization;
if (!token) return res.status(401).json({ message: "No token ❌" });
try {
const decoded = jwt.verify(token, SECRET);
res.json({ message: "Welcome user ✔", user: decoded });
} catch {
res.status(401).json({ message: "Invalid token ❌" });
}
});
app.listen(5000, () => {
console.log("Server running ✔");
});
🧠 شرح مهم جدًا
🔵 user.save()
👉 حفظ المستخدم في قاعدة البيانات
🔵 findOne
👉 البحث عن مستخدم حقيقي
🔵 الفرق الآن
| قبل | الآن |
|---|---|
| بيانات مؤقتة | بيانات دائمة |
| Array | Database |
| تدريب | نظام حقيقي |
🧠 UX في هذا المستوى
✔ تسجيل حقيقي
✔ بيانات محفوظة
✔ أمان أعلى
✔ تجربة تطبيق فعلي
🚀 ماذا أصبح عندك الآن؟
أنت الآن بنيت:
✔ Frontend (React)
✔ Backend (Node.js)
✔ API
✔ Authentication
✔ Database (MongoDB)
📊 هذا يسمى:
🔥 Full Stack Application
🧠 ماذا أصبحت تعرف؟
✔ UI/UX
✔ React
✔ API
✔ Backend
✔ Authentication
✔ Database
✔ Full system architecture
تمام 👌 الآن وصلنا للمرحلة الأخيرة تقريبًا في مسار “التطبيقات الحقيقية”:
🚀 الدرس 19: نشر المشروع على الإنترنت (Deployment + Hosting)
هنا يتحول مشروعك من “على جهازك” إلى “تطبيق عالمي يقدر أي شخص يفتحه”
🎯 ماذا ستتعلم اليوم؟
✔ نشر Frontend (React)
✔ نشر Backend (Node.js)
✔ ربط المشروع أونلاين
✔ فهم بيئة الإنتاج (Production)
✔ أهم خطوة لأي Developer
🧠 الفكرة ببساطة
قبل النشر:
🧑💻 جهازك فقط يشغل التطبيق
بعد النشر:
🌍 أي شخص في العالم يقدر يستخدمه
🌐 1. نشر React (Frontend)
أفضل منصة: Vercel
الخطوات:
- تثبيت Vercel:
npm install -g vercel
- بناء المشروع:
npm run build
- رفع المشروع:
vercel
🧠 ماذا يحدث؟
✔ يتم تحويل React إلى ملفات HTML/CSS/JS
✔ يتم رفعها على سيرفر عالمي
✔ يعطيك رابط مثل:
https://your-app.vercel.app
🚀 2. نشر Backend (Node.js)
أفضل منصة: Render أو Railway
مثال نشر على Render:
الخطوات:
✔ رفع الكود على GitHub
✔ ربط المشروع بـ Render
✔ اختيار:
- Node.js
- Start Command:
node index.js
🧠 مهم جدًا
في السيرفر الحقيقي لازم:
app.listen(process.env.PORT || 5000);
👉 لأن السيرفر يعطيك PORT تلقائي
🌍 3. ربط Frontend + Backend
في React:
fetch("https://your-backend.onrender.com/login")
🧠 الفرق هنا
| محلي | أونلاين |
|---|---|
| localhost | URL حقيقي |
| جهازك فقط | العالم كله |
| تطوير | إنتاج |
🔐 4. أهم مشاكل النشر (وحلولها)
❌ CORS Error
الحل:
const cors = require("cors");
app.use(cors());
❌ API لا يعمل
👉 تأكد من:
- الرابط صحيح
- السيرفر شغال
- PORT مضبوط
🧠 UX بعد النشر
✔ التطبيق متاح 24/7
✔ أي شخص يفتحه
✔ تجربة حقيقية مثل الشركات
🚀 ماذا أصبحت قادر الآن؟
أنت الآن قادر على:
✔ بناء تطبيق كامل
✔ ربط Frontend + Backend
✔ استخدام Database
✔ نشر المشروع
✔ إنشاء Portfolio حقيقي
📊 هذا المستوى يسمى:
🔥 Junior Full Stack Developer جاهز للعمل
🧠 ماذا تعلمت في كل السلسلة؟
✔ UI Design
✔ UX Thinking
✔ HTML / CSS
✔ JavaScript
✔ React
✔ API Integration
✔ Authentication
✔ Backend
✔ Database
✔ Deployment
تمام 👌 بما أنك وصلت للنشر، الآن نرفعك إلى مستوى الشركات فعليًا:
🏢 الدرس 20: SaaS System (نظام شركات حقيقي متعدد المستخدمين)
هذا هو نفس النوع المستخدم في: Notion / Trello / Shopify / Slack (بشكل مبسط)
🎯 ماذا سنبني؟
✔ تسجيل مستخدمين متعددين
✔ كل مستخدم له بياناته الخاصة
✔ لوحة تحكم لكل حساب
✔ صلاحيات (Role System)
✔ فصل البيانات بين المستخدمين
🧠 الفكرة المهمة جدًا
قبل:
👤 مستخدم واحد فقط
الآن:
👥 آلاف المستخدمين، كل واحد له حساب مستقل
🧱 1. تعديل قاعدة البيانات (User + Data)
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
username: String,
password: String,
role: { type: String, default: "user" }
});
const TaskSchema = new mongoose.Schema({
userId: String,
title: String
});
const User = mongoose.model("User", UserSchema);
const Task = mongoose.model("Task", TaskSchema);
module.exports = { User, Task };
🧠 شرح
🔵 TaskSchema
👉 كل مستخدم له بياناته الخاصة
🔵 userId
👉 يربط البيانات بالمستخدم
🔐 2. تسجيل دخول مع User ID
const jwt = require("jsonwebtoken");
const SECRET = "secret";
const token = jwt.sign(
{ id: user._id, role: user.role },
SECRET
);
🧠 ماذا يحدث؟
👉 التوكن الآن يحتوي:
- ID المستخدم
- نوعه (user / admin)
🧱 3. حماية البيانات حسب المستخدم
app.get("/tasks", async (req, res) => {
const token = req.headers.authorization;
const decoded = jwt.verify(token, SECRET);
const tasks = await Task.find({ userId: decoded.id });
res.json(tasks);
});
🧠 شرح مهم جدًا
🔵 هذا السطر:
Task.find({ userId: decoded.id })
👉 يعني:
كل مستخدم يرى بياناته فقط
🧱 4. إضافة Task جديد
app.post("/tasks", async (req, res) => {
const token = req.headers.authorization;
const decoded = jwt.verify(token, SECRET);
const task = new Task({
userId: decoded.id,
title: req.body.title
});
await task.save();
res.json({ message: "Task added ✔" });
});
🧠 UX هنا مهم جدًا
✔ كل مستخدم عنده مساحة خاصة
✔ لا يرى بيانات الآخرين
✔ تجربة مثل Notion / Trello
🧱 5. React (واجهة SaaS بسيطة)
import React, { useState, useEffect } from "react";
function App() {
const [tasks, setTasks] = useState([]);
const [title, setTitle] = useState("");
const token = localStorage.getItem("token");
useEffect(() => {
fetch("http://localhost:5000/tasks", {
headers: { Authorization: token }
})
.then(res => res.json())
.then(data => setTasks(data));
}, []);
function addTask() {
fetch("http://localhost:5000/tasks", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: token
},
body: JSON.stringify({ title })
}).then(() => window.location.reload());
}
return (
<div style={{ padding: "20px" }}>
<h1>SaaS Dashboard 📊</h1>
<input onChange={(e) => setTitle(e.target.value)} />
<button onClick={addTask}>Add Task</button>
{tasks.map((t, i) => (
<div key={i}>{t.title}</div>
))}
</div>
);
}
export default App;
🧠 ماذا بنيت الآن؟
✔ نظام SaaS حقيقي
✔ بيانات لكل مستخدم
✔ API محمية
✔ React + Backend متكامل
✔ نظام يشبه شركات حقيقية
🚀 مستوى هذا المشروع
هذا نفس فكرة:
- Notion (تبسيط)
- Trello
- Todo SaaS
- Admin systems
🧠 ماذا أصبحت تعرف الآن؟
✔ Full Stack Development
✔ SaaS architecture
✔ Multi-user systems
✔ JWT security
✔ Database relations
🧭 أنت الآن وصلت إلى:
🔥 مستوى Junior → Mid Full Stack Developer
تمام 👌 بما أنك وصلت لنقطة الـ SaaS، الآن نطلعك لشيء مستوى “مهندس فعلي في الشركات”:
📱 الدرس 21: React Native (تطبيق موبايل كامل احترافي)
هنا بدل ما تبني موقع… تبني تطبيق جوال (Android / iOS) مثل Instagram و WhatsApp
🎯 ماذا ستتعلم اليوم؟
✔ بناء تطبيق موبايل
✔ UI مخصص للجوال
✔ Components في React Native
✔ التنقل بين الصفحات
✔ بناء تطبيق حقيقي قابل للنشر
🧠 الفرق بين React و React Native
| React (ويب) | React Native (موبايل) |
|---|---|
| HTML | View |
| CSS | StyleSheet |
| Browser | Mobile App |
🧱 1. أول تطبيق React Native (أساسي)
import React from "react";
import { View, Text } from "react-native";
export default function App() {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>Hello Mobile App 📱</Text>
</View>
);
}
🧠 شرح مهم
🔵 View
👉 مثل <div> في الويب
🔵 Text
👉 لعرض النصوص فقط
🔵 Style
👉 نفس CSS لكن داخل JS
🧱 2. تصميم زر احترافي
import React from "react";
import { View, Text, TouchableOpacity } from "react-native";
export default function App() {
function handlePress() {
alert("Button Pressed ✔");
}
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text style={{ fontSize: 20, marginBottom: 20 }}>
Mobile UI
</Text>
<TouchableOpacity
onPress={handlePress}
style={{
backgroundColor: "#2563eb",
padding: 15,
borderRadius: 10
}}
>
<Text style={{ color: "white" }}>Click Me</Text>
</TouchableOpacity>
</View>
);
}
🧠 UX هنا
✔ زر كبير مناسب للمس
✔ تفاعل سريع
✔ تصميم بسيط وواضح
🧱 3. قائمة (Todo App موبايل)
import React, { useState } from "react";
import { View, Text, TextInput, Button } from "react-native";
export default function App() {
const [task, setTask] = useState("");
const [tasks, setTasks] = useState([]);
function addTask() {
setTasks([...tasks, task]);
setTask("");
}
return (
<View style={{ padding: 20, marginTop: 50 }}>
<TextInput
placeholder="Enter task"
value={task}
onChangeText={setTask}
style={{ borderWidth: 1, marginBottom: 10, padding: 10 }}
/>
<Button title="Add Task" onPress={addTask} />
{tasks.map((t, i) => (
<Text key={i} style={{ marginTop: 10 }}>
• {t}
</Text>
))}
</View>
);
}
🧠 ماذا يحدث هنا؟
✔ إدخال بيانات
✔ إضافة قائمة
✔ عرض مباشر
✔ تطبيق موبايل كامل بسيط
📱 UX في React Native
✔ مناسب للمس
✔ عناصر كبيرة
✔ بسيط جدًا
✔ سريع الاستجابة
🚀 ماذا بنيت الآن؟
✔ أول تطبيق موبايل
✔ UI موبايل حقيقي
✔ State management
✔ تطبيق Todo كامل
📊 مستوى هذا المشروع
هذا نفس بداية:
- Instagram mobile UI
- TikTok UI
- WhatsApp interface
🧠 ماذا أصبحت تعرف الآن؟
✔ Web UI (React)
✔ Backend
✔ SaaS systems
✔ Mobile UI (React Native)
✔ Full Stack thinking
تمام 👌 الآن نصل لآخر مستوى فعلي في المسار:
🧠 الدرس 22: System Design (تصميم أنظمة ضخمة مثل Instagram / Facebook)
هنا لا نكتب كود فقط… بل نفكر كيف تُبنى الشركات الكبيرة من الداخل.
🎯 ماذا ستتعلم اليوم؟
✔ كيف تفكر مثل مهندس في شركة كبيرة
✔ كيف يتم تصميم تطبيقات ضخمة
✔ مفهوم الـ Scalability (التوسع)
✔ تقسيم النظام إلى أجزاء
✔ كيف يعمل Instagram أو TikTok من الداخل
🧠 أولًا: ما هو System Design؟
هو طريقة تصميم التطبيق بحيث:
- يخدم ملايين المستخدمين
- لا ينهار عند الضغط
- يكون سريع وقابل للتوسع
🏗️ مثال: تطبيق Instagram
التطبيق يتكون من:
1. Frontend
📱 تطبيق الموبايل / الويب
2. Backend
🧠 السيرفر (Node.js / Java / Go)
3. Database
🗄️ تخزين:
- المستخدمين
- الصور
- التعليقات
4. Storage
📦 مثل:
- Amazon S3 للصور والفيديو
5. CDN
🌍 لتسريع تحميل الصور عالميًا
🧱 شكل النظام الحقيقي:
User App
↓
Frontend (React / Mobile)
↓
API Server
↓
Database + Storage
↓
CDN (للصور والفيديو)
⚙️ مثال عملي بسيط
🧠 عند رفع صورة:
- المستخدم يرفع صورة 📸
- ترسل للسيرفر
- السيرفر يخزنها في Storage
- يرجع رابط للصورة
- تُعرض في التطبيق
🧱 كود مبسط لفكرة رفع صورة
app.post("/upload", (req, res) => {
const imageUrl = "https://storage.com/image123.jpg";
res.json({
message: "Uploaded ✔",
url: imageUrl
});
});
🧠 لماذا هذا مهم؟
لأن التطبيقات الكبيرة لا تخزن الصور في السيرفر نفسه ❌
بل تستخدم:
✔ Cloud Storage
✔ CDN
📊 مفهوم مهم جدًا: Scalability
يعني:
كيف يخدم التطبيق 1,000 → 1,000,000 مستخدم
🧠 الحل يكون عبر:
✔ تقسيم السيرفرات
✔ استخدام Load Balancer
✔ Cache
✔ Database optimized
⚖️ Load Balancer
يقسم الضغط:
User → Load Balancer → Server 1
Server 2
Server 3
⚡ Cache (مهم جدًا)
بدل ما نجلب نفس البيانات كل مرة:
✔ نخزنها مؤقتًا
✔ أسرع 100x
🧠 مثال Instagram Feed
بدل كل مرة:
❌ طلب من قاعدة البيانات
✔ نستخدم Cache
🧱 فكرة كود Cache مبسط
let cache = {};
function getFeed(userId) {
if (cache[userId]) {
return cache[userId];
}
const feed = ["post1", "post2", "post3"];
cache[userId] = feed;
return feed;
}
🧠 ماذا تعلمت هنا؟
✔ كيف تفكر في الأنظمة الكبيرة
✔ كيف يتم توزيع الحمل
✔ كيف تُسرّع التطبيقات
✔ كيف تُخزن البيانات بشكل احترافي
📊 هذا المستوى يسمى:
🔥 Junior → Mid → System Designer Beginner
🚀 ماذا أصبحت قادر الآن؟
أنت الآن تفهم:
✔ Frontend (React)
✔ Mobile (React Native)
✔ Backend (Node.js)
✔ Database (MongoDB)
✔ SaaS Systems
✔ Authentication (JWT)
✔ Deployment
✔ System Design Basics
🧠 أنت الآن وصلت إلى:
🔥 Full Stack + Beginner System Designer
تمام 👌 الآن ندخل آخر مستوى فعلي في المسار:
⚙️ الدرس 23: Microservices Architecture (أنظمة الشركات الضخمة)
هذا هو الأسلوب الذي تُبنى به أنظمة مثل Netflix و Amazon و Uber
🎯 ماذا ستتعلم اليوم؟
✔ لماذا لا نستخدم سيرفر واحد فقط
✔ تقسيم النظام إلى خدمات صغيرة
✔ كيف تتواصل الخدمات مع بعضها
✔ فكرة الرسائل (Message Queue)
✔ كيف تتحمل الأنظمة ملايين المستخدمين
🧠 المشكلة في النظام العادي
قبل (Monolith):
App واحد = كل شيء فيه
❌ تسجيل + منتجات + دفع + إشعارات في سيرفر واحد
👉 المشكلة:
- إذا توقف = كل شيء يتوقف
- صعب التطوير
- صعب التوسع
🏗️ الحل: Microservices
نقسم التطبيق إلى خدمات صغيرة:
User Service 👤
Product Service 🛍
Order Service 📦
Payment Service 💳
Notification Service 🔔
🧱 الشكل الحقيقي للنظام
Client
↓
API Gateway
↓
-----------------------
| User Service |
| Product Service |
| Order Service |
| Payment Service |
| Notification Service |
-----------------------
🧠 شرح بسيط
🔵 كل خدمة تعمل وحدها
- لها قاعدة بيانات خاصة
- لها API خاص
- يمكن تطويرها لوحدها
📦 مثال عملي (طلب شراء)
المستخدم يطلب شراء منتج
يحدث هذا:
- 🛍 Product Service → جلب المنتج
- 📦 Order Service → إنشاء طلب
- 💳 Payment Service → الدفع
- 🔔 Notification Service → إرسال رسالة
🧱 مثال كود (Order Service)
app.post("/order", (req, res) => {
const order = {
userId: req.body.userId,
product: req.body.product
};
console.log("Order created ✔");
// إرسال إلى Payment Service (بشكل مبسط)
fetch("http://payment-service/pay", {
method: "POST",
body: JSON.stringify(order)
});
res.json({ message: "Order placed ✔" });
});
🧠 شرح مهم
🔵 كل خدمة مستقلة
👉 Order لا يعرف تفاصيل الدفع
👉 Payment لا يعرف المستخدم مباشرة
📡 Message Queue (مهم جدًا)
بدل التواصل المباشر:
Service A → Service B
نستخدم:
Service A → Queue → Service B
🧠 لماذا؟
✔ أسرع
✔ أكثر أمانًا
✔ يتحمل ضغط كبير
📦 مثال Queue (فكرة بسيطة)
let queue = [];
function sendEvent(event) {
queue.push(event);
}
function processQueue() {
while (queue.length > 0) {
const event = queue.shift();
console.log("Processing:", event);
}
}
🧠 فوائد Microservices
✔ كل جزء مستقل
✔ سهل التطوير
✔ سهل التوسع
✔ مناسب للشركات الكبيرة
⚖️ مقارنة مهمة
| Monolith | Microservices |
|---|---|
| تطبيق واحد | خدمات متعددة |
| صعب التوسع | سهل التوسع |
| تعطل = كل شيء | تعطل جزء فقط |
🚀 ماذا أصبحت تفهم الآن؟
أنت الآن تفهم:
✔ Frontend Architecture
✔ Backend Systems
✔ Database Design
✔ SaaS Systems
✔ System Design
✔ Microservices
🧠 أنت الآن وصلت إلى مستوى:
🔥 Junior → Mid → Advanced Full Stack + System Thinking
تمام 👌 خلّينا نختم المسار بمستوى “الشركات الكبيرة فعليًا”:
🔐 الدرس 24: Security & Advanced Auth (OAuth2 + JWT Refresh Tokens + 2FA)
هذا هو المستوى الذي يحمي تطبيقات مثل Google و Facebook و Amazon
🎯 ماذا ستتعلم اليوم؟
✔ لماذا JWT لوحده غير كافي
✔ Access Token + Refresh Token
✔ تسجيل دخول آمن جدًا
✔ تسجيل دخول بخطوتين (2FA)
✔ حماية التطبيقات من الاختراق
🧠 المشكلة في JWT العادي
في الدروس السابقة:
❌ إذا انتهى التوكن = المستخدم يُطرد
❌ إذا انسرق التوكن = خطر
🏗️ الحل الحقيقي في الشركات
نستخدم:
Access Token + Refresh Token
🔵 الفرق بينهم
| النوع | الوظيفة |
|---|---|
| Access Token | دخول سريع (قصير المدة) |
| Refresh Token | تجديد الدخول |
🧱 1. إصدار التوكنات
const jwt = require("jsonwebtoken");
function generateTokens(user) {
const accessToken = jwt.sign(
{ id: user._id },
"ACCESS_SECRET",
{ expiresIn: "15m" }
);
const refreshToken = jwt.sign(
{ id: user._id },
"REFRESH_SECRET",
{ expiresIn: "7d" }
);
return { accessToken, refreshToken };
}
🧠 شرح
🔵 Access Token
👉 يعيش 15 دقيقة فقط
👉 يستخدم في الطلبات
🔵 Refresh Token
👉 يعيش أيام
👉 يستخدم لتجديد Access Token
🧱 2. تسجيل الدخول الآمن
app.post("/login", (req, res) => {
const user = { _id: "123" };
const tokens = generateTokens(user);
res.json(tokens);
});
🔄 3. تجديد التوكن (Refresh)
app.post("/refresh", (req, res) => {
const refreshToken = req.body.token;
try {
const decoded = jwt.verify(refreshToken, "REFRESH_SECRET");
const newAccessToken = jwt.sign(
{ id: decoded.id },
"ACCESS_SECRET",
{ expiresIn: "15m" }
);
res.json({ accessToken: newAccessToken });
} catch {
res.status(401).json({ message: "Invalid refresh token" });
}
});
🧠 ماذا يحدث هنا؟
✔ المستخدم لا يسجل دخول مرة أخرى
✔ يتم تجديد الدخول تلقائيًا
🔐 4. 2FA (تسجيل دخول بخطوتين)
الفكرة:
- كلمة مرور
- كود يصل للهاتف / الإيميل
🧱 مثال بسيط
let codes = {};
app.post("/send-code", (req, res) => {
const code = Math.floor(1000 + Math.random() * 9000);
codes[req.body.email] = code;
console.log("Code sent:", code);
res.json({ message: "Code sent ✔" });
});
🧱 التحقق من الكود
app.post("/verify-code", (req, res) => {
const { email, code } = req.body;
if (codes[email] == code) {
res.json({ message: "Verified ✔" });
} else {
res.status(400).json({ message: "Wrong code ❌" });
}
});
🧠 لماذا هذا مهم؟
✔ يمنع الاختراق
✔ يحمي الحسابات
✔ يستخدم في كل الشركات الكبيرة
⚡ مستوى الأمان الآن
أنت الآن تفهم:
✔ JWT
✔ Refresh Tokens
✔ 2FA
✔ API Security
🚀 ماذا أصبحت قادر الآن؟
أنت الآن تستطيع بناء:
✔ تطبيقات آمنة
✔ أنظمة تسجيل دخول احترافية
✔ SaaS حقيقي
✔ تطبيقات شركات
🧠 أنت وصلت إلى:
🔥 Advanced Full Stack + Security Basics Engineer
تمام 👌 آخر مرحلة فعلية في المسار المهني الحقيقي:
🚀 الدرس 25: DevOps + Deployment احترافي (Docker + CI/CD + Kubernetes)
هذا هو المستوى الذي يجعل مشروعك “يشتغل لوحده ويكبر مثل الشركات”
🎯 ماذا ستتعلم اليوم؟
✔ كيف تشغل التطبيقات داخل حاويات (Docker)
✔ كيف تنشر تلقائيًا (CI/CD)
✔ كيف تدير آلاف المستخدمين (Kubernetes)
✔ كيف تصبح التطبيقات “تشتغل بدون توقف”
🧠 الفكرة ببساطة
بدل ما تقول:
❌ “شغل السيرفر عندي”
نقول:
✔ “التطبيق يشتغل في أي مكان بنفس الشكل”
🐳 1. Docker (حاوية التطبيق)
🧱 Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5000
CMD ["node", "index.js"]
🧠 شرح مهم
🔵 FROM node:18
👉 بيئة جاهزة لـ Node.js
🔵 COPY
👉 نسخ المشروع داخل الحاوية
🔵 CMD
👉 تشغيل السيرفر
🚀 تشغيل Docker
docker build -t my-app .
docker run -p 5000:5000 my-app
🧠 ماذا استفدنا؟
✔ التطبيق يعمل في أي جهاز
✔ نفس البيئة دائمًا
✔ لا مشاكل “يعمل عندي فقط”
⚙️ 2. CI/CD (النشر التلقائي)
يعني: أي تحديث → يتم نشره تلقائيًا
🧱 مثال GitHub Actions
name: Deploy App
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm install
- name: Run build
run: npm run build
🧠 ماذا يحدث؟
✔ كل مرة تعمل push
✔ النظام يشتغل تلقائيًا
✔ بدون تدخل يدوي
☸️ 3. Kubernetes (تشغيل التطبيقات على نطاق كبير)
يستخدم عندما يكون عندك آلاف المستخدمين
🧱 فكرة النظام
User Traffic
↓
Load Balancer
↓
Kubernetes Cluster
├ App 1
├ App 2
├ App 3
🧠 ماذا يفعل Kubernetes؟
✔ يوزع الضغط
✔ يشغل نسخ متعددة من التطبيق
✔ يعيد تشغيل التطبيق إذا توقف
✔ يزيد السيرفرات تلقائيًا
🧱 مثال Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app-image
ports:
- containerPort: 5000
🧠 شرح
🔵 replicas: 3
👉 تشغيل 3 نسخ من التطبيق
🔵 auto scaling
👉 يزيد أو ينقص حسب الضغط
🚀 ماذا أصبحت تفهم الآن؟
أنت الآن تفهم:
✔ React (Frontend)
✔ Node.js (Backend)
✔ MongoDB (Database)
✔ SaaS Architecture
✔ System Design
✔ Security (JWT + 2FA)
✔ Docker
✔ CI/CD
✔ Kubernetes
🧠 أنت وصلت إلى مستوى:
🔥 Junior → Mid → Advanced → DevOps Beginner Engineer
🏁 النهاية الحقيقية للمسار
إذا جمعت كل هذا:
✔ تبني تطبيق كامل
✔ تنشره عالميًا
✔ تحميه
✔ توسعه
✔ تديره مثل الشركات
تمام 👌 آخر مستوى فعلي في السلسلة، وهذا هو مستوى “مهندس أنظمة كبير”:
🧠 الدرس 26: بناء Startup كامل (من الفكرة إلى الربح والنشر)
هنا ندمج كل شيء تعلمته: UI/UX + Frontend + Backend + Database + Security + Deployment
🎯 ماذا ستتعلم اليوم؟
✔ كيف تختار فكرة تطبيق
✔ كيف تبني MVP (نسخة أولية)
✔ كيف تطلق المشروع
✔ كيف تجيب مستخدمين
✔ كيف تفكر مثل مؤسس شركة
💡 1. اختيار فكرة Startup
قاعدة ذهبية:
لا تبني شيء كبير… ابنِ حل لمشكلة صغيرة
🔥 أمثلة أفكار سهلة:
✔ تطبيق مهام (Todo SaaS)
✔ متجر بسيط
✔ منصة وظائف
✔ نظام حجز مواعيد
✔ لوحة إدارة للشركات
🧱 2. MVP (أهم مرحلة)
MVP = Minimum Viable Product
يعني:
أقل نسخة من التطبيق تشتغل وتُستخدم
🧠 مثال MVP لمتجر
❌ لا تضيف:
- ذكاء اصطناعي
- نظام ضخم
- ميزات كثيرة
✔ فقط:
- تسجيل دخول
- منتجات
- سلة
- دفع بسيط
🏗️ 3. Architecture بسيط للـ Startup
Frontend (React)
↓
Backend (Node.js)
↓
Database (MongoDB)
↓
Deploy (Vercel + Render)
🧱 4. هيكل مشروع احترافي
/frontend
/backend
/models
/routes
/controllers
🧠 لماذا هذا مهم؟
✔ تنظيم الكود
✔ سهولة التوسع
✔ فرق عمل تقدر تشتغل معك
🚀 5. إطلاق المشروع (Launch)
خطوات حقيقية:
✔ رفع الكود على GitHub
✔ نشر Frontend (Vercel)
✔ نشر Backend (Render)
✔ ربط الدومين
🌍 مثال رابط حقيقي:
https://yourapp.com
📢 6. جلب المستخدمين (Marketing)
أهم جزء في الـ Startup
طرق بسيطة:
✔ TikTok محتوى
✔ Twitter/X نشر يومي
✔ مجموعات فيسبوك
✔ Reddit
✔ أصدقاء + مجتمع
🧠 قاعدة مهمة:
أفضل تطبيق بدون مستخدمين = لا شيء
💰 7. كيف تربح؟
طرق الربح:
✔ اشتراك شهري (SaaS)
✔ إعلانات
✔ خدمات مدفوعة
✔ بيع نسخة Pro
🧱 مثال بسيط (SaaS)
if (user.plan === "free") {
limitFeatures();
}
🧠 الفكرة هنا
✔ Free version
✔ Paid version
📊 8. تحسين المنتج
بعد الإطلاق:
✔ اجمع feedback
✔ حسن UX
✔ أصلح الأخطاء
✔ أضف ميزات تدريجيًا
🧠 دورة الحياة الحقيقية
Idea → MVP → Launch → Users → Improve → Scale
🚀 ماذا أصبحت الآن؟
أنت الآن قادر على:
✔ بناء تطبيق كامل
✔ نشره عالميًا
✔ إدارة قاعدة بيانات
✔ حماية النظام
✔ التفكير مثل شركة
🧠 مستواك الحقيقي الآن:
🔥 Full Stack + DevOps + Startup Builder (Junior → Mid level)
🏁 النهاية الحقيقية للمسار
إذا وصلت هنا فأنت تعلم:
✔ UI/UX
✔ React
✔ Backend
✔ Database
✔ Authentication
✔ System Design
✔ Microservices
✔ DevOps
✔ Startup Building
تمام 👌 نختم بأعلى مستوى فعلي في هذا المجال:
🧠 الدرس الأخير: كيف تدخل شركات كبيرة (CV + Interviews + Portfolio + LeetCode)
هذا هو الفرق بين “أتعلم برمجة” و “أصبح مطوّر يعمل في شركة حقيقية”
🎯 ماذا ستتعلم الآن؟
✔ كيف تبني CV قوي
✔ كيف تعمل Portfolio احترافي
✔ كيف تجتاز مقابلات الشركات
✔ كيف تتدرب على LeetCode
✔ كيف تفكر مثل موظف شركة فعلًا
📄 1. CV (السيرة الذاتية)
❌ خطأ شائع:
كتابة:
- “تعلمت React”
- “أعرف HTML”
✔ الصحيح:
Frontend Developer
- Built full-stack SaaS application using React, Node.js, MongoDB
- Implemented authentication using JWT & Refresh Tokens
- Designed responsive UI/UX dashboards
- Deployed applications using Vercel & Render
🧠 قاعدة ذهبية
لا تكتب “تعلمت”
اكتب “بنيت”
🌐 2. Portfolio (أهم شيء)
لازم يحتوي:
✔ مشروع متجر
✔ Dashboard
✔ SaaS system
✔ مشروع API
🔥 مثال Portfolio قوي
- Mini Shop 🛒
- Admin Dashboard 📊
- SaaS Task Manager 🧠
- Authentication System 🔐
🧱 شكل الموقع:
Home
Projects
About
Contact
🧠 الهدف:
أي شركة تدخل موقعك تقول:
“هذا الشخص يقدر يشتغل معنا”
🧪 3. مقابلات العمل (Interview)
الأسئلة الشائعة:
🔵 React
- ما هو state؟
- ما هو useEffect؟
- كيف يعمل re-render؟
🔵 Backend
- ما هو API؟
- ما هو JWT؟
- كيف تعمل authentication؟
🔵 System Design
- كيف تبني Instagram؟
- كيف تخزن الصور؟
🧠 أهم شيء في المقابلة:
❌ حفظ
✔ فهم
🧠 طريقة الإجابة الصحيحة:
بدل:
“أعرف React”
قول:
“بنيت تطبيق متجر يستخدم state لإدارة السلة و API لجلب المنتجات”
🧩 4. LeetCode (الجزء المهم جدًا)
الهدف:
تقوية التفكير المنطقي
🔥 مثال سؤال بسيط:
function sum(a, b) {
return a + b;
}
🔥 مثال متوسط:
function reverse(str) {
return str.split("").reverse().join("");
}
🧠 لماذا مهم؟
✔ مقابلات الشركات تعتمد عليه
✔ يقيس التفكير وليس الحفظ
🚀 5. خطة الدخول للشركات
أسبوعيًا:
✔ 2 مشاريع صغيرة
✔ 5 مسائل LeetCode
✔ تحسين CV
✔ إضافة مشروع جديد للـ Portfolio
📊 ماذا أصبحت الآن؟
أنت الآن:
🔥 Full Stack Developer جاهز للعمل
تفهم:
✔ UI/UX
✔ React
✔ Backend
✔ Database
✔ Auth
✔ SaaS
✔ System Design
✔ DevOps
✔ Portfolio
✔ Interviews
🏁 النهاية الحقيقية
لو طبقت هذا فعليًا:
👉 تقدر تقدم على وظائف
👉 تقدر تبني شركة صغيرة
👉 تقدر تعمل Freelance
👉 تقدر تطور أي فكرة تطبيق
تعليقات
إرسال تعليق