feat: Versand per Web-Push und E-Mail

Push ueber VAPID, Mail ueber SMTP, beide unabhaengig zuschaltbar. Die
Schluessel eines Push-Geraets liegen verschluesselt in der Datenbank.

Ein Geraet, das der Push-Dienst mit 404 oder 410 ablehnt, wird sofort
entfernt; andere Fehler zaehlen hoch und fuehren nach fuenf Versuchen
zum selben Ergebnis. Eine Liste toter Abos putzt sich so von allein.

Der Nachweis wird vor dem Senden geschrieben, nicht danach: lieber eine
verpasste Nachricht als eine, die im Minutentakt erneut versucht wird.

Weder Endpunkt noch Schluessel noch Mailinhalt landen im Protokoll.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-11 08:59:31 +02:00
co-authored by Claude Opus 5
parent ddb13d7dd0
commit e0e11c85b2
7 changed files with 787 additions and 0 deletions
+2
View File
@@ -16,6 +16,8 @@ export default tseslint.config(
// Vom Generator erzeugt, nicht von Hand gepflegt.
'src/generated/**',
'next-env.d.ts',
// Service Worker: laeuft im Browser, nicht in unserer Werkzeugkette.
'public/sw.js',
],
},
...naechstesWebVitals,