feat: granular per-category push notification settings

New Settings → Notifications section with a toggle per category (follow,
comment, reply, reaction, rating, mention, leftover-expiring, shared
shopping list) — previously it was all-or-nothing (browser permission only).

userNotificationPrefs (one row per user, defaults all-on so existing users
see no behavior change until they opt out of something). Gated the push
send in the three places that dispatch one: lib/notifications.ts (the 6
in-app notification types), the leftover-expiry cron, and shopping-list-notify
— in-app notification-center entries and email are unaffected, this only
gates the push itself, matching the literal ask.

Verified locally: GET/PUT round-trips correctly, disabling a category
and confirming the settings page renders all 8 toggles.
This commit is contained in:
Arnaud
2026-07-12 19:07:32 +02:00
parent e78c959c49
commit 4d5269aced
13 changed files with 5037 additions and 6 deletions
+12
View File
@@ -1056,6 +1056,18 @@
}
},
"settingsForm": {
"notificationCategories": {
"title": "Catégories de notifications",
"description": "Choisissez les notifications push que vous souhaitez recevoir.",
"follow": "Nouveaux abonnés",
"comment": "Commentaires sur vos recettes",
"reply": "Réponses à vos commentaires",
"reaction": "Réactions à vos commentaires",
"rating": "Notes sur vos recettes",
"mention": "Mentions dans les commentaires",
"leftoverExpiring": "Restes bientôt périmés",
"shoppingList": "Mises à jour des listes de courses partagées"
},
"profile": "Profil",
"changePhoto": "Changer la photo",
"removePhoto": "Supprimer la photo",