- slug fields auto-fill from the name (slugify keeps Persian + latin letters,
spaces → "-") until the slug is edited by hand; applies to all data-driven
forms (categories/tags/blogs/…) and the Templates form
- Projects page (/admin/projects) gains "+ پروژه جدید": pick a template
(container) + name/aspect/resolution/size/duration/fps/mode → POST /v1/projects.
Previously a project could only be added while editing a template.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- AdminResource: client-side search box (matches across all fields) + 25/page
pagination with prev/next and a filtered-count footer
- bumped pageSize on server-paged configs (users/blogs/comments/discounts/music/
fonts/tags) so search/paginate covers the full set
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- AdminResource + TemplatesAdmin modals are now large full-height panels
(max-w-5xl, sticky header/footer, scrolling body, 2-column field grid;
textarea/richtext span full width)
- RichTextField: dependency-free contentEditable WYSIWYG (bold/italic/underline,
H2/H3/¶, lists, link, clear) emitting HTML, dir="auto" for fa/en
- blog content + category description now use the rich editor
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- /admin/files Media Library: drag-drop multi-upload, thumbnails, copy-URL, delete
- FileUploadField replaces raw URL inputs; new "image" field type in AdminResource;
wired into category image
- upload proxy /api/admin/files/upload: browser → Next → presigned PUT (server-side,
reaches minio:9000) → confirm → returns public URL
- user-uploads bucket is public-read; public base via NEXT_PUBLIC_MINIO_URL
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>