منصّة إدارة مدارس اللغات
برنامج متكامل لإدارة مدرسة لغات وحاسوب بالكامل — موقع عام مُدار بالمحتوى موصول بلوحة إدارة عميقة. تنشر دورة أو تمنح شارة من لوحة الإدارة فتتحدّث الصفحات العامة فورًا. أكاديمية Enlil هي أحد تطبيقاته الحيّة.

تعمل المدارس الصغيرة بأدوات مُلصقة معًا: موقع هنا، وجدول طلاب في ملف Excel هناك، ومُجدوِل منفصل، وتطبيق بريد، وأداة تصميم. لا شيء يتحدّث إلى الآخر — ويصبح الموقع العام قديمًا في اللحظة التي تتغيّر فيها بيانات الصفوف.
تجمع هذه المنصّة كل ذلك في نظام واحد: موقع عام أنيق يسوّق الدورات ويسجّل الطلاب، ولوحة إدارة شاملة يدير منها الطاقم المدرسة كلها. النصفان يتشاركان البيانات نفسها، فلا تفترق الواجهة العامة عن مكتب الإدارة الخلفي أبدًا.
إنه منتج، لا مجرّد موقع لمرة واحدة. أكاديمية Enlil — مدرسة لغات وحاسوب في العراق — هي أول تطبيق حيّ له.
المشكلة
تعيش معلومات المدرسة في أماكن كثيرة. الكتالوج على الموقع نسخة تُحدَّث يدويًا عمّا يُدرَّس فعلًا. الحضور جدول بيانات. التسجيل رسالة خاصة. وعندما يتغيّر شيء، تفقد نصف هذه الأسطح تزامنها بهدوء، ويكون الموقع العام آخر من يلحق بالركب.
ما الذي بنيته
نظام واحد تُقاد فيه الصفحات العامة بالبيانات نفسها التي يديرها الطاقم. تنشر دورة أو تمنح شارة في لوحة الإدارة، فتنعكس على الصفحات العامة فورًا. ويغطّي دورة حياة الطالب كاملة:
- اكتشاف دورة على الموقع العام
- إجراء اختبار تحديد مستوى
- التسجيل كضيف
- القبول في صفّ
- الحضور، وكسب الشارات على الطريق

الكتالوج العام مصنّف حسب مستوى CEFR ويُعرَض مباشرة من نظام إدارة المحتوى، فلا يمكن أن يفترق عمّا تقدّمه المدرسة فعلًا.

مكتب الإدارة الخلفي
هنا ذهب معظم الجهد الهندسي. لوحة الإدارة أداة تشغيل كاملة، لا مجرّد غلاف رقيق فوق قاعدة بيانات.
- إدارة المحتوى (CMS) — صفحات ← أقسام ← عناصر محتوى، لكلٍّ حالة نشر/مسودة، مع تصفية وبحث. إنها العمود الفقري الذي يقرأ منه الموقع العام كله.
- تقويم الجدولة — عرض أسبوعي بحضورٍ لكل جلسة، وإعادة جدولة، وتراكب للتداخل. أصعب واجهة تفاعلية في المشروع.
- التحليلات — الزيارات والتفاعل وجغرافيا الزوّار، مع استبعاد زيارات المشرفين تلقائيًا.
- الشارات والتحفيز — شارات قابلة للمنح مع ترتيب بالسحب، تُمنح للطلاب مباشرة.
- CRM مدمج — اختر المستلمين وقالبًا وعاين البريد المُعلَّم بالهوية.
- صلاحيات حسب الدور (RBAC) — أذونات دقيقة لكل مورد، مع تجاوزٍ للمشرف الرئيس.

الأذونات حقيقية لا شكلية. يحصل كل مشرف فرعي على حقوق إنشاء/تعديل/حذف/موافقة لكل مورد، ويتجاوز المشرف الرئيس المصفوفة بالكامل:
// حقوق المشرف الفرعي قناع بتات لكل مورد؛ والمشرف الرئيس يتجاوزها.
func (u User) Can(action Action, resource string) bool {
if u.Role == RoleHeadAdmin {
return true // المشرف الرئيس يتجاوز مصفوفة الأذونات
}
perms, ok := u.Grants[resource]
return ok && perms.Has(action)
}

لماذا يتماسك كل هذا
رهان النظام الواحد هو جوهر الأمر. لأن الكتالوج العام والمُجدوِل و CRM والتحليلات جميعها تقرأ وتكتب السجلات نفسها، فلا توجد خطوة تزامن قد تُنسى. أيّ تغيير في لوحة الإدارة يكون — بحكم البناء — حيًّا على الموقع العام: بلا نسخ ولصق، بلا صفحة قديمة، بلا مصدر ثانٍ للحقيقة.
هذا ما يجعله منصّة لا موقعًا: وجِّهه إلى بيانات مدرسة أخرى فيُدير تلك المدرسة بدلًا منها.