
منصة تعليم وطنية LMS + SIS
Talia
منصة تعليمية عربية أولًا ومتعددة المستأجرين (LMS + SIS) للمدارس المصرية، مبنية لإدارة تسلسل كامل من جهة مشرفة إلى المدارس التابعة لها. تعمل حاليًا في أول مدرسة لها، Parkway، وفي تطوير مستمر مع نموّ المنصّة.
التحدي
احتاجت شبكة مدارس نظامًا واحدًا لسجلات الطلاب والتعلّم والعمليات — عربي أولًا، RTL، ومدرك للتقويم الهجري — مع بيانات صحية وإرشادية واحتياجات خاصة سرّية لا يستطيع حتى مديرو المدارس تجاوز صلاحياتها، ونموذج بيانات يتّسع من مدرسة واحدة إلى جهة تدير مدارس كثيرة.
ما كان عليه أن يحققه
- نظام واحد لسجلات الطلاب والتعلّم وعمليات المدرسة
- عربي أولًا، من اليمين لليسار، ويدعم التقويم الهجري
- سجلات صحية وإرشادية واحتياجات خاصة سرية لا يستطيع حتى مديرو المدارس تجاوزها
- نموذج بيانات يتّسع من مدرسة واحدة إلى جهة تدير مدارس كثيرة
- 25 وحدة وظيفية و534 متطلبًا، تُبنى فوق واجهة خلفية كانت ما تزال تتغيّر
دوري
مهندس واجهات وتكامل عبر لوحة Talia 360 (الإدارة/الوزارة) وتطبيق Talia Learn — ربط الشاشات من بيانات وهمية إلى خلفية Go/REST حيّة والتحقق من كل شاشة على البيئة المنشورة.
كيف بنيته
- بناء وتكامل شاشات Talia 360 (لوحة الوزارة/الإدارة) و Talia Learn (تطبيق التعلّم) كتطبيقات SvelteKit 5 + Tailwind CSS 4 فوق خلفية Go/REST مُنمّطة.
- ربط شاشات المنتج من بيانات وهمية إلى قراءات وكتابات API حيّة ببنية طبقية datasource → repository → query باستخدام TanStack Query.
- تنفيذ عروض حسب الدور مدركة لـ RBAC (معلم / طالب / مدير / مشرف) فوق نموذج صلاحيات deny-by-default عبر شجرة كيانات وزارة←مدرسة.
- تشغيل QA حيّ داخل المتصفح للتأكد من عرض البيانات الحقيقية، إغلاق فجوات الوهمي مقابل الحيّ، ورفع مشكلات تعاقد الخلفية — بمعيار بلا بيانات وهمية.
القرارات، ولماذا
المنع افتراضيًا، عبر شجرة وزارة ← مدرسة
السجلات هنا تشمل ملاحظات صحية وإرشادية واحتياجات خاصة، وأكثر من يُطلب منهم "مجرد التأكد من شيء" هم مديرو المدارس. لذلك لا تُمنح الصلاحية بالدور ثم تُقيَّد — لا شيء مرئي حتى تسمح به قاعدة، ولا يملك مدير المدرسة تجاوزًا للسجلات السرّية. فشل النموذج المسموح افتراضيًا تسريب صامت؛ وفشل هذا النموذج أن يفتح أحدهم تذكرة دعم.
طبقة datasource → repository → query بدل استدعاءات داخل المكوّنات
كانت 25 موديولًا تُبنى فوق خلفية ما زالت تتغيّر. وضع كل قراءة وكتابة خلف طبقة مُنمّطة فوقها TanStack Query جعل تغيير نقطة نهاية تعديلًا في ملف واحد بدل بحث عبر الشاشات، وجعل قرارات التخزين المؤقت وإعادة الجلب تُتّخذ مرة واحدة لا في كل مكوّن.
لا بيانات وهمية بعد أول تكامل
الشاشات المبنية على بيانات وهمية تجتاز المراجعة وتفشل في الإنتاج، لأن البيانات الوهمية دائمًا أنظف من الواجهة الحقيقية. أُعيد التحقق من كل شاشة داخل المتصفح على البيئة المنشورة، وما ظهر من فجوات رُفع كمشكلات تعاقد في الخلفية بدل ترقيعه في الواجهة.
التقنيات
تبني شيئًا مشابهًا؟
أخبرني بما تريد إطلاقه وسأقول لك بصراحة إن كنت الشخص المناسب لبنائه.