المشكلة
قالب متجر عام يتعامل مع العربية كفكرة لاحقة ولا يستطيع رواية قصة العلامة. كل تغيير لصورة أو بانر كان يمر بمطور، والصور في المحادثات وأقراص USB، واستفسارات الموزعين تصل عبر واتساب بلا سجل، ودخول الإدارة كان مشتركًا.
ما بنيناه
Angular 20 مع Signals وOnPush، والرئيسية ومن نحن وتواصل معدّة مسبقًا عبر SSR. كتالوج بفلاتر الفئة والعلامة، وصفحات منتجات بمعرض صور ومواصفات ومنتجات مرتبطة، ونموذج تواصل يسجل الاستفسار فعلًا.
التسويق يدير الموقع بنفسه الآن. مكتبة وسائط على MinIO بمجلدات وسحب وإفلات، وشرائح العرض والميزات تُرتب من لوحة المحتوى، و35 صلاحية تحدد من يلمس ماذا، تُفحص في المسار ثم مرة أخرى في الـAPI.
داخل النظام
- عربي أولًا مع وضع إنجليزي كامل. 736 مفتاحًا لكل لغة، والتطابق مفروض في CI.
- CSP مبنية على hash، وجلسات كوكيز عبر XHR فقط، وJWT مع refresh tokens.
- سياسة تحديد معدل على كل مسار، واختبار يفشل إذا نقصت واحدة.
- حذف ناعم لبيانات الكتالوج، وبيانات الإنتاج الأولية ترفض كلمات مرور الإدارة الضعيفة.
- مجموعة اختبارات Playwright شاملة، وDocker خلف Nginx مع Let’s Encrypt.
الشاشات