المشروع عبارة عن متجر ملابس إلكتروني باللغة العربية ويدعم اتجاه RTL، ويتكون من واجهة أمامية (Frontend) وواجهة خلفية (Backend) حقيقية باستخدام Node.js وExpress وMongoDB، بالإضافة إلى لوحة تحكم خاصة بالأدمن.
الواجهة الأمامية موجودة داخل مجلد clothing store، بينما الـ Backend موجود داخل مجلد backend. يمكن تشغيل الـ Backend باستخدام npm install ثم npm run dev، ويعمل افتراضيًا على المنفذ 5000. أما واجهة المتجر فيمكن تشغيلها باستخدام Static Server مثل http-server على المنفذ 5500.
المشروع يستخدم MongoDB لتخزين بيانات المستخدمين والمنتجات والطلبات وغيرها، ويستخدم Mongoose للتعامل مع قاعدة البيانات. عند تشغيل المشروع لأول مرة يتم إنشاء حساب Admin تلقائيًا إذا لم يكن موجودًا، كما يتم إضافة 5 منتجات تجريبية إذا كانت قاعدة المنتجات فارغة.
يحتوي المشروع على نظام تسجيل دخول وحسابات مستخدمين باستخدام JWT، مع Access Tokens وRefresh Tokens، بالإضافة إلى نظام حماية خاص بحسابات الأدمن. كما يحتوي على نظام استعادة كلمة المرور وإرسال الإيميلات عند إعداد SMTP.
من ناحية الأمان، المشروع يحتوي على العديد من وسائل الحماية، منها تشفير كلمات المرور باستخدام bcrypt، حماية مسارات الأدمن، تحديد عدد محاولات تسجيل الدخول، Rate Limiting، حماية CORS، منع XSS، والتحقق من صور المنتجات والتأكد من أنها صور حقيقية، مع دعم JPG وPNG وWebP وبحد أقصى 2MB للصورة و5 صور لكل منتج.
كذلك يتم التحقق من أسعار المنتجات والمخزون من السيرفر مباشرة بدل الاعتماد على البيانات القادمة من المتصفح، مما يمنع العميل من التلاعب بالسعر أو الكمية. ويتم أيضًا التحقق من توفر المقاس المطلوب لكل منتج.
المشروع يحتوي على نظام للطلبات وتتبع الطلبات، وتتبع الطلب يحتاج إلى رقم الطلب بالإضافة إلى البريد الإلكتروني الخاص بالعميل.
يوجد أيضًا نظام اختبارات باستخدام Jest وSupertest وMongoDB Memory Server، ويمكن تشغيل الاختبارات بدون الحاجة إلى قاعدة بيانات MongoDB حقيقية.
يحتوي المشروع على ملفات توثيق للـ API والـ Models، وهي REST_API.md وMODELS.md، بالإضافة إلى ملف CHANGELOG.md لتوثيق التغييرات.
عند نشر المشروع على الإنترنت، يجب استخدام HTTPS، وضبط NODE_ENV=production وCORS_ORIGIN بشكل صحيح، واستخدام MongoDB Atlas أو خدمة MongoDB مُدارة، بالإضافة إلى استخدام PM2 أو systemd لتشغيل الـ Backend.
ومن أهم الأمور التي يجب الانتباه لها عند النشر هي صور المنتجات، حيث يتم حفظها حاليًا على القرص المحلي داخل backend/uploads. بعض خدمات الاستضافة تحذف الملفات عند إعادة التشغيل أو إعادة النشر، لذلك يجب استخدام تخزين دائم أو خدمة تخزين خارجية مثل S3 أو Cloudinary أو R2 حتى لا تختفي صور المنتجات.
بشكل عام، المشروع يعتبر متجرًا إلكترونيًا متكاملًا نسبيًا، وليس مجرد واجهة HTML، لأنه يحتوي على Frontend وBackend وقاعدة بيانات ونظام مستخدمين وأدمن وطلبات ومخزون وحماية واختبارات، ويحتاج فقط إلى إعدادات البيئة والاستضافة والتخزين المناسبة قبل استخدامه بشكل تجاري.