داشبورد بین‌المللی Admoon

نمای کلی

توسعه کامل یک پلتفرم سازمانی دوپورتاله (پورتال کاربران و ERP ادمین) از صفر با چالش‌های فنی عمده‌ای همراه بود: فراخوانی‌های همزمان API در زمان انقضای توکن JWT باعث ارسال درخواست‌های تکراری رفرش و ابطال نشست می‌شد، اسکیمای یکپارچه فرم‌ها در مراحل ثبت سفارش تاخیر در تایپ ایجاد می‌کرد و فرآیندهای ممیزی ادمین نیازمند اقدام سریع بدون رفرش‌های مکرر صفحه بود.

طراحی معماری و توسعه کامل کل فرانت‌اند سامانه به صورت انفرادی و از صفر با Vite، React و TypeScript. پیاده‌سازی صف سابسکرایبر در اینترسپتور Axios جهت سری‌سازی درخواست‌های همزمان در زمان تمدید خاموش توکن، ایزوله‌سازی مراحل فرم در ویزارد با اسکیماهای تفکیک‌شده Zod و سایدبار محاسباتی آنلاین، و طراحی کشوهای تعاملی Material-UI همراه با همگام‌سازی خوش‌بینانه کش در TanStack Query.

مالکیت توسعه
پیاده‌سازی کامل از صفر (سولو)
تمدید خودکار توکن
صف خاموش JWT (۱۸۵ms)
پاسخگویی تعامل (INP)
کمتر از ۴۶ میلی‌ثانیه
داشبورد بین‌المللی Admoon
چالش‌های مهندسی

گلوگاه‌های فنی، عملکرد رندرینگ و معماری مقیاس‌پذیر

توسعه کامل یک پلتفرم سازمانی دوپورتاله (پورتال کاربران و ERP ادمین) از صفر با چالش‌های فنی عمده‌ای همراه بود: فراخوانی‌های همزمان API در زمان انقضای توکن JWT باعث ارسال درخواست‌های تکراری رفرش و ابطال نشست می‌شد، اسکیمای یکپارچه فرم‌ها در مراحل ثبت سفارش تاخیر در تایپ ایجاد می‌کرد و فرآیندهای ممیزی ادمین نیازمند اقدام سریع بدون رفرش‌های مکرر صفحه بود.

چالش‌های کلیدی پیاده‌سازی و راهکارهای فنی:

شرایط رقابتی در زمان انقضای همزمان توکن JWT (خطای 401 موازی)

شکست همزمان چند کوئری موازی با خطای ۴۰۱ باعث ارسال چندباره درخواست رفرش توکن و ابطال نشست کاربر می‌شد.

↳ ایجاد صف مشترک در حافظه (refreshSubscribers) درون اینترسپتور Axios. با اولین خطای ۴۰۱، سایر درخواست‌های همزمان به شکل کال‌بک در صف ذخیره شده و پس از دریافت توکن جدید با موفقیت ارسال مجدد می‌شوند.

سنگینی حافظه و ری‌رندرهای مکرر در ویزاردهای چندمرحله‌ای سفارش

فیلدهای تودرتوی انتخاب ارز، اسلایدرهای بودجه و فرم‌های تو در تو در یک کانتکست مشترک باعث افت شدید سرعت تایپ می‌شدند.

↳ تجزیه فرم به زیرشاخه‌های کامپوننتی مجزا برای هر مرحله، اعتبارسنجی هر مرحله با اسکیمای مستقل Zod و نگهداری وضعیت پیش‌نویس در اسلایس‌های اختصاصی Zustand.

مدیریت وضعیت کشوهای ادمین و همگام‌سازی بدون وقفه کش داده‌ها

باز و بسته شدن پیاپی کشوهای ممیزی و دریافت دوباره کل داده‌ها از سرور موجب جهش چیدمان و کندی رابط کاربری می‌شد.

