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
@@ -71,6 +71,18 @@ x-app-env: &app-env
|
||||
TELEGRAM_ENABLED: ${TELEGRAM_ENABLED:-false}
|
||||
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-}
|
||||
TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-}
|
||||
NTFY_ENABLED: ${NTFY_ENABLED:-false}
|
||||
NTFY_URL: ${NTFY_URL:-}
|
||||
NTFY_TOKEN: ${NTFY_TOKEN:-}
|
||||
NTFY_TIMEOUT: ${NTFY_TIMEOUT:-10}
|
||||
WEBPUSH_ENABLED: ${WEBPUSH_ENABLED:-false}
|
||||
WEBPUSH_PUBLIC_KEY: ${WEBPUSH_PUBLIC_KEY:-}
|
||||
WEBPUSH_PRIVATE_KEY: ${WEBPUSH_PRIVATE_KEY:-}
|
||||
WEBPUSH_KONTAKT: ${WEBPUSH_KONTAKT:-}
|
||||
BENACHRICHTIGUNG_LAUF: ${BENACHRICHTIGUNG_LAUF:-0 7 * * *}
|
||||
TERMIN_ERINNERUNG_TAGE: ${TERMIN_ERINNERUNG_TAGE:-7,1}
|
||||
BENACHRICHTIGUNG_VERSUCHE: ${BENACHRICHTIGUNG_VERSUCHE:-3}
|
||||
BENACHRICHTIGUNG_AUFBEWAHRUNG_TAGE: ${BENACHRICHTIGUNG_AUFBEWAHRUNG_TAGE:-90}
|
||||
LLM_ENABLED: ${LLM_ENABLED:-false}
|
||||
LLM_BASE_URL: ${LLM_BASE_URL:-}
|
||||
LLM_API_KEY: ${LLM_API_KEY:-}
|
||||
@@ -306,6 +318,46 @@ services:
|
||||
- intern
|
||||
logging: *logging
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# ntfy — Push aufs Handy, ohne dass etwas das Haus verlässt (Phase 7).
|
||||
#
|
||||
# Nur mit Profil: docker compose --profile push up -d
|
||||
#
|
||||
# Warum das der interessanteste Push-Weg für eine Wehr ist: kein Konto, keine
|
||||
# Telefonnummer, kein Telefonbuchabgleich. Man abonniert in der App ein
|
||||
# Thema — einen frei gewählten Namen — und bekommt Meldungen darauf.
|
||||
#
|
||||
# Der Container ist winzig und speichert standardmäßig nichts dauerhaft:
|
||||
# eine zugestellte Meldung ist erledigt. Wer sie nachlesen können will,
|
||||
# schaltet den Cache ein (siehe ntfy-Dokumentation) — dann liegen die Texte
|
||||
# allerdings auch dort und nicht nur in FLORIAN.
|
||||
#
|
||||
# ACHTUNG: Ein Thema ist nur so geheim wie sein Name. Wer ihn kennt, liest
|
||||
# mit. Deshalb schlägt FLORIAN Namen mit Zufallsanteil vor, und deshalb
|
||||
# steht NTFY_TOKEN bereit, falls der eigene ntfy Zugriffsschutz bekommt.
|
||||
# ---------------------------------------------------------------------------
|
||||
ntfy:
|
||||
image: binwiederhier/ntfy:v2.11.0
|
||||
container_name: florian-ntfy
|
||||
restart: unless-stopped
|
||||
profiles: [push]
|
||||
command: ["serve"]
|
||||
environment:
|
||||
NTFY_BASE_URL: ${NTFY_OEFFENTLICH:-http://localhost:8086}
|
||||
NTFY_LISTEN_HTTP: ":80"
|
||||
# Keine Anmeldung nötig, um zu lesen und zu schreiben — geschützt ist
|
||||
# das Ding durch die Unerratbarkeit der Themennamen und dadurch, dass es
|
||||
# im eigenen Netz steht. Wer es ins Internet stellt, setzt
|
||||
# NTFY_AUTH_DEFAULT_ACCESS auf "deny-all" und vergibt Token.
|
||||
NTFY_AUTH_DEFAULT_ACCESS: ${NTFY_ZUGRIFF:-read-write}
|
||||
NTFY_BEHIND_PROXY: "true"
|
||||
ports:
|
||||
- "${NTFY_PORT:-8086}:80"
|
||||
networks:
|
||||
- edge
|
||||
- intern
|
||||
logging: *logging
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Die Anwendung selbst (Next.js, Standalone-Build).
|
||||
# Führt vor dem Start die ausstehenden Prisma-Migrationen aus.
|
||||
|
||||
Reference in New Issue
Block a user