--- name: redesign-page description: نقد و بازطراحی حرفه‌ای UI/UX یک صفحه از پنل ادمین ClinicPro از روی URL آن — اسکرین‌شات در چهار نما (روشن، تیره، فشرده، موبایل)، پروبِ دسترسی‌پذیری روی DOM زنده، نگاشت URL به فایل سورس، آدیت انحراف از دیزاین‌سیستم، و بازنویسی با کامپوننت‌ها و توکن‌های موجود. استفاده کن وقتی کاربر یک URL از /admin می‌دهد و می‌گوید «این صفحه ui/ux خوبی ندارد»، «این صفحه را بازطراحی کن»، «این صفحه را نقد کن»، «redesign this page»، «UI/UX review»، «این قسمت را درست کن»، یا «screenshot این صفحه». --- > **قبل از شروع، فایل `clinicpro/.claude/guidelines.md` را بخوان و همهٔ بخش‌های آن را اعمال کن — از جمله `§۰ Grill` که قبل از هر تغییر اجباری است.** # نقد و بازطراحی صفحهٔ پنل ادمین ClinicPro نقش: متخصص ارشد UI/UX. هدف **بهبود تجربهٔ کاربری در چهارچوب تم فعلی** است، نه ساختن هویت بصری جدید. هر تغییری که با دیزاین‌سیستم فعلی ناسازگار باشد، رد است. پنل ادمین یک SPA کلاینت‌ساید است (React 19 + Webpack Encore، سرو شده از `/admin/*`). یعنی `curl` و فلگ `--screenshot` کروم به درد نمی‌خورند: هر دو روی فرم لاگین می‌نشینند، چون توکن JWT در `localStorage['clinicpro-auth']` است. درایور این skill آن کار را می‌کند: با API لاگین می‌کند، `localStorage` را seed می‌کند، تم/تراکم را می‌نشاند، بعد ناوبری و اسکرین‌شات می‌گیرد — با CDP روی `WebSocket` نیتیو Node 22، **بدون هیچ وابستگی npm** (نه playwright، نه puppeteer). مسیرها نسبت به `clinicpro/` هستند. ## پیش‌نیازها هیچ نصبی لازم نیست: ```bash ddev describe | head -3 # باید بالا باشد: https://clinic-pro.ddev.site ls "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ``` کروم جای دیگری است؟ `CHROME_BIN` را ست کن. ## گردش کار ### ۰. اول دیزاین‌سیستم را بخوان — قبل از هر چیز **منبع حقیقتِ توکن‌ها `assets/admin/styles.css` است**، نه `docs/admin-ui/ui-design-spec.md` (آن سند قدیمی است و پالت بنفشش با کد شیپ‌شده نمی‌خواند). ```bash node .claude/skills/redesign-page/driver.mjs ds # توکن‌ها + کلاس‌ها + کامپوننت‌ها node .claude/skills/redesign-page/driver.mjs ds tokens # فقط توکن‌ها node .claude/skills/redesign-page/driver.mjs ds components # فقط کامپوننت‌های مشترک با Props ``` خروجی واقعی: `TOKENS (57)` و `SHARED COMPONENTS (26)`. قانون ترتیب: **اول کامپوننت موجود، بعد توسعه/عمومی‌کردنش، در آخر ساخت کامپوننت جدید** — و دلیلش را بنویس. ### ۱. چهار نمای اجباری ```bash node .claude/skills/redesign-page/driver.mjs variants \ "https://clinic-pro.ddev.site/admin/resources" --dir /tmp/clinicpro-review ``` چهار فایل می‌سازد: `-light` · `-dark` · `-compact` · `-mobile`. **هر چهار را با ابزار Read باز کن و نگاه کن.** قضاوت با یک اسکرین‌شات یعنی صفحه‌ای که در سه نمای دیگر خراب است. تم تیره و تراکم فشرده در این پنل تنظیمات واقعی کاربرند، نه فرض. تک‌نما: ```bash node .claude/skills/redesign-page/driver.mjs shot "" --out /tmp/x.png \ --theme dark --density compact --w 390 --h 844 --full --wait 6000 ``` فلگ‌ها: `--w/--h` ویوپورت · `--wait` میلی‌ثانیه · `--full` کل صفحه · `--theme light|dark` · `--density comfortable|compact` · `--context clinic|personal` · `--no-probe`. هر `shot` یک **پروب رانتایم** هم می‌زند که فقط روی DOM رندرشده دیدنی است: ``` RUNTIME ⚠ 2 form field(s) with no label ``` چه چیزهایی می‌گیرد: سرریز افقی، دکمهٔ آیکونیِ بی‌نام (بدون `aria-label`/`title`)، فیلد بدون لیبل، و کنترل کوتاه‌تر از ۳۲px (هدف لمسی ۴۴px است). ### ۲. نگاشت URL به سورس + آدیت ایستا ```bash node .claude/skills/redesign-page/driver.mjs inspect "https://clinic-pro.ddev.site/admin/resources" ``` خروجی واقعی: ``` route resources component ResourcesPage file assets/admin/pages/ResourcesPage.tsx components PageHeader, DataTable, ResourceBlocksModal, ConfirmDialog, SearchableSelect, … lines 278 test assets/admin/pages/ResourcesPage.test.tsx AUDIT clean ``` روی هر فایل مستقیم: ```bash node .claude/skills/redesign-page/driver.mjs audit assets/admin/pages/ClinicDetailPage.tsx # AUDIT # assets/admin/pages/ClinicDetailPage.tsx:242 hand-rolled overlay — use the shared ``` آدیت این‌ها را می‌گیرد: `