Motoshub · Delivery Plan · Front

تسک‌های تیم Front — با جزئیات پیاده‌سازی

همه‌ی تسک‌های فرانت با subtask، تخمین، User Story و معیار پذیرش. مرجع رفتار: demo.shub.ir · خط لوله‌ی الزامی تحویل: فرآیند تحویل و کیفیت · تسک‌های Backend

راهنمای پیاده‌سازیزمان‌بندیتصمیم‌های الزام‌آورفاز ۰فاز ۱فاز ۲فاز ۳فاز ۴فاز ۵فاز ۶دامنه‌ی کشف‌شدهوضعیت زنده

راهنمای پیاده‌سازی تیم Front

استک و قراردادها. Next.js App Router + TypeScript strict + TanStack Query (server-state) + Zustand (client-state) + RHF+Zod (فرم). همه‌ی درخواست‌ها فقط از libs/axios.ts با baseURL=/api/v1؛ فرانت نباید بداند پاسخ از PHP است یا Django.
الگوی هر ماژول. service (توابع خالص axios) ← hookهای query/mutation (کلیدهای cache استاندارد: [module, list, params] / [module, id]) ← کامپوننت. invalidation بعد از هر mutation. حالت‌های loading=اسکلتون، empty=EmptyState، error=پیام+retry برای هر فهرست الزامی است.
ظاهر. توکن‌های طراحی پروتوتایپ (ink/brand/navy + دارک‌مود توکنی + Vazirmatn) مبنای F2 است — از demo.shub.ir به‌عنوان مرجع پیکسلی استفاده کنید؛ RTL و aria و فوکوس کیبورد در DoD است.
مرجع پذیرش. رفتار هر صفحه = همان صفحه در demo.shub.ir؛ معیارهای پذیرش هر تسک در همین سند، و عبور از خط لوله‌ی تحویل و کیفیت الزامی است.
Σ

خلاصه‌ی زمان‌بندی و فازها

دو مسیرِ موازی. Front از فاز ۱ به‌بعد به قراردادِ api/v1 روی PHP وصل می‌شود و منتظرِ Django نمی‌ماند؛ Backend به‌موازات همان قرارداد را در Django بازمی‌سازد و Gateway هر مسیرِ آماده را سوییچ می‌کند.

تصحیحِ ۱۴۰۵/۰۵/۱۱ — چه چیزی امروز واقعاً پاسخ می‌دهد. پیش‌تر اینجا نوشته شده بود «PHP همین حالا هر ۲۹۳ عملیات را پاسخ می‌دهد». اندازه‌گیریِ زنده نشان می‌دهد آن ۲۹۳ عملیات در برنچِ API مخزن هست ولی روی production مستقر نیست؛ امروز ۱۱ منبع از ۵۵ پاسخ می‌دهند: auth · users · blogs · news · groups · events · photos · albums · videos · forum · files.
یعنی F8، F9، F10، F11، F12، F13، F14 همین امروز دادهٔ واقعی دارند؛ اما F7 (فید)، F15 (چت)، F20.1 (اعلان)، F20.2 (جستجو) فعلاً داده ندارند و باید با لایه‌ی mockِ قابل‌تعویض ساخته شوند. فهرستِ کامل و روشِ اندازه‌گیری: وضعیت زنده.
فازمحتواFrontBackendموازی
۰پایه: axios/design-system · REST-infra/auth-JWT/deploy/data-model۵.۵ روز۹ روز~۹ روز
۱احراز هویت، پوسته و ناوبری، لایه‌ی داده · endpointهای auth + مدل‌ها۹.۵ روز۶ روز~۱۰ روز
۲هسته: داشبورد، تازه‌ها، بلاگ، کاربران/پروفایل۱۷ روز۱۳ روز~۱۷ روز
۳اجتماعی: گروه‌ها، اخبار، رویدادها، رسانه، فروم۱۸.۵ روز۲۵ روز~۲۵ روز
۴ارتباط: چت، دانش، پروژه · پیام‌رسان، دوستان/اعلان، دانش/پروژه۱۵.۵ روز۱۶ روز~۱۶ روز
۵سازمانی: قرارداد/صندوق/پژوهش/آموزش · نظرسنجی/مسابقات۸ روز۱۳ روز~۱۳ روز
۶راهبری، ظاهر، گزارش، اعلان، جستجو، راهنما، دستیار، پولیش، تست۱۶ روز۴ روز~۱۶ روز
مجموع (تک‌نفره، بدون همپوشانی)~۹۰ روز~۸۶ روز~۱۰۶ روز
اصلاحِ جمع‌بندی (۱۴۰۵/۰۵/۱۱). جمعِ ستون‌های این جدول با مجموعِ تخمینِ تک‌تکِ تسک‌ها هم‌خوان نبود (Front ~۹۶ در برابر ۹۰ واقعی، Backend ~۹۲ در برابر ۸۶). اعدادِ جدول با مجموعِ واقعی هم‌خوان شد. هیچ تخمینی در هیچ تسکی تغییر نکرده است — فقط خطای جمع رفع شد. برآوردهای هفتگی و سناریوهای اندازه‌ی تیم نیز دست‌نخورده مانده‌اند، چون آن‌ها بر پایه‌ی مسیر بحرانی محاسبه شده‌اند نه جمعِ ساده.
تفسیرِ زمان. با ۲ توسعه‌دهنده‌ی Front + ۲ Backend و اجرای موازیِ فازها، بازه‌ی واقع‌بینانه‌ی رسیدن به پروتوتایپِ کامل حدود ۱۳ تا ۱۶ هفته‌ی کاری است. «حداقلِ محصولِ قابل‌نمایش» (فاز ۰ تا ۲) در حدود ۵ تا ۶ هفته به‌دست می‌آید. این اعداد تخمینی‌اند و باید در Planningِ هر Sprint دوباره کالیبره شوند.

