اِقْرَأْ — يعلّم طفلك قراءة العربية، من الحرف الأول إلى القرآن. (اسمُ المشروع في سجلاته التاريخية «المُعلِّم»؛ العلامةُ «اِقْرَأْ» منذ ٨ أغسطس ٢٠٢٦ —
docs/REVIEW_BRAND.md.)
تطبيق ويب (بلا أدوات بناء) يعلّم الطفل القراءة العربية على أساس القاعدة النورانية مطوَّعةً بأربعة مبادئ:
- ترتيب الحروف بالتواتر لا بالأبجدية — يقرأ الطفل كلمات حقيقية من الأيام الأولى.
- كلمات من عالم الطفل مشتركة بين الفصحى واللهجات (مراعاة الازدواجية اللغوية).
- مفكوكية ١٠٠٪ — لا يُعرض على الطفل حرف أو علامة لم تُدرَّس بعد، ويُفحص ذلك آلياً.
- مسار واحد ينتهي بالتهيئة لتلاوة القرآن الكريم.
python3 -m http.server 8000 -d app
# ثم افتح http://127.0.0.1:8000/ (أضف ?dev=1 لأدوات التجربة وفحص الأصوات)/welcome/ — موقعٌ من أربع صفحاتٍ بقشرةٍ واحدة وشريطِ تنقّلٍ واحد على شجرة النشر
نفسها (http://127.0.0.1:8000/welcome/ محلياً):
| الصفحة | ما فيها |
|---|---|
/welcome/ |
البوّابة في ثلاثين ثانية: ما هو ولمن، وأربعةُ فروقٍ تميّزه، وأرقامٌ ولقطات |
/welcome/curriculum.html |
المنهج: الرحلة محطةً محطة — بطاقةٌ لكل نوع محطة، وخطٌّ زمنيّ، وجداول، ولقطةٌ لكلٍّ |
/welcome/method.html |
الأسس: المذهب العلميّ ومسوّغاتُنا المعلَنة وحدودُ النطاق والمراجع |
/welcome/guide.html |
الدليل العملي: البيت والصفّ، ولوحةُ وليّ الأمر، و?dev=1، والتثبيت والنسخة الاحتياطية |
وتُطبَع طباعةً نظيفة (@media print) بترويسةٍ فيها علامةُ التطبيق وعنوانُ الموقع —
فتخرج ورقةً تُسلَّم لمدرسة. وللتطبيق بابٌ إليها في ذيل خريطته («تعريفٌ بالمنهج»).
وهي خارج التطبيق وخارج قشرة عامل الخدمة عمداً: لا تُخزَّن، ولا تسجّل عاملاً، ولا
تصل بيان التطبيق، ولا تحمل سطر جافاسكربت واحداً — فلا أثر لها على PWA المثبَّتة.
وزرّ «ابدأ الآن» ينقل إلى التطبيق (../).
python3 tools/make_welcome_shots.py # يولّد لقطات الرحلة من شاشات التطبيق نفسِها
python3 tools/make_welcome_shots.py --check # تحقّق منها بلا توليد| المسار | الدور |
|---|---|
docs/METHOD.md |
المنهج التعليمي الملزم |
docs/SESSIONS.md |
خطة جلسات التنفيذ وحالتها |
app/js/curriculum.js |
مصدر الحقيقة لبيانات المنهج (الحروف والمجموعات والمهارات والقصص والمرحلة القرآنية) |
app/data/lexicon.json |
معجم «حديقة الكلمات» — ٢٥٠ كلمة في عشرة بساتين (طبقة ب١) |
app/welcome/ |
«المرجع التعريفيّ» — أربعُ صفحاتٍ (خارج قشرة عامل الخدمة) ولقطاتُها المولَّدة الثلاثَ عشرةَ |
app/audio/ |
أصوات مولّدة مسبقاً (Gemini TTS) — تُستبدل بتسجيلات بشرية دون تغيير الشيفرة |
tools/ |
توليد الأصوات، عدّة التسجيل البشري، فحص المفكوكية، اختبارات التقدّم |
ref/ |
المرجعان: القاعدة النورانية والدروس الهجائية (PDF) |
كل نصّ في المنهج له ملف app/audio/<key>.mp3 واسمه sha1 لنصّه العربي — فاستبدال أي
ملف بتسجيل بشري لا يمسّ سطراً من الشيفرة. ولأنّ الاسم من النصّ لا من المحتوى،
يكتب المولّد مع الفهرس بيانَ بصمات المحتوى app/audio/versions.json (أول ٨ من
sha1 البايتات) يطلب به التطبيق <key>.mp3?v=<بصمة> — فيكسر استبدالُ صوتٍ كاشَ ملفه
وحده على كل جهاز، ولولاه بقي مَن خزّن القديم على القديم أبداً.
.venv/bin/python tools/generate_audio.py # الناقص فقط (Gemini TTS)
.venv/bin/python tools/generate_audio.py --force # إعادة توليد الكل
.venv/bin/python tools/generate_audio.py --audition # صفحة مفاضلة أصوات
.venv/bin/python tools/generate_audio.py --verify-only # تحقّق: لا ناقص ولا يتيم ولا مبتور ولا بصمة قديمة
.venv/bin/python tools/generate_audio.py --sync-versions # إعادة اشتقاق بصمات المحتوى (بلا شبكة)
.venv/bin/python tools/generate_audio.py --engine edge # المحرّك الاحتياطي (مايكروسوفت)
.venv/bin/python tools/generate_audio.py --queue-status # قائمة الانتظار (docs/AUDIO_QUEUE.md)
.venv/bin/python tools/generate_audio.py --from-queue --rpm 8 # تصريف القائمة على حصة اليوم
.venv/bin/python tools/recording_list.py # قائمة تسجيل للمعلّم البشري
.venv/bin/python tools/import_recordings.py ~/rec # استيراد التسجيلات (قصّ + تطبيع)ونصّ المصحف خارج هذا كلّه (METHOD §٥.٦): لا يُولَّد صوتُه ولا يُنطق آلياً — تلاوتُه من تسجيل قارئٍ متقن، مسارُها مستقلّ عن المولّد وعن فهرسه:
python3 tools/fetch_recitation.py # تلاوة الآيات (الحصري المرتّل)
python3 tools/fetch_recitation.py --sync-only # إعادة بناء بيانها بلا شبكة
python3 tools/fetch_word_recitation.py --sources # تلاوة الكلمة المفردة: حال ترخيص كل مصدر
python3 tools/fetch_word_recitation.py --dry-run # ما سيُجلب ومن أين (بلا شبكة)جلبُ تلاوة الكلمة مقفلٌ ببوّابة ترخيص: لا يعمل حتى يُقِرّ إنسانٌ قرأ رخصةَ المصدر
(--approve-license) ويُسنِده في CREDITS.md. وحتى ذلك تعمل محطات «كلمات السورة» صامتةً.
المفتاح GEMINI_API_KEY يُقرأ من البيئة أو من .env (غير مُتتبَّع في git ولا يُطبع).
python3 tools/check_decodable.py # مفكوكية المنهج والتغطية
python3 tools/check_lexicon.py # مفكوكية المعجم ومقاطعه وتفرّده (يرث فاحص المنهج)
python3 tools/icon_audit.py # جرد الأيقونات وحارس التباسها (docs/REVIEW_ICONS.md)
node tools/test_icons.mjs # «صدق الصورة»: المستعصية لا تُسأل بصورتها وتبقى في التهجئة
python3 tools/test_queue.py # تصريف قائمة الانتظار الصوتية (بلا شبكة)
node tools/test_progress.mjs # قواعد القفل والنجوم وسجلّ المهارات والتكرار المتباعد
node tools/test_gate.mjs # بوابتا الإتقان: موضعهما وعتبتهما ومادّتهما والترحيل الرحيم
node tools/test_contrast.mjs # محطتا «ميّز بين»: أزواج المتشابهات ومفكوكيتها وقياسها
node tools/test_fade.mjs # خفوت التشكيل ز١→ز٣: العتبة والدرجات وحصانة التهجّي والمصحف
node tools/test_lesson.mjs # مفكوكية جولات درس الحرف
node tools/test_words.mjs # مفكوكية ألواح لعبة الكلمات وتغطية أصواتها
node tools/test_review.mjs # جلسة المراجعة (مفكوكيتها وتغطية أصواتها) واللوحة
node tools/test_quran.mjs # المرحلة القرآنية وأصالة نصّ المصحف و«الجسر القرآني» (كلمات السورة)
node tools/test_lexicon.mjs # المعجم والبساتين ووصل قياسها بالمراجعة
node tools/test_pwa.mjs # العمل دون إنترنت
node tools/test_welcome.mjs # الصفحة التعريفية: خارج القشرة، وأرقامها محسوبة من المنهج
node tools/test_audio_cache.mjs # بصمات المحتوى وكسر كاش الصوت (سيناريو استبدال كامل)
python3 tools/browser_test.py # درس الحرف في Chrome حقيقي
python3 tools/browser_test.py --words # لعبة الكلمات في Chrome حقيقي (المجموعات السبع)
python3 tools/browser_test.py --review # المراجعة اليومية ولوحة وليّ الأمر في Chrome حقيقي
python3 tools/browser_test.py --story # دروس المهارات وشاشة قراءة القصص
python3 tools/browser_test.py --quran # المرحلة القرآنية والعمل دون إنترنت
python3 tools/browser_test.py --garden # بساتين الموضوعات (حديقة الكلمات)
python3 tools/browser_test.py --gate # بوابتا الإتقان (عبور وإخفاق وإعادة وترحيل)
python3 tools/browser_test.py --contrast # محطتا «ميّز بين» (المواجهة و«اسمع الفرق»)
python3 tools/browser_test.py --fade # خفوت التشكيل: عبور العتبة والكشف عند الطلب وارتداد الدرجة
python3 tools/browser_test.py --map # الخريطة: جبهة الفتح والطيّ الكسول وقياس سرعتهما
python3 tools/browser_test.py --welcome # الصفحة التعريفية: صفر طلبٍ خارجي، ولا يبتلعها عامل الخدمة
python3 tools/browser_test.py --device # مقاسات آيباد حقيقية: لا سحبَ في الوضع العرضي ولا فائض أفقي
python3 tools/browser_test.py --device --metrics # معايرة توسيط الحرف البطل في صندوقهولقطةُ شاشةٍ واحدة بمقاس جهاز (للمراجعة البصرية، و--flat تعطّل رفعة الحرف لصورة «قبل»):
python3 tools/browser_test.py --device --shots out.png --screen lesson-listen --size 1180,820