--- name: redesign-page description: بازطراحی UI/UX یک صفحه از پنل ادمین ClinicPro از روی URL آن — اسکرین‌شات گرفتن از صفحه، نگاشت URL به فایل سورس، آدیت انحراف‌ها از دیزاین‌سیستم، و بازنویسی صفحه با کامپوننت‌ها و توکن‌های موجود. استفاده کن وقتی کاربر یک URL از /admin می‌دهد و می‌گوید «این صفحه ui/ux خوبی ندارد»، «این صفحه را بازطراحی کن»، «redesign this page»، «این قسمت را درست کن»، یا «screenshot این صفحه». --- # بازطراحی صفحه پنل ادمین ClinicPro پنل ادمین یک 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` را ست کن. ## گردش کار ### ۱. اسکرین‌شات صفحه فعلی ```bash node .claude/skills/redesign-page/driver.mjs shot \ "https://clinic-pro.ddev.site/admin/appointments" --out /tmp/before.png ``` **بعد حتماً تصویر را با ابزار Read باز کن و نگاه کن.** بدون دیدنِ صفحه، بازطراحی یعنی حدس زدن. فلگ‌ها: `--w 1440 --h 900` (سایز ویوپورت)، `--wait 4000` (میلی‌ثانیه صبر برای رندر)، `--full` (کل صفحه، نه فقط ویوپورت). موبایل هم ببین — این پنل RTL و پرجدول است و بیشتر مشکلات ریسپانسیو آنجاست: ```bash node .claude/skills/redesign-page/driver.mjs shot \ "https://clinic-pro.ddev.site/admin/appointments" --w 390 --h 844 --out /tmp/mobile.png ``` ### ۲. نگاشت URL به سورس + آدیت ```bash node .claude/skills/redesign-page/driver.mjs inspect \ "https://clinic-pro.ddev.site/admin/clinics/41e325c4-e825-4067-8438-5d828ecaee09" ``` خروجی واقعی: ``` route clinics/:uuid component ClinicDetailPage file assets/admin/pages/ClinicDetailPage.tsx components ConfirmDialog, Modal, PageHeader, SearchableSelect, NotificationMobileCard lines 1035 AUDIT assets/admin/pages/ClinicDetailPage.tsx:242 hand-rolled overlay — use the shared ``` روی هر فایل دلخواه هم مستقیم: ```bash node .claude/skills/redesign-page/driver.mjs audit assets/admin/pages/AppointmentsPage.tsx ``` ### ۳. قبل از نوشتن کد، دیزاین‌سیستم را بخوان **منبع حقیقتِ توکن‌ها `assets/admin/styles.css` است** — نه `docs/admin-ui/ui-design-spec.md` (آن سند قدیمی و پالت بنفشش با کد شیپ‌شده نمی‌خواند). ```bash sed -n '/^:root/,/^}/p' assets/admin/styles.css | head -60 # توکن‌ها ls assets/admin/components/ui/ # کامپوننت‌های آماده ``` قانون: **اول کامپوننت موجود، بعد توسعه‌اش، در آخر ساخت کامپوننت جدید** — و دلیلش را بنویس. ### ۴. بازنویسی، سپس مقایسه بعد از ادیت، دوباره اسکرین‌شات بگیر و با `before.png` مقایسه کن: ```bash yarn dev # یا: yarn watch node .claude/skills/redesign-page/driver.mjs shot "<همان url>" --out /tmp/after.png ``` ### ۵. تست + تایپ‌چک (بدون این، تسک تمام نیست) ```bash npx tsc --noEmit -p tsconfig.json npx vitest run assets/admin/pages/.test.tsx ``` توجه: سوییت کامل همین الان **۲۱ تست از پیش شکسته** دارد (`api.test.ts`، `LoginPage`، `PatientDetailPage`، …) که ربطی به کار تو ندارند. قبل از شروع یک‌بار `npx vitest run` بگیر و عدد پایه را یادداشت کن، وگرنه خطاهای موجود را به گردن تغییر خودت می‌اندازی. ## چک‌لیست بازطراحی درایور موارد گرپ‌شدنی را می‌گیرد؛ این‌ها را باید خودت با چشم ببینی: - **`.field` در مقابل `.field-block`** — `.field` یک باکس افقی بوردردار است که لیبل *داخلش* می‌نشیند. اگر `