سناریوهای اندازه‌ی تیم

ترکیب تیم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 از هفته‌ی ۱ گیت‌های ۸ و ۹ پایپ‌لاین را مالک است.
مسیر بحرانی مستقل از تعداد نفرات: فاز ۰ (زیرساخت) ← auth ← لایه‌ی داده ← ماژول‌های وابسته به فایل/اعلان ← چتِ بی‌درنگ ← پولیش. حداقل تقویمیِ عبوری از این زنجیره ~۹ هفته است؛ نفرِ اضافه فقط پهنای موازی را زیاد می‌کند، نه عمق زنجیره را. با تیم ۹ نفره، گلوگاه = Backend (۳ نفر / ~۸۰ روزنفرِ باقی‌مانده پس از واگذاری استقرار به DevOps).

تقسیم کار پیشنهادی تیم واقعی (workstreamهای پایدار — هر نفر مالک یک رشته)

نقشمالکیت (رشته‌ی کاری ثابت)تسک‌ها به ترتیب
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 با اوست
DevOpsB3 کامل + CI enforcement + staging دو سرویس + مانیتورینگ/لاگ + بکاپ + سوییچ GatewayB3 → CI هر دو ریپو → B19.3 → پایداری production
ریسک برنامه و پادزهر: (۱) Front چهارنفره زودتر از Backend تمام می‌کند (~هفته ۷) — از آن نقطه Front ۳ و ۴ به E2E/پولیش/دواپسِ فرانت شیفت می‌شوند، نه فیچرِ جدید. (۲) وابستگی همه به فاز ۰: هفته‌ی اول همه‌ی تمرکز دو لید + DevOps روی B1/B2/B3/F1/F2 است؛ بقیه در همان هفته کالکشن تست و شناخت قرارداد API را آماده می‌کنند. (۳) هر workstream مالک ثابت دارد تا context-switching حذف شود؛ جابه‌جایی فقط با تصمیم PO.
!

تصمیم‌های معماریِ الزام‌آور

پیش‌فرض‌هایی که هر دو تیم باید رعایت کنند تا کارها به هم برسند.

۱) مبدأ داده‌ی Front مستقل از پیاده‌ساز است. Front فقط با قراردادِ api/v1 کار می‌کند؛ نباید بداند پاسخ از PHP می‌آید یا Django. همه‌ی مسیرها از libs/axios.ts با baseURL=/api/v1 و rewrite در next.config.ts.
۲) auth واحد. استانداردِ توکن = JWT HS256 با رازِ مشترک 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..
۰

پایه و زیرساخت

پیش‌نیازِ هر چیزِ دیگر. بدون این‌ها هر تسکِ بعدی روی شن ساخته می‌شود. دو تیم موازی کار می‌کنند.

◆ تیم Front
F1یکپارچه‌سازی HTTP client و پاک‌سازی بدهیِ فنیP1ناقص۱.۵ روز

دو client موازی هست: libs/axios.ts (زنده) و services/apiClient.ts (مرده). باید یکی بماند، منبعِ همه‌ی درخواست‌ها شود و کدهای بلااستفاده حذف شوند.

Subtaskها
#کارجزئیات فنیتخمین
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.4ESLint/type-check سبزرفعِ importهای شکسته، اجرای tsc --noEmit و lint۴ ساعت
وابستگی: ندارد (نقطه‌ی شروعِ Front).
F2سیستم طراحی، توکن‌های ظاهری و تمِ روشن/تیرهP1نساخته۴ روز
User Storyبه‌عنوان کاربر، می‌خواهم رابط با ظاهرِ یکدست، فارسی/RTL و قابلِ‌تعویض بین روشن/تیره ببینم، تا تجربه‌ی حرفه‌ای و خوانا داشته باشم.

themeی Tailwind خالی است. توکن‌های طراحیِ برگرفته از پروتوتایپ (رنگ/فاصله/شعاع/سایه/تایپ) و کامپوننت‌های پایه ساخته شوند. طبقِ اصولِ طراحی: مقیاسِ تایپِ مشخص و هویتِ منطبق بر دامنه‌ی سازمانی، نه پیش‌فرضِ جنریک.

