From 848430e72b39f61a78e3f967770abe6df9a730f2 Mon Sep 17 00:00:00 2001 From: filpgame Date: Sat, 16 May 2026 02:23:03 -0300 Subject: [PATCH] fix(categories): strip diacritics from auto-generated slugs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Accented chars (ã, ç, é, etc.) were silently dropped by the slug regex because \w only matches ASCII. NFD decomposition + combining mark removal converts them to ASCII equivalents instead. Co-Authored-By: Claude Sonnet 4.6 --- backend/src/routes/adminCategories.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/src/routes/adminCategories.js b/backend/src/routes/adminCategories.js index e58a5b68..84a162a9 100644 --- a/backend/src/routes/adminCategories.js +++ b/backend/src/routes/adminCategories.js @@ -56,7 +56,9 @@ router.post('/', adminAuth, requirePermission('settings.edit'), [ const { name, slug, is_global = true, event_id = null } = req.body; // Generate slug if not provided - const categorySlug = slug || name.toLowerCase() + const categorySlug = slug || name + .normalize('NFD').replace(/[̀-ͯ]/g, '') + .toLowerCase() .replace(/[^\w\s-]/g, '') .replace(/\s+/g, '-') .replace(/-+/g, '-') @@ -128,7 +130,9 @@ router.put('/:id', adminAuth, requirePermission('settings.edit'), [ const updateData = { name, - slug: name.toLowerCase() + slug: name + .normalize('NFD').replace(/[̀-ͯ]/g, '') + .toLowerCase() .replace(/[^\w\s-]/g, '') .replace(/\s+/g, '-') .replace(/-+/g, '-')