Files
docs/cms/SITE-PAGES-SIMPLIFICATION.md
T

32 KiB
Raw Blame History

ساده‌سازی سیستم مدیریت صفحات سایت

تاریخ: ۱۳۹۶/۱۱/۲۸ (2026-02-17)
وضعیت: طرح اولیه — منتظر تأیید
اولویت: بالا


۱. خلاصه مسئله

وضعیت فعلی (مشکلات)

سیستم فعلی مدیریت صفحات بیش از حد انعطاف‌پذیر و پیچیده طراحی شده:

مشکل توضیح
سیستم عمومی Section/Key ادمین باید SectionKey رو دقیق تایپ کنه (مثلاً value-1, team-2). یه اشتباه تایپی باعث میشه فرانت اون بخش رو پیدا نکنه
ExtraData به‌صورت JSON خام اطلاعات تماس (آدرس/تلفن/ایمیل) و شبکه‌های اجتماعی داخل textarea به JSON خام نوشته میشه — خطاپذیر
HTML Editor برای همه‌چیز حتی برای متن‌های ساده (عنوان یک Value) از HTML Editor استفاده میشه
CRUD نامحدود ادمین میتونه صفحات جدید بسازه ولی فرانت فقط about و contact رو میشناسه
لندینگ پیج کاملاً هاردکد محتوای لندینگ (Steps, Features, Stats, FAQ, Testimonials) داخل کد C# هاردکد شده و از CMS استفاده نمیکنه
صفحه مجوزها وجود نداره هیچ صفحه‌ای برای نمایش نمادهای اعتماد و مجوزها نداریم

هدف

۴ صفحه مشخص با فرم‌های اختصاصی (نه عمومی) در پنل ادمین:

# صفحه محتوای قابل ویرایش طراحی
1 لندینگ عنوان hero، زیرعنوان، متن دکمه‌ها، عناوین سکشن‌ها، متن مراحل/ویژگی‌ها/سوالات/آمار چیدمان ثابت — فقط متن‌ها قابل تغییر
2 درباره ما عنوان، چشم‌انداز، مأموریت، ارزش‌ها (عنوان+متن+آیکون)، اعضای تیم (نام+سمت+تصویر) چیدمان ثابت — تعداد ارزش‌ها و اعضا قابل تغییر
3 تماس با ما آدرس، تلفن، ایمیل، ساعات کاری، لینک شبکه‌های اجتماعی چیدمان ثابت — فقط اطلاعات قابل تغییر
4 مجوزها 🆕 تصاویر مجوزها با عنوان و لینک (نماد اعتماد الکترونیکی و ...) ساده و یکپارچه

۲. معماری جدید — Structured Page Settings

فلسفه طراحی

❌ قبلی:  Generic Sections + Free-form Keys + Raw JSON
✅ جدید:  Typed Settings per Page + Structured Forms + Fixed Layout

به‌جای اینکه هر صفحه N تا Section داشته باشه با Key‌های دلخواه، هر صفحه یک مدل مشخص با فیلدهای تایپ‌شده داره.

۲.۱ مدل‌های داده جدید (Database)

جدول SitePageSettings (جایگزین SitePage + SitePageSection)

┌─────────────────────────────────────────────┐
│              SitePageSettings                │
├─────────────────────────────────────────────┤
│ Id              : long (PK)                  │
│ PageKey         : string(50) [UNIQUE INDEX]  │  ← "landing" | "about" | "contact" | "licenses"
│ Title           : string(200)                │
│ MetaDescription : string?(300)               │
│ HeroTitle       : string?(200)               │
│ HeroSubtitle    : string?(500)               │
│ HeroImagePath   : string?                    │
│ IsActive        : bool                       │
│ SettingsJson    : string (JSON Column)       │  ← ⭐ Typed JSON per PageKey
│ + Audit fields                               │
└─────────────────────────────────────────────┘

جدول SitePageImage (برای مجوزها و تصاویر تیم)

