Motoshub · Delivery Plan · Front
همهی تسکهای فرانت با subtask، تخمین، User Story و معیار پذیرش. مرجع رفتار: demo.shub.ir · خط لولهی الزامی تحویل: فرآیند تحویل و کیفیت · تسکهای Backend
libs/axios.ts با baseURL=/api/v1؛ فرانت نباید بداند پاسخ از PHP است یا Django.[module, list, params] / [module, id]) ← کامپوننت. invalidation بعد از هر mutation. حالتهای loading=اسکلتون، empty=EmptyState، error=پیام+retry برای هر فهرست الزامی است.دو مسیرِ موازی. Front از فاز ۱ بهبعد به قراردادِ api/v1 روی PHP وصل میشود و منتظرِ Django نمیماند؛ Backend بهموازات همان قرارداد را در Django بازمیسازد و Gateway هر مسیرِ آماده را سوییچ میکند.
API مخزن هست ولی روی production مستقر نیست؛ امروز ۱۱ منبع از ۵۵ پاسخ میدهند: auth · users · blogs · news · groups · events · photos · albums · videos · forum · files.
| فاز | محتوا | Front | Backend | موازی |
|---|---|---|---|---|
| ۰ | پایه: axios/design-system · REST-infra/auth-JWT/deploy/data-model | ۵.۵ روز | ۹ روز | ~۹ روز |
| ۱ | احراز هویت، پوسته و ناوبری، لایهی داده · endpointهای auth + مدلها | ۹.۵ روز | ۶ روز | ~۱۰ روز |
| ۲ | هسته: داشبورد، تازهها، بلاگ، کاربران/پروفایل | ۱۷ روز | ۱۳ روز | ~۱۷ روز |
| ۳ | اجتماعی: گروهها، اخبار، رویدادها، رسانه، فروم | ۱۸.۵ روز | ۲۵ روز | ~۲۵ روز |
| ۴ | ارتباط: چت، دانش، پروژه · پیامرسان، دوستان/اعلان، دانش/پروژه | ۱۵.۵ روز | ۱۶ روز | ~۱۶ روز |
| ۵ | سازمانی: قرارداد/صندوق/پژوهش/آموزش · نظرسنجی/مسابقات | ۸ روز | ۱۳ روز | ~۱۳ روز |
| ۶ | راهبری، ظاهر، گزارش، اعلان، جستجو، راهنما، دستیار، پولیش، تست | ۱۶ روز | ۴ روز | ~۱۶ روز |
| مجموع (تکنفره، بدون همپوشانی) | ~۹۰ روز | ~۸۶ روز | ~۱۰۶ روز | |
| ترکیب تیم | MVP (فاز ۰-۲) | پروتوتایپ کامل | ملاحظات |
|---|---|---|---|
| ۱ Front + ۱ Backend | ~۹-۱۰ هفته | ~۲۲-۲۶ هفته | ارزانترین؛ ریسک گلوگاه تکنفره و ریزش. توصیه نمیشود. |
| ۲ Front + ۲ Backend (خط پایه) | ۵-۶ هفته | ۱۳-۱۶ هفته | ترکیب فعلی. هر فاز دو workstream موازی؛ review متقابل ممکن است. |
| ۲F + ۲B + ۱ نفر QA/تستخودکار | ۵-۶ هفته | ۱۲-۱۴ هفته | زمان زیاد کم نمیشود اما دوبارهکاری و باگِ برگشتی بهشدت کم میشود؛ پیشنهاد PO. |
| ۳ Front + ۳ Backend + QA | ۴-۵ هفته | ۹-۱۱ هفته | بازده نزولی: مسیر بحرانی (auth→چت realtime→گزارش) کوتاهتر از این نمیشود. |
| تیم واقعی: ۴F + ۳B + ۱QA + ۱DevOps | ~۴ هفته | ~۹-۱۱ هفته | ترکیب فعلی ما. DevOps تسکهای B3/استقرار/CI را برمیدارد و Backend خالص فیچر میزند؛ QA از هفتهی ۱ گیتهای ۸ و ۹ پایپلاین را مالک است. |
| نقش | مالکیت (رشتهی کاری ثابت) | تسکها به ترتیب |
|---|---|---|
| Front ۱ (لید) | زیرساخت فرانت، auth، لایهی داده، سپس چت | F1 → F3 → F5 → F15 → F20.5 |
| Front ۲ | پوسته/ناوبری + هستهی محتوا | F2 → F4 → F6 → F7 → F8 |
| Front ۳ | فضاهای اجتماعی | F9 → F10 → F11 → F12 → F13 → F14 |
| Front ۴ | دانش/پروژه + ماژولهای سازمانی + راهبری | F16 → F17 → F18 → F19 → F20.1-3 |
| Backend ۱ (لید) | زیرساخت REST + auth مشترک + پیامرسان | B1 → B2 → B4 → B5 → B14 |
| Backend ۲ | هستهی محتوا: کاربران/فید/بلاگ/اخبار | B6 → B7 → B8 → B9 → B15 |
| Backend ۳ | اجتماعی + سازمانی: گروه/رویداد/رسانه/فروم → دانش/پروژه → سازمانی | B10 → B11 → B12 → B13 → B16 → B17 → B18 |
| QA | مالک گیتهای ۸-۹ پایپلاین: کالکشن Postman هر ماژول، تست قرارداد، E2E (Playwright) مسیرهای حیاتی، رگرسیون هفتگی | از هفته ۱ موازی با همه؛ B19.2 و F20.6 با اوست |
| DevOps | B3 کامل + CI enforcement + staging دو سرویس + مانیتورینگ/لاگ + بکاپ + سوییچ Gateway | B3 → CI هر دو ریپو → B19.3 → پایداری production |
پیشفرضهایی که هر دو تیم باید رعایت کنند تا کارها به هم برسند.
api/v1 کار میکند؛ نباید بداند پاسخ از PHP میآید یا Django. همهی مسیرها از libs/axios.ts با baseURL=/api/v1 و rewrite در next.config.ts.
OW_PASSWORD_PEPPER و claims {iat, exp, sub:userId}. Django باید همین را verify (و در فاز بعد صادر) کند، نه صرفاً خواندنِ ow_base_user_auth_token.
{data, links, meta} با meta.current_page/per_page/total؛ خطاها با کدهای 401/403/404/422 و بدنهی یکسان. مرجعِ فیلدها: Swagger روی motonext.shub.ir/api/v1/docs/index — که در راستیآزماییِ ۱۴۰۵/۰۵/۱۱ پاسخِ ۴۰۴ داد و باید بازگردانده شود (جزئیات). تا آن زمان مرجعِ فیلدها = کنترلرها و Resourceهای ow_plugins/*/src/Http در برنچ API..
پیشنیازِ هر چیزِ دیگر. بدون اینها هر تسکِ بعدی روی شن ساخته میشود. دو تیم موازی کار میکنند.
دو client موازی هست: libs/axios.ts (زنده) و services/apiClient.ts (مرده). باید یکی بماند، منبعِ همهی درخواستها شود و کدهای بلااستفاده حذف شوند.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F1.1 | حذف client مرده | حذف services/apiClient.ts؛ انتقالِ ارجاعها به libs/axios.ts | ۲ ساعت |
| F1.2 | حذف کد/وابستگیِ بلااستفاده | حذف jsonwebtoken، social/homepage/*، social/menu/*، libs/routes.ts کهنه | ۳ ساعت |
| F1.3 | پیکربندی پایهی axios | تثبیت baseURL/timeout، هدرهای پیشفرض، اتصالِ توکن از store در request interceptor | ۳ ساعت |
| F1.4 | ESLint/type-check سبز | رفعِ importهای شکسته، اجرای tsc --noEmit و lint | ۴ ساعت |
themeی Tailwind خالی است. توکنهای طراحیِ برگرفته از پروتوتایپ (رنگ/فاصله/شعاع/سایه/تایپ) و کامپوننتهای پایه ساخته شوند. طبقِ اصولِ طراحی: مقیاسِ تایپِ مشخص و هویتِ منطبق بر دامنهی سازمانی، نه پیشفرضِ جنریک.
EARS: هرگاه کاربر تمِ نمایش را تغییر دهد، سامانه باید کلِ رابط را بدون بارگذاری مجدد به تمِ انتخابی درآورد و انتخاب را ماندگار کند.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F2.1 | استخراج توکنها | استخراج پالت رنگ/فاصله/تایپ از پروتوتایپ → CSS variables + tailwind.config | ۶ ساعت |
| F2.2 | تایپوگرافی و فونت | مقیاس تایپ (وزن/عرض/فاصله)، فونت IRANYekan، RTL سراسری | ۴ ساعت |
| F2.3 | کامپوننتهای پایه | Button/Input/Select/Modal/Card/Badge/Toast/Skeleton/Table با variantها | ۱۲ ساعت |
| F2.4 | تمِ روشن/تیره | mountِ next-themes، دو تم، سوییچرِ ماندگار، اجتناب از flash | ۶ ساعت |
| F2.5 | حالتهای وضعیت | الگوهای loading/empty/error استاندارد | ۴ ساعت |
دروازهی ورود و اسکلتِ همهی صفحههای بعدی. تا اینجا تمام نشود، هیچ صفحهی محتوایی قابلِاتکا نیست.
login/register هست ولی response interceptor در libs/axios.ts no-op است، logout در useAuth.ts صرفاً stub است و هیچ middleware.tsای مسیرها را محافظت نمیکند.
EARS: هرگاه یک درخواستِ API با ۴۰۱ برگردد و refresh معتبر باشد، سامانه باید توکن را نو و همان درخواست را یکبار تکرار کند؛ در غیر اینصورت کاربر را به ورود هدایت کند.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F3.1 | منطق refresh | interceptor: بر ۴۰۱ فراخوانیِ POST /auth/refresh، صفبندیِ همزمان، retry یکباره، خروج بر شکست | ۸ ساعت |
| F3.2 | middleware مسیر | middleware.ts گاردِ /workspace/* و /social/*؛ ریدایرکتِ مهمان به /login?next= | ۵ ساعت |
| F3.3 | logout واقعی | ابطالِ سمتِ سرور، پاکسازیِ store و توکنها، ریدایرکت | ۳ ساعت |
| F3.4 | هیدریشنِ نشست | بازخوانیِ کاربر از GET /auth/me در بوت، همگامسازی با store پایدار | ۴ ساعت |
| F3.5 | ثبتنام و خطاها | اتصالِ فرمِ register، نمایشِ خطاهای ۴۲۲ فیلدی، loading | ۴ ساعت |
| F3.6 | تغییر رمز | UIِ PATCH /auth/change-password — توجه: این endpoint در api/v1 وجود ندارد (فقط auth/login، auth/me، auth/permissions موجود است)؛ پیشنیازش B4 است | ۴ ساعت |
/workspace باز شود، Then به /login با پارامترِ بازگشت هدایت شود./auth/* وصل شود).پروتوتایپ سایدباری با ~۲۰ برچسب دارد (components/Sidebar.tsx). پوستهی واکنشگرا با active-state، حالتِ موبایل و اسلاتِ محتوا ساخته شود تا صفحههای بعدی داخلش بنشینند.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F4.1 | Layout و گرید | layoutِ سهبخشی (سایدبار/هدر/محتوا)، اسکرول مستقل، RTL | ۴ ساعت |
| F4.2 | سایدبار | ~۲۰ آیتم منطبق بر پروتوتایپ، گروهبندی، آیکن، active-state از مسیر | ۶ ساعت |
| F4.3 | هدر | منوی پروفایل، زنگِ اعلان (badge)، جستجوی سراسری، سوییچرِ تم | ۵ ساعت |
| F4.4 | ناوبریِ موبایل | drawer/بستنِ خودکار، breakpointها، focus trap | ۴ ساعت |
| F4.5 | Breadcrumb و عنوان | عنوانِ صفحهی پویا و مسیر بر اساس روت | ۳ ساعت |
الان فقط useAuth و useBlogs واقعیاند؛ بقیه روی آرایهی mock با useState کار میکنند و حتی mock را mutate میکنند. یک الگوی تکرارپذیر (سرویس + hook) و ابزارهای مشترکِ TanStack Query ساخته شود تا هر بخشِ بعدی سریع و یکدست وصل شود.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F5.1 | پیکربندی QueryClient | defaultها (staleTime/retry)، devtools، مرزهای خطا | ۳ ساعت |
| F5.2 | الگوی سرویس | قالبِ services/api/<resource>.ts بر پایهی blogs.ts؛ typeها از قرارداد | ۴ ساعت |
| F5.3 | hookهای عمومی | useList/useDetail/useCreate/useUpdate/useDelete با کلیدِ کش و invalidation | ۶ ساعت |
| F5.4 | ابزارِ صفحهبندی/فیلتر | هوکِ مشترکِ pagination/filter منطبق بر meta؛ infinite/صفحهای | ۵ ساعت |
| F5.5 | مدیریت خطا و توست | نگاشتِ ۴۲۲ به خطای فیلدی، توستِ سراسری، optimistic اختیاری | ۴ ساعت |
پرتکرارترین بخشهایی که کاربر روزانه میبیند: داشبورد، تازهها، بلاگ، کاربران/پروفایل. رسیدن تا اینجا = «محصولِ قابلِنمایش».
/workspace و /social الان literalِ ثابتاند. ویجتهای واقعی از چند endpoint ساخته شوند. مرجع: pages/Dashboard.tsx.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F6.1 | ویجت فید | خلاصه از GET /feed، خالی/loading | ۶ ساعت |
| F6.2 | ویجت رویداد/اعلان | GET /events، GET /notifications | ۶ ساعت |
| F6.3 | ویجت آمار/میانبر | کارتهای آمار و میانبرهای سریع منطبق بر پروتوتایپ | ۵ ساعت |
| F6.4 | چیدمان واکنشگرا | گریدِ ویجتها، ترتیب موبایل، اسکلتون | ۴ ساعت |
/social/channels mock است. پیچیدهترین بخشِ فاز: کامپوزرِ انتشار با پیوست، دستهبندیِ انتشارِ عمومی (همان فیچرِ افزودهشده به پلاگین iisnewsfeedpin)، لایک/نظر/فوروارد و اسکرولِ بینهایت.
EARS: هرگاه کاربر مطلبی را «انتشار عمومی» کند، سامانه باید امکانِ انتخابِ دستهبندیِ درختی را بدهد و مطلب را با آن دسته در فیدِ عمومی نمایش دهد.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F7.1 | فهرست فید | اسکرول بینهایت از GET /feed، رندرِ انواع آیتم، اسکلتون | ۸ ساعت |
| F7.2 | کامپوزر انتشار | POST /feed: متن، منشن، پیشنمایشِ لینک | ۶ ساعت |
| F7.3 | پیوست فایل | آپلودِ PDF/Word/عکس، نوار پیشرفت، اعتبارسنجیِ نوع/اندازه | ۶ ساعت |
| F7.4 | انتشار عمومی + دستهبندی | floatboxِ انتخابِ دستهی درختی، اتصال به endpointِ دستهبندیِ انتشار | ۸ ساعت |
| F7.5 | تعاملها | لایک/نظر/فوروارد با optimistic و invalidation | ۸ ساعت |
| F7.6 | فیلترِ دسته | فیلترِ فیدِ عمومی بر اساس دستهبندی | ۴ ساعت |
فهرست به /blogs وصل است. باقیمانده: صفحهی جزئیات، ساخت/ویرایش با ادیتور، و رفعِ تگِ ساختگیِ blogsList.tsx:30.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F8.1 | صفحهی جزئیات | /social/blogs/[id] از GET /blogs/:id، نظرات، متادیتا | ۶ ساعت |
| F8.2 | ساخت/ویرایش | POST/PATCH /blogs با ادیتورِ غنی، پیشنمایش، کاور | ۸ ساعت |
| F8.3 | حذف و رفعِ mock | DELETE /blogs/:id با تأیید؛ حذفِ تگِ ساختگیِ blogsList.tsx:30 | ۴ ساعت |
| F8.4 | فهرست و فیلتر | صفحهبندی، جستجو، فیلترِ نویسنده/تاریخ | ۴ ساعت |
جدولِ کاربران mock است و دکمههای Add/Edit مردهاند. فهرست، پروفایلِ عمومی، ویرایشِ پروفایلِ خود و آواتار ساخته شود.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F9.1 | فهرست کاربران | GET /users با جستجو/صفحهبندی/فیلتر | ۵ ساعت |
| F9.2 | پروفایلِ عمومی | صفحهی پروفایل، تبهای فعالیت/دوستان/رسانه | ۶ ساعت |
| F9.3 | ویرایش پروفایل | PATCH /users/me، فیلدهای پویا، اعتبارسنجی | ۶ ساعت |
| F9.4 | آواتار | آپلود/برش آواتار /users/me/avatar | ۵ ساعت |
| F9.5 | تنظیمات حساب | یکپارچهسازی با تغییرِ رمز (F3.6)، حریمِ خصوصی، مسدودها | ۴ ساعت |
بخشهای تعاملیِ سازمان: گروهها، اخبار، رویدادها، رسانه، فروم. الگوهای فاز ۲ اینجا تکرار و مقیاسپذیر میشوند.
/social/groups mock با handlerهای خالی است. نیازمندِ فهرست، جزئیاتِ گروه (دیوار/اعضا/فایل)، عضویت و ساخت.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F10.1 | فهرست + ساخت | GET /groups، POST /groups، فیلتر/جستجو | ۶ ساعت |
| F10.2 | جزئیات + دیوار | /groups/:id، فیدِ اختصاصیِ گروه | ۸ ساعت |
| F10.3 | اعضا و عضویت | /members، /join، /invites، نقشها | ۸ ساعت |
| F10.4 | فایلهای گروه | /files با آپلود/دانلود | ۶ ساعت |
| F10.5 | تنظیمات گروه | ویرایش/حریمِ خصوصی/حذف با مجوز | ۴ ساعت |
روتِ /social/news اصلاً وجود ندارد (۴۰۴). مرجع: News.tsx, NewsItemDetail.tsx.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F11.1 | فهرست اخبار | روتِ جدید، GET /news، دستهبندی/صفحهبندی | ۶ ساعت |
| F11.2 | جزئیات خبر | /news/[id] از GET /news/:id، رسانه/گالری | ۵ ساعت |
| F11.3 | انتشار/ویرایش | POST/PATCH /news با مجوزِ مدیر | ۶ ساعت |
| F11.4 | ویجت داشبورد | اتصالِ آخرین اخبار به داشبورد | ۳ ساعت |
روتِ /social/events وجود ندارد. مرجع: Events.tsx, EventItemDetail.tsx. قراردادِ Backend از قبل تستشده است (Pest).
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F12.1 | فهرست/تقویم | GET /events، لیست + تقویم، فیلترِ زمان | ۸ ساعت |
| F12.2 | ساخت/ویرایش | POST/PATCH /events با زمان/مکان/سطحِ دید | ۶ ساعت |
| F12.3 | دعوت و RSVP | /invites، اعلامِ حضور، فهرستِ شرکتکنندگان | ۶ ساعت |
| F12.4 | جزئیات + پیوست | جزئیات، فایلها، حذف با مجوز | ۵ ساعت |
روتِ /social/media وجود ندارد. مرجع: Media.tsx, MediaItemDetail.tsx.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F13.1 | گالری عکس/آلبوم | /photos، /albums، لایتباکس، صفحهبندی | ۸ ساعت |
| F13.2 | آپلود عکس | آپلودِ چندتایی، پیشنمایش، انتخابِ آلبوم | ۶ ساعت |
| F13.3 | ویدیو | /videos، پخش، آپلود/embed | ۶ ساعت |
| F13.4 | مدیریت آلبوم | ساخت/ویرایش/حذف، کاور، مجوزِ مالکیت | ۵ ساعت |
روتِ /social/forums وجود ندارد. مرجع: Forum.tsx و نوعِ ForumTopic.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F14.1 | دستهها/بخشها | فهرستِ بخشها و موضوعها GET /forum/topics | ۶ ساعت |
| F14.2 | موضوع + پستها | /topics/:id/posts، صفحهبندیِ پاسخها، نقلقول | ۸ ساعت |
| F14.3 | ساخت موضوع/پاسخ | ادیتور، پیوست، اعلانِ اشتراک | ۶ ساعت |
| F14.4 | مدیریت | قفل/پین/انتقال با مجوزِ ناظر | ۴ ساعت |
ابزارهای کارِ روزمره: پیامرسان، مدیریت دانش، مدیریت پروژه (کانبان).
در پروتوتایپ و تبِ چتِ پروژه UIِ کاملِ mock هست. اتصال به پیامرسانِ واقعی؛ بهروزرسانیِ بیدرنگ (polling یا WebSocket).
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F15.1 | فهرست گفتگوها | GET /conversations، شمارشِ نخوانده، جستجو | ۶ ساعت |
| F15.2 | پنجرهی پیام | /messages، ارسال، بارگذاریِ تاریخچه (اسکرول معکوس) | ۸ ساعت |
| F15.3 | بیدرنگ | polling/WebSocket، وضعیتِ خوانده، تایپینگ | ۸ ساعت |
| F15.4 | پیوست | ارسالِ فایل/عکس، پیشنمایش | ۶ ساعت |
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F16.1 | کتابخانه | GET /knowledge/documents، درختِ دسته، جستجو | ۶ ساعت |
| F16.2 | نمای سند | نمایشگر/دانلود، متادیتا، نسخه | ۶ ساعت |
| F16.3 | افزودن سند | آپلود/دستهبندی با مجوز | ۵ ساعت |
/workspace/projects (فهرست/جزئیات/کانبان/چت) کامل ولی mock است. اتصالِ همه به API واقعی، از جمله drag-and-drop با persist.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F17.1 | فهرست/ساخت پروژه | GET/POST /projects، اعضا، وضعیت | ۶ ساعت |
| F17.2 | بردِ کانبان | ستونها/کارتها، drag-and-drop، persistِ ترتیب/وضعیت | ۱۲ ساعت |
| F17.3 | وظیفه | جزئیاتِ وظیفه، تخصیص، سررسید، چکلیست، پیوست | ۸ ساعت |
| F17.4 | چتِ پروژه | استفادهی مجددِ کامپوننتِ چت (F15) در بستر پروژه | ۶ ساعت |
| F17.5 | نماها | لیست/کانبان/تقویم، فیلترِ عضو/وضعیت | ۴ ساعت |
بخشهای تخصصیِ سازمان: قراردادها، صندوقِ نوآوری، پژوهش، آموزش، نظرسنجی/مسابقات/ارزیابی.
چهار بخشِ مجزا با روتهای موجودنبوده. مرجع: Contracts/Funds/Research/Training. هر بخش الگوی فهرست/جزئیات/فرم دارد.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F18.1 | قراردادها | روت، فهرست/جزئیات، وضعیت/گردشکار | ۱۰ ساعت |
| F18.2 | صندوقِ نوآوری | فراخوانها /cfps، ثبتِ درخواست /grants | ۱۲ ساعت |
| F18.3 | پژوهش | فهرست/جزئیاتِ پروژههای پژوهشی، فناوریها | ۱۰ ساعت |
| F18.4 | آموزش | دورهها، ثبتنام، پیشرفت | ۱۰ ساعت |
| F18.5 | یکپارچهسازی منو | افزودن به سایدبار/داشبورد، مجوزها | ۴ ساعت |
بخشهای مدیریتی و پایانی که محصول را «کامل» و آمادهی تحویل میکنند.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F19.1 | داشبوردِ راهبری | آمار کلی، مدیریتِ کاربران/نقشها /admin/* | ۱۰ ساعت |
| F19.2 | ظاهر/برند | لوگو/رنگ/نامِ سازمان (per-tenant)، پیشنمایشِ زنده | ۱۰ ساعت |
| F19.3 | گزارشگیری | گزارشهای کاربری/محتوایی، نمودار، خروجی | ۱۰ ساعت |
| F19.4 | مدیریتِ محتوا/مجوز | ابزارهای مدیریتِ محتوا و نقش/دسترسی | ۶ ساعت |
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F20.1 | مرکز اعلان | GET /notifications، خواندن/تنظیمات، هدرِ زنگ | ۶ ساعت |
| F20.2 | جستجوی سراسری | GET /search، نتایجِ چنددسته، صفحهی نتایج | ۸ ساعت |
| F20.3 | راهنما و دستیار | صفحهی راهنما، دستیارِ هوشمند (طبقِ پروتوتایپ) | ۶ ساعت |
| F20.4 | پولیشِ a11y/RTL | پیمایشِ کیبورد، aria، کنتراست، بازبینیِ RTL همهی صفحهها | ۶ ساعت |
| F20.5 | عملکرد | code-splitting، بهینهی تصویر، بازبینیِ کش، Lighthouse | ۶ ساعت |
| F20.6 | تستِ E2E | سناریوهای کلیدی با Playwright | ۶ ساعت |
تطبیقِ کاملِ صفحههای demo.shub.ir با فهرستِ F1–F20 نشان داد چند بخشِ ساختهشدهی پروتوتایپ هیچ تسکی ندارند. برای اینکه برنامهی در حالِ اجرا بههم نخورد، اینها با شمارههای تازه آمدهاند و در جمعِ فازهای ۰ تا ۶ حساب نشدهاند. زمانبندیشان تصمیمِ PO است.
تنها سطحِ بدونِ ورودِ محصول. در پروتوتایپ ~۱۴۷۰ خط است (Landing، PublicShowcase، PublicItemDetail) و در «سناریوی دموی فروش» ایستگاهِ پایانی است، ولی در F1–F20 نیامده. دادهاش همان محتوایی است که visibility=عمومی دارد.
EARS: هرگاه محتوایی «عمومی» علامت بخورد، سامانه باید آن را بدونِ نیاز به ورود در ویترینِ عمومی نمایش دهد و بقیه را پنهان نگه دارد.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F21.1 | لندینگ | صفحهی معرفی، SSR برای SEO، CTAِ ورود/ثبتنام | ۸ ساعت |
| F21.2 | ویترینِ عمومی | تبهای اخبار/رویداد/بلاگ/رسانه/انجمن با فیلترِ عمومی، بدونِ توکن | ۱۲ ساعت |
| F21.3 | جزئیاتِ آیتمِ عمومی | صفحهی deep-linkپذیر هر آیتم + متادیتای اشتراکگذاری | ۱۰ ساعت |
| F21.4 | گاردِ مهمان | هدایتِ اقدامهای نیازمندِ ورود به /login?next= | ۴ ساعت |
| F21.5 | SEO و کارایی | عنوان/توضیح هر صفحه، sitemap، Lighthouse سبز | ۶ ساعت |
Backend این ماژول را دارد (B15)، اما در برنامهی Front فقط بهصورت «تبِ دوستان» داخلِ F9.2 آمده؛ پروتوتایپ یک صفحهی مستقل با درخواستها/پیشنهادها دارد. قرارداد: GET /friends، GET /friends/requests، POST /friends/{id}/accept، POST|DELETE /users/{id}/follow.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F22.1 | فهرست دوستان | GET /friends با جستجو/صفحهبندی | ۴ ساعت |
| F22.2 | درخواستها | پذیرش/رد با optimistic و invalidation | ۵ ساعت |
| F22.3 | دنبالکردن | دکمهی follow/unfollow در پروفایل و فهرستِ کاربران | ۴ ساعت |
| F22.4 | اتصال به F9 | همراستایی با تبِ دوستانِ پروفایل، حذفِ دوبارهکاری | ۳ ساعت |
/friends روی production مستقر نیست.در سرفصلِ فاز ۵ نام برده شدهاند («نظرسنجی/مسابقات») و Backend تسکِ B18 را دارد، اما هیچ subtaskِ Frontی برایشان تعریف نشده بود. مرجع: Polls و Competitions در پروتوتایپ. قرارداد: /polls (+{id}/vote)، /quizzes، /competitions، /challenges.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F23.1 | نظرسنجی | فهرست/جزئیات، رأیدهی، نمایشِ نتیجه پس از رأی | ۸ ساعت |
| F23.2 | آزمون | نمایشِ سوالها، ثبتِ پاسخ، نتیجه | ۸ ساعت |
| F23.3 | مسابقات و چالشها | فهرست/جزئیات، ثبتنام، ارسالِ اثر، جدولِ امتیاز | ۱۰ ساعت |
| F23.4 | یکپارچهسازی منو و مجوز | سایدبار، دسترسیِ نقشمحور | ۴ ساعت |
صفحهی Tickets در پروتوتایپ وجود دارد و PHP هم ۱۲ عملیاتِ آماده دارد (/tickets، /ticket-categories، /ticket-orders)، ولی در برنامهی هیچکدام از دو تیم نیامده بود.
| # | کار | جزئیات فنی | تخمین |
|---|---|---|---|
| F24.1 | فهرست و فیلتر | GET /tickets با وضعیت/دسته/صفحهبندی | ۵ ساعت |
| F24.2 | ثبت تیکت | POST /tickets، انتخابِ دسته، پیوست | ۵ ساعت |
| F24.3 | گفتگوی تیکت | جزئیات، پاسخها، تغییرِ وضعیت | ۶ ساعت |
/dashboard/award) نیز پس از نگارشِ تسکها صفحهی مستقل شد و بهعنوان زیرکارِ F18.5 پوشش داده میشود.