رفاکتر قبلی جستجو را فقط به resource محدود کرد در حالی که EditableItem و
AddItemButton و SingletonPill در چند صفحه با کلید فهرست صدا زده میشوند
(why_us، contact_section، before_after، process_steps، investment_models) —
useEntityList پرتاب خطا میکرد و رندر کل صفحه (خانه، خدمات، سرمایهگذاری و
بخش تماس) با از کار افتادن درخت ریاکت به صفحهٔ خالی تبدیل میشد.
در پنجرهٔ تعویض کانتینر فرانتاند، درخواستِ هشِ جدید که در dist کانتینرِ در
حال اجرا نبود با fallback اسپا پاسخ 200ٔ text/html میگرفت؛ CDN (WCDN، SMART)
همین پاسخ HTML را زیر URL فایل جاوااسکریپت با هدر immutable یکساله کش میکرد
و اسکریپت ماژول برای همهٔ بازدیدکنندهها میشکست (سایت روی پریلودر قفل میشد).
حالا فایل ناموجود در assets واقعاً 404 میدهد که کش نمیشود.
کلید فهرست ENTITIES برای چند موجودیت snake_case است (why_us، contact_section،
seo_meta، …) ولی resource همانها کبابکامل؛ isTranslatable و سایر جستجوها با
ENTITIES[resource] پیدا نمیشدند و نتیجه دو بود:
- ویرایش درجای «چرا آرامش» و متنهای فرم تماس روی صفحهٔ انگلیسی بهجای ستونهای
_en ستون فارسی را بازنویسی میکرد (حتی با زبان ویرایش انگلیسی)؛
- قرص سئوی صفحهٔ اصلی (SingletonPill resource="seo-meta") اصلاً رندر نمیشد.
حالا همهٔ جستجوها با entityConfig بر اساس resource انجام میشود.
تیتر و زیرتیتر هیرو درجا ویرایش میشوند اما در فهرست فیلدهای موجودیت هیرو
تعریف نشده بودند؛ isTranslatable('hero','title') false برمیگشت، کلید به
title_en نگاشت نمیشد و PATCH ستون فارسی را پر میکرد — با زبان ویرایش
انگلیسی هم. مقادیر خرابشدهٔ ستون فارسی از پشتیبان شبانه بازگردانی شد.
تیتر و توضیح بخشها (تیتر بخش خدمات، پروژههای شاخص، چرا آرامش و…) فقط
درجا ویرایش میشوند و تعریفشان در ENTITIES جا افتاده بود؛ isTranslatable
برایشان false برمیگشت و کلید تبدیل به title_en نمیشد — نتیجه اینکه
ویرایش روی صفحهٔ انگلیسی حتی با زبان ویرایش انگلیسی، متن فارسی را
بازنویسی میکرد و نسخهٔ انگلیسی بهظاهر هیچ تغییری نمیکرد.
قبلاً زبان ویرایش (editLang) کلید جداگانهای در نوار ادمین بود که با زبان صفحهٔ
در حال نمایش هیچ ارتباطی نداشت و پیشفرضش فارسی میماند؛ نتیجهاش این بود که
ویرایش درجا روی صفحههای /en به ستونهای فارسی میرفت و تغییرها «سمت دیگر»
یعنی سایت فارسی ظاهر میشدند.
- AdminBar: در حالت ویرایش، editLang با زبان URL همگام میشود (syncEditLang)؛
کلید دستی فقط برای ویرایش ستون زبان دیگر روی همین صفحه میماند.
- entities: تعریف status-labels اضافه شد — نبودش یعنی ویرایش برچسب وضعیت روی
صفحهٔ انگلیسی همیشه ستون فارسی را بازنویسی میکرد.
- بکاند: ستون role برای admin_users (admin/creator) + author_id برای مقالهها
- نقشگارد روی کل روتر مدیریتی: creator فقط لیست/ساخت/خواندن/ویرایش
پیشنویسهای «خودش» را میبیند؛ بقیهٔ مسیرهای مدیریتی ۴۰۳
- ساخت توسط creator همیشه پیشنویس است و ویرایشش هرگز منتشر نمیشود
(حتی تلاش برای publish در payload نادیده گرفته میشود)
- حذف/ترتیببندی/پیامها/خبرنامه/سایر بخشها برای creator ممنوع
- لاگین نقش را برمیگرداند؛ پنل: AdminBar نویسنده فقط «نوشتن مقاله» +
زبان ویرایش + رمز + خروج دارد؛ دکمههای انتشار/حذف مقاله فقط برای admin
- ورود creator مستقیم به صفحهٔ نوشتن مقاله هدایت میشود
- انیمیشن ورود هیرو تاخیر ۲.۱ تا ۲.۶ ثانیه داشت (بعد از بارگذاری JS+API هم
متن ۳ ثانیه نامرئی بود)؛ حالا ورود نرم با تاخیر ۰.۰۵-۰.۳۶ ثانیه
- SiteProvider: /api/site و /api/admin/articles پشت سر هم fetch میشدند و
setData منتظر هر دو میماند؛ حالا همزمان شروع میشوند
- ستون فهرست در دسکتاپ از ۱۷rem به ۲۱rem پهنتر شد تا تیترهای بلند جا شوند
- نوار اسکرول بومی مرورگر (با فلش) مخفی شد؛ اسکرول با چرخ ماوس/لمس سر جایش است
- /admin/projects/new و /admin/projects/:id — همهٔ فیلدها در یک صفحه با
ورودی دوزبانهٔ صریح (فارسی/English)، ذخیره، حذف
- GalleryField تازه: گالری چندتصویری فقط با آپلود به MinIO (حذف/جابهجایی/
افزودن چندفایلی) — فیلد «هر خط یک URL» دیگر استفاده نمیشود
- مدادِ کارت پروژه و دکمهٔ «افزودن پروژه» به صفحهٔ اختصاصی هدایت میشوند؛
دکمهٔ ویرایش روی صفحهٔ جزئیات هم لینک همان صفحه است
- دکمههای CTA: بازگشت به ButtonLink شیشهای (اصلی با دایرهٔ مسی، ثانویه مات)
- کارت شناور آمار (badge_value/badge_label) که UI v1 حذف کرده بود برگشت —
فیلدهایش در کشوی «تنظیمات هیرو» دوباره معنا دارند
- Button.tsx که قبلاً بازگردانده شده بود دوباره استفاده میشود
- دکمهٔ تغییر زبان: کپسول بزرگ دوزبانه → دکمهٔ کوچک آیکون+متن (طرح قبلی)
- ساختار صفحهٔ جزئیات پروژه: بازگشت به چیدمان قبلی (دیتابیسمحور بود و میماند)
- قالب پرسشوپاسخ: بازگشت به چیدمان دوستونه (تیتر کنار آکاردئون)
توجه: بخشی از UI v1 (fatemeh) عمداً برگردانده شده به درخواست تیم UI؛
بقیهٔ تغییرات آن کامیت سر جایش است. ویرایشپذیری دیتابیسمحور پروژهها
و دکمهٔ ویرایش، روی همین ساختار قدیمی دوباره اعمال شدهاند.
- page-heroes به فهرست موجودیتهای پنل اضافه شد و PageHero یک دکمهٔ واضح
«عنوان، سرآغاز و تصویر هیروی این صفحه» گرفت (پیشتر فقط ویرایش درجای
نامرئی روی خود متن بود).
- صفحهٔ پروژهها و صفحهٔ جزئیات پروژه حالا از دیتابیس خوانده میشوند
(فایل استاتیک projectsData فقط جانشین دیتابیس خالی/اسلاگهای قدیمی است) —
پیشتر ویرایش پنل روی این دو صفحه اصلاً نمایش داده نمیشد.
- روی لیست پروژهها دکمهٔ ویرایش/جابهجایی/حذف و «افزودن پروژه» اضافه شد و
روی صفحهٔ جزئیات هر پروژه دکمهٔ ویرایش همان پروژه.
- کپشن: قاعدهٔ وسطچینِ .article-body figcaption با قاعدههای [data-dir=...] برای
راست/چپچین بازنویسی میشد و عملاً وسطچین نمیشد؛ figcaption از آن فهرستها
برداشته شد. متن کپشن در ویرایشگر هم وسطچین شد تا با خروجی سایت یکی باشد.
- نام تصویر: نامی که پیش از بارگذاری نوشته میشود، حالا همان Alt تصویر میشود
(پیشتر نام فایل مبنا بود و باید دستی در جعبهٔ زیر تصویر اصلاح میشد).
- فهرست مطالب: H3 با ps-4 فقط ۴ پیکسل بیشتر از H2 تورفتگی داشت (عملاً نامرئی)؛
حالا ps-6 با فونت یک پله کوچکتر.
نمونهٔ OpenPanel موجود (stats.*) با یک پروژهٔ دوم برای این سایت استفاده میشود؛
VITE_OPENPANEL_URL/VITE_OPENPANEL_CLIENT_ID در زمان بیلد تزریق میشوند و در
نبودشان همهچیز بیاثر است. API عمومی track() تغییر نکرده و مسیر Umami هم
برای عقبنشینی دستنخورده مانده.
بازگرداندن من اشتباه بود — تیم UI عمداً این بخش را برداشته/جابهجا کرده است.
جاینگهدار خودشان (section خالی با aria-label) حفظ شد و فقط importهای
بیاستفاده حذف شدند تا تایپچک تمیز بماند.
شاخه UI این بخش را به یک section خالی تبدیل کرده بود (کار ناتمام)؛
ادغام خودکار آن را بیصدا حذف میکرد. محتوای دفاتر (شهر/نشانی/ساعات)
با همان چیدمان و ویرایشپذیری مدیریتی برگردانده شد.
- Alt/Title تصویر شاخص اکنون ذخیره میشود (ستونهای جدید image_alt/image_title — قبلاً بیصدا دور ریخته میشد)
- Alt و Title تصاویر داخل متن پس از درج هم قابل ویرایشاند (کنار کپشن)
- نام فایل ذخیرهسازی خوانا: نام دلخواه هنگام درج یا نام خود فایل (بهجای UUID خالی)
- پنل پرسشوپاسخ پایان مقاله (ستونهای faqs/faqs_en) با ظاهر آکاردئونی سایت و اسکیمای FAQPage
- چسباندن از Outline و هر منبع خارجی: تصاویر خودکار دانلود و در Object Storage سایت میزبانی میشوند (endpoint جدید import-image با محافظ SSRF) + دکمه میزبانی مجدد روی تصاویر خارجی موجود
- traefik pin v3.3 -> v3.6: v3.3's old docker client fails against
Engine 29 socket proxy (empty daemon errors, no routers)
- backend/minio/chatbot/umami: traefik.docker.network hint — Traefik
picked the internal-network IP for multi-network services and replies
were hairpin-dropped (all backend routes hung)
- db-init: psql needs an explicit -d arameshplaza (no default db 'aramesh'),
set -e so failures actually fail; one-shot folded-YAML needs semicolons
- chatbot image: drop g++ (apt unreachable in build network; all wheels
prebuilt) and mkdir /data before chown (VOLUME does not create it)
- frontend image: create caddy user (alpine image has none) with writable
/config and /data
- monitoring: blackbox probes replace raw metric scrapes of JSON/HTML
health endpoints (they reported 'down' while healthy); blackbox joins
edge; SITE_URL passed via env (Prometheus has no ${VAR:-default}
expansion); ContainerMemoryNearLimit PromQL fixed (comparison inside
label braces); HostDiskAlmostFull filters WSL/Docker-Desktop
pseudo-mounts
- alertmanager: config rendered by stack.sh (no env expansion in AM) and
delivered to Bale (tapi.bale.ai); stack.sh monitoring command
- machine-local override: minio console/API moved to 29001/29000
Added animated auto-opening link modal, custom image node with isolated caption deletion, fixed single-select category data binding, improved featured image layout, and updated README.
فایلهای اصلی Pinar از شاخه feature/frontend-updates گرفته شد (fatemeh sane آنها را
سلفهاست کرده بود) — همان فونتی که پیشتر CDN از کار افتادهاش را سرو میکرد:
- ۵ وزن (Light 300، Regular 400، Bold 700، ExtraBold 800، Black 900) در
frontend/public/fonts/pinar بهصورت woff2 + ttf
- index.css: Pinar فونت اصلی و Vazirmatn جایگزین پشتیبان
- tailwind: کلاس pinar دوباره Pinar را اول میگذارد