Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
10 KiB
برنامه آمادگی Production فرانتاند قبیله
این سند برنامه اجرایی رسیدن از وضعیت فعلی به انتشار عمومی مطمئن است. ترتیب مراحل الزامآور است: هر مرحله باید معیارهای پذیرش خود را پاس کند تا مرحله بعد آغاز شود.
تعریف Done نهایی
نسخه زمانی Production-ready محسوب میشود که:
- pipeline استاندارد و Docker build روی checkout تمیز، تکرارپذیر و کاملاً سبز باشد.
- lint هیچ error یا warning نداشته باشد.
- مسیرهای auth، booking، payment و authorization تست E2E پایدار داشته باشند.
- refresh token در JavaScript و localStorage قابل دسترس نباشد.
- کنترلهای XSS، CSRF، CSP و upload در فرانت و بکاند تأیید شده باشند.
- accessibility، Core Web Vitals و مرورگرهای هدف از budgetهای تعریفشده عبور نکنند.
- خطاها و شاخصهای عملیاتی قابل مشاهده باشند و rollback آزمایش شده باشد.
- smoke test محیط staging و production بهصورت خودکار اجرا شود.
۱. تثبیت pipeline و کیفیت پایه — Release blocker
هدف
یک فرمان واحد باید تمام قرارداد API، typeها، lint، تست و production build را بدون وابستگی به state محلی بررسی کند.
کارها
- رفع خطای TypeScript تولید OpenAPI در booking service بکاند.
- یکسانسازی فرمانهای:
generate:apitypechecklinttestbuildcheck
- رفع تمام warningهای ESLint و فعال کردن مجدد
--max-warnings 0. - تعیین سیاست روشن برای کد generated و جلوگیری از lint دستی آن.
- ثابت کردن نسخه Node و pnpm در local، Docker و CI.
- افزودن CI با cache کنترلشده و اجرای build روی checkout تمیز.
- افزودن کنترل تغییر OpenAPI تا generated client قدیمی merge نشود.
معیار پذیرش
pnpm install --frozen-lockfile
pnpm check
pnpm build
هر سه فرمان باید با exit code صفر اجرا شوند و working tree پس از build تغییر نکند.
۲. تست مسیرهای حیاتی — Release blocker
هدف
شکست flowهای مالی و session پیش از deploy شناسایی شود.
کارها
- unit test برای route policy، response normalization، validation و error mapping.
- component test برای فرمهای OTP، booking CTA، payment state و modalهای حساس.
- راهاندازی Playwright با fixture و data factory ایزوله.
- E2E سناریوهای:
- درخواست OTP، ورود، تکمیل پروفایل و logout
- refresh موفق، refresh همزمان و session منقضی
- دسترسی guest/user/admin به routeها
- ایجاد، ویرایش و انتشار رویداد
- رزرو، جلوگیری از double-submit و انقضای رزرو
- پرداخت موفق، ناموفق، callback و retry
- لغو، refund و waitlist
- chat، notification و unread count
- اجرای تستها در CI با artifact شامل trace و screenshot شکست.
معیار پذیرش
- تمام تستهای مسیر بحرانی پایدار و مستقل باشند.
- تست flaky پذیرفته نیست؛ retry نباید خطای واقعی را مخفی کند.
- coverage منطق حساس حداقل ۸۰٪ branch باشد؛ برای JSX عدد سراسری تحمیل نمیشود.
۳. سختسازی امنیت — Release blocker
هدف
کاهش ریسک سرقت session، XSS، CSRF و upload مخرب.
کارها
- انتقال refresh token به cookie با
HttpOnly،SecureوSameSiteمناسب. - حذف refresh token از localStorage و کد client.
- rotation و reuse detection در بکاند و revoke واقعی session هنگام logout.
- تعیین مدل CSRF و پیادهسازی token/origin validation متناسب با cookie auth.
- تعریف CSP سازگار با API، WebSocket، map، image و file server.
- افزودن HSTS، Referrer-Policy، Permissions-Policy، nosniff و frame-ancestors.
- sanitize قطعی HTML تولیدشده توسط editor در مرز backend.
- اعتبارسنجی server-side نوع، حجم، extension و محتوای upload.
- dependency audit، secret scan و جلوگیری از log شدن OTP/token/PII.
معیار پذیرش
- refresh token از DevTools JavaScript قابل خواندن نباشد.
- تستهای session rotation، CSRF و XSS پاس شوند.
- security headers روی پاسخ production تأیید شوند.
- یافته Critical/High باز در ممیزی امنیتی وجود نداشته باشد.
۴. refactor معماری و DRY
هدف
کاهش coupling و امکان تغییر featureها بدون regression گسترده.
کارها
- شکستن
PaginatedListبه:- query/state hook
- table renderer
- filter controls
- pagination
- export action
- شکستن
Inputبه کنترلهای typed مجزا و API ترکیبی مشترک. - انتقال business logic از pageها به feature hook/service.
- حذف تبدیلهای تکراری response و type assertionهای ناامن.
- تعریف الگوی واحد data fetching شامل cache، retry، abort و invalidation.
- محدود کردن Contextهای global و انتقال providerها به نزدیکترین layout مصرفکننده.
- انتقال محتوای غیرتعاملی و public fetching به Server Component.
معیار پذیرش
- رفتار قبلی با component/E2E test حفظ شود.
- فایلهای feature عادی ترجیحاً زیر ۳۰۰ خط باشند.
- cycle در import graph و duplicate business rule وجود نداشته باشد.
۵. error handling، accessibility و UX مرزی
هدف
کاربر در خطا، کندی شبکه، keyboard navigation و deviceهای مختلف مسیر قابل فهم داشته باشد.
کارها
- مدل خطای واحد برای validation، network، auth، permission و server.
- error boundary سطح route و feature با retry و request ID.
- حالتهای loading، skeleton، empty، offline، timeout و retry برای تمام صفحات.
- جلوگیری از double-submit و تعریف optimistic update فقط در عملیات امن.
- حفظ filter/page هنگام back navigation.
- keyboard navigation، focus trap/restore، label، description و live region.
- بررسی contrast، reduced motion، zoom و screen reader.
- اجرای axe در component و E2E test.
معیار پذیرش
- axe در مسیرهای اصلی violation بحرانی/جدی نداشته باشد.
- تمام flowهای اصلی فقط با keyboard قابل انجام باشند.
- هر درخواست async حالت loading، error و retry مشخص داشته باشد.
۶. performance و مرزبندی Next.js
هدف
کاهش JavaScript سمت client و دستیابی پایدار به Core Web Vitals مناسب.
کارها
- تحلیل bundle و تعیین budget برای routeهای اصلی.
- dynamic import برای editor، map، chart، QR و کتابخانههای سنگین.
- استفاده درست از
next/imageو تعیین sizes/priority. - کاهش client boundary و providerهای root.
- cache/revalidation صحیح صفحات عمومی SEO.
- حذف hydration و renderهای غیرضروری.
- ثبت Web Vitals واقعی و اصلاح براساس داده production.
معیار پذیرش
- p75 موبایل: LCP ≤ 2.5s، INP ≤ 200ms و CLS ≤ 0.1.
- budget تعریفشده bundle در CI enforce شود.
- route عمومی بدون نیاز، client-side data fetching نداشته باشد.
۷. عملیات Production و PWA
هدف
انتشار قابل مشاهده، قابل rollback و قابل پشتیبانی باشد.
کارها
- Docker image کوچک، reproducible و non-root با health check.
- جداسازی config و secret محیطهای dev/staging/production.
- error monitoring با source map خصوصی و release tag.
- داشبورد Web Vitals، خطاهای API/WebSocket و نرخ شکست login/payment.
- alert با threshold و runbook مشخص.
- smoke test خودکار پس از deploy.
- canary یا rollout تدریجی و rollback آزمایششده.
- سیاست cache Service Worker؛ عدم cache داده خصوصی.
- update flow نسخه PWA، offline fallback و تست push روی device واقعی.
معیار پذیرش
- deploy و rollback در staging عملاً تمرین شده باشند.
- خطای عمدی client با release و source map در monitoring دیده شود.
- smoke test پس از deploy خودکار و blocking باشد.
۸. ممیزی نهایی و Release gate
کارها
- تست Chrome، Firefox، Safari و مرورگر Android هدف.
- تست موبایل واقعی روی شبکه کند و قطع/وصل شبکه.
- load test flowهای auth، discovery، booking و payment callback.
- ممیزی امنیتی و accessibility مستقل.
- اجرای restore/rollback drill.
- انتشار محدود beta و بررسی telemetry قبل از rollout کامل.
معیار پذیرش
- هیچ issue با شدت Critical یا High باز نباشد.
- issueهای Medium پذیرفتهشده owner و deadline داشته باشند.
- Product، Engineering و Operations چکلیست release را تأیید کنند.
ترتیب تحویل
هر مرحله در یک تغییر قابل review تحویل میشود. گزارش هر مرحله شامل فایلهای تغییرکرده، تصمیمهای معماری، فرمانهای راستیآزمایی، ریسکهای باقیمانده و مرحله بعد خواهد بود.