EARS: هرگاه کاربر تمِ نمایش را تغییر دهد، سامانه باید کلِ رابط را بدون بارگذاری مجدد به تمِ انتخابی درآورد و انتخاب را ماندگار کند.

Subtaskها
#کارجزئیات فنیتخمین
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 استاندارد۴ ساعت
معیار پذیرش
  • Given تمِ تیره فعال، When صفحه رندر شود، Then همه‌ی کامپوننت‌ها رنگِ درست و کنتراستِ AA دارند.
  • Given تعویضِ تم، When رفرش شود، Then تمِ قبلی بدون پرشِ رنگ بازیابی شود.
وابستگی: F1.
۱

احراز هویت، پوسته و لایه‌ی داده

دروازه‌ی ورود و اسکلتِ همه‌ی صفحه‌های بعدی. تا اینجا تمام نشود، هیچ صفحه‌ی محتوایی قابلِ‌اتکا نیست.

◆ تیم Front
F3جریان کاملِ احراز هویت: refresh، محافظتِ مسیر، logoutP1ناقص۳.۵ روز
User Storyبه‌عنوان عضو سازمان، می‌خواهم یک‌بار وارد شوم و نشستم بی‌آنکه مدام بیرون بیفتم حفظ شود، و مسیرهای خصوصی بدونِ ورود در دسترس نباشند، تا کارم امن و بی‌وقفه باشد.

login/register هست ولی response interceptor در libs/axios.ts no-op است، logout در useAuth.ts صرفاً stub است و هیچ middleware.tsای مسیرها را محافظت نمی‌کند.

EARS: هرگاه یک درخواستِ API با ۴۰۱ برگردد و refresh معتبر باشد، سامانه باید توکن را نو و همان درخواست را یک‌بار تکرار کند؛ در غیر این‌صورت کاربر را به ورود هدایت کند.