↳ جداسازی وضعیت کشوها در استور سبک Zustand و اعمال تغییرات خوش‌بینانه در کش TanStack Query جهت باز شدن آنی پورتال‌ها بدون Layout Shift.

بودجه عملکردی

معیارهای عملکردی و استانداردهای کیفی فرانت‌اند

0146ms

Interaction to Next Paint (INP)

Target Budget: < 100ms

اندازه‌گیری‌شده در پنل Performance کروم هنگام باز شدن کشوهای تو در توی ادمین. حفظ روانی ترد اصلی با ورودی‌های کنترل‌نشده React Hook Form و پورتال‌های ایزوله کشوهای ادمین.

02185ms

Silent Token Refresh Latency

Target Budget: < 300ms

اندازه‌گیری‌شده با تایمینگ تب Network در Chrome DevTools (از لحظه دریافت ۴۰۱ تا ارسال مجدد و موفقیت‌آمیز درخواست با توکن جدید). صف‌بندی کال‌بک‌های درخواست در حافظه بدون نیاز به ری‌لود مرورگر.

038.2ms

Data Grid Filter Commit Time

Target Budget: < 16ms

اندازه‌گیری‌شده با زمان ثبت کامیت در فلیم‌گراف React DevTools Profiler هنگام فیلتر کردن بیش از ۱,۰۰۰ سطر لید. ممویز کردن ستون‌های TanStack Table و جستجوی ایندکس‌شده سمت کلاینت.

صفحات و بخش‌های پروژه

معماری اجزا و بررسی کامل صفحات

ویزارد چندمرحله‌ای انتخاب خدمات آنلاین

جریان کاربری آنبوردینگ مشتریان جهت انتخاب خدمات اختصاصی آژانس (راه‌اندازی اکانت، ممیزی کمپین و رفع مسدودی) با مسیریابی خودکار زیرفرایندها بر اساس انتخاب‌ها.

ویزارد چندمرحله‌ای انتخاب خدمات آنلاین

فرم سفارش هوشمند و موتور محاسبه بلادرنگ قیمت

مرحله سوم ویزارد سفارش شامل فیلدهای شرطی اهداف تبلیغاتی، سطوح کارمزد و گزینه‌های چندارزی همراه با سایدبار محاسبه آنلاین قیمت بدون Layout Shift.

فرم سفارش هوشمند و موتور محاسبه بلادرنگ قیمت

پایش تله‌متری اکانت تبلیغاتی و کنترل سقف بودجه

رابط اختصاصی نظارت بر اکانت ادز برای مشتریان جهت رهگیری بلادرنگ مانده، سقف بودجه روزانه، تاریخچه تراکنش‌ها و ثبت درخواست افزایش اعتبار.

پایش تله‌متری اکانت تبلیغاتی و کنترل سقف بودجه

کشوهای تعاملی ادمین؛ ممیزی مالی، مدیریت ریسک و CRM

پیاده‌سازی کشوهای جانبی تعاملی (Contextual Drawers) برای تسریع فرآیندهای مدیریتی آژانس: بررسی رسیدهای بانکی و تایید شارژ، ممیزی درخواست‌های اجاره اکانت با کدهای استاندارد رد و ثبت یادداشت‌های داخلی، و ثبت نتایج جلسات مشاوره لیدها در CRM. تمامی اکشن‌ها با همگام‌سازی لحظه‌ای کش در TanStack Query و بدون رفرش صفحه اجرا می‌شوند.

کشوهای تعاملی ادمین؛ ممیزی مالی، مدیریت ریسک و CRM 1
کشوهای تعاملی ادمین؛ ممیزی مالی، مدیریت ریسک و CRM 2
کشوهای تعاملی ادمین؛ ممیزی مالی، مدیریت ریسک و CRM 3
ماژول‌های مهندسی

قابلیت‌ها و پیاده‌سازی‌های کلیدی فرانت‌اند

01ماژول فرانت‌اند

معماری و توسعه ۱۰۰٪ انفرادی از صفر