┌─────────────────────────────────────────────┐
│              SitePageImage                   │
├─────────────────────────────────────────────┤
│ Id              : long (PK)                  │
│ SitePageSettingsId : long (FK)               │
│ ImageGroup      : string(50)                 │  ← "licenses" | "team" | "values"
│ Title           : string?(200)               │
│ Subtitle        : string?(300)               │
│ Description     : string?                    │
│ ImagePath       : string                     │
│ ThumbnailPath   : string?                    │
│ LinkUrl         : string?                    │  ← برای مجوزها: لینک به سایت مرجع
│ IconName        : string?(100)               │
│ SortOrder       : int                        │
│ IsActive        : bool                       │
│ + Audit fields                               │
└─────────────────────────────────────────────┘

SettingsJson — ساختار به‌ازای هر صفحه

Landing (PageKey = "landing"):

{
  "heroButtonPrimaryText": "شروع کنید",
  "heroButtonSecondaryText": "بیشتر بدانید",
  "steps": [
    { "title": "ثبت‌نام", "description": "...", "iconName": "PersonAdd" }
  ],
  "features": [
    { "title": "پشتیبانی ۲۴/۷", "description": "...", "iconName": "Support" }
  ],
  "stats": [
    { "label": "کاربران فعال", "value": 15000, "suffix": "+" }
  ],
  "testimonials": [
    { "name": "علی محمدی", "role": "کاربر", "text": "...", "rating": 5 }
  ],
  "faqs": [
    { "question": "سوال ۱", "answer": "جواب ۱", "category": "عمومی" }
  ],
  "featuredBlogEnabled": true,
  "ctaTitle": "همین الان شروع کنید",
  "ctaDescription": "...",
  "ctaButtonText": "ثبت‌نام رایگان"
}

About (PageKey = "about"):

{
  "visionTitle": "چشم‌انداز",
  "visionText": "...",
  "missionTitle": "مأموریت", 
  "missionText": "...",
  "valuesTitle": "ارزش‌های ما",
  "teamTitle": "تیم ما"
}
  • SitePageImage records با ImageGroup = "values" برای ارزش‌ها
  • SitePageImage records با ImageGroup = "team" برای اعضای تیم

Contact (PageKey = "contact"):

{
  "address": "تهران، ...",
  "phone": "021-12345678",
  "email": "info@kbs1.ir",
  "workingHours": "شنبه تا چهارشنبه ۹ تا ۱۸",
  "telegramUrl": "https://t.me/...",
  "instagramUrl": "https://instagram.com/...",
  "linkedinUrl": "https://linkedin.com/...",
  "whatsappUrl": "https://wa.me/...",
  "mapLatitude": 35.6892,
  "mapLongitude": 51.3890,
  "formSubjects": ["پشتیبانی فنی", "پیشنهاد همکاری", "سایر"]
}

Licenses (PageKey = "licenses"):

{
  "pageDescription": "مجوزها و نمادهای اعتماد",
  "displayStyle": "grid"
}
  • SitePageImage records با ImageGroup = "licenses" — هر مجوز: Title + ImagePath + LinkUrl

۳. تغییرات به‌ازای هر لایه

۳.۱ دیتابیس (CMS — Entity Framework)

عملیات فایل/محل توضیح
حذف SitePage entity جایگزین با SitePageSettings
حذف SitePageSection entity جایگزین با SitePageImage (فقط برای آیتم‌های تصویری)
ایجاد SitePageSettings.cs Entity جدید با SettingsJson
ایجاد SitePageImage.cs Entity جدید برای تصاویر (مجوزها، تیم، ارزش‌ها)
تغییر DbContextSitePageConfiguration Configuration جدید
تغییر SitePageSeedData.cs Seed data جدید برای ۴ صفحه
Migration EF Migration Data migration از ساختار قدیم به جدید

۳.۲ Proto / gRPC Contract

عملیات توضیح
بازنویسی site_pages.proto — حذف ۱۰ RPC قبلی، جایگزین با ۴ RPC ساده
service SitePageSettingsService {
  // دریافت تنظیمات صفحه با کلید (FrontOffice)
  rpc GetPageSettings (GetPageSettingsRequest) returns (PageSettingsResponse);
  
  // ذخیره تنظیمات صفحه (BackOffice — Admin)
  rpc SavePageSettings (SavePageSettingsRequest) returns (SavePageSettingsResponse);
  
  // مدیریت تصاویر صفحه (مجوزها، تیم، ارزش‌ها)
  rpc SavePageImage (SavePageImageRequest) returns (SavePageImageResponse);
  rpc DeletePageImage (DeletePageImageRequest) returns (DeletePageImageResponse);
  
  // لیست همه صفحات (BackOffice)
  rpc GetAllPages (GetAllPagesRequest) returns (GetAllPagesResponse);
}