Subtaskها
#کارجزئیات فنیتخمین
F3.1منطق refreshinterceptor: بر ۴۰۱ فراخوانیِ POST /auth/refresh، صف‌بندیِ همزمان، retry یک‌باره، خروج بر شکست۸ ساعت
F3.2middleware مسیرmiddleware.ts گاردِ /workspace/* و /social/*؛ ریدایرکتِ مهمان به /login?next=۵ ساعت
F3.3logout واقعیابطالِ سمتِ سرور، پاک‌سازیِ 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 است۴ ساعت
معیار پذیرش
  • Given نشستِ منقضی، When کاربر عملی انجام دهد، Then توکن بی‌صدا نو و عمل بدونِ خروج ادامه یابد.
  • Given مهمان، When /workspace باز شود، Then به /login با پارامترِ بازگشت هدایت شود.
وابستگی: F1؛ داده: B4 (تا آماده‌شدن به PHP /auth/* وصل شود).
F4پوسته‌ی برنامه: چیدمان، سایدبار، هدر و ناوبریP1ناقص۳ روز
User Storyبه‌عنوان کاربر، می‌خواهم منوی کناریِ همه‌ی بخش‌ها، نوارِ بالا با پروفایل/اعلان/جستجو و مسیرِ فعال را ببینم، تا در ~۲۰ بخشِ محصول به‌راحتی جابه‌جا شوم.

پروتوتایپ سایدباری با ~۲۰ برچسب دارد (components/Sidebar.tsx). پوسته‌ی واکنش‌گرا با active-state، حالتِ موبایل و اسلاتِ محتوا ساخته شود تا صفحه‌های بعدی داخلش بنشینند.

Subtaskها
#کارجزئیات فنیتخمین
F4.1Layout و گریدlayoutِ سه‌بخشی (سایدبار/هدر/محتوا)، اسکرول مستقل، RTL۴ ساعت
F4.2سایدبار~۲۰ آیتم منطبق بر پروتوتایپ، گروه‌بندی، آیکن، active-state از مسیر۶ ساعت
F4.3هدرمنوی پروفایل، زنگِ اعلان (badge)، جستجوی سراسری، سوییچرِ تم۵ ساعت
F4.4ناوبریِ موبایلdrawer/بستنِ خودکار، breakpointها، focus trap۴ ساعت
F4.5Breadcrumb و عنوانعنوانِ صفحه‌ی پویا و مسیر بر اساس روت۳ ساعت
وابستگی: F2، F3.
F5لایه‌ی داده‌ی استاندارد (سرویس + hookهای Query/Mutation)P1ناقص۳ روز

الان فقط useAuth و useBlogs واقعی‌اند؛ بقیه روی آرایه‌ی mock با useState کار می‌کنند و حتی mock را mutate می‌کنند. یک الگوی تکرارپذیر (سرویس + hook) و ابزارهای مشترکِ TanStack Query ساخته شود تا هر بخشِ بعدی سریع و یکدست وصل شود.

Subtaskها
#کارجزئیات فنیتخمین
F5.1پیکربندی QueryClientdefaultها (staleTime/retry)، devtools، مرزهای خطا۳ ساعت
F5.2الگوی سرویسقالبِ services/api/<resource>.ts بر پایه‌ی blogs.ts؛ typeها از قرارداد۴ ساعت
F5.3hookهای عمومیuseList/useDetail/useCreate/useUpdate/useDelete با کلیدِ کش و invalidation۶ ساعت
F5.4ابزارِ صفحه‌بندی/فیلترهوکِ مشترکِ pagination/filter منطبق بر meta؛ infinite/صفحه‌ای۵ ساعت
F5.5مدیریت خطا و توستنگاشتِ ۴۲۲ به خطای فیلدی، توستِ سراسری، optimistic اختیاری۴ ساعت
وابستگی: F1. پیش‌نیازِ همه‌ی تسک‌های محتوایی (F6 به بعد).
۲

هسته‌ی محتوا

پرتکرارترین بخش‌هایی که کاربر روزانه می‌بیند: داشبورد، تازه‌ها، بلاگ، کاربران/پروفایل. رسیدن تا اینجا = «محصولِ قابلِ‌نمایش».

◆ تیم Front
F6داشبورد فعالیت‌هاP1ناقص۴ روز
User Storyبه‌عنوان عضو، می‌خواهم در ورود، فیدِ فعالیت، رویدادهای پیشِ‌رو، اعلان‌ها و میان‌برهای کاری‌ام را یک‌جا ببینم، تا وضعیت روزم را سریع بفهمم.

/workspace و /social الان literalِ ثابت‌اند. ویجت‌های واقعی از چند endpoint ساخته شوند. مرجع: pages/Dashboard.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F6.1ویجت فیدخلاصه از GET /feed، خالی/loading۶ ساعت
F6.2ویجت رویداد/اعلانGET /events، GET /notifications۶ ساعت
F6.3ویجت آمار/میان‌برکارت‌های آمار و میان‌برهای سریع منطبق بر پروتوتایپ۵ ساعت
F6.4چیدمان واکنش‌گراگریدِ ویجت‌ها، ترتیب موبایل، اسکلتون۴ ساعت
وابستگی: F4، F5. داده: B7/B11/B15.
F7تازه‌ها / فید سازمانی (Channels)P1ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم مطلب (متن/عکس/فایل PDF/Word) منتشر کنم، آن را «انتشار عمومی» با یک «دسته‌بندی» بزنم و مطالبِ دیگران را لایک/نظر بدهم، تا جریانِ اطلاعاتِ سازمان زنده بماند.

/social/channels mock است. پیچیده‌ترین بخشِ فاز: کامپوزرِ انتشار با پیوست، دسته‌بندیِ انتشارِ عمومی (همان فیچرِ افزوده‌شده به پلاگین iisnewsfeedpin)، لایک/نظر/فوروارد و اسکرولِ بی‌نهایت.

EARS: هرگاه کاربر مطلبی را «انتشار عمومی» کند، سامانه باید امکانِ انتخابِ دسته‌بندیِ درختی را بدهد و مطلب را با آن دسته در فیدِ عمومی نمایش دهد.

Subtaskها
#کارجزئیات فنیتخمین
F7.1فهرست فیداسکرول بی‌نهایت از GET /feed، رندرِ انواع آیتم، اسکلتون۸ ساعت
F7.2کامپوزر انتشارPOST /feed: متن، منشن، پیش‌نمایشِ لینک۶ ساعت
F7.3پیوست فایلآپلودِ PDF/Word/عکس، نوار پیشرفت، اعتبارسنجیِ نوع/اندازه۶ ساعت
F7.4انتشار عمومی + دسته‌بندیfloatboxِ انتخابِ دسته‌ی درختی، اتصال به endpointِ دسته‌بندیِ انتشار۸ ساعت
F7.5تعامل‌هالایک/نظر/فوروارد با optimistic و invalidation۸ ساعت
F7.6فیلترِ دستهفیلترِ فیدِ عمومی بر اساس دسته‌بندی۴ ساعت
معیار پذیرش
  • Given فایلِ PDF پیوست، When مطلب منتشر شود، Then در فید با لینکِ دانلود نمایش داده شود.
  • Given انتشارِ عمومیِ دسته‌دار، When فیدِ عمومی با آن دسته فیلتر شود، Then فقط مطالبِ همان دسته دیده شوند.
وابستگی: F5. داده: B7.
F8بلاگ (تکمیل: جزئیات و ساخت)P2ناقص۳ روز
User Storyبه‌عنوان نویسنده، می‌خواهم پستِ بلاگ بنویسم، ویرایش/حذف کنم و پست‌ها را کامل بخوانم، تا محتوای بلندِ سازمانی تولید و مصرف شود.

فهرست به /blogs وصل است. باقی‌مانده: صفحه‌ی جزئیات، ساخت/ویرایش با ادیتور، و رفعِ تگِ ساختگیِ blogsList.tsx:30.

Subtaskها
#کارجزئیات فنیتخمین
F8.1صفحه‌ی جزئیات/social/blogs/[id] از GET /blogs/:id، نظرات، متادیتا۶ ساعت
F8.2ساخت/ویرایشPOST/PATCH /blogs با ادیتورِ غنی، پیش‌نمایش، کاور۸ ساعت
F8.3حذف و رفعِ mockDELETE /blogs/:id با تأیید؛ حذفِ تگِ ساختگیِ blogsList.tsx:30۴ ساعت
F8.4فهرست و فیلترصفحه‌بندی، جستجو، فیلترِ نویسنده/تاریخ۴ ساعت
وابستگی: F5. داده: B8 (قرارداد PHP آماده است).
F9کاربران، پروفایل و تنظیماتِ حسابP2ناقص۴ روز
User Storyبه‌عنوان کاربر، می‌خواهم پروفایلم را ببینم و ویرایش کنم، آواتار بگذارم و کاربرانِ دیگر را بیابم؛ و به‌عنوان مدیر، فهرستِ کاربران را مدیریت کنم.

جدولِ کاربران mock است و دکمه‌های Add/Edit مرده‌اند. فهرست، پروفایلِ عمومی، ویرایشِ پروفایلِ خود و آواتار ساخته شود.

Subtaskها
#کارجزئیات فنیتخمین
F9.1فهرست کاربرانGET /users با جستجو/صفحه‌بندی/فیلتر۵ ساعت
F9.2پروفایلِ عمومیصفحه‌ی پروفایل، تب‌های فعالیت/دوستان/رسانه۶ ساعت
F9.3ویرایش پروفایلPATCH /users/me، فیلدهای پویا، اعتبارسنجی۶ ساعت
F9.4آواتارآپلود/برش آواتار /users/me/avatar۵ ساعت
F9.5تنظیمات حسابیکپارچه‌سازی با تغییرِ رمز (F3.6)، حریمِ خصوصی، مسدودها۴ ساعت
وابستگی: F5. داده: B6.
۳

فضاهای اجتماعی

بخش‌های تعاملیِ سازمان: گروه‌ها، اخبار، رویدادها، رسانه، فروم. الگوهای فاز ۲ اینجا تکرار و مقیاس‌پذیر می‌شوند.

◆ تیم Front
F10گروه‌های تعاملیP2ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم گروه بسازم/عضو شوم، در دیوارِ گروه مطلب بگذارم، فایل به اشتراک بگذارم و اعضا را ببینم، تا کارِ تیمی حولِ موضوع شکل بگیرد.

/social/groups mock با handlerهای خالی است. نیازمندِ فهرست، جزئیاتِ گروه (دیوار/اعضا/فایل)، عضویت و ساخت.

Subtaskها
#کارجزئیات فنیتخمین
F10.1فهرست + ساختGET /groups، POST /groups، فیلتر/جستجو۶ ساعت
F10.2جزئیات + دیوار/groups/:id، فیدِ اختصاصیِ گروه۸ ساعت
F10.3اعضا و عضویت/members، /join، /invites، نقش‌ها۸ ساعت
F10.4فایل‌های گروه/files با آپلود/دانلود۶ ساعت
F10.5تنظیمات گروهویرایش/حریمِ خصوصی/حذف با مجوز۴ ساعت
وابستگی: F5، F7 (الگوی دیوار). داده: B10.
F11اخبار سازمانP2نساخته۲.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم اخبارِ رسمیِ سازمان را با جزئیات بخوانم؛ و به‌عنوان مدیرِ محتوا خبر منتشر کنم، تا اطلاع‌رسانیِ رسمی متمرکز باشد.

روتِ /social/news اصلاً وجود ندارد (۴۰۴). مرجع: News.tsx, NewsItemDetail.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F11.1فهرست اخبارروتِ جدید، GET /news، دسته‌بندی/صفحه‌بندی۶ ساعت
F11.2جزئیات خبر/news/[id] از GET /news/:id، رسانه/گالری۵ ساعت
F11.3انتشار/ویرایشPOST/PATCH /news با مجوزِ مدیر۶ ساعت
F11.4ویجت داشبورداتصالِ آخرین اخبار به داشبورد۳ ساعت
وابستگی: F5. داده: B9.
F12رویدادها و جلساتP2نساخته۳.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم رویداد بسازم، دیگران را دعوت کنم و حضورم را اعلام کنم و تقویمِ رویدادها را ببینم، تا جلساتِ سازمان هماهنگ شوند.

روتِ /social/events وجود ندارد. مرجع: Events.tsx, EventItemDetail.tsx. قراردادِ Backend از قبل تست‌شده است (Pest).

Subtaskها
#کارجزئیات فنیتخمین
F12.1فهرست/تقویمGET /events، لیست + تقویم، فیلترِ زمان۸ ساعت
F12.2ساخت/ویرایشPOST/PATCH /events با زمان/مکان/سطحِ دید۶ ساعت
F12.3دعوت و RSVP/invites، اعلامِ حضور، فهرستِ شرکت‌کنندگان۶ ساعت
F12.4جزئیات + پیوستجزئیات، فایل‌ها، حذف با مجوز۵ ساعت
وابستگی: F5. داده: B11 (آماده).
F13تصاویر و ویدیو (رسانه)P2نساخته۳.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم آلبومِ عکس و ویدیو بسازم، رسانه آپلود کنم و گالریِ سازمان را مرور کنم، تا محتوای بصری به اشتراک گذاشته شود.

روتِ /social/media وجود ندارد. مرجع: Media.tsx, MediaItemDetail.tsx.

Subtaskها
#کارجزئیات فنیتخمین
F13.1گالری عکس/آلبوم/photos، /albums، لایت‌باکس، صفحه‌بندی۸ ساعت
F13.2آپلود عکسآپلودِ چندتایی، پیش‌نمایش، انتخابِ آلبوم۶ ساعت
F13.3ویدیو/videos، پخش، آپلود/embed۶ ساعت
F13.4مدیریت آلبومساخت/ویرایش/حذف، کاور، مجوزِ مالکیت۵ ساعت
وابستگی: F5. داده: B12 (آماده، با اصلاحاتِ IDOR).
F14انجمن (فروم)P2نساخته۳ روز
User Storyبه‌عنوان عضو، می‌خواهم موضوع بسازم، پاسخ بدهم و بحث‌های دسته‌بندی‌شده را دنبال کنم، تا گفتگوهای ماندگارِ سازمان شکل بگیرد.

روتِ /social/forums وجود ندارد. مرجع: Forum.tsx و نوعِ ForumTopic.

Subtaskها
#کارجزئیات فنیتخمین
F14.1دسته‌ها/بخش‌هافهرستِ بخش‌ها و موضوع‌ها GET /forum/topics۶ ساعت
F14.2موضوع + پست‌ها/topics/:id/posts، صفحه‌بندیِ پاسخ‌ها، نقل‌قول۸ ساعت
F14.3ساخت موضوع/پاسخادیتور، پیوست، اعلانِ اشتراک۶ ساعت
F14.4مدیریتقفل/پین/انتقال با مجوزِ ناظر۴ ساعت
وابستگی: F5. داده: B13.
۴

ارتباط و همکاری

ابزارهای کارِ روزمره: پیام‌رسان، مدیریت دانش، مدیریت پروژه (کانبان).

◆ تیم Front
F15گفتگو (پیام‌رسان)P3ناقص۶ روز
User Storyبه‌عنوان عضو، می‌خواهم گفتگوی خصوصی/گروهی داشته باشم، پیام و فایل بفرستم و پیامِ جدید را بی‌درنگ ببینم، تا هماهنگیِ سریع ممکن شود.

در پروتوتایپ و تبِ چتِ پروژه UIِ کاملِ mock هست. اتصال به پیام‌رسانِ واقعی؛ به‌روزرسانیِ بی‌درنگ (polling یا WebSocket).

#کارجزئیات فنیتخمین
F15.1فهرست گفتگوهاGET /conversations، شمارشِ نخوانده، جستجو۶ ساعت
F15.2پنجره‌ی پیام/messages، ارسال، بارگذاریِ تاریخچه (اسکرول معکوس)۸ ساعت
F15.3بی‌درنگpolling/WebSocket، وضعیتِ خوانده، تایپینگ۸ ساعت
F15.4پیوستارسالِ فایل/عکس، پیش‌نمایش۶ ساعت
وابستگی: F5. داده: B14.
F16مدیریت دانشP3نساخته۲.۵ روز
User Storyبه‌عنوان عضو، می‌خواهم اسناد و راهنماهای سازمانی را در یک کتابخانه‌ی دسته‌بندی‌شده بیابم و بخوانم، تا دانشِ سازمان حفظ و بازیابی شود.
#کارجزئیات فنیتخمین
F16.1کتابخانهGET /knowledge/documents، درختِ دسته، جستجو۶ ساعت
F16.2نمای سندنمایشگر/دانلود، متادیتا، نسخه۶ ساعت
F16.3افزودن سندآپلود/دسته‌بندی با مجوز۵ ساعت
وابستگی: F5. داده: B16.
F17مدیریت پروژه (کانبان + چت پروژه)P3ناقص۷ روز
User Storyبه‌عنوان عضوِ تیم، می‌خواهم پروژه بسازم، وظایف را روی بردِ کانبان بکشم‌و‌رها کنم، اعضا را تخصیص دهم و در چتِ پروژه گفتگو کنم، تا کارِ تیمی مدیریت شود.

/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نماهالیست/کانبان/تقویم، فیلترِ عضو/وضعیت۴ ساعت
وابستگی: F5، F15. داده: B16.
۵

ماژول‌های سازمانی

بخش‌های تخصصیِ سازمان: قراردادها، صندوقِ نوآوری، پژوهش، آموزش، نظرسنجی/مسابقات/ارزیابی.

◆ تیم Front
F18ماژول‌های سازمانی (قرارداد/صندوق/پژوهش/آموزش)P3نساخته۸ روز
User Storyبه‌عنوان کاربرِ سازمانی، می‌خواهم قراردادها، فراخوان‌های صندوقِ نوآوری، پروژه‌های پژوهشی و دوره‌های آموزشی را ببینم و در آن‌ها اقدام کنم، تا فرایندهای سازمانی دیجیتال شوند.

چهار بخشِ مجزا با روت‌های موجودنبوده. مرجع: Contracts/Funds/Research/Training. هر بخش الگوی فهرست/جزئیات/فرم دارد.

#کارجزئیات فنیتخمین
F18.1قراردادهاروت، فهرست/جزئیات، وضعیت/گردش‌کار۱۰ ساعت
F18.2صندوقِ نوآوریفراخوان‌ها /cfps، ثبتِ درخواست /grants۱۲ ساعت
F18.3پژوهشفهرست/جزئیاتِ پروژه‌های پژوهشی، فناوری‌ها۱۰ ساعت
F18.4آموزشدوره‌ها، ثبت‌نام، پیشرفت۱۰ ساعت
F18.5یکپارچه‌سازی منوافزودن به سایدبار/داشبورد، مجوزها۴ ساعت
وابستگی: F5. داده: B17.
۶

راهبری، جستجو، پولیش و تحویل

بخش‌های مدیریتی و پایانی که محصول را «کامل» و آماده‌ی تحویل می‌کنند.

◆ تیم Front
F19پنل راهبری، ظاهر/برندسازی و گزارش‌گیریP3نساخته۸ روز
User Storyبه‌عنوان مدیرِ سامانه، می‌خواهم کاربران/محتوا/تنظیمات را مدیریت کنم، ظاهر و برندِ سازمان را تغییر دهم و گزارش‌های کاربری بگیرم، تا سامانه را اداره کنم.
#کارجزئیات فنیتخمین
F19.1داشبوردِ راهبریآمار کلی، مدیریتِ کاربران/نقش‌ها /admin/*۱۰ ساعت
F19.2ظاهر/برندلوگو/رنگ/نامِ سازمان (per-tenant)، پیش‌نمایشِ زنده۱۰ ساعت
F19.3گزارش‌گیریگزارش‌های کاربری/محتوایی، نمودار، خروجی۱۰ ساعت
F19.4مدیریتِ محتوا/مجوزابزارهای مدیریتِ محتوا و نقش/دسترسی۶ ساعت
وابستگی: F5، F9. داده: endpointهای admin.
F20اعلان، جستجوی سراسری، راهنما، دستیار و پولیشِ نهاییP3ناقص۸ روز
User Storyبه‌عنوان کاربر، می‌خواهم اعلان‌هایم را ببینم، در کلِ سامانه جستجو کنم، راهنما بگیرم و از دستیارِ هوشمند کمک بخواهم، و رابطی روان و بی‌نقص داشته باشم.
#کارجزئیات فنیتخمین
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۶ ساعت
وابستگی: همه‌ی تسک‌های Front.
+

دامنه‌ی کشف‌شده — افزوده‌ی ۱۴۰۵/۰۵/۱۱

تطبیقِ کاملِ صفحه‌های demo.shub.ir با فهرستِ F1–F20 نشان داد چند بخشِ ساخته‌شده‌ی پروتوتایپ هیچ تسکی ندارند. برای این‌که برنامه‌ی در حالِ اجرا به‌هم نخورد، این‌ها با شماره‌های تازه آمده‌اند و در جمعِ فازهای ۰ تا ۶ حساب نشده‌اند. زمان‌بندی‌شان تصمیمِ PO است.

◆ تیم Front
F21نمای عمومی: لندینگ، ویترینِ محتوای عمومی و صفحه‌ی جزئیاتP2نساخته۵ روز
User Storyبه‌عنوان بازدیدکننده‌ی بدونِ حساب، می‌خواهم معرفیِ سازمان و محتوای عمومیِ آن (اخبار، رویداد، بلاگ، رسانه، انجمن) را ببینم، تا پیش از ثبت‌نام با سازمان آشنا شوم — و به‌عنوان تیمِ فروش، بتوانم همین صفحه را در جلسه نشان دهم.

تنها سطحِ بدونِ ورودِ محصول. در پروتوتایپ ~۱۴۷۰ خط است (Landing، PublicShowcase، PublicItemDetail) و در «سناریوی دموی فروش» ایستگاهِ پایانی است، ولی در F1–F20 نیامده. داده‌اش همان محتوایی است که visibility=عمومی دارد.

EARS: هرگاه محتوایی «عمومی» علامت بخورد، سامانه باید آن را بدونِ نیاز به ورود در ویترینِ عمومی نمایش دهد و بقیه را پنهان نگه دارد.

Subtaskها
#کارجزئیات فنیتخمین
F21.1لندینگصفحه‌ی معرفی، SSR برای SEO، CTAِ ورود/ثبت‌نام۸ ساعت
F21.2ویترینِ عمومیتب‌های اخبار/رویداد/بلاگ/رسانه/انجمن با فیلترِ عمومی، بدونِ توکن۱۲ ساعت
F21.3جزئیاتِ آیتمِ عمومیصفحه‌ی deep-link‌پذیر هر آیتم + متادیتای اشتراک‌گذاری۱۰ ساعت
F21.4گاردِ مهمانهدایتِ اقدام‌های نیازمندِ ورود به /login?next=۴ ساعت
F21.5SEO و کاراییعنوان/توضیح هر صفحه، sitemap، Lighthouse سبز۶ ساعت
معیار پذیرش
  • Given کاربرِ بدونِ حساب، When آدرسِ آیتمِ عمومی را باز کند، Then محتوا بدونِ ورود دیده شود.
  • Given محتوای غیرِعمومی، When مهمان تلاش به دیدنش کند، Then به ورود هدایت شود و محتوا لو نرود.
وابستگی: F5. داده: endpointهای عمومیِ محتوا (نیازمندِ حالتِ بدونِ توکن — امروز همه‌ی مسیرها ۴۰۱ می‌دهند؛ تسکِ Backend متناظر باید تعریف شود).
F22دوستان و دنبال‌کردن (صفحه‌ی مستقل)P3نساخته۲ روز
User Storyبه‌عنوان عضو، می‌خواهم درخواست‌های دوستی‌ام را مدیریت کنم و افراد را دنبال کنم، تا شبکه‌ی ارتباطی‌ام در سازمان شکل بگیرد.

Backend این ماژول را دارد (B15)، اما در برنامه‌ی Front فقط به‌صورت «تبِ دوستان» داخلِ F9.2 آمده؛ پروتوتایپ یک صفحه‌ی مستقل با درخواست‌ها/پیشنهادها دارد. قرارداد: GET /friends، GET /friends/requests، POST /friends/{id}/accept، POST|DELETE /users/{id}/follow.

Subtaskها
#کارجزئیات فنیتخمین
F22.1فهرست دوستانGET /friends با جستجو/صفحه‌بندی۴ ساعت
F22.2درخواست‌هاپذیرش/رد با optimistic و invalidation۵ ساعت
F22.3دنبال‌کردندکمه‌ی follow/unfollow در پروفایل و فهرستِ کاربران۴ ساعت
F22.4اتصال به F9هم‌راستایی با تبِ دوستانِ پروفایل، حذفِ دوباره‌کاری۳ ساعت
وابستگی: F5، F9. داده: B15. وضعیتِ امروز: /friends روی production مستقر نیست.
F23نظرسنجی و آزمون · مسابقات و چالش‌هاP3نساخته۴ روز
User Storyبه‌عنوان عضو، می‌خواهم در نظرسنجی‌ها و آزمون‌های سازمان شرکت کنم و مسابقات و چالش‌ها را ببینم و ثبت‌نام کنم، تا در برنامه‌های سازمان مشارکت داشته باشم.

در سرفصلِ فاز ۵ نام برده شده‌اند («نظرسنجی/مسابقات») و Backend تسکِ B18 را دارد، اما هیچ subtaskِ Frontی برایشان تعریف نشده بود. مرجع: Polls و Competitions در پروتوتایپ. قرارداد: /polls (+{id}/vote/quizzes، /competitions، /challenges.

Subtaskها
#کارجزئیات فنیتخمین
F23.1نظرسنجیفهرست/جزئیات، رأی‌دهی، نمایشِ نتیجه پس از رأی۸ ساعت
F23.2آزموننمایشِ سوال‌ها، ثبتِ پاسخ، نتیجه۸ ساعت
F23.3مسابقات و چالش‌هافهرست/جزئیات، ثبت‌نام، ارسالِ اثر، جدولِ امتیاز۱۰ ساعت
F23.4یکپارچه‌سازی منو و مجوزسایدبار، دسترسیِ نقش‌محور۴ ساعت
وابستگی: F5. داده: B18. وضعیتِ امروز: هیچ‌کدام از این مسیرها روی production مستقر نیستند.
F24تیکت پشتیبانیP3نساخته۲ روز
User Storyبه‌عنوان کاربر، می‌خواهم برای مشکلاتم تیکت ثبت کنم و روندِ پاسخ را دنبال کنم، تا پشتیبانی قابلِ پیگیری باشد.

صفحه‌ی Tickets در پروتوتایپ وجود دارد و PHP هم ۱۲ عملیاتِ آماده دارد (/tickets، /ticket-categories، /ticket-orders)، ولی در برنامه‌ی هیچ‌کدام از دو تیم نیامده بود.

Subtaskها
#کارجزئیات فنیتخمین
F24.1فهرست و فیلترGET /tickets با وضعیت/دسته/صفحه‌بندی۵ ساعت
F24.2ثبت تیکتPOST /tickets، انتخابِ دسته، پیوست۵ ساعت
F24.3گفتگوی تیکتجزئیات، پاسخ‌ها، تغییرِ وضعیت۶ ساعت
وابستگی: F5. داده: B20.
جمعِ دامنه‌ی افزوده: ~۱۳ روزِ Front (F21–F24) + ~۲ روزِ Backend (B20). این عدد عمداً در جدولِ «خلاصه‌ی زمان‌بندی» بالا وارد نشده تا تخمین‌های در حالِ اجرا دست‌نخورده بمانند. جایزه‌ی نوآوری (/dashboard/award) نیز پس از نگارشِ تسک‌ها صفحه‌ی مستقل شد و به‌عنوان زیرکارِ F18.5 پوشش داده می‌شود.