طراحی و پیاده‌سازی کامل معماری فرانت‌اند هر دو پنل به صورت مستقل و بدون وابستگی به قالب‌های آماده.

  • ▸پیاده‌سازی ساختار ماژولار مبتنی بر ویژگی (user-panel و admin-panel) در Vite، React و TypeScript
  • ▸طراحی سیستم تم، متغیرها و کامپوننت‌های اتمیک بر پایه Material-UI مطابق با نیازهای اختصاصی آژانس
  • ▸مدیریت کامل چرخه توسعه از پایه‌ریزی اولیه تا تحویل نسخه پروداکشن
02ماژول فرانت‌اند

صف تمدید خاموش توکن JWT در حافظه

پیاده‌سازی چرخه حیات تمدید احراز هویت با اینترسپتورهای Axios بدون افت نشست.

  • ▸صف‌بندی درخواست‌های همزمان در حافظه (refreshSubscribers) حین تمدید توکن
  • ▸جلوگیری از ارسال رفرش تکراری و پیشگیری از خروج ناخواسته کاربران از سیستم
  • ▸ارسال مجدد خودکار درخواست‌ها در ۱۸۵ میلی‌ثانیه بدون نیاز به رفرش صفحه
03ماژول فرانت‌اند

موتور ویزارد فرم‌های چندمرحله‌ای تفکیک‌شده

معماری ماژولار فرم‌های چندمرحله‌ای با React Hook Form و اعتبارسنجی مستقل Zod.

  • ▸کاهش ۸۵ درصدی رندرهای غیرضروری با اشتراک ورودی‌های کنترل‌نشده
  • ▸اسکیماهای تفکیک‌شده Zod با حفظ وضعیت پیش‌نویس در حین جابجایی مراحل
  • ▸سایدبار محاسباتی پویای قیمت با آپدیت لحظه‌ای و بدون تغییر چیدمان DOM
04ماژول فرانت‌اند

کشوهای کانتکست‌محور ادمین با پورتال‌های ایزوله

ساخت کشوهای جانبی تعاملی مبتنی بر پورتال برای انجام سریع امور ممیزی و تایید سفارشات.

  • ▸اکشن‌های سریع جهت تایید شارژ، ممیزی ریسک و ثبت جلسات لیدهای CRM
  • ▸پورتال‌های ایزوله جهت حفظ شاخص INP زیر ۴۶ میلی‌ثانیه در تعاملات سریع
  • ▸اتصال به TanStack Query برای جهش‌های خوش‌بینانه و ابطال خودکار کش
تصمیمات معماری و بده‌بستان‌ها

تحلیل تصمیمات فنی و چرایی انتخاب ابزارها

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

تصمیم ۰1Architecture

معماری احراز هویت: صف سابسکرایبر در حافظه در برابر تایمرهای دوره‌ای

✓ راهکار انتخاب‌شده

صف اشتراکی در اینترسپتور Axios

✕ گزینه بررسی‌شده

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

تحلیل فنی و دلیل انتخاب

تایمرهای پیش‌دستانه (setTimeout) به دلیل نوسان زمان و عدم فعالیت کاربر می‌توانند ترافیک بیهوده ایجاد کنند. واکنش به اولین خطای ۴۰۱ و بافر کردن درخواست‌ها تمدید توکن را دقیقاً در زمان نیاز و بدون هیچ خطایی انجام می‌دهد.

تصمیم ۰2Architecture

کامپوننت جدول داده‌ها: TanStack Table بدون استایل در برابر MUI DataGrid

✓ راهکار انتخاب‌شده

استفاده از کتابخانه Headless TanStack Table

✕ گزینه بررسی‌شده

کتابخانه‌های سنگین MUI DataGrid Pro یا AG-Grid Enterprise

تحلیل فنی و دلیل انتخاب

کامپوننت‌های سنگینی مثل MUI DataGrid Pro حدود ۱۸۰ کیلوبایت به باندل اضافه کرده و استایل‌های صلب دارند. کتابخانه TanStack Table کنترل کامل نشانه‌گذاری DOM، مجازی‌سازی و تم اختصاصی را با کمتر از ۱۵ کیلوبایت حجم فراهم می‌کند.

تصمیم ۰3Architecture

اعتبارسنجی فرم: اسکیماهای تفکیک‌شده Zod در برابر فرم یکپارچه

✓ راهکار انتخاب‌شده

استفاده از React Hook Form همراه با اسکیماهای مرحله‌ای Zod

✕ گزینه بررسی‌شده

کتابخانه Formik با یک اسکیمای کلی Yup

تحلیل فنی و دلیل انتخاب

فرم‌های یکپارچه Formik در هر کلید ورودی کل ساختار را ری‌رندر می‌کردند. اسکیماهای تفکیک‌شده Zod همراه با رفرنس‌های کنترل‌نشده React Hook Form لگ ورودی را به زیر ۵ میلی‌ثانیه رساندند.

تصمیم ۰4Architecture

مدیریت وضعیت: الگوی Slice در Zustand در برابر Redux Toolkit

✓ راهکار انتخاب‌شده

استفاده از Zustand با الگوی Slice و ماندگاری انتخابی

✕ گزینه بررسی‌شده

کتابخانه Redux Toolkit (RTK) به همراه Redux-Persist

تحلیل فنی و دلیل انتخاب

ریداکس تولکیت برای وضعیت‌های صرفاً رابط کاربری (باز و بسته شدن کشوها، تب‌های فعال) کدهای تکراری زیادی ایجاد می‌کرد. Zustand امکان سابسکرایب اتمیک و سبک را بدون بویلرپلیت فراهم ساخت.

راهکار مهندسی

راهکار فنی پیاده‌سازی‌شده

طراحی معماری و توسعه کامل کل فرانت‌اند سامانه به صورت انفرادی و از صفر با Vite، React و TypeScript. پیاده‌سازی صف سابسکرایبر در اینترسپتور Axios جهت سری‌سازی درخواست‌های همزمان در زمان تمدید خاموش توکن، ایزوله‌سازی مراحل فرم در ویزارد با اسکیماهای تفکیک‌شده Zod و سایدبار محاسباتی آنلاین، و طراحی کشوهای تعاملی Material-UI همراه با همگام‌سازی خوش‌بینانه کش در TanStack Query.

Build & Core

Vite + React + TypeScript (Solo Architecture)

Routing & Architecture

React Router (Clean domain separation between User and Admin portals)

Token Setup & HTTP

Axios + Silent JWT refresh handler with in-memory subscriber queuing

Form & Wizard Engine

React Hook Form + Zod (step-isolated schema validation & conditional fields)

Dynamic Drawers & UI

Material-UI (MUI) custom drawer overlays with contextual action handlers

State Management

Zustand (slice pattern, devtools, selective persistence middleware)

Server State & Caching

TanStack Query (React Query) wrapping Orval OpenAPI client functions

Data Grids

TanStack Table (headless, virtualized pagination, sorting & column visibility)

Data Visualization

ApexCharts (interactive reporting dashboards & lead funnels)

نتایج و دستاوردها

تاثیر بر پروژه و آموخته‌های کلیدی

01

پیاده‌سازی یک پلتفرم سازمانی دوپورتاله به صورت کامل و از صفر نیازمند مرزبندی‌های ماژولار دقیق در ساختار پوشه‌ها و استیت است.

02

صف‌بندی درخواست‌های همزمان در حافظه (refreshSubscribers) در زمان دریافت خطای ۴۰۱، مانع از انحراف توکن و قطعی نشست کاربران فعال می‌شود.

03

تفکیک ویزاردهای پیچیده چندمرحله‌ای به ساب‌فرم‌های مستقل با اعتبارسنجی مجزای Zod، تاخیر در تایپ را به زیر ۵ میلی‌ثانیه کاهش می‌دهد.