🚀 مشروع Misson
منصّة تعليمية ذكية تحوّل الدروس إلى ألعاب تفاعلية للأطفال
📑 محتويات الدليل
- فكرة المشروع وما الذي يحققه
- مكوّنات المشروع (كيف تعمل الأجزاء معًا)
- تجهيز جهازك للمبتدئين + تحميل Flutter
- ما هو GitHub وكيف نربط المشروع للرفع التلقائي
- ما هو ملف
.envولماذا هو مهم - Render: تسجيل الحساب ونشر الخدمة
- PostgreSQL: إنشاء قاعدة البيانات وربطها وأهميتها
- الأخطاء الشائعة وكيف نحلّلها ونحلّها
- قائمة تحقّق نهائية
1 فكرة المشروع وما الذي يحققه
Misson فكرته ببساطة: يرفع ولي الأمر أو المعلّم صورة أو ملف PDF لأي درس، فيقوم الذكاء الاصطناعي بتحليل الدرس واستخراج المفاهيم، ثم يحوّله تلقائيًا إلى لعبة تفاعلية يلعبها الطفل (اختيار متعدّد، مطابقة، ترتيب، ومعركة زعيم) مع نقاط خبرة وشارات ومستويات.
🎯 ما المتوقّع أن يحقّقه
- تحويل المذاكرة المملّة إلى تجربة لعب ممتعة تزيد الدافعية.
- تتبّع تقدّم الطفل واكتشاف نقاط الضعف في المفاهيم تلقائيًا.
- اقتراح تدريبات مخصّصة تركّز على ما يحتاج الطفل تحسينه (تعلّم تكيّفي).
- تقارير مفهومة لولي الأمر عن مستوى الإتقان.
الفئة المستهدفة: أولياء الأمور والمعلّمون لأطفال في مراحل التعليم الأساسي، مع دعم كامل للّغة العربية والإنجليزية.
2 مكوّنات المشروع (كيف تعمل الأجزاء معًا)
المشروع يتكوّن من ثلاثة أجزاء رئيسية تتحدّث مع بعضها عبر الإنترنت:
التطبيق (Flutter)
الواجهة التي يراها المستخدم على الهاتف — مبني بلغة Dart وإطار Flutter.
الخادم (FastAPI)
العقل الخلفي بلغة Python — يعالج الطلبات ويولّد الألعاب ويحفظ البيانات.
قاعدة البيانات (PostgreSQL)
تخزّن الحسابات والأطفال والألعاب والتقدّم بشكل دائم.
ويعتمد على خدمتين خارجيتين:
Claude AI
يحلّل الدروس ويصمّم الألعاب.
GitHub
يخزّن الكود ويشغّل النشر التلقائي.
Render
يستضيف الخادم وقاعدة البيانات على الإنترنت.
💻 كودك ⟶ 🐙 GitHub ⟶ ☁️ Render ينشر تلقائيًا
3 تجهيز جهازك للمبتدئين + تحميل Flutter
هذه الأدوات تُثبَّت مرّة واحدة على جهازك (Windows):
أ) محرّر الأكواد — VS Code
- افتح code.visualstudio.com وحمّل النسخة لويندوز ثم ثبّتها.
- من داخل VS Code افتح تبويب Extensions وثبّت إضافتَي Flutter وDart.
ب) Git (لرفع الكود على GitHub)
- حمّل Git من git-scm.com/download/win وثبّته بالخيارات الافتراضية.
- تأكّد من التثبيت بفتح موجّه الأوامر وكتابة الأمر التالي:
ج) تحميل Flutter SDK
- ادخل الموقع الرسمي docs.flutter.dev/get-started/install واختر Windows.
- حمّل ملف flutter_windows_x.x.x-stable.zip وفك ضغطه في مسار بسيط مثل
C:\src\flutter(تجنّب مسارات فيها مسافات أو رموز عربية). - أضف مسار
C:\src\flutter\binإلى متغيّر النظام Path (ابحث في ويندوز عن "Edit environment variables"). - افتح موجّه أوامر جديد وشغّل فحص البيئة:
سيخبرك flutter doctor بما ينقص (مثل Android Studio لبناء تطبيقات أندرويد). اتبع تعليماته حتى تصبح كل البنود ✓.
نصيحة: لتشغيل التطبيق على هاتفك أثناء التطوير، فعّل "خيارات المطوّر" و"تصحيح USB" في الهاتف، أو استخدم محاكي Android من Android Studio. ثم من داخل مجلد المشروع شغّل:
4 ما هو GitHub وكيف نربط المشروع للرفع التلقائي
GitHub هو "خزانة سحابية للأكواد". يحفظ كل نسخة من مشروعك، ويسمح بالرجوع لأي تعديل سابق، والأهم: خدمات الاستضافة مثل Render تسحب الكود منه وتنشره تلقائيًا.
فرق مهم: GitHub لا ينشر موقعك — هو فقط يخزّن الكود. الذي ينشر ويشغّل الخادم هو Render، وهو يقرأ الكود من GitHub.
أ) إنشاء حساب GitHub
- ادخل github.com/signup وسجّل ببريدك الإلكتروني وكلمة مرور قوية.
- فعّل الحساب من رسالة التأكيد في بريدك.
ب) إنشاء مستودع (Repository) جديد
- اضغط زر + أعلى اليمين ثم New repository.
- اكتب اسمًا مثل
mission، واتركه Public أو Private، ثم Create repository.
ج) رفع مشروعك من جهازك إلى GitHub
من داخل مجلد المشروع، افتح موجّه الأوامر ونفّذ هذه الأوامر مرّة واحدة:
د) الرفع التلقائي بعد ذلك
بعد أول ربط، كل ما تحتاجه لرفع أي تعديل جديد هو ثلاثة أوامر:
السحر هنا: عند تفعيل خاصية Auto-Deploy في Render، بمجرّد تنفيذ git push سيلتقط Render التعديل وينشر النسخة الجديدة تلقائيًا خلال دقائق — دون أي خطوة يدوية.
5 ما هو ملف .env ولماذا هو مهم
ملف .env (اختصار Environment = البيئة) هو ملف نصّي يحتوي الإعدادات السرّية والمتغيّرة
للمشروع، مثل: رابط قاعدة البيانات، المفتاح السرّي للتوكن، ومفاتيح الخدمات الخارجية.
لماذا نستخدمه؟
- الأمان: لا نكتب كلمات المرور والمفاتيح داخل الكود مباشرة (لأن الكود يُرفع على GitHub ويراه الجميع).
- المرونة: نغيّر الإعدادات بين جهازك (تطوير) والخادم (إنتاج) دون تعديل الكود.
مثال على محتوى ملف .env:
تحذير أمني مهم جدًا: ملف .env يجب ألّا يُرفع أبدًا على GitHub. أضِف اسمه إلى ملف
.gitignore ليتجاهله Git. على الخادم (Render) تُوضَع هذه القيم في قسم
Environment Variables بدلًا من الملف.
لهذا يوجد عادةً ملف .env.example يُرفع على GitHub — يحتوي أسماء المتغيّرات بدون قيمها الحقيقية، ليعرف أي مطوّر ما الذي يحتاج ضبطه.
6 Render: تسجيل الحساب ونشر الخدمة
Render منصّة استضافة سحابية تشغّل خادمك على الإنترنت وتربطه بـ GitHub للنشر التلقائي، ولها خطة مجانية مناسبة للبداية.
أ) إنشاء الحساب
- ادخل render.com واضغط Get Started.
- سجّل الدخول بحساب GitHub مباشرة (الأسهل) — سيؤدي هذا لربط حسابيك تلقائيًا.
- وافق على منح Render صلاحية قراءة مستودعاتك.
ب) نشر الخادم (Web Service)
- من لوحة Render اضغط New + ثم Web Service.
- اختر مستودع
missionمن قائمة مستودعات GitHub. - اضبط الإعدادات:
- Environment: Python
- Build Command:
pip install -r backend/requirements.txt - Start Command:
uvicorn app.main:app --host 0.0.0.0 --port $PORT - Root Directory:
backend
- اختر الخطة Free ثم Create Web Service.
انتبه: متغيّر $PORT يوفّره Render تلقائيًا — يجب استخدامه في أمر التشغيل، وإلا لن يكتشف Render المنفذ وستفشل الخدمة برسالة "No open ports detected".
ج) إضافة متغيّرات البيئة
من تبويب Environment أضِف نفس مفاتيح ملف .env (DATABASE_URL و JWT_SECRET_KEY ...). حفظها يُطلق إعادة نشر تلقائية.
ملاحظة عن الخطة المجانية: الخدمة "تنام" بعد ~15 دقيقة خمول، وأول طلب بعدها يتأخّر ~50 ثانية للإيقاظ. هذا طبيعي ولا يعني وجود خطأ.
7 PostgreSQL: إنشاء قاعدة البيانات وربطها وأهميتها
ما هي ولماذا نحتاجها؟
PostgreSQL نظام قواعد بيانات قوي ومجاني ومفتوح المصدر. أهميتها أنها الذاكرة الدائمة للمشروع: بدونها تختفي كل الحسابات والبيانات عند إعادة تشغيل الخادم. تحفظ: المستخدمين، ملفات الأطفال، الدروس، الألعاب، ونقاط التقدّم.
لماذا PostgreSQL على Render وليس استضافة عادية؟ لأن الاستضافات المشتركة (مثل بعض خطط الاستضافة التقليدية) غالبًا تمنع الاتصال الخارجي بقاعدة البيانات، بينما قاعدة Render تعمل بجوار خادمك مباشرة وبلا تعقيد.
أ) إنشاء القاعدة
- على Render اضغط New + ثم PostgreSQL.
- اختر اسمًا مثل
misson-db، ونفس منطقة خدمتك، والخطة Free. - اضغط Create Database وانتظر حتى تصبح الحالة Available.
ب) ربطها بالخادم
- افتح صفحة قاعدة البيانات وانسخ Internal Database URL (الداخلي أسرع ومجاني).
- اذهب لخدمة الخادم ← تبويب Environment ← أضِف متغيّرًا باسم
DATABASE_URLوالصق فيه الرابط. - احفظ — سيعيد Render النشر، وسينشئ الخادم الجداول تلقائيًا عند الإقلاع.
نصيحة: لا حاجة لإنشاء الجداول يدويًا — الكود ينشئها تلقائيًا أول مرّة يتصل فيها بالقاعدة.
8 الأخطاء الشائعة وكيف نحلّلها ونحلّها
هذه أخطاء حقيقية واجهناها فعليًا أثناء نشر Misson — وكيف حلّلناها وحللناها. القاعدة الذهبية: اقرأ آخر سطر في رسالة الخطأ (Traceback) — هو الذي يخبرك بالسبب الحقيقي.
| رسالة الخطأ | السبب | الحل |
|---|---|---|
No open ports detected |
أمر التشغيل لا يستخدم $PORT |
اجعله --port $PORT |
email-validator is not installed |
حزمة ناقصة في requirements | أضِف email-validator إلى الملف |
ModuleNotFoundError: No module named 'pypdf' |
مكتبة مستوردة لكن غير مثبّتة | أضِف اسم المكتبة إلى requirements.txt |
Invalid args for response field |
خطأ برمجي في تعريف الاستجابة | استخدم نموذج Pydantic صحيحًا |
Can't connect to database (بعد ~30 ثانية) |
رابط القاعدة خاطئ أو غير مسموح | تحقّق من DATABASE_URL والصلاحيات |
منهجية تحليل أي خطأ (3 خطوات)
- افتح اللوق (Logs): في Render من تبويب Logs، أو في الطرفية على جهازك.
- اقرأ آخر سطر: عادةً يبدأ الخطأ الفعلي بكلمة مثل
ErrorأوExceptionفي نهاية الـ Traceback. - حدّد النوع: هل هو حزمة ناقصة؟ خطأ كود؟ إعداد بيئة؟ ثم طبّق الحل المناسب وأعد النشر بـ
git push.
حيلة عملية: بدل معالجة الأخطاء واحدًا تلو الآخر، افحص كل الاستيرادات (imports) في مشروعك مرّة واحدة وتأكّد أن كل مكتبة خارجية مذكورة في requirements.txt — هذا يوفّر عليك دورات نشر فاشلة متكرّرة.
9 قائمة تحقّق نهائية (من الصفر إلى النشر)
- ثبّت الأدوات: VS Code + Git + Flutter (وتأكّد بـ
flutter doctor). - جهّز الكود محليًا وجرّبه (
flutter runللتطبيق، وتشغيل الخادم محليًا). - أنشئ حساب GitHub وارفع المشروع (
git push). - أنشئ حساب Render واربطه بـ GitHub.
- أنشئ خدمة Web Service واضبط أوامر البناء والتشغيل.
- أنشئ قاعدة PostgreSQL واربطها عبر
DATABASE_URL. - أضِف متغيّرات البيئة (JWT_SECRET_KEY وغيرها).
- راقب اللوق حتى تظهر "Your service is live 🎉".
- حدّث رابط الخادم داخل التطبيق ثم ابنِ نسخة التطبيق النهائية.
بعد كل تعديل مستقبلي: git add . ثم git commit -m "..." ثم git push — وسيتكفّل Render بالباقي تلقائيًا. 🚀
دليل مشروع Misson — أُعدّ للشرح التعليمي · تعلّم من خلال البناء