-
Notifications
You must be signed in to change notification settings - Fork 0
architecture
الرفيق التقنيّ لكرّاسة المشروع (
tilmithi-project.mdفيD:\koora-web). تحديث جوهريّ (2026-06-10): أُزيل الذكاء الاصطناعي من المشروع. الآليّ يعمل الآن بمحتوًى مُعَدّ مسبقًا محليًّا، لا بنموذج لغويّ.
التطبيق محليّ بالكامل، بلا ذكاء اصطناعي وبلا اتصال بالإنترنت.
«دماغ» الآليّ لم يَعُد نموذجًا يولّد ويتحدّث؛ صار مكتبة محتوًى مُعَدّة مسبقًا + آلة حالات داخل التطبيق تُرتّب هذا المحتوى. لا خادم، لا مفتاح، لا سحابة، لا تكلفة، ولا شيء يغادر الجهاز.
ما كان يفعله الذكاء الاصطناعي (توليد الذكريات/المهام، الاستماع لتقرير الطفل، تقرير أنّ الآليّ «تذكّر») يصير الآن محتوًى نؤلّفه سلفًا، والتطبيق يعرضه ويتتبّع التقدّم. تبقى «الحلقة السحرية» كما هي؛ والمقايضة: محتوًى محدود مؤلَّف بدل توليد لا نهائيّ — وهو مناسب وأكثر أمانًا وثباتًا لتجربة طفل.
Vite + TypeScript. تُثبَّت وتعمل دون اتصال بالكامل. الإطار (React / Svelte / فانيلا كـ koora-web) تفصيل ثانويّ.
تقدّم الطفل، حالة شفاء الآليّ، الذكريات المُنجَزة، أي تسجيلات — كلّها على الجهاز. ومكتبة المحتوى مُضمَّنة محليًّا (JSON + وسائط).
لا مفتاح نخفيه ولا خادم نكلّمه. التطبيق مكتفٍ بذاته؛ يكفي تشغيل ملفات ثابتة محليًّا.
- مكتبة محتوى مؤلَّفة سلفًا: الذكريات/المهام + جُمل الآليّ + ردوده، كبيانات محليّة.
- آلة حالات في التطبيق تُرتّبها: الشرارة → المهمة → التلقين → الشفاء.
- حتميّ، غير متّصل، آمن تمامًا.
- نموذج المحتوى المعتمد: مكتبة مُعَدّة مسبقًا (قرار 2026-06-10) — نؤلّف الذكريات/المهام/جُمل الآليّ/ردوده سلفًا كبيانات محليّة، والتطبيق يرتّبها.
بلا نموذج لغويّ: لا دردشة مُولَّدة، لا حقن أوامر، لا رفض غير متوقَّع. مدخلات الطفل تُحرّك التقدّم/الاختيار فقط. يبقى: مغلق، رفيق أهل، موجَّه بالمسار.
نفس مخطّط المهمة أدناه، لكنه يُكتَب سلفًا لا يُولَّد. التنسيق الكامل ونموذج الشفاء في content-format.md، والبيانات في content/library.js.
بلا نموذج، يمكن تسجيل جُمل الآليّ مسبقًا (صوت دافئ وثابت — حتى صوت أحد أفراد العائلة!) بدل أي تركيب آليّ. كله محليّ. أو SpeechSynthesis للمتصفح إن فُضِّل.
لا حسابات، لا شبكة، لا شيء يغادر الجهاز.
| الحالة | الوظيفة |
|---|---|
| الشرارة | تختار الذكرى التالية من المكتبة وتعرض جملة الآليّ |
| المهمة | تعرض/تطبع البطاقة؛ الطفل يفعلها في الواقع |
| التلقين | الطفل/الأب يُعلِّم الإنجاز (+ تأمّل اختياريّ) |
| الشفاء | تُضيء الشريحة ويعود جزء اللون؛ يُشغَّل ردّ الآليّ المُسجَّل مسبقًا |
{
"domain": "هندسة|لغة|أخلاق|علوم|تفكير",
"age_band": "4-6|7-10",
"robo_line": "جملة الآليّ القصيرة (شرارة الذكرى)",
"child_steps": ["خطوة واقعية", "..."],
"materials": ["أشياء من البيت"],
"success_signal": "كيف نعرف أنّ الطفل أنجزها",
"healing_reward": "أيّ جزء من الآليّ يضيء"
}صفر. لا واجهات برمجية ولا اشتراكات.
يعمل من الطرف للطرف في app/ — HTML/JS صرف، بلا بناء وبلا ذكاء اصطناعي:
- يقرأ
content/library.js، يُمرّر ذكرى عبر الحالات الأربع (شرارة → مهمة → تلقين → شفاء)، ويُضيء جزءًا من الآليّ (SVG) مع حفظ التقدّم فيlocalStorage. - فلتر بالفئة العمريّة + صفّ عناصر العالم + معلَم الضحكة عند ٨.
-
رسومات SVG كرتونيّة محليّة في وحدة مشتركة
src/art.js: لكلّ قصّة مشهدٌ خاصّ مفصّل/طفوليّ عند توفّره (ART[id]) وإلّا رسمُ مجالها (DOMAIN_ART)، يظهر في التطبيق والمطبوعات والفهرس معًا؛ ورسوم ملوّنة لعناصر عالم الآليّ تُشرق عند الشفاء. أُنجِز 10 مشاهد مفصّلة حتى الآن، قابلة للنموّ حتى تغطية الـ71. كلّها متّجهة محليّة بلا صور خارجيّة. -
الفهرس (
home.html): لوحة رئيسيّة تربط المكوّنات (التطبيق · المطبوعات · لوحة الأهل · القصص) + فهرس المكتبة كاملًا (بحث/تصفية بالمجال والعمر، وكلّ ذكرى رابطٌ يفتحها). التطبيق يدعم?memory=<id>(يفتح ذكرى بعينها) و?parent=1(يفتح بوّابة الأهل). زرّ 🏠 يربط الكلّ. -
قصص مصوّرة (
stories.html): قصص أصيلة (تأليفنا) بصورٍ كرتونيّة كبيرة (src/story-art.js)؛ قارئٌ بصفحات + نقاط تقدّم + درسٌ ختاميّ. البيانات فيcontent/stories.js. 8 قصص حتى الآن (مثابرة، صبر، شجاعة، صدق، تعاون، فضول، رحمة بالحيوان، نظافة)، قابلة للنموّ. -
ألعاب وأنشطة (
play.html): لعبة مطابقة الذاكرة برسومنا الأصيلة (3 مستويات صعوبة)، بنيةٌ قابلة لإضافة أنشطة أخرى (توصيل نقاط، تلوين، اختبار). كلّه محتوًى أصيل — لا اقتباس من جهةٍ أخرى. -
لوحة الأهل (خلف بوّابة حسابية): نظرة عامة، تقدّم حسب المجال مع تفعيل/تعطيل، مفتاح إظهار/إخفاء ذكريات الإخوة (
pair)، سجلّ جلسات مؤرّخ، والتقاط صوت/صورة محليّ يُحفظ في IndexedDB (لا يغادر الجهاز). -
المطبوعات (
app/print.html): بطاقات مهام قابلة للقصّ + ملصق «خريطة شفاء الآليّ» للتلوين، مفلترة بالمجال/العمر، تُطبع أو تُحفظ PDF عبر المتصفح (بلا مكتبات). -
التشغيل (محدّث 2026-06-12): بعد تحويل البيانات إلى وحدات JS، تعمل صفحات الجذر مباشرةً بأيّ خادم ثابت — من
D:\kidlearnنفّذpython -m http.server 8123وافتحhttp://localhost:8123/home.html(لم يَعُد التشغيل محصورًا في/app/). أوnpm run dev. - تمّ التحقّق منه حيًّا (2026-06-10): الحلقة كاملة، الآليّ يتعافى، والبوّابة/اللوحة/المفاتيح/السجلّ تعمل.
نسخة الإنتاج في جذر المشروع (index.html + print.html) مبنيّة بـ Vite وvite-plugin-pwa:
-
المكتبة مُضمَّنة في الحزمة عبر
import library from "./content/library.js"— لا جلب شبكيّ، فيعمل دون اتصال بلا حيلة. -
Service Worker (Workbox) يُنشأ تلقائيًّا ويُسبِق-تخزين كلّ الأصول ← يعمل دون اتصال؛ و
manifest.webmanifest← قابل للتثبيت كتطبيق. -
الأوامر:
npm installثمّnpm run dev(تطوير) أوnpm run build(يُنتجdist/)؛ تُخدَمdist/كملفّات ثابتة في أيّ مكان. - تمّ التحقّق منه حيًّا (2026-06-10): البناء ينجح، الـ SW مُفعَّل ويُسبِق-تخزين 8 ملفات، المكتبة (٥٦) محمّلة من الحزمة، الحلقة تعمل، بلا أخطاء.
-
البنية: الجذر = مصدر الإنتاج (يحتاج
npm run dev/build). مجلّدapp/= النسخة القديمة بلا بناء (تعمل عبرpython -m http.server) — قابلة للحذف لاحقًا.
بياناتُ المحتوى في content/ هي وحدات ES (content/*.js بصيغة export default {…})، لا ملفّات .json. السبب: المتصفّح لا يدعم import x from "./x.json" بدون أداة بناء، فكانت الصفحات تظهر فارغةً عند تشغيل الجذر الخام عبر python -m http.server (بلا Vite). أمّا استيراد وحدة .js فيعمل أصلًا في كلّ متصفّح. النتيجة: المشروع يعمل الآن بثلاث طرق دون أيّ تغيير:
-
خادم ثابت خام على الجذر (
python -m http.server) — يفتحindex.html/home.htmlمباشرةً. -
Vite dev (
npm run dev). -
بناء Vite (
npm run buildثمّ خدمةdist/) — تُضمَّن البيانات في الحزم. أداةtools/import-from-gtsararim.mjsتُخرج.js(export default). تنسيق الحقول لا يزال JSON-الشكل؛ التغيير في الغلاف فقط.
أصيلٌ من تأليفنا (لا علاقة لها بـ GT-SARARIM) لتدريب الطفل على دمج الحروف لتكوين كلمات — كلّ فكرةٍ حسّيّة اقترحها صاحب المشروع صارت لعبةً تفاعليّة بآليّةٍ ذهنيّة مختلفة (لا مجرّد حُلّةٍ بصريّة). تعيش كلّها داخل صفحة «ألعاب وأنشطة» play.html (دُمِجت مع لعبة الذاكرة في مركزٍ واحد بقائمةٍ menu)؛ القائمة تفتح لعبة الذاكرة + سبع ألعابٍ للحروف:
- 🚂 قطار: ترتيب — يبني الكلمة من الصفر بوضع الحروف في خانات.
- 🧺 مشابك الغسيل: تبديل — الحروف مبعثرةٌ معلّقة، يضغط حرفين ليتبادلا حتى يصحّ الترتيب (فرز).
- 🧱 بناء المكعّبات: إكمال — الكلمة شبه مكتملة بحرفٍ (أو حرفين) ناقص، يختار المكعّب الصحيح وسط بدائل.
- 🎣 صيد الحروف: انتقاء وسط تشتيت — بِركةٌ فيها حروف الكلمة + حروفٌ دخيلة، يصطاد الصحيح بالترتيب ويتجاهل الدخيل.
- 🧩 بطاقات الصور: تمييز — ثلاث كتاباتٍ للكلمة (صحيحة + مبعثرتان)، يختار الصحيحة (اختيار من متعدّد).
- 🌀 متاهة الحروف: تنقّل مكانيّ — شبكةٌ تُولَّد بمسارٍ ذاتيّ التجنّب (self-avoiding walk) + حروف تشتيت؛ يمشي على خلايا الكلمة بالتجاور حتى الصورة.
- 🎡 عجلة الحروف: استكشاف/دمج صوتيّ — بكراتٌ تُدار/تُنقَر، الحروف مدموجةٌ وتُنطَق، مع كشف «كلمة حقيقية».
- 🖨️ أنشطة للطباعة: البطاقات الحسّيّة السبع للأهل (الأصل الورقيّ).
ملاحظات تقنيّة: بنك الكلمات في content/words.js (بالإيموجي بلا صورٍ خارجيّة، كلماتٌ تنفصل حروفها وتتّصل بلا لا/شدّة). الاتّصال يعتمد تشكيل المتصفّح التلقائيّ عند ضمّ الحروف في نصٍّ واحد. لكلّ لعبةٍ حالتُها ومنطقُها المستقلّ (لا محرّك مشترك). النطق اختياريّ عبر SpeechSynthesis (محليّ، يتعطّل بلطفٍ إن غاب). كلّها مُضمّنةٌ في play.html (لا مدخل Vite منفصل) ومربوطةٌ من home.html.
basics.html — الرُّكن التأسيسيّ تحت ألعاب الكلمات (الحروف/الأرقام/الحركات)، قائمةٌ تفتح خمسة أنشطة: بطاقات الحروف (الحرف + اسمه + 🔊 + كلمةٌ مثال + أشكال أوّل/وسط/آخر)، أين الحرف؟ (تعرُّفٌ سمعيّ‑بصريّ)، بطاقات الأرقام (٠–١٠ بالعدّ)، عُدّ معي (كم العدد؟)، الحركات (فتحة/ضمّة/كسرة + لعبة «أيّ حركة سمعت؟»). البيانات في content/letters.js (الـ28 حرفًا + الأرقام). أشكال الحرف الثلاثة تُشتقّ بالرابط الصِّفريّ ZWJ () بدل تخزينها. النطق عبر SpeechSynthesis (محليّ).
read.html — الجسر بين «الأساسيّات» و«ألعاب الكلمات»، ثلاث درجات متدرّجة لتعليم فكّ القراءة:
- ﹷ المقاطع: حرف ساكن × حركة ← مقطع (بَ/بُ/بِ)؛ يضغط الطفل الحركة فيسمع المقطع، ويتنقّل بين الحروف.
- 🔗 اجمع الكلمة: الكلمة مقسومةٌ مقاطعَ مشكّلة (قَ·مَ·رْ بالإيموجي)؛ يقرأ كلّ مقطع (نطق) ثمّ «اقرأ الكلمة كاملةً» (دمج صوتيّ + كشف الكلمة).
- 📜 اقرأ الجملة: جملةٌ قصيرة بالحركات؛ يضغط كلّ كلمة لسماعها ثمّ يقرأ الجملة كاملة.
البيانات في content/reading.js (16 كلمة بمقاطعها + 8 جُمل + قائمة حروف). النطق عبر SpeechSynthesis. تُسجّل التقدّم (read_practice) ولها وسامٌ خاصّ. مُضمَّنة في vite.config.js (مدخل read) ومربوطة من home.html.
وحدةٌ مشتركة src/progress.js (localStorage، لا شيء يغادر الجهاز) تُصدِّر logEvent(type) تستدعيها كلّ الأقسام عند نقطة النجاح: شفاء ذكرى (index.html) · فتح قصّة وإجابة فهم (tales) · كشف حلّ لغز (puzzles) · إنهاء اختبار بنتيجته (quiz) · فوز لعبة حروف/ذاكرة (play) · إجابة في الأساسيّات (basics). تحسب: سلسلة الأيّام (streak)، مجموع النجوم، الأقسام المُجرّبة، و12 وسامًا بشروط، و**«مهمّة اليوم»** (٣ مهامّ تُكتمَل بنشاطٍ من نوعها اليوم). الواجهة progress.html: مهمّة اليوم + إحصاءات + أوسمة + شهادة إنجاز قابلة للطباعة باسم الطفل. وhome.html يعرض شريط «مهمّة اليوم». كلّ هذا حتميّ ومحليّ بلا حساب.
أُدرِجت بياناتُ المحتوى من مشروع GT-SARARIM (GPL-3.0) كمجموعةٍ محليّةٍ مستقلّة، محوَّلةٍ إلى JSON عبر أداة tools/import-from-gtsararim.mjs:
-
51 قصّة + 102 سؤال فهم →
content/sararim-stories.jsتُعرَض فيtales.html(«قصص وعِبَر»: نصّ بالحركات + أسئلة فهم، تصفية بالقسم/العمر، تغذية راجعة فوريّة). -
61 لغزًا (فوازير/منطق، 4 مستويات) →
content/puzzles.jsتُعرَض فيpuzzles.html(«ألغاز ذكية»: لغز ← تلميح ← حل، تصفية بالنوع/العمر). -
94 سؤال اختيار من متعدد →
content/quiz.jsتُعرَض فيquiz.html(«اختبارات تعليمية»: جلسة 10 أسئلة بخياراتٍ مخلوطة ونتيجةٍ فوريّة).
التقنية: نفس نمط المشروع — صفحةٌ واحدةٌ لكلّ نشاط (HTML + <style> بنفس لوحة الألوان + <script type="module"> يستورد JSON محليًّا)، مُسجَّلة في vite.config.js (مدخلات tales/puzzles/quiz) ومربوطة من home.html وplay.html. تعمل دون اتصال (الـ JSON يُضمَّن في الحزمة، والـ Service Worker يُسبِق-تخزينه). النصوص منقولةٌ حرفيًّا من GT-SARARIM ← تنطبق GPL-3.0 عند التوزيع (انظر CREDITS.md).
حزمةُ ميزاتٍ تجعلُ التجربةَ شخصيّةً ومحفّزةً وواعيةً بالسياق، دونَ أيِّ خادمٍ أو ذكاءٍ وقتَ التشغيل:
-
تخصيصُ الآليّ —
src/robo-custom.jsيحفظُ لكلِّ حسابٍ (localStorage) لونًا واسمًا وملحقًا. اللونُ يُطبَّقُ بمتغيّرِ CSS--robo-bodyعلى الجذر فيَشملُ كلَّ نسخِ الآليّ بقاعدةٍ واحدة.rc-body. ثمانيةُ ألوانٍ + اسمٌ اختياريّ + 10 ملحقاتٍ (accessory) تُفتَحُ تصاعديًّا بعددِ الأنشطةِ المُنجَزة (3→50)، تُرسَمُ بإحداثيّاتِ viewBox 0 0 80 80 وتُحقَنُ في<g class="rc-acc">. النافذةُsrc/robo-custom-ui.jsبمعاينةٍ حيّة؛robo.refresh()يُحدّثُ المرافقَ العائم. (المُعرّفاتُ اللاتينيّةُaccessory؛ العرضُ العربيُّ «ملحقات».) -
التحفيزُ اليوميّ — في
home.html: حلقةُ الهدفِ (conic-gradientمدفوعةٌ بـ--pg) تُظهِرُ نسبةَ مهامِّ اليوم، وشعلةُ 🔥 بعددِ الأيّامِ المتتالية (streakمنgetStats()، كان محسوبًا لكنّه غيرُ معروضٍ قبلَ v1.7). -
وصولُ الصغار — تنقّلٌ صوتيّ (
isVoiceNavOn): بطاقةُ الفهرسِ تَنطِقُ اسمَها عند أوّلِ نقرةٍ ونقرةٌ ثانيةٌ تَدخُلُها (لغيرِ القارئ). اهتزازٌ لطيف (haptic()فيsrc/sfx.jsعبرَnavigator.vibrate، صلاحيّةُ VIBRATE تُحقَنُ في التحزيم). كلُّ الحركاتِ داخلَ@media (prefers-reduced-motion: no-preference). -
وضعُ الاستماعِ الليليّ (
isNightMode) — فلترٌ كهرمانيٌّ دافئٌ علىhtml.night-mode(فيsrc/dark.css)، يُطبَّقُ على كلِّ صفحةٍ عبرَ أثرِ استيرادِsound-prefs. -
دليلُ الوالد —
content/parent-guide.js: لكلِّ نشاطٍ (12) «لماذا؟ · كيفَ في الواقع؟ · نصيحة» — يجسّدُ مبدأَ «الشاشةُ محفّزٌ لا معلّم». نافذةٌ في لوحةِ الأهل عبرَsrc/parent-guide-ui.js. -
بانرُ المناسبات —
src/occasions.js: تحويلٌ هجريٌّ حسابيٌّ جدوليٌّ محلّيٌّ (بلا مكتبة) يعرضُ تهنئةً في أيّامِ رمضان/العيدَين/عرفة/عشرِ ذي الحجّة/عاشوراء/رأسِ السنة. تقريبيٌّ للتهنئةِ لا للعبادة (انظرpitfalls-and-solutions.md).
لعبتانِ رقميّتانِ كاملتانِ في play.html (صنف «ترفيهيّة»)، مندمجتانِ مع إطارِ التنافسِ versus (ضدّ الآليِّ بثلاثِ صعوبات/الإخوة/الوالد + «⏱️ ضدّ الوقت» + «وحدي» + سجلُّ الانتصارات + تعليمٌ عصبيّ):
-
الدَّامة (
dama) — لوحةُ 8×8 على المربّعاتِ الداكنة، 12 قرصًا لكلِّ لاعب؛ حركةٌ قُطريّةٌ للأمام، أسرٌ بالقفزِ (متتابعٌ في دورٍ واحد)، ترقيةٌ إلى «دامة» ♛ عند بلوغِ الصفِّ الأخير. آليٌّ: سهل (عشوائيّ) · متوسّط (يُفضّلُ الأسر) · صعب (تقييمُ لوحةٍ + تجنّبُ إهداءِ أسر). -
الشطرنج (
chess) — محرّكٌ كاملٌ مكتوبٌ من الصفرِ (محلّيٌّ 100%، بلا مكتبات): توليدُ الحركاتِ الشرعيّةِ لكلِّ القطع + كشفُ الكِشّ/المات/تعادلِ الجمود + التبييت (لا يعبرُ كِشًّا) + الأخذُ بالتجاوز + ترقيةُ البيدق (وزيرٌ تلقائيًّا). آليٌّ بمينيماكس + قطعِ ألفا-بيتا بثلاثِ أعماق (سهل/متوسّط/صعب)، بترتيبِ الأسرِ أوّلًا للكفاءة. القطعُ برموزِ يونيكود (أبيضُ عاجيٌّ · أسودُ مصمت)؛ الأبيضُ (اللاعبُ 0) يبدأُ دائمًا. الحركاتُ الشرعيّةُ بنقاطٍ متوهّجة، والأسرُ بحلقةٍ حمراء، والمَلِكُ يُبرَزُ عندَ الكِشّ.
مزلق (v1.7): مربّعاتُ الأسرِ في الشطرنجِ لم تكنْ تُبرَز (النقطةُ الخضراءُ على المربّعِ الفارغِ فقط)، ونقاطُ الحركةِ على المربّعاتِ الداكنةِ كانت منخفضةَ التباين — أُصلِحَ بحلقةِ أسرٍ حمراءَ ونقاطٍ متوهّجةٍ (نواةٌ ساطعةٌ + هالةٌ + حلقةٌ بيضاء).
- نموذج إنتاج المحتوى: مكتبة مُعَدّة مسبقًا ✅ (2026-06-10).
- الإطار/البناء: Vite + vite-plugin-pwa للإنتاج ✅ — والنسخة القديمة بلا بناء في
app/. - يعمل دون اتصال + قابل للتثبيت (Service Worker عبر vite-plugin-pwa) ✅.
- صوت الآليّ: تسجيل بشريّ أم TTS المتصفح.
- لوحة الأهل (بوّابة + مراجعة + ضبط مجالات) والتقاط الصوت/الصورة محليًّا في IndexedDB ✅.
- المطبوعات: بطاقات المهام + ملصق «خريطة شفاء الآليّ» (طباعة/PDF عبر المتصفح) ✅ (
app/print.html). - صياغة مخطّط المحتوى ونموذج الشفاء ✅ (
docs/content-format.md). - مكتبة المحتوى: 71 ذكرية (9 مشاريع، 5 موسميّة، 6 تعاونيّة، 5 مهارات حياتية، 5 أمان وصحّة، 5 قدوات وقيم مستوحاة من GT-SARARIM، تغطية كاملة لنموذج الشفاء) ✅ (
content/library.js) — قابلة للنمو. الاقتباس موثّق فيdocs/CREDITS.md.
📖 هذا الويكي مرآةٌ مولَّدةٌ من GT-MK/docs/ في المستودع — حرّرِ الملفَّ هناك ثمّ شغّلْ bash tools/publish-wiki.sh.
رخصةُ المشروعِ والوثائق: GPL-3.0.
البداية
المرجعُ التقنيّ
الخبرةُ المتراكمة