New_Micro_Learning/Prompt/Manager.md

3247 خطوط
46 KiB
Markdown
خام پیوند همیشگی سرزنش تاریخچه

مخزن ambiguous runes header

راهنمای مخزن ambiguous runes توضیحات

# 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 05
LEARNER PHASE 6
Android APK
LEARNER PHASE 7
FCM Push
MANAGER PHASE 05
MANAGER PHASE 6
PWA + Manager Notifications
```
اگر Manager Phaseهای 05 قبلاً انجام شده‌اند، مستقیماً Phase 6 را اجرا کن.
**هیچ Phase را بدون دستور صریح من شروع نکن. پس از هر Phase تست کن، گزارش بده و متوقف شو.**