Skip to content

OpScaleHub/chistanLand

Repository files navigation

🏝️ چیستان‌آباد (ChistanLand) - پلتفرم ماجراجویی آموزشی کودکان

چیستان‌آباد یک پلتفرم آموزشی نوین بر پایه سیستم تکرار فاصله‌دار (Spaced Repetition) و معماری اقلیم‌های یادگیری است. این مستند به عنوان منشور طراحی و توسعه، اصول بنیادین پروژه را برای جلوگیری از انحراف‌های آتی تبیین می‌کند.


🏗️ معماری آموزشی (Pedagogical Architecture)

۱. سیستم اقلیم‌های ۵گانه (Learning Biomes)

یادگیری از یک مسیر خطی به یک سفر اکتشافی تبدیل شده است. هر نشانه (حرف یا عدد) باید از ۵ اقلیم عبور کند تا به سطح «تسلط» (Mastery) برسد:

  1. 🏝️ اقلیم تطبیق (Phonics Intro):
    • هدف: آشنایی با شکل و صدای حروف در بستر کلمه.
    • مکانیزم: کودک کل کلمه را با استفاده از کیبوردی که فقط حروف همان کلمه را دارد، تایپ می‌کند (بازی تطبیق).
  2. ⛰️ اقلیم تعمیق (Missing Letter):
    • هدف: تشخیص جایگاه حرف در کلمه.
    • مکانیزم: کودک حرف گمشده را از بین گزینه‌هایی شامل حروف همان کلمه و حروف یادگرفته‌شده قبلی پیدا می‌کند.
  3. 🌲 اقلیم تثبیت (Spelling):
    • هدف: تثبیت دیکته و افزایش سرعت عمل.
    • مکانیزم: کودک کل کلمه را با کیبوردی که شامل حروف مزاحم بیشتری است، تایپ می‌کند.
  4. 🏰 اقلیم تشخیص (Word Recognition): ✅ پیاده‌سازی‌شده
    • هدف: تشخیص کلمه از بین چند تصویر.
    • مکانیزم: کودک کلمه را می‌شنود/می‌بیند و تصویر درست را از بین چند گزینه لمس می‌کند (تصاویر از نقشهٔ اموجی می‌آیند؛ بدون نیاز به فایل گرافیکی).
  5. 🏔️ اقلیم تسلط (Quick Recall): ✅ پیاده‌سازی‌شده
    • هدف: مرور سریع و تثبیت در حافظه بلندمدت.

فعالیت‌های مکمل (Additional Activity Types): علاوه بر ۵ اقلیم بالا، دو فعالیت دیگر هم در ActivityType وجود دارد: رهگیری نشانه (TRACE_LETTER / «نقاشی حرف») با ترتیب صحیح حرکات قلم برای هر ۳۲ نشانه، و داستان‌گویی (STORY_TELLING).

۲. پیشرفت تدریجی و انگیزه (Progression & Motivation)

  • شتاب در گام نخست: ارتقاء از اقلیم ۱ به ۲ فقط با یک بار پاسخ صحیح انجام می‌شود تا کودک به سرعت وارد بازی‌های چالشی‌تر شود.
  • بازگشایی مترقی جزایر: جزیره بعدی در نقشه، بلافاصله پس از اولین موفقیت در جزیره فعلی باز می‌شود تا حس اکتشاف و پیشرفت حفظ شود.

۳. قانون طلایی یادگیری تجمعی (The Golden Rule of Cumulative Learning)

  • اصل ۱+ (The +1 Principle): هر کلمه جدید در مسیر اصلی یادگیری، فقط و فقط می‌تواند شامل یک نشانه جدید باشد و بقیه حروف آن باید از نشانه‌هایی باشند که کودک در مراحل قبل آموخته است.
  • کیبورد ایزوله: حروف «مزاحم» در کیبورد هرگز نباید شامل حروفی باشند که هنوز تدریس نشده‌اند.

✨ وضعیت فعلی و ویژگی‌های پیاده‌سازی‌شده (Current State — به‌روز ۱۴۰۵/۰۳/۲۵ = 2026-06-15)

اسنپ‌شات از آنچه ساخته و روی دستگاه تأیید شده است (برای ردیابی در توسعه‌های آتی):

  • هر ۳۲ نشانهٔ الفبا با مسیر یادگیری کامل (Phonics → Missing Letter → Spelling → Word Recognition → Quick Recall) + رهگیری و داستان‌گویی.
  • رهگیری با ترتیب حرکات قلم (Stroke-order tracing): برای هر ۳۲ نشانه مسیرِ مرکزی (centerline) به‌صورت دستی نویسه‌گذاری و روی دستگاه کالیبره شده است. کودک باید خطوط را به ترتیب و جهت درست دنبال کند (نقطهٔ شروع سبزِ چشمک‌زن، «خط N از M»، پشتیبانی از لمسِ نقطه‌ها). نویسه‌هایِ بدون مسیرِ دستی به‌صورت خودکار به روش پوششِ کانتور (Coverage) بازمی‌گردند. کد: letterStrokeData و OrderedTracingSurface در LearningSessionScreen.kt.
    • یادداشت کیفیت: مسیر نشانه‌های ک گ ط ع ص «قابل‌تشخیص ولی تقریبی» است و جای پالایش دارد.
  • واژه‌های نمونهٔ بیشتر (Example words): هر نشانه ۱ تا ۲ واژهٔ ملموسِ کنترل‌شده با اصلِ ۱+ دارد (۵۲ واژه، همگی با اموجی). این‌ها تمرینِ عمیق‌ترِ بدون امتیاز هستند (سرعتِ تسلط را زیاد نمی‌کنند). کد: letterExamples در LearningViewModel.kt.
  • صدای فارسیِ آفلاین با AvaCore: اپ خواهرِ AvaCore (موتور TTS مبتنی بر Piper/Sherpa-ONNX) به‌عنوان موتورِ گفتارِ آفلاین استفاده می‌شود (با Fallback به موتور پیش‌فرض). (برای جزئیات به TODO.md بخش ۴ نگاه کنید — به‌روز شده.)
  • انگیزش: آلبوم استیکر، نوار پیشرفت/رشد گیاه، استریک روزانه، جشن موفقیت.
  • پایداری: مدیریت رویدادِ مقاوم (خروج ایمن، عدم گیرکردن بین مراحل).

مرحلهٔ بعدی (در صورت ادامه): پالایش ۵ مسیر تقریبی بالا؛ تصاویر سفارشی به‌جای اموجی (اولویت پایین — اموجی همان «عینیت» را می‌رساند). جزئیات کامل در .claude/.../memory/backlog-next-steps.md.


🛠️ جزئیات فنی و پیاده‌سازی

معماری منطق (Business Logic Architecture)

  • LearningViewModel.kt: مدیریت وضعیت کلی بازی، انتخاب نوع فعالیت (ActivityType)، تولید کیبورد تطبیقی (generateAdaptiveKeyboard)، صفِ جلسه (sessionQueue) و نقشهٔ واژه‌های نمونه (letterExamples).
  • LearningRepository.kt: مدیریت پیشرفت (XP) و زمان‌بندی مرورها بر اساس سیستم لایتنر.
  • IslandMapScreen.kt: نمایش نقشه و منطق بازگشایی (Unlock) جزایر.
  • LearningSessionScreen.kt: UIِ همهٔ فعالیت‌ها؛ شاملِ رهگیریِ ترتیب‌دار (letterStrokeData + OrderedTracingSurface) با Fallback به CoverageTracingSurface، و نقشهٔ اموجیِ مشترک (getEmojiForWord).
  • util/TtsManager.kt: صراحتاً موتورِ AvaCore را درخواست می‌کند (سازندهٔ ۳-آرگومانیِ TextToSpeech) با Fallback به موتور پیش‌فرض. ترتیبِ تعریفِ property/init مهم است (رجوع به memory).

شناسه‌های محتوا (Content IDs)

  • قانون ترتیب: شناسه‌های محتوا (مانند a01, a02) باید دقیقاً با ترتیب آموزشی مورد نظر منطبق باشند. پایگاه داده آیتم‌ها را بر اساس همین شناسه‌ها مرتب می‌کند.

📋 راهنمای عیب‌یابی و توسعه آتی (Troubleshooting & Future Development)

مشکل رایج (Symptom) علت احتمالی (Root Cause) راه حل استاندارد (Standard Solution)
پایان زودهنگام مرحله ناهماهنگی بین targetString در ViewModel و کلمه نمایش داده شده در UI. targetString باید همیشه کل کلمه (item.word) باشد. سختی باید از طریق کیبورد کنترل شود، نه با تغییر هدف.
توقف پیشرفت در نقشه منطق isLocked در IslandMapScreen بیش از حد سخت‌گیرانه است. بازگشایی جزیره باید به محض اولین موفقیت (مثلاً lastReviewTime > 0) انجام شود.
نمایش حروف تدریس نشده نقض اصل ۱+ در seedData یا منطق اشتباه در generateAdaptiveKeyboard. seedData را بازبینی کنید تا هر کلمه فقط یک حرف جدید داشته باشد. حروف مزاحم باید فقط از learnedLetters انتخاب شوند.
تمرینِ نمونه لمس را نمی‌گیرد / گیر می‌کند دو آیتمِ متوالیِ صف، شناسهٔ (id) یکسان دارند؛ صفحه‌ها وضعیتِ هر تمرین را با remember(item.id) نگه می‌دارند و isTransitioning فقط در LaunchedEffect(currentItem?.id) ریست می‌شود → آیتمِ دوم «تمام‌شده» می‌ماند و لمس را نادیده می‌گیرد. اصل ثابت: هر آیتمِ sessionQueue باید id یکتا داشته باشد. واژه‌های نمونه از <mainId>_ex<i> استفاده می‌کنند (مشتق از id اصلی تا چکِ "p0"ِ کیبورد حفظ شود).

About

چیستان‌آباد

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors