/01 — سجلّ التغييرات
كلّ إصدار، بتاريخه.
ملاحظات إصدارات منصّة الاستوديو. الميزات، الإصلاحات، رقع الأمان، وعمل الأداء — كلّ مدخل مرتبط بتاريخ وملخّص بسطر واحد. لا تسويق؛ فقط ما شُحن.
حملة شاملة لتحسين الأداء وإمكانيّة الوصول.
- تحويل كلّ الصور إلى WebP بجودة Q65 — انخفض حمل الرئيسيّة 93٪.
- تقسيم المسارات عبر React.lazy + تحميل لغات i18n بشكل كسول — الـ JS الأوّليّ من 1.31 ميغا إلى 99 كيلو.
- Lighthouse على الموبايل: a11y 100، best-practices 100، SEO 100، الأداء 80+.
- تحميل الخطوط بشكل غير متزامن + preload لـ LCP + gzip_static على nginx.
- رابط تخطّي + أحجام نقر (≥24×24) + تباين النصّ ≥4.5:1 — التزام كامل بـ WCAG AA.
- تنظيف robots.txt؛ hreflang و JSON-LD (Person + Org + WebSite) في الصفحة.
تشديد الواجهة الخلفيّة + إعادة هيكلة بنية SMTP.
- MailService صار يقرأ SMTP من إعدادات قاعدة المسؤول (لا من env) — الإعدادات تسري دون إعادة تشغيل.
- نقطة POST /settings/mail/test للتحقّق بنقرة واحدة من لوحة المسؤول.
- إعادة تسمية مخطّط حملات WhatsApp لتفادي تصادم enum CampaignStatus.
- تحويل توثيق Prisma (/** */ → ///) لإرضاء المُتحقِّق.
المرحلة 11.6 — وحدات صفحة /train (Lab, LearningPath, ResearchPaper, WorkshopPackage, MembershipTier).
- 5 وحدات شقيقة جديدة تدعم صفحة /train العامّة.
- تحميل أوراق البحث محميّ بالبريد — ملفّات PDF لا تُكشَف في القائمة/التفاصيل؛ بريد + تحديد معدّل لكلّ IP.
- مخطّط خطوات LearningPath للعرض فقط (دون ربط متبادل بعد).
- تمديد الدورات: 8 حقول عرض جديدة لبطاقات CatalogShelf في /train.
- قالب بريد جديد (research.download_link) قابل للتعديل من المسؤول.
تشحيل المرحلة 11 — كاش + SMTP + سجلّات مُهيكَلة + شهادات PDF.
- CacheService (ذاكرة + Redis اختياريّ) مربوط بـ LanguagesService.
- مشغّل بريد SMTP عبر nodemailer، إرسال فعليّ عند MAIL_DRIVER=smtp.
- سجلّات JSON مُهيكَلة + ربط X-Request-Id.
- شهادات PDF عبر pdfkit، مُخزَّنة في /uploads/certificates/<id>.pdf.
- سبر جاهزيّة كلّيّ /ready (DB + كاش + بريد).
برنامج العمولة + نقاط نهاية لوحة التحليلات (المرحلتان 9 و 10).
- العمولة: تقديم حساب، رموز، تتبّع نقرات بـ sessionId، تحويلات SIGNUP/PURCHASE/ENROLLMENT.
- الدفعات: لكلّ عملة، نسبة عمولة محفوظة كلقطة، تحويلات PAID غير قابلة للتعديل.
- التحليلات: 13 خطّافًا داخليًّا يسجّلون عبر تدفّقات auth/contact/enrollment/affiliate.
- نقطة GA4 احتياطيّة في /analytics/ga4/status.