۳.۳ CMS Backend (Application Layer)

عملیات فایل‌ها توضیح
حذف ۲۲ فایل Command/Query فعلی CQRS handlers قدیمی
ایجاد GetPageSettingsQuery + Handler دریافت Settings + Images
ایجاد SavePageSettingsCommand + Handler + Validator ذخیره JSON با اعتبارسنجی
ایجاد SavePageImageCommand + Handler آپلود/ویرایش تصویر
ایجاد DeletePageImageCommand + Handler حذف تصویر
ایجاد GetAllPagesQuery + Handler لیست صفحات
تغییر gRPC Service SitePageGrpcService بازنویسی

۳.۴ FrontOffice (Blazor Server — سمت مشتری)

عملیات فایل توضیح
تغییر SitePageService.cs ساده‌سازی — فقط GetPageSettings(pageKey)
تغییر Index.razor + .cs بزرگ‌ترین تغییر: از هاردکد به CMS-driven. چیدمان ثابت میمونه، فقط متن‌ها از SettingsJson خونده میشه
تغییر AboutUs.razor + .cs ساده‌تر — خواندن مستقیم فیلدهای typed به‌جای key-matching
تغییر ContactUs.razor + .cs ساده‌تر — خواندن مستقیم فیلدها بدون JSON parsing
ایجاد Licenses.razor + .cs 🆕 صفحه جدید مجوزها

۳.۵ BackOffice (Blazor WASM — پنل ادمین)

عملیات فایل توضیح
حذف ۵ فایل Dialog فعلی CreateSitePageDialog, EditSitePageDialog, SitePageSectionsDialog, SitePageSectionEditDialog
حذف SitePageManagement.razor + .cs فعلی جایگزین
ایجاد PageSettingsManagement.razor صفحه اصلی — لیست ۴ صفحه ثابت
ایجاد LandingPageSettings.razor 🌟 فرم اختصاصی لندینگ
ایجاد AboutPageSettings.razor 🌟 فرم اختصاصی درباره‌ما
ایجاد ContactPageSettings.razor 🌟 فرم اختصاصی تماس
ایجاد LicensesPageSettings.razor 🌟 فرم اختصاصی مجوزها
تغییر ISitePageService + Impl ساده‌سازی interface

۴. طراحی UI پنل ادمین (BackOffice)

۴.۱ صفحه اصلی مدیریت صفحات

┌─────────────────────────────────────────────────────────┐
│  مدیریت صفحات سایت                                      │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐ │
│  │ 🏠       │  │ 👥       │  │ 📞       │  │ 🏅       │ │
│  │ لندینگ   │  │ درباره‌ما│  │ تماس    │  │ مجوزها   │ │
│  │          │  │          │  │          │  │          │ │
│  │ [ویرایش] │  │ [ویرایش] │  │ [ویرایش] │  │ [ویرایش] │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘ │
│                                                          │
│  ℹ️ صفحات سایت ثابت هستند و فقط محتوای آنها              │
│     قابل ویرایش است                                      │
└─────────────────────────────────────────────────────────┘

۴.۲ فرم ویرایش لندینگ (نمونه)

┌─────────────────────────────────────────────────────────┐
│  ← بازگشت          تنظیمات صفحه لندینگ                   │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ── Hero Section ──────────────────────────────────────  │
│  عنوان:        [_______________________________]        │
│  زیرعنوان:     [_______________________________]        │
│  تصویر پس‌زمینه: [📎 انتخاب فایل]                       │
│  متن دکمه اصلی: [_____________]                         │
│  متن دکمه ثانویه:[_____________]                        │
│                                                          │
│  ── مراحل (Steps) ─────────────────────────────────────  │
│  ┌────┬──────────────┬──────────────────┬────────┐      │
│  │ # │ عنوان        │ توضیح            │ آیکون  │      │
│  ├────┼──────────────┼──────────────────┼────────┤      │
│  │ 1  │ [ثبت‌نام   ] │ [در کمتر از...] │ [🔍]   │      │
│  │ 2  │ [دعوت      ] │ [لینک اختصاصی ] │ [🔍]   │      │
│  │ 3  │ [دریافت    ] │ [پاداش‌های...  ] │ [🔍]   │      │
│  │    │              │  [+ افزودن مرحله]│        │      │
│  └────┴──────────────┴──────────────────┴────────┘      │
│                                                          │
│  ── ویژگی‌ها (Features) ────────────────────────────────  │
│  (مشابه بالا — جدول قابل ویرایش)                         │
│                                                          │
│  ── آمار (Stats) ──────────────────────────────────────  │
│  ┌──────────────┬─────────┬────────┐                    │
│  │ برچسب        │ مقدار   │ پسوند  │                    │
│  ├──────────────┼─────────┼────────┤                    │
│  │ [کاربران    ] │ [15000] │ [+]    │                    │
│  └──────────────┴─────────┴────────┘                    │
│                                                          │
│  ── نظرات مشتریان ─────────────────────────────────────  │
│  (جدول: نام، نقش، متن، امتیاز)                           │
│                                                          │
│  ── سوالات متداول (FAQ) ───────────────────────────────  │
│  (جدول: سوال، جواب، دسته‌بندی)                           │
│                                                          │
│  ── CTA Banner ────────────────────────────────────────  │
│  عنوان:     [_______________]                            │
│  توضیح:     [_______________]                            │
│  متن دکمه:  [_______________]                            │
│                                                          │
│          [💾 ذخیره تغییرات]                               │
└─────────────────────────────────────────────────────────┘

۴.۳ فرم ویرایش تماس با ما

┌─────────────────────────────────────────────────────────┐
│  ← بازگشت          تنظیمات صفحه تماس با ما               │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ── اطلاعات تماس ─────────────────────────────────────  │
│  آدرس:       [_______________________________]          │
│  تلفن:       [_______________________________]          │
│  ایمیل:      [_______________________________]          │
│  ساعات کاری: [_______________________________]          │
│                                                          │
│  ── شبکه‌های اجتماعی ─────────────────────────────────  │
│  تلگرام:     [_______________________________]          │
│  اینستاگرام: [_______________________________]          │
│  لینکدین:    [_______________________________]          │
│  واتس‌اپ:    [_______________________________]          │
│                                                          │
│  ── تنظیمات فرم تماس ─────────────────────────────────  │
│  موضوعات:    [پشتیبانی فنی ×] [پیشنهاد همکاری ×]       │
│              [+ افزودن موضوع]                            │
│                                                          │
│          [💾 ذخیره تغییرات]                               │
└─────────────────────────────────────────────────────────┘

۴.۴ فرم مجوزها (جدید)

┌─────────────────────────────────────────────────────────┐
│  ← بازگشت          مدیریت مجوزها و نمادهای اعتماد        │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  توضیح صفحه: [_______________________________]          │
│                                                          │
│  ── مجوزها ────────────────────────────────────────────  │
│  ┌──────┬──────────────┬─────────────────┬────────────┐ │
│  │ تصویر│ عنوان        │ لینک            │ عملیات     │ │
│  ├──────┼──────────────┼─────────────────┼────────────┤ │
│  │ [🖼] │ [نماد اعتماد]│ [https://...]   │ [🗑] [↕]   │ │
│  │ [🖼] │ [ساماندهی  ] │ [https://...]   │ [🗑] [↕]   │ │
│  │ [🖼] │ [مجوز کسب..] │ [https://...]   │ [🗑] [↕]   │ │
│  └──────┴──────────────┴─────────────────┴────────────┘ │
│                                                          │
│  [+ افزودن مجوز جدید]                                    │
│                                                          │
│          [💾 ذخیره تغییرات]                               │
└─────────────────────────────────────────────────────────┘

۵. طراحی UI فرانت مشتری (FrontOffice)

۵.۱ صفحه مجوزها (جدید — /licenses)

┌─────────────────────────────────────────────────────────┐
│  [Header / Navbar]                                       │
├─────────────────────────────────────────────────────────┤
│                                                          │
│            🏅 مجوزها و نمادهای اعتماد                    │
│         توضیح کوتاه صفحه از CMS                          │
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │          │  │          │  │          │               │
│  │  [تصویر] │  │  [تصویر] │  │  [تصویر] │               │
│  │          │  │          │  │          │               │
│  │ نماد     │  │ ساماندهی │  │ مجوز     │               │
│  │ اعتماد   │  │          │  │ کسب‌وکار │               │
│  └──────────┘  └──────────┘  └──────────┘               │
│                                                          │
│  (هر تصویر لینک‌دار — کلیک = باز شدن سایت مرجع)         │
│                                                          │
├─────────────────────────────────────────────────────────┤
│  [Footer]                                                │
└─────────────────────────────────────────────────────────┘

۵.۲ تغییرات سایر صفحات

  • لندینگ: بدون تغییر ظاهری — فقط منبع داده از هاردکد به CMS تغییر میکنه
  • درباره ما: بدون تغییر ظاهری — کد ساده‌تر میشه
  • تماس با ما: بدون تغییر ظاهری — کد ساده‌تر میشه

۶. Migration Plan — مراحل اجرا

فاز ۱: دیتابیس و Backend (CMS)

مدت تخمینی: ۱ روز
# تسک جزئیات
1.1 ایجاد Entity‌های جدید SitePageSettings, SitePageImage
1.2 ایجاد EF Configuration Indexes, relationships, JSON column
1.3 نوشتن Migration SimplifySitePages — ایجاد جدول‌های جدید
1.4 نوشتن Data Migration انتقال داده از SitePage/SitePageSection به ساختار جدید
1.5 Seed Data جدید ۴ صفحه: landing, about, contact, licenses
1.6 حذف Entity‌های قدیمی بعد از تأیید migration موفق

فاز ۲: Proto و gRPC Service

مدت تخمینی: ۰.۵ روز
# تسک جزئیات
2.1 بازنویسی site_pages.proto ۵ RPC جدید (Get, Save, Image CRUD, List)
2.2 بازنویسی gRPC Service SitePageSettingsGrpcService
2.3 نوشتن CQRS Handlers ۵ handler جدید
2.4 Validators اعتبارسنجی SettingsJson بر اساس PageKey

فاز ۳: BackOffice (پنل ادمین)

مدت تخمینی: ۱.۵ روز
# تسک جزئیات
3.1 حذف UI قدیمی ۵ فایل dialog + management page
3.2 صفحه اصلی PageSettingsManagement.razor — کارت‌های ۴ صفحه
3.3 فرم لندینگ LandingPageSettings.razor — فرم با سکشن‌های Steps/Features/Stats/FAQ/Testimonials/CTA
3.4 فرم درباره‌ما AboutPageSettings.razor — Vision/Mission + مدیریت Values & Team
3.5 فرم تماس ContactPageSettings.razor — فیلدهای ساده
3.6 فرم مجوزها LicensesPageSettings.razor — آپلود و مدیریت تصاویر مجوز
3.7 سرویس BackOffice ISitePageSettingsService + Implementation

فاز ۴: FrontOffice (سمت مشتری)

مدت تخمینی: ۱ روز
# تسک جزئیات
4.1 بروزرسانی SitePageService ساده‌سازی — فقط GetPageSettings
4.2 بروزرسانی Index.razor خواندن Steps/Features/Stats/FAQ/Testimonials از CMS
4.3 بروزرسانی AboutUs.razor خواندن مستقیم فیلدها (بدون key-matching)
4.4 بروزرسانی ContactUs.razor خواندن مستقیم فیلدها (بدون JSON parsing)
4.5 ایجاد Licenses.razor 🆕 صفحه جدید مجوزها
4.6 افزودن به Navigation لینک مجوزها در Footer

فاز ۵: تست و Cleanup

مدت تخمینی: ۰.۵ روز
# تسک جزئیات
5.1 تست E2E همه ۴ صفحه در FrontOffice
5.2 تست ادمین ویرایش همه ۴ صفحه از BackOffice
5.3 حذف کدهای قدیمی فایل‌هایی که دیگه استفاده نمیشن
5.4 بروزرسانی مستندات CHANGELOG, INDEX.md

۷. مقایسه قبل و بعد

کاهش پیچیدگی

معیار قبل بعد تغییر
RPC‌های gRPC 10 5 -50%
CQRS Handlers 10 (22 file) 5 (~12 file) -45%
Entity‌ها 2 (generic) 2 (typed) =
BackOffice Dialogs 4 generic 4 specific کیفیت↑
JSON خام در UI بله خیر حذف
خطای تایپ SectionKey ممکن غیرممکن حذف
لندینگ CMS-driven هاردکد CMS بهبود
صفحه مجوزها ندارد دارد 🆕

تجربه ادمین

قبل بعد
لیست صفحات → انتخاب → مدیریت سکشن‌ها → ویرایش سکشن (4 مرحله) ۴ کارت → فرم اختصاصی (2 مرحله)
JSON خام برای اطلاعات تماس فیلدهای مشخص (آدرس، تلفن، ایمیل)
HTML Editor برای عنوان ساده Text field ساده
امکان ساخت صفحه‌ای که فرانت نمیشناسه فقط ۴ صفحه مشخص

۸. ریسک‌ها و ملاحظات

ریسک شدت راه‌حل
Data migration از ساختار قدیم متوسط Script migration دقیق + بکاپ قبل از اجرا
Breaking change در Proto بالا نسخه جدید Proto NuGet + بروزرسانی هر ۳ پروژه همزمان
تصاویر موجود (hero, section images) کم مسیرها در فایل سیستم ثابت میمونن — فقط reference DB تغییر میکنه
Backward compatibility کم چون ساختار قبلی فقط ۲ صفحه فعال داشت، migration ساده‌ست

۹. فایل‌های تأثیرپذیر (خلاصه)

حذف (Delete)

CMS:
  - Domain/Entities/Content/SitePage.cs
  - Domain/Entities/Content/SitePageSection.cs
  - Application/Features/SitePages/* (22 files)
  - Infrastructure/Persistence/Configurations/SitePageConfiguration.cs
  - Infrastructure/Persistence/Configurations/SitePageSectionConfiguration.cs
  
BackOffice:
  - Pages/Content/SitePageManagement.razor + .cs
  - Pages/Content/CreateSitePageDialog.razor + .cs
  - Pages/Content/EditSitePageDialog.razor + .cs
  - Pages/Content/SitePageSectionsDialog.razor + .cs
  - Pages/Content/SitePageSectionEditDialog.razor + .cs

ایجاد (Create)

CMS:
  - Domain/Entities/Content/SitePageSettings.cs
  - Domain/Entities/Content/SitePageImage.cs
  - Application/Features/SitePageSettings/* (~12 files)
  - Infrastructure/Persistence/Configurations/SitePageSettingsConfiguration.cs
  - Infrastructure/Persistence/Configurations/SitePageImageConfiguration.cs

BackOffice:
  - Pages/Content/PageSettingsManagement.razor + .cs
  - Pages/Content/LandingPageSettings.razor + .cs  
  - Pages/Content/AboutPageSettings.razor + .cs
  - Pages/Content/ContactPageSettings.razor + .cs
  - Pages/Content/LicensesPageSettings.razor + .cs

FrontOffice:
  - Pages/Licenses.razor + .cs

Proto:
  - site_pages.proto (rewrite)

تغییر (Modify)

CMS:
  - ApplicationDbContext.cs (DbSets)
  - SitePageSeedData.cs
  - SitePageGrpcService.cs

BackOffice:
  - Services/ISitePageService.cs → ISitePageSettingsService.cs
  - Services/SitePageService.cs → SitePageSettingsService.cs
  - NavMenu (routing)

FrontOffice:
  - Services/SitePageService.cs (simplify)
  - Pages/Index.razor + .cs (CMS-driven)
  - Pages/AboutUs.razor + .cs (simplify)
  - Pages/ContactUs.razor + .cs (simplify)
  - Shared/NavMenu or Footer (add Licenses link)
  - DI registration

۱۰. نتیجه‌گیری

این تغییر یک ساده‌سازی معماری هست که:

  1. پیچیدگی غیرضروری رو حذف میکنه
  2. تجربه ادمین رو بهبود میده (فرم‌های اختصاصی به‌جای فرم‌های عمومی)
  3. خطاهای انسانی رو کاهش میده (بدون JSON خام و SectionKey تایپی)
  4. لندینگ پیج رو CMS-driven میکنه
  5. صفحه مجوزها رو اضافه میکنه
  6. حجم کد رو ~۳۰٪ کاهش میده

مرحله بعد: بعد از تأیید این طرح، شروع پیاده‌سازی از فاز ۱ (دیتابیس)