{
  "title": "فرانت",
  "slug": "team/frontend/index",
  "url": "/docs/team/frontend/index",
  "frontmatter": {
    "layout": "doc",
    "title": "فرانت",
    "description": "ابزارها و یوتیلیتی‌های مفید تیم فرانت — دسترسی سریع به ابزارهای کاربردی",
    "version": "1.0.0",
    "status": "PRIVATE",
    "author": "xoxxel",
    "owner": "xoxxel",
    "created_at": "2026-06-05",
    "updated_at": "2026-06-18",
    "tags": "",
    "reviewers": ""
  },
  "sections": [
    {
      "level": 1,
      "heading": "فرانت",
      "content": "مجموعه‌ای از ابزارها و یوتیلیتی‌های مفید برای وظایف مختلف.\n\n---"
    },
    {
      "level": 2,
      "heading": "مستندات معماری فرانت‌اند (Architecture Documentation)",
      "content": "- 🏗️ [نمای کلی معماری فرانت‌اند (Overview)](/docs/team/frontend/architecture/overview)\n- 📁 [ساختار پروژه کلاینت (Project Structure)](/docs/team/frontend/architecture/project-structure)\n- ⚙️ [لایه پیکربندی پلتفرم (Nons Configuration)](/docs/team/frontend/architecture/nons-configuration)\n- 🔌 [الگوی ارتباطی رجیستری (Registry Pattern)](/docs/team/frontend/architecture/registry-pattern)\n- 🔄 [جریان داده‌ها در زمان اجرا (Data Flow)](/docs/team/frontend/architecture/data-flow)\n- 🔐 [قرارداد Auth Header در پنل ادمین](/docs/team/frontend/architecture/admin-panel-auth-headers)\n\n---"
    },
    {
      "level": 2,
      "heading": "سیستم طراحی (Design System)",
      "content": "مستندات توکن‌های گرافیکی، حالت‌های تعاملی و تایپوگرافی:\n\n- 🎨 [معرفی سیستم طراحی (Overview)](/docs/team/frontend/design-system/)\n- 🧩 [راهنمای مصرف توسعه‌دهنده (Developer Usage)](/docs/team/frontend/design-system/developer-usage)\n- 🖱️ [حالت‌های تعاملی (Interactive States)](/docs/team/frontend/design-system/interactive-states)\n- 🔤 [تایپوگرافی (Typography)](/docs/team/frontend/design-system/typography)\n\n---"
    },
    {
      "level": 2,
      "heading": "استانداردهای UX ورود (Login UX Standards)",
      "content": ""
    },
    {
      "level": 3,
      "heading": "اصل اول — حذف Registration",
      "content": "پلتفرم NONS صفحه «ثبت‌نام» (Sign Up / Register) ندارد. کاربران همیشه «ورود به NONS» را تجربه می‌کنند."
    },
    {
      "level": 3,
      "heading": "صفحه ورود (Login Page)",
      "content": "| عنصر | توضیح |\n|------|-------|\n| عنوان | \"ورود به NONS\" |\n| روش Primary | **Magic Code** — فیلد ایمیل + دکمه \"ارسال کد\" + فیلد کد تایید |\n| روش Secondary | دکمه \"ورود با Google\" (OAuth redirect) |\n| خطاها | پیام‌های خطای فارسی، بدون افشای اطلاعات هویتی |\n| وضعیت‌ها | لودینگ هنگام ارسال کد، تایمر مجدد برای درخواست کد جدید |"
    },
    {
      "level": 3,
      "heading": "Magic Code UX",
      "content": "1. کاربر ایمیل خود را وارد می‌کند ← دکمه \"ارسال کد\" فعال می‌شود\n2. کد ۶ رقمی به ایمیل ارسال می‌شود ← پیام تأیید نمایش داده می‌شود\n3. کاربر کد را در ۶ فیلد مجزا یا یک فیلد وارد می‌کند\n4. تایم‌ر ۱۲۰ ثانیه‌ای برای درخواست مجدد کد\n5. پس از تایید، کاربر به صفحه اصلی هدایت می‌شود"
    },
    {
      "level": 3,
      "heading": "Google Login UX",
      "content": "1. کاربر روی دکمه \"ورود با Google\" کلیک می‌کند\n2. به صفحه انتخاب حساب Google هدایت می‌شود\n3. پس از تایید، به NONS بازمی‌گردد\n4. اگر ایمیل کاربر وجود داشته باشد → ورود | اگر وجود نداشته باشد → ایجاد حساب خودکار + ورود"
    },
    {
      "level": 3,
      "heading": "تشخیص کاربر جدید (Onboarding)",
      "content": "- پس از اولین ورود موفق، سیستم هدر `X-Onboarding-Required: true` را به فرانت‌اند ارسال می‌کند.\n- فرانت‌اند کاربر را به صفحه خوش‌آمدگویی / راهنمای اولیه هدایت می‌کند.\n- پس از تکمیل اونبوردینگ، درخواست `POST /v1/auth/onboarding/complete` ارسال می‌شود."
    },
    {
      "level": 3,
      "heading": "امنیت",
      "content": "- **Rate Limiting:** حداکثر ۵ تلاش ناموفق برای Magic Code در ۱۵ دقیقه\n- **انقضای کد:** هر کد یکبار مصرف حداکثر ۵ دقیقه اعتبار دارد\n- **HttpOnly Cookies:** نشست Kratos در کوکی امن ذخیره می‌شود\n- **CORS:** فقط دامنه‌های مجاز (مطابق تنظیمات Gateway)"
    }
  ]
}