Phase 7: Benachrichtigungen und Termine
Terminkalender mit Serienterminen, Selbstanmeldung, Warteliste und Anwesenheitsliste. Vier Zustellwege hinter Schnittstellen: echtes SMTP, ntfy (selbst gehostet), Telegram und Web-Push. Kalenderabonnement als ICS-Feed, digitaler Dienstausweis mit signiertem QR und Pruefseite. Niemand wird ungefragt benachrichtigt: ein neuer Zustellweg hat eine leere Ereignisliste, und der Seed legt bewusst keine an. Was das Netz der Wehr verlaesst, bekommt nur die Kurzfassung ohne Namen und Details. Kein CalDAV (Lesen genuegt, ICS kann jeder Kalender) und kein WhatsApp (Verarbeitung ueber Meta, Kosten je Konversation, Telefonbuchabgleich) -- beides im README begruendet. 56 neue Unit-Tests, 17 neue E2E-Tests, Version 0.8.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c779266450
commit
0b8874da26
@@ -255,6 +255,76 @@ TELEGRAM_ENABLED=false
|
||||
TELEGRAM_BOT_TOKEN=
|
||||
TELEGRAM_CHAT_ID=
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Push über ntfy (Phase 7, optional)
|
||||
#
|
||||
# ntfy ist ein winziger Push-Dienst, den man selbst betreibt: ein Container,
|
||||
# eine App im Store, fertig. Man abonniert ein "Thema" (einen frei gewählten
|
||||
# Namen) und bekommt Meldungen darauf — ohne Konto, ohne Telefonnummer.
|
||||
#
|
||||
# Läuft der Server im eigenen Netz, verlässt keine Nachricht das Gerätehaus.
|
||||
# Deshalb gilt ntfy in FLORIAN als INTERNER Kanal und bekommt die
|
||||
# ausführlichen Texte. Wer stattdessen das öffentliche ntfy.sh einträgt, macht
|
||||
# ihn zu einem externen Dienst wie jeden anderen.
|
||||
#
|
||||
# ACHTUNG: Ein Thema ist nur so geheim wie sein Name. Wer ihn kennt, liest mit.
|
||||
# FLORIAN schlägt deshalb Namen mit Zufallsanteil vor.
|
||||
# -----------------------------------------------------------------------------
|
||||
NTFY_ENABLED=false
|
||||
# NTFY_URL=http://ntfy:80
|
||||
# Nur nötig, wenn der eigene ntfy Zugriffsschutz eingeschaltet hat.
|
||||
NTFY_TOKEN=
|
||||
NTFY_TIMEOUT=10
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Web-Push in den Browser (Phase 7, optional)
|
||||
#
|
||||
# Der Weg, der ohne App auskommt. Die Meldung läuft über den Push-Dienst des
|
||||
# Browserherstellers (Mozilla, Google, Apple) — verschlüsselt, aber sie
|
||||
# verlässt das Netz der Wehr. Deshalb ist Web-Push ein EXTERNER Kanal und
|
||||
# bekommt nur Kurzfassungen: "3 Prüfungen fällig", nicht welche.
|
||||
#
|
||||
# Schlüsselpaar erzeugen mit: npm run vapid
|
||||
#
|
||||
# ACHTUNG: Beide Schlüssel gehören ins Backup. Ein neuer öffentlicher Schlüssel
|
||||
# macht alle bestehenden Push-Abos wertlos — jeder müsste Push neu erlauben,
|
||||
# und niemand merkt es, die Meldungen bleiben einfach aus.
|
||||
# -----------------------------------------------------------------------------
|
||||
WEBPUSH_ENABLED=false
|
||||
WEBPUSH_PUBLIC_KEY=
|
||||
WEBPUSH_PRIVATE_KEY=
|
||||
# Kontaktweg für den Push-Dienst, "mailto:..." oder eine Adresse.
|
||||
WEBPUSH_KONTAKT=
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# WhatsApp: bewusst NICHT.
|
||||
#
|
||||
# Es gibt keine WHATSAPP_-Variablen, und das ist eine Entscheidung, keine Lücke.
|
||||
# Die Begründung steht im README unter "Warum kein WhatsApp" — kurz: die
|
||||
# Business-Plattform kostet je Konversation, verlangt einen Vertrag mit Meta
|
||||
# als Auftragsverarbeiter, und die App gleicht das Telefonbuch ab. Für eine
|
||||
# Wehr, deren Daten im Gerätehaus bleiben sollen, ist das der falsche Weg.
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Benachrichtigungen und Termine (Phase 7)
|
||||
# -----------------------------------------------------------------------------
|
||||
# Wann der Worker die Erinnerungen anlegt und verschickt (cron, Europe/Berlin).
|
||||
# Bewusst am frühen Morgen und nicht nachts: eine Push-Meldung um drei Uhr
|
||||
# weckt Leute, die am nächsten Tag arbeiten müssen.
|
||||
BENACHRICHTIGUNG_LAUF=0 7 * * *
|
||||
# Wie viele Tage vor einem Termin erinnert wird (kommagetrennt).
|
||||
# "7,1": einmal in der Woche davor, damit man den Abend freihalten kann, und
|
||||
# einmal am Vortag, weil man es bis dahin wieder vergessen hat.
|
||||
TERMIN_ERINNERUNG_TAGE=7,1
|
||||
# Wie oft eine fehlgeschlagene Zustellung wiederholt wird, bevor sie als
|
||||
# fehlgeschlagen stehen bleibt. Stehen bleiben ist Absicht: eine still
|
||||
# verschluckte Benachrichtigung ist schlimmer als eine sichtbar gescheiterte.
|
||||
BENACHRICHTIGUNG_VERSUCHE=3
|
||||
# Wie lange ZUGESTELLTE Benachrichtigungen aufgehoben werden.
|
||||
# Fehlgeschlagene bleiben — sie zeigen einen kaputten Kanal an.
|
||||
BENACHRICHTIGUNG_AUFBEWAHRUNG_TAGE=90
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# LLM-Anbindung (optional; nur selbstgehostete Endpunkte, kein Cloud-Zwang)
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user