- مقالهها ستون 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 سرگردان فرانت
1.6 KiB
1.6 KiB
فرانتاند گروه ساختمانی آرامش
سایت 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— انواع داده مشترک