@@ -904,3 +904,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
904904- Hardened Monobank webhook verification, reconciliation, and wallet retry handling
905905- Added validation coverage for invalid city/warehouse, locker, and courier address combinations
906906- Prevented janitor cleanup from canceling reconcilable wallet attempts too early
907+
908+ ## [ 1.0.9] - 2026-03-22
909+
910+ ### Added
911+
912+ - Full Blog Admin in the admin panel:
913+ - Blog post create, edit, delete, preview, publish, and schedule workflow
914+ - Tiptap WYSIWYG editor with headings, lists, task lists, code blocks, images, links, and sticky toolbar
915+ - Cloudinary image upload with preview for blog content
916+ - Inline author and category creation directly from the post form
917+ - Locale-aware preview rendering with ` BlogPostRenderer `
918+ - Blog section in admin sidebar with Posts, New Post, Authors, and Categories
919+ - Blog content management:
920+ - Author CRUD with multilingual profiles, profile photo upload, and social links
921+ - Category CRUD with inline editing and display-order reordering
922+ - Admin API routes for blog posts, authors, categories, and image upload
923+ - Zod validation schemas for blog admin forms and mutations
924+
925+ ### Changed
926+
927+ - Blog architecture and performance:
928+ - Replaced force-dynamic blog post rendering with ISR using shared 7-day revalidation
929+ - Unified cache strategy across blog list, post, category, search, and author routes
930+ - Cached blog queries with React cache and ` unstable_cache `
931+ - Public blog pages now revalidate correctly after admin mutations
932+ - Blog categories on public pages now use cached query variants
933+ - Shop launch readiness:
934+ - Checkout provider resolution is now server-authoritative and fail-closed
935+ - Stripe refunds now enter a contained non-shippable state before reconciliation
936+ - Admin shipping actions now require a compatible shipment record and centralized eligibility checks
937+ - Disabled Monobank admin refunds and in-app return refunds for launch
938+
939+ ### Fixed
940+
941+ - Fixed inconsistent blog ` revalidatePath ` patterns and missing locale-aware invalidation
942+ - Fixed public blog cache invalidation after post, author, and category updates
943+ - Removed legacy order creation paths that could persist new orders with ` paymentProvider='none' `
944+ - Prevented double finalization and double restock during Stripe refund recovery flows
945+ - Blocked shipment queuing and admin shipping transitions for refund-contained orders
946+ - Updated Shop regression coverage for checkout fail-closed behavior, refunds, webhooks, and shipping guards
0 commit comments