# Master Prompt — MicroLearning Manager Experience Redesign می‌خواهم بخش **Manager / مدیران** در پروژه MicroLearning را به‌صورت کامل بازطراحی و اصلاح کنی. این کار فقط یک تغییر ظاهری نیست. هدف این است که Manager Experience از حالت «نسخه محدودشده Admin Panel» خارج شود و به یک فضای مستقل، ساده، actionable و مخصوص مدیریت یادگیری تیم تبدیل شود. --- # هدف اصلی Manager Experience پنل مدیر باید حول این سؤال طراحی شود: > وضعیت یادگیری تیم من چگونه است و الان باید چه اقدامی انجام دهم؟ Manager نباید برای انجام کارهای روزمره مجبور باشد با ساختار Course Designer، Admin یا Super Admin کار کند. --- # اصول اصلی Manager Experience باید: * Team-centric باشد. * Action-oriented باشد. * Data driven باشد. * ساده‌تر از Admin Panel باشد. * Role-aware باشد. * Permission-aware باشد. * فقط اطلاعات مجاز تیم را نمایش دهد. * برای Desktop، Tablet و Mobile مناسب باشد. * RTL و LTR را پشتیبانی کند. * Dark Mode را خراب نکند. * از Design System موجود استفاده کند. --- # قانون Safety ## Working Code Is Sacred اگر بخشی: * درست کار می‌کند، * تست دارد، * Security Issue ندارد، * و مانع Manager Experience نیست، فقط برای زیبایی Architecture آن را تغییر نده. --- # Minimum Necessary Change فقط تغییراتی را انجام بده که مستقیماً برای Manager Experience ضروری هستند. از Refactorهای unrelated خودداری کن. --- # Scope Lock در ابتدای هر Phase اعلام کن: ```text Files expected to change Modules affected API endpoints affected Permissions affected Expected behavior changes Behavior that must remain unchanged ``` اگر Issue جدیدی پیدا کردی که مربوط به فاز جاری نیست، در: ```text Deferred Technical Debt ``` ثبت کن. --- # Backend Safety هیچ Permission یا Data Scope را فقط در Frontend پیاده‌سازی نکن. اگر Manager نباید داده‌ای را ببیند: **Backend نیز باید آن را محدود کند.** Hide کردن Menu امنیت محسوب نمی‌شود. --- # Manager Data Scope قاعده پیش‌فرض: ```text Manager ↓ Own permitted team ↓ Direct / authorized reports ``` نه: ```text Manager ↓ Entire Organization ``` مگر اینکه Permission صریح وجود داشته باشد. --- # PHASE 0 — Manager Role Audit & Permission Scope ## هدف قبل از تغییر UI، نقش Manager را در کل پروژه بررسی کن. در این Phase redesign انجام نده. --- ## 1. Manager Role Audit تمام موارد مربوط به Manager را پیدا کن: ```text roles permissions policies middleware API authorization organization scope team membership reporting hierarchy frontend route guards navigation permissions ``` مشخص کن Manager در وضعیت فعلی چه چیزهایی می‌تواند: ```text View Create Update Delete Assign Approve Export ``` کند. --- ## 2. Data Visibility Audit بررسی کن Manager اکنون به چه اطلاعاتی دسترسی دارد. به‌خصوص: ```text Users Teams Courses Assignments Assessments Progress Skills Reports Certificates Monitoring ``` هر endpoint را بررسی کن. Manager نباید بتواند با تغییر دستی URL یا API parameter داده خارج از Scope خود را ببیند. IDOR را بررسی کن. --- ## 3. Define Manager Permission Matrix یک Matrix ایجاد کن. مثال: | Capability | Manager | | --------------------------- | ---------------- | | View own team | Yes | | View organization users | No | | View team learning progress | Yes | | Assign approved course | Yes | | Create course | No by default | | Edit course | No | | Use Builder | No | | Use AI Studio | No | | View team skills | Yes | | Export team report | Permission based | | Extend assignment deadline | Permission based | | Approve learning request | Permission based | Matrix نهایی را براساس قابلیت‌های واقعی پروژه تنظیم کن. --- ## 4. Role Separation این چهار Experience را از هم تفکیک کن: ```text Super Admin Course Designer Manager Learner ``` Manager نباید Sidebar مربوط به Course Designer را با چند گزینه hidden دریافت کند. Manager Experience باید Navigation خودش را داشته باشد. --- ## 5. Backend Authorization Tests Test بنویس برای اینکه Manager: ### بتواند: ```text Own team data Own team assignments Own team progress Authorized reports ``` ### نتواند: ```text Other team's private data Organization-wide user data Unauthorized course editing Unauthorized Builder access Unauthorized admin settings ``` --- ## Acceptance Criteria Phase 0 * Manager role دقیقاً تعریف شده. * Permission Matrix وجود دارد. * Team Scope مشخص است. * Data Leakage بررسی شده. * Backend authorization تست دارد. * Feature unrelated تغییر نکرده. * UI redesign هنوز شروع نشده. بعد متوقف شو. --- # PHASE 1 — Manager Shell, Navigation & Dashboard ## هدف Manager یک Experience مستقل و ساده داشته باشد. --- # Manager Navigation Navigation پیشنهادی: ```text داشبورد تیم من یادگیری تیم تخصیص آموزش مهارت‌ها گزارش‌ها تأییدها ``` پایین Navigation: ```text اعلان‌ها تنظیمات شخصی ``` فقط آیتم‌هایی را نمایش بده که Manager واقعاً Permission آن‌ها را دارد. --- # Remove Manager Irrelevant Navigation موارد زیر به‌صورت پیش‌فرض نباید در پنل Manager نمایش داده شوند: ```text Course Builder AI Studio Question Bank Template Management Library Administration Subscription Organization Settings System Settings ``` مگر Manager Permission صریح دیگری داشته باشد. --- # Manager App Shell Shell مدیر شامل: ```text Sidebar Top Header Context Main Content ``` باشد. در Header: ```text Search if useful Notifications User menu Team context if applicable ``` وجود داشته باشد. --- # Manager Dashboard Dashboard مدیر را از Dashboard عمومی جدا کن. Layout پیشنهادی: ```text Greeting ↓ Team Health ↓ Needs Attention ↓ Team Learning Progress ↓ Upcoming Deadlines ↓ Skills Snapshot ↓ Recent Activity ``` --- # KPI Cards KPIها compact باشند. پیشنهاد: ```text Team members Active learners Completion rate Behind schedule Due soon ``` اعداد باید از داده واقعی backend بیایند. Metric جعلی یا static ایجاد نکن. --- # Needs Attention مهم‌ترین بخش Dashboard باشد. نمونه: ```text 4 learners are behind schedule 3 mandatory courses have not been started 2 assignments are due this week 3 employees haven't been active for 7 days ``` هر Item باید مستقیم Action داشته باشد. مثلاً: ```text View learners Send reminder Extend deadline View course ``` --- # Continue Management Tasks وظایف نیمه‌تمام Manager را نمایش بده: ```text Pending approvals Recently assigned learning Saved reports Pending team actions ``` در صورت وجود داده واقعی. --- # Recent Activity Activity Feed ساده باشد: ```text Ali completed Leadership Basics Sara started Workplace Safety 5 users were assigned Communication Skills Certificate issued to Reza ``` --- # Dashboard Empty State اگر Manager تیم ندارد یا داده‌ای موجود نیست، Dashboard نباید شکسته یا خالی باشد. State مناسب طراحی کن. --- ## Acceptance Criteria Phase 1 * Manager Navigation مستقل است. * Admin navigation reuse کورکورانه نشده. * Dashboard کاملاً team-centric است. * Needs Attention وجود دارد. * KPIها compact و واقعی‌اند. * Actions مستقیم‌اند. * Permission-aware UI وجود دارد. * responsive صحیح است. بعد متوقف شو. --- # PHASE 2 — My Team & Employee Learning Profiles ## هدف Manager بتواند وضعیت اعضای تیم را سریع بفهمد. --- # My Team Page صفحه: ```text تیم من ``` ایجاد یا بازطراحی کن. Toolbar: ```text Search Status Filter Team/Subteam Filter if permitted Learning Status Skills Filter if applicable ``` --- # Team Table اطلاعات پیشنهادی: ```text Employee Role / Position Active courses Completion % Due soon Overdue Last activity Status ``` مثلاً: ```text Ali Rezaei 3 active 82% 0 overdue Active today Good ``` --- # Team Status از semantic state استفاده کن: ```text On Track Needs Attention Behind Inactive ``` رنگ تنها indicator نباشد. Text یا icon هم وجود داشته باشد. --- # Employee Learning Profile روی Employee کلیک شود و پروفایل یادگیری باز شود. حداقل: ```text Overview Active Learning Completed Learning Assessments Skills Learning Paths Certificates Recent Activity ``` اما فقط اطلاعاتی که Manager اجازه دیدن آن را دارد. --- # Employee Overview پیشنهاد: ```text Name Position Team Current progress Active courses Completed courses Due assignments Skill development ``` --- # Learning Timeline در صورت وجود داده: ```text Assigned Started Progressed Completed Assessment Certificate ``` Timeline ساده ایجاد کن. --- # Manager Quick Actions از Employee Profile: ```text Assign Learning Send Reminder View Progress View Skills ``` و در صورت Permission: ```text Extend Deadline ``` --- # Privacy اطلاعات unrelated منابع انسانی را نمایش نده. Manager Learning Profile نباید به HR Master Profile تبدیل شود. --- ## Acceptance Criteria Phase 2 * My Team قابل استفاده است. * Search و Filter مناسب دارد. * Employee Learning Profile ایجاد شده. * مدیر فقط Scope خودش را می‌بیند. * Quick Actions وجود دارد. * mobile table مناسب است. * N+1 query یا request explosion ایجاد نشده. بعد متوقف شو. --- # PHASE 3 — Learning Assignment, Deadlines & Notifications ## هدف تخصیص آموزش برای Manager بسیار ساده شود. --- # Assignment Flow Manager نباید وارد workflow پیچیده Admin شود. Flow پیشنهادی: ```text Who? ↓ What learning? ↓ Deadline ↓ Notification ↓ Review ↓ Assign ``` --- # STEP 1 — Audience Manager بتواند انتخاب کند: ```text Whole Team Specific employees Sub-team ``` فقط در Scope مجاز. --- # STEP 2 — Learning Manager فقط محتوایی را ببیند که برای assignment مجاز است. مثلاً: ```text Published Courses Learning Paths Mandatory Learning ``` Draft یا private course در صورت عدم Permission نمایش داده نشود. --- # STEP 3 — Deadline انتخاب: ```text No deadline Specific date Relative deadline ``` مثلاً: ```text Complete within 14 days ``` اگر backend support می‌کند. --- # STEP 4 — Notification گزینه‌های مناسب: ```text Notify learner now Reminder before deadline Reminder on deadline Reminder if not started ``` --- # Push Notification Readiness Architecture را طوری طراحی کن که Notification Service بعداً بتواند به: ```text Web PWA Android APK FCM ``` وصل شود. ولی اگر FCM هنوز پیاده‌سازی نشده، mock یا fake production integration ایجاد نکن. Integration point تمیز ایجاد کن. --- # Notification Preferences به تنظیمات notification کاربر احترام بگذار. Notificationهای mandatory و optional را تفکیک کن. --- # Assignment Confirmation قبل از Assign خلاصه واضح بده: ```text Course: Workplace Safety Audience: 12 employees Deadline: September 10 Notifications: Immediate + 3 days before deadline ``` --- # Success State بعد از Assignment: ```text Learning assigned successfully 12 learners assigned 12 notifications scheduled ``` اگر بخشی fail شده، partial failure را واضح گزارش کن. --- # Deadline Management Manager در صورت Permission بتواند: ```text Extend deadline Remove deadline ``` کند. Bulk extension نیز در صورت نیاز واقعی. --- # Reminder Action در Team / Assignment view: ```text Send reminder ``` وجود داشته باشد. از duplicate notification جلوگیری کن. --- ## Acceptance Criteria Phase 3 * Assignment workflow ساده است. * Scope رعایت می‌شود. * Deadline management صحیح است. * Notification architecture آماده است. * Error و partial failure مدیریت می‌شود. * duplicate assignments کنترل شده. * tests وجود دارند. بعد متوقف شو. --- # PHASE 4 — Skills, Insights, Reports & Approvals ## هدف Manager فقط Progress نبیند؛ بتواند تصمیم مدیریتی بگیرد. --- # Skills Dashboard صفحه Skills برای Manager team-specific باشد. نمایش: ```text Team skill level Skill gaps Improving skills Critical gaps ``` --- # Skill Visualization مثلاً: ```text Communication 82% Leadership 68% Excel 54% Safety 91% ``` عددها فقط اگر مدل داده واقعاً آنها را پشتیبانی می‌کند. --- # Skill Gap Manager بتواند ببیند: ```text Skill Required level Current level Gap Affected employees ``` --- # Learning Recommendation اگر سیستم recommendation واقعی دارد: ```text Suggested learning ``` نمایش بده. اگر ندارد، recommendation جعلی نساز. در صورت امکان rule-based recommendation را جداگانه پیاده‌سازی کن. --- # Manager Insights یک بخش: ```text بینش‌های این هفته ``` ایجاد کن. Insights باید از داده واقعی derive شوند. مثال: ```text Completion rate increased 8% 3 learners inactive for more than 7 days Workplace Safety has the lowest completion rate Communication is the largest team skill gap ``` --- # No Fake AI Insightهای ساده را به اسم AI نمایش نده. اگر AI واقعاً تحلیل می‌کند، مشخص باشد. اگر rule-based است، به‌عنوان Insight نمایش داده شود. --- # Reports Manager Reportها باید team-scoped باشند. پیشنهاد: ```text Team Learning Overview Course Completion Assignment Status Assessment Performance Skills Gap Engagement ``` --- # Filters گزارش‌ها حداقل: ```text Date Course Learning Path Employee Team/Subteam Status ``` در حد Permission مدیر. --- # Export اگر سیستم export دارد: ```text Excel CSV PDF ``` Manager فقط داده Scope خودش را export کند. --- # Approvals اگر Approval Workflow وجود دارد، صفحه: ```text تأییدها ``` فقط کارهای مربوط به Manager را نشان دهد. مثلاً: ```text Learning request Deadline extension Course enrollment Certificate approval ``` بسته به قابلیت واقعی محصول. --- # Approval UX هر Approval: ```text Requester Request Reason Date Relevant context Approve Reject ``` Reject باید در صورت نیاز Reason داشته باشد. --- ## Acceptance Criteria Phase 4 * Skills team-scoped هستند. * Skill gaps واضح‌اند. * Insights actionable هستند. * Reportها team-scoped هستند. * Export امن است. * Approvals واضح و permission-aware هستند. * fake metric یا fake AI وجود ندارد. بعد متوقف شو. --- # PHASE 5 — Responsive, Security, QA & Final Manager Polish ## هدف Manager Experience را برای Release آماده کن. --- # Responsive QA حداقل viewportهای زیر: ```text 375 430 768 1024 1280 1440 ``` را بررسی کن. --- # Mobile Manager Experience Mobile نباید نسخه shrink شده Desktop باشد. Navigation: ```text Drawer ``` یا navigation مناسب role. Dashboard روی موبایل: ```text Needs Attention ↓ Quick Actions ↓ KPIs ↓ Team ↓ Deadlines ``` اولویت اطلاعات را تغییر بده. --- # Tables در Mobile صرفاً horizontal scroll ایجاد نکن. از: ```text Column priority Card representation Expandable row ``` استفاده کن. --- # Quick Actions on Mobile Manager باید بتواند از گوشی: ```text View team Send reminder Assign course Review approval Check progress ``` را انجام دهد. --- # Accessibility بررسی کن: ```text Keyboard Focus ARIA Labels Dialogs Drawers Tables Forms Color contrast RTL Screen reader semantics ``` --- # Security Recheck دوباره بررسی کن: ```text IDOR Role escalation Team scope bypass URL manipulation API parameter manipulation Export leakage ``` Frontend hiding را Security Control محسوب نکن. --- # Performance Manager Dashboard ممکن است چند Widget داشته باشد. بررسی کن: ```text duplicate API requests N+1 backend queries large payloads unnecessary polling over-fetching unnecessary renders ``` برای Dashboard در صورت نیاز endpoint تجمیعی بهینه طراحی کن، اما فقط اگر bottleneck واقعی وجود دارد. --- # Loading States از Skeleton استفاده کن. هر Widget باید: ```text Loading Empty Error Success ``` داشته باشد. خرابی یک Widget نباید کل Dashboard را از کار بیندازد مگر dependency واقعی وجود داشته باشد. --- # RTL / LTR فارسی: ```text RTL ``` انگلیسی: ```text LTR ``` Table alignment، icons، arrows و breadcrumbs را بررسی کن. --- # Dark Mode تمام Manager pages را بررسی کن. به‌خصوص: ```text Charts Tables Status badges Empty states Filters Dialogs ``` --- # Final Test Flow حداقل این Scenarioها را اجرا کن. ## Scenario 1 ```text Manager Login → Dashboard → View Needs Attention → Employee → Send Reminder ``` ## Scenario 2 ```text Manager → My Team → Employee → Learning Profile ``` ## Scenario 3 ```text Manager → Assign Learning → Whole Team → Set Deadline → Notify → Confirm ``` ## Scenario 4 ```text Manager → Skills → Skill Gap → Affected Employees ``` ## Scenario 5 ```text Manager → Reports → Filter → Export ``` ## Scenario 6 ```text Manager → Approvals → Review → Approve / Reject ``` --- # Unauthorized Tests تست کن Manager نتواند: ```text open other team's employee read other team's progress assign learning to unauthorized user access admin settings access Builder access AI Studio unless explicitly permitted export organization-wide data ``` --- # Final Quality Gate Frontend: ```bash npm run lint npm run typecheck npm test npm run build ``` Backend: ```bash php artisan test ``` و تست‌های authorization مربوط به Manager را حتماً اجرا کن. --- # Final Report در انتهای Phase 5 گزارش بده. ## Manager Architecture چه چیزهایی تغییر کرده؟ ## Permissions چه محدودیت‌هایی اضافه یا اصلاح شده؟ ## Dashboard چه تغییراتی انجام شده؟ ## My Team چه تغییراتی انجام شده؟ ## Assignments چه تغییراتی انجام شده؟ ## Notifications چه چیزی آماده یا پیاده‌سازی شده؟ ## Skills چه تغییراتی انجام شده؟ ## Reports چه تغییراتی انجام شده؟ ## Approvals چه تغییراتی انجام شده؟ ## Responsive چه تغییراتی انجام شده؟ ## Security چه مواردی بررسی یا اصلاح شده؟ --- # Test Results Backend: ```text Tests: Assertions: Failures: ``` Frontend: ```text Test Files: Tests: Lint: Typecheck: Build: ``` --- # Remaining Manager Technical Debt فقط مشکلات واقعی باقی‌مانده را ثبت کن. Severity: ```text High Medium Low ``` --- # Manager Experience Score به موارد زیر از 10 امتیاز بده: ```text Navigation Dashboard Team Management Learning Assignment Notifications Skills Reports Approvals Mobile UX Accessibility Security Performance ``` و در نهایت: ```text Manager Experience Score: XX/100 ``` --- # اجرای دقیق فازها ```text PHASE 0 Role & Permission Audit ↓ PHASE 1 Manager Shell & Dashboard ↓ PHASE 2 My Team & Learning Profiles ↓ PHASE 3 Assignments, Deadlines & Notifications ↓ PHASE 4 Skills, Insights, Reports & Approvals ↓ PHASE 5 Responsive, Security & Final QA ``` ## قانون آخر هر Phase را کامل کن. Test کن. `git diff` را بررسی کن. فایل‌های تغییرکرده را گزارش بده. Regressionها را رفع کن. سپس متوقف شو. **بدون دستور صریح من وارد Phase بعد نشو.** # SUPPLEMENTARY PROMPT ## MicroLearning — Learner Android APK + Native Push Notifications + Manager PWA Notifications این Prompt مکمل Promptهای قبلی **Learner** و **Manager** است. قوانین Safety، Scope Lock، Minimum Necessary Change، Regression Testing و Working Code Is Sacred که در Promptهای اصلی تعریف شده‌اند، همچنان لازم‌الاجرا هستند. هیچ بخش سالمی صرفاً برای اجرای این قابلیت‌ها بازنویسی نشود. --- # PART A — LEARNER PROMPT EXTENSION Prompt فعلی Learner دارای Phase 0 تا Phase 5 است. دو Phase جدید زیر را بعد از Phase 5 اضافه کن: ```text PHASE 6 Android APK with Capacitor PHASE 7 Native Push Notifications with Firebase Cloud Messaging ``` ترتیب نهایی Learner: ```text PHASE 0 Critical Stabilization ↓ PHASE 1 Learning Paths + Resume ↓ PHASE 2 Course Player + Assessments ↓ PHASE 3 Offline + PWA ↓ PHASE 4 Progress + Certificates + Notifications ↓ PHASE 5 APK Readiness + QA ↓ PHASE 6 Android APK with Capacitor ↓ PHASE 7 FCM Native Push Notifications ``` --- # PHASE 6 — Android Learner APK with Capacitor ## هدف Learner PWA فعلی را بدون ایجاد Frontend جدید به Android Application واقعی تبدیل کن. قانون معماری: ```text ONE LEARNER SOURCE CODE React Learner │ ├── Web ├── PWA └── Capacitor Android ``` به هیچ عنوان یک React App، Flutter App یا Android UI مستقل برای Learner نساز. --- ## 1. Capacitor Integration نسخه‌های dependencyهای فعلی را بررسی کن و نسخه سازگار Capacitor را انتخاب کن. Dependency upgrade unrelated انجام نده. Android Platform را به پروژه اضافه کن. ساختار باید به‌صورت استاندارد باشد: ```text frontend/ src/ dist/ capacitor.config.* android/ ``` از build output فعلی Vite استفاده کن. --- ## 2. Learner-Only Android Experience APK باید تجربه Learner را ارائه کند. نباید به‌صورت پیش‌فرض navigation مربوط به: ```text Super Admin Course Designer Course Builder AI Studio Platform Administration ``` نمایش دهد. اگر همان User چند Role دارد، رفتار را از architecture واقعی Role Switching پروژه استخراج کن. امنیت را فقط با مخفی کردن menu پیاده‌سازی نکن. Backend authorization همچنان Source of Truth است. --- ## 3. API Configuration هیچ URL مانند: ```text localhost 127.0.0.1 ``` در Production APK hard-code نشود. Environmentهای واقعی را پشتیبانی کن: ```text Development Staging Production On-Premise ``` Configuration باید از روش استاندارد پروژه گرفته شود. --- ## 4. On-Premise Support MicroLearning ممکن است روی Server داخلی سازمان نصب شود. Android App باید بتواند به Endpoint سازمان متصل شود. Architecture را طوری طراحی کن که Server/Base URL قابل configuration امن باشد اگر Business Model پروژه نیاز دارد. Validation انجام بده: ```text HTTPS preferred Valid hostname No malformed URL Connection test ``` در Production اتصال insecure را بدون تصمیم صریح Business/Security مجاز نکن. --- ## 5. Authentication Authentication فعلی را برای Capacitor بررسی کن. Token/Session نباید در storage ناامن نگهداری شود. بررسی کن: ```text Login Logout Session expiry Token refresh if applicable 401 handling Multiple accounts Organization context ``` بعد از Logout داده Authentication و داده خصوصی local پاک یا isolate شود. --- ## 6. Native Back Button Android Back Button باید رفتار طبیعی داشته باشد. مثلاً: ```text Course Player → Previous App Screen Drawer Open → Close Drawer Modal Open → Close Modal ``` نباید با اولین Back کل App بسته شود. در Root Screen در صورت لزوم رفتار native مناسب داشته باش. --- ## 7. Deep Linking Foundation زیرساخت Deep Link ایجاد کن. هدف: ```text microlearning://learning/{assignmentId} ``` و ترجیحاً: ```text microlearning://learning/{assignmentId}/lesson/{lessonId} ``` در صورت استفاده از App Links: ```text https://learn.example.com/app/... ``` نیز architecture آماده باشد. Deep Link باید بعد از Authentication به destination صحیح منتقل شود. --- ## 8. Native Safe Areas بررسی کن: ```text Status Bar Navigation Bar Display Cutout Notch Gesture Area Keyboard ``` UI نباید زیر عناصر system قرار بگیرد. CSS safe-area را برای: ```text env(safe-area-inset-top) env(safe-area-inset-bottom) ``` در صورت نیاز صحیح استفاده کن. --- ## 9. Android Keyboard روی: ```text Login Notes Discussion Assessment Search Forms ``` بررسی کن Keyboard باعث مخفی شدن input یا CTA نشود. --- ## 10. External Links External URLها را audit کن. تصمیم واضح داشته باش: ```text Internal route → App External trusted URL → System browser ``` رفتار ناخواسته WebView ایجاد نکن. --- ## 11. Downloads این موارد را بررسی کن: ```text Certificates Documents Course resources ``` اگر download در Web کار می‌کند، رفتار Android را نیز تست کن. برای Certificate باید حداقل امکان: ```text Open Download Share ``` در صورت پشتیبانی platform وجود داشته باشد. --- ## 12. Sharing برای موارد مناسب abstraction ایجاد کن: ```text Certificate Course link Achievement ``` در Android از Native Share در صورت نیاز استفاده کن و Web fallback حفظ شود. --- ## 13. Network Awareness App باید وضعیت شبکه را تشخیص دهد. Stateهای حداقل: ```text Online Offline Reconnecting ``` Offline Learning Phase 3 باید همچنان کار کند. Capacitor integration نباید Offline/PWA architecture را خراب کند. --- ## 14. Splash Screen Splash Screen حرفه‌ای ولی کوتاه باشد. از نمایش Splash طولانی و مصنوعی جلوگیری کن. Branding موجود پروژه را reuse کن. --- ## 15. App Icon Android launcher icon و adaptive icon استاندارد ایجاد کن. از asset برند فعلی MicroLearning استفاده کن. Icon جدید unrelated طراحی نکن مگر asset مناسب موجود نباشد. --- ## 16. Status Bar Status Bar با: ```text Light Theme Dark Theme ``` هماهنگ شود. --- ## 17. PWA Must Continue Working بعد از اضافه شدن Capacitor این موارد نباید خراب شوند: ```text Web PWA Install Service Worker Offline Downloads Responsive UI Desktop Learner ``` APK نباید باعث fork شدن codebase شود. --- ## 18. Android Build Debug APK بساز. در صورت آماده بودن signing configuration، release build architecture را نیز آماده کن. Secret signing key را commit نکن. --- ## 19. GitHub Actions Readiness در صورت وجود GitHub Actions، pipeline جدا برای Android ایجاد کن یا readiness آن را اضافه کن. هدف آینده: ```text Frontend Test ↓ Frontend Build ↓ Capacitor Sync ↓ Android Build ↓ APK Artifact ``` اما CI موجود را بدون ضرورت بازنویسی نکن. --- ## PHASE 6 ACCEPTANCE CRITERIA Phase 6 فقط وقتی Complete است که: ```text React Web works PWA works Android project builds APK installs Login works Learner Home works Course Player works Assessments work Resume works Offline works Certificates work Android Back works Dark Mode works RTL works LTR works ``` و هیچ Frontend دوم ایجاد نشده باشد. --- # PHASE 7 — Native Push Notifications with FCM ## هدف Learner Android App باید Notification واقعی Android دریافت کند. حتی وقتی App در foreground نیست. Architecture مقصد: ```text MicroLearning Backend ↓ Notification Domain Event ↓ Notification Service ↓ Laravel Queue ↓ Firebase Cloud Messaging ↓ Android App ↓ Native Android Notification ``` --- # 1. Notification Architecture Notification logic را داخل Controllerها پراکنده نکن. Architecture ترجیحی: ```text Domain Event ↓ Notification Orchestrator ↓ Channel ``` Channelها: ```text InAppChannel PushChannel EmailChannel ``` Web Push در آینده قابل اضافه شدن باشد. --- # 2. Device Registration Backend باید Deviceهای User را مدیریت کند. مدل مناسب طراحی کن. مثلاً: ```text user_devices ``` فیلدهای منطقی: ```text id user_id organization_id platform device_identifier push_token enabled last_seen_at created_at updated_at ``` نام نهایی را با conventions پروژه هماهنگ کن. --- # 3. Multiple Devices یک User ممکن است: ```text Phone Tablet Second Phone ``` داشته باشد. Notification architecture باید Multiple Device را پشتیبانی کند. --- # 4. Token Registration بعد از دریافت FCM Token: ```text Android App ↓ Authenticated API ↓ Register Device Token ``` Backend ownership را verify کند. --- # 5. Token Refresh FCM Token ممکن است تغییر کند. Token refresh باید به Backend sync شود. Duplicate token ایجاد نکن. --- # 6. Logout هنگام Logout: Device registration مربوطه disable یا unregister شود. User قبلی نباید Notification User جدید را دریافت کند. --- # 7. Android 13+ Permission برای Androidهایی که Permission لازم دارند: ```text POST_NOTIFICATIONS ``` را صحیح مدیریت کن. Permission را بلافاصله و بدون context درخواست نکن. UX پیشنهادی: ```text اعلان‌های یادگیری را فعال کنید مهلت دوره‌ها، آموزش‌های جدید و گواهی‌های صادرشده را از دست ندهید. [فعال کردن اعلان‌ها] [بعداً] ``` از Dialog/Component استاندارد پروژه استفاده کن. --- # 8. Notification Channels Android Notification Channels ایجاد کن. حداقل: ```text Learning Deadlines Certificates System ``` در صورت نیاز: ```text Assignments Reminders ``` اما Channelهای بسیار زیاد نساز. --- # 9. Learner Notification Types حداقل Eventهای زیر را بررسی و در صورت support Backend پیاده‌سازی کن: ```text Course Assigned Learning Path Assigned Mandatory Learning Assigned Deadline Approaching Due Today Overdue Continue Learning Reminder Assessment Available Course Completed Certificate Issued Important Organization Announcement ``` --- # 10. Notification Preferences به Preference واقعی User احترام بگذار. مثلاً: ```text New assignments Deadline reminders Daily reminders Certificates Organization announcements ``` Notificationهای security/critical system در صورت Business Rule می‌توانند سیاست متفاوت داشته باشند. --- # 11. Scheduled Reminders Reminderها از queue/scheduler ارسال شوند. برای مثال: ```text 3 days before deadline 1 day before deadline Due today Overdue ``` از Request synchronous برای ارسال bulk notification استفاده نکن. --- # 12. Duplicate Protection یک Notification نباید به دلیل Retry Queue چندبار برای یک Event ارسال شود. Idempotency مناسب ایجاد کن. مثلاً بر اساس: ```text user event assignment notification type scheduled window ``` --- # 13. Deep Link on Notification Tap هر Push باید در صورت نیاز مقصد داشته باشد. مثلاً: ### Course Assigned ```text Notification ↓ My Learning ↓ Course ``` ### Deadline ```text Notification ↓ Assignment ↓ Resume Lesson ``` ### Certificate ```text Notification ↓ My Certificates ↓ Certificate ``` --- # 14. Foreground Behavior اگر App باز است، Notification نباید UX آزاردهنده ایجاد کند. در صورت مناسب بودن: ```text In-app banner / toast ``` و در background: ```text Native notification ``` --- # 15. Notification History Push Notification باید در صورت منطقی بودن با Notification Center داخل App هماهنگ باشد. یعنی Notification دریافت‌شده فقط ephemeral نباشد. User بتواند بعداً در: ```text Notifications ``` آن را مشاهده کند. --- # 16. Read / Unread Notification Center: ```text Unread Read Mark as read Mark all as read ``` داشته باشد در صورت support فعلی. --- # 17. Security هر Notification Payload را حداقل‌گرا نگه دار. Sensitive data را مستقیماً داخل Push Payload قرار نده. مثلاً اطلاعات خصوصی ارزیابی یا اطلاعات حساس Employee ارسال نشود. Push فقط context identifier امن ارسال کند و App داده اصلی را از API مجاز دریافت کند. --- # 18. FCM Credentials Firebase credential: ```text .env Secret Manager Server Configuration ``` باشد. هیچ: ```text Private Key Server Key Service Account Secret ``` در repository commit نشود. --- # 19. Failure Handling FCM responseها را مدیریت کن. برای Tokenهای: ```text Invalid Expired Unregistered ``` Device token را disable/remove کن. --- # 20. Observability حداقل بتوانیم بفهمیم: ```text Queued Sent to FCM Failed Invalid token ``` ولی Delivery قطعی را اگر FCM چنین اطلاعاتی نداده، جعلی نمایش نده. --- # 21. Push Tests حداقل تست: ```text User A notification → User A devices only ``` ```text User B → Must not receive User A notification ``` ```text Disabled preference → Optional notification not sent ``` ```text Invalid token → Safely disabled ``` ```text Logout → Device no longer receives private push ``` ```text Notification tap → Correct deep link ``` --- # PHASE 7 ACCEPTANCE CRITERIA Phase 7 زمانی Complete است که: ```text FCM connected Device registration works Token refresh works Logout cleanup works Android permission works Native notification works Background notification works Notification channels work Preferences work Deep linking works Duplicate push protection works Notification center stays consistent Security tests pass ``` --- # LEARNER FINAL QUALITY GATE — UPDATED پس از Phase 7 حتماً این Flow را تست کن: ```text Learner Login ↓ Device Registered ↓ Course Assigned ↓ App Closed ↓ Native Notification Received ↓ Tap Notification ↓ App Opens ↓ Correct Course ↓ Correct Resume Location ``` و: ```text Deadline Reminder ↓ Native Notification ↓ Tap ↓ Assignment ↓ Continue Learning ``` و: ```text Course Complete ↓ Certificate Issued ↓ Native Notification ↓ My Certificates ``` --- # UPDATED LEARNER RELEASE STATUS در گزارش نهایی یکی از این وضعیت‌ها را بده: ```text NOT READY PWA PRODUCTION READY ANDROID DEBUG READY ANDROID RELEASE READY WITH CONDITIONS ANDROID PRODUCTION READY ``` --- # PART B — MANAGER PROMPT EXTENSION Prompt Manager فعلی Phase 0 تا Phase 5 دارد. یک Phase جدید اضافه کن: ```text PHASE 6 Manager PWA & Push/Web Notification Experience ``` ترتیب نهایی: ```text PHASE 0 Role & Permission Audit ↓ PHASE 1 Manager Shell & Dashboard ↓ PHASE 2 My Team & Learning Profiles ↓ PHASE 3 Assignments, Deadlines & Notifications ↓ PHASE 4 Skills, Insights, Reports & Approvals ↓ PHASE 5 Responsive, Security & Final QA ↓ PHASE 6 Manager PWA & Notifications ``` --- # PHASE 6 — Manager PWA & Notification Experience ## هدف Manager Panel علاوه بر Desktop/Web، روی موبایل نیز به‌صورت PWA قابل استفاده باشد. برای Manager فعلاً Android APK مستقل نساز. Architecture: ```text Manager React Experience ↓ Web + Installable PWA ``` --- # 1. PWA Availability Manager بتواند در browserهای پشتیبانی‌شده PWA را Install کند. PWA Shell باید Role-aware باشد. وقتی Manager وارد می‌شود: ```text Manager Dashboard ``` نمایش داده شود، نه Learner Home. --- # 2. Role Combination اگر Manager خودش Learner هم هست، Role Switching یا Experience Switching فعلی پروژه را بررسی کن. راه‌حل جدید duplicate نساز. در صورت وجود switching استاندارد: ```text Manager Mode Learner Mode ``` را حفظ کن. --- # 3. Manager Mobile Priorities PWA Manager روی موبایل باید حداقل این Actions را عالی پشتیبانی کند: ```text View Needs Attention View My Team View Employee Learning Send Reminder Assign Learning Review Deadline Approve Request View Team Progress ``` Course Builder و Admin Toolهای unrelated را وارد PWA Manager نکن. --- # 4. Manager In-App Notifications Notification Center برای Manager category-aware باشد. نمونه: ```text Team Learning Deadlines Approvals Skill Alerts Reports System ``` --- # 5. Manager Notification Events در صورت وجود داده واقعی، Manager بتواند Notification دریافت کند برای: ```text Team member overdue Mandatory course not started Team deadline approaching Approval requested Learning request received Assignment completed Critical skill gap alert Weekly learning summary ready ``` Insight ساده را بی‌دلیل Push نکن. Notification fatigue ایجاد نکن. --- # 6. Immediate vs Digest همه Eventها Push فوری نباشند. تقسیم‌بندی منطقی: ```text Immediate: Critical overdue Approval needing action Important assignment issue ``` ```text Digest: Team learning summary Weekly progress General insights ``` --- # 7. Manager Notification Preferences Manager بتواند تنظیم کند: ```text Team deadline alerts Overdue alerts Approval requests Learning activity Weekly summary ``` --- # 8. Web Push اگر infrastructure Web Push پروژه آماده و قابل اتکا است، Manager PWA بتواند Web Push واقعی دریافت کند. اگر هنوز زیرساخت Web Push وجود ندارد: Fake implementation ایجاد نکن. Architecture Notification Channel را طوری نگه دار که Web Push بعداً اضافه شود. --- # 9. Shared Notification Backend Notification Business Rules را بین: ```text Learner APK Manager PWA In-App Notification Center ``` duplicate نکن. Architecture: ```text Domain Event ↓ Notification Service ↓ Recipient Resolution ↓ Preferences ↓ Channels ``` Channels: ```text In-App FCM Web Push Email ``` باید قابل توسعه باشند. --- # 10. Manager Assignment Notification Integration وقتی Manager در Phase 3 دوره‌ای تخصیص می‌دهد: ```text Manager ↓ Assign Course ↓ Learners ↓ Notification Event ↓ In-App + FCM according to preference ``` در صورت APK Learner. Manager نباید خودش مستقیم FCM API را فراخوانی کند. --- # 11. Manager Reminder Action Action: ```text Send Reminder ``` باید از همان Notification Service استفاده کند. نه implementation جداگانه. قبل از ارسال bulk reminder خلاصه نشان بده: ```text 12 learners Course: Workplace Safety Channel: In-App + Push [Send Reminder] ``` --- # 12. Rate / Spam Protection Manager نباید بتواند ناخواسته پشت سر هم Pushهای مشابه برای یک Team ارسال کند. برای Reminder: ```text cooldown duplicate detection authorization ``` در نظر بگیر. --- # 13. Team Scope Notification recipientها حتماً Backend-scoped باشند. Manager با دستکاری Request نباید بتواند برای افراد خارج از Team مجاز خودش Push ارسال کند. --- # 14. Notification Audit عملیات مهم Manager مثل: ```text Bulk reminder sent Assignment notification triggered Deadline changed ``` در صورت وجود Audit architecture ثبت شود. --- # 15. PWA Responsive QA بررسی: ```text 360 375 390 430 768 ``` Manager PWA روی mobile نباید desktop table shrink شده باشد. --- # MANAGER PHASE 6 ACCEPTANCE CRITERIA ```text Manager PWA installable Manager route correct Mobile dashboard works Team actions work Notifications permission-aware Reminder action uses shared service Team scope enforced Duplicate reminder protection works Learner FCM integration compatible No separate Manager APK created ``` --- # PART C — SHARED NOTIFICATION ARCHITECTURE این بخش برای هر دو Prompt الزامی است. نباید برای Manager و Learner دو سیستم Notification جدا ساخته شود. Architecture مقصد: ```text MicroLearning │ Domain/Application Events │ Notification Service │ ┌───────────┼───────────┐ │ │ │ In-App Push Email │ ┌────────┴────────┐ │ │ FCM Web Push │ │ Learner APK Manager PWA ``` --- # Recipient Resolution Notification Service باید خودش مشخص کند Recipient چه کسی است. مثلاً: ```text Course Assigned → Learner ``` ```text Deadline approaching → Learner ``` ```text Employee overdue → Authorized Manager ``` ```text Approval requested → Manager ``` --- # Preferences Flow: ```text Event ↓ Recipient ↓ Permission / Scope ↓ Notification Preference ↓ Channel ↓ Queue ↓ Delivery ``` --- # Queue First ارسال Notificationهای خارجی را synchronous داخل user request انجام نده. از Queue استفاده کن. Failure FCM/Web Push نباید عملیات اصلی مثل: ```text Assign Course Complete Course Issue Certificate ``` را rollback کند مگر business rule صریحی وجود داشته باشد. --- # Notification Taxonomy یک taxonomy استاندارد داشته باش. مثلاً: ```text learning.assigned learning.reminder learning.deadline_soon learning.overdue learning.completed assessment.available certificate.issued manager.approval_requested manager.team_overdue manager.weekly_summary system.announcement ``` Naming را با conventions فعلی پروژه تطبیق بده. --- # Notification Payload Payload استاندارد داشته باش: ```text type title body recipient entityType entityId deepLink createdAt ``` Sensitive information اضافه نکن. --- # Shared Deep Links Learner: ```text /course /lesson /certificate /notification ``` Manager: ```text /team/member /assignment /approval /report ``` هم Web و هم Native باید از destination منطقی مشترک استفاده کنند. --- # FINAL SAFETY RULE برای اضافه کردن Capacitor، FCM یا PWA Notification: **هیچ‌یک از فازهای قبلی را دوباره Refactor نکن مگر integration واقعاً به تغییر آن نیاز داشته باشد.** اگر integration نیازمند تغییر گسترده شد: ```text STOP ``` و قبل از ادامه گزارش بده: ```text Integration blocker: Why: Affected modules: Risk: Minimum viable fix: Alternative: ``` --- # UPDATED EXECUTION ORDER ترتیب پیشنهادی نهایی برای این دو بخش: ```text LEARNER PHASE 0–5 ↓ LEARNER PHASE 6 Android APK ↓ LEARNER PHASE 7 FCM Push ↓ MANAGER PHASE 0–5 ↓ MANAGER PHASE 6 PWA + Manager Notifications ``` اگر Manager Phaseهای 0–5 قبلاً انجام شده‌اند، مستقیماً Phase 6 را اجرا کن. **هیچ Phase را بدون دستور صریح من شروع نکن. پس از هر Phase تست کن، گزارش بده و متوقف شو.**