Files
aramesh-backend/frontend
MMD b31124e1e4 وبلاگ و سئو: پیش‌نویس/انتشار مقاله + کلمه کلیدی سئو در دیتابیس + OG/canonical/JSON-LD و متای سمت سرور + تغییر رمز و محدودسازی ورود + تست‌ها
- مقاله‌ها ستون status (draft/published) گرفتند — GET /api/site و همه انتهای عمومی فقط منتشرشده را برمی‌گردانند؛ autosave دیگر پیش‌نویس نیمه‌کاره را زنده نمی‌کند
- کلمه کلیدی هدف چک‌لیست سئو فیلد seo_keyphrase شد (قبلاً localStorage بود)
- robots.txt و sitemap.xml از بک‌اند + سرو /blog و /projects با تزریق title/description/OG/JSON-LD از دیتابیس برای خزنده‌های بدون JS (app/seo_pages.py)
- فرانت: applySeo در seo.ts (OG/توییتر/canonical/JSON-LD)، ادغام پیش‌نویس برای ادمین، برچسب پیش‌نویس در وبلاگ، حالت خالی وبلاگ، دکمه انتشار در صفحه نوشتن
- تغییر رمز ادمین POST /api/auth/change-password + دیالوگ «رمز» در نوار مدیریت
- محدودسازی ورود: ۵ تلاش ناموفق در ۱۵ دقیقه از هر IP → 429
- ساخت دکمه + برای ردیف سئوی صفحه‌های بدون ردیف (SingletonPill)
- تست‌های pytest (۱۵ مورد) + پین‌کردن requirements + حذف package.json سرگردان فرانت
2026-09-07 04:26:18 +03:30
..

فرانت‌اند گروه ساختمانی آرامش

سایت React + Vite + Tailwind — تمام متن‌ها و تصاویر از بک‌اند (GET /api/site) خوانده می‌شود.

اجرا

npm install
npm run dev

در حالت توسعه، Vite درخواست‌های /api و /media را به Traefik (پورت ۵۱۷۳) پروکسی می‌کند — پس استک Docker باید در حال اجرا باشد. آدرس بک‌اند در src/config.ts از VITE_API_URL خوانده می‌شود؛ پیش‌فرض خالی یعنی درخواست‌های هم‌مبدأ.

ساخت

بیلد روی هاست انجام می‌شود (کانتینر فقط با Caddy فایل‌های dist/ را سرو می‌کند):

npm run build

نکته: بک‌اند برای تزریق متای سئو در صفحات /blog و /projects همین پوشه dist/ را (در compose به /srv/frontend سوار است) می‌خواند — بعد از هر تغییر فرانت، npm run build و سپس ری‌استارت بک‌اند کافی است.

بخش‌های کلیدی

  • src/api.tsx — بارگذاری داده سایت و ادغام پیش‌نویس مقاله‌ها برای ادمین
  • src/admin/ — لایه ویرایش زنده (دوقلوی دیجیتال): نوار مدیریت، کشوی موجودیت‌ها، صفحه نوشتن مقاله
  • src/seo.ts — تگ‌های title / description / OG / canonical / JSON-LD هر صفحه
  • src/data/site.ts — انواع داده مشترک