feat: add reminders for tasks and calendar events (closes #13)

- DB migration #8: reminders table (entity_type, entity_id, remind_at, dismissed, created_by)
- REST API: GET /pending, GET /?entity, POST /, PATCH /:id/dismiss, DELETE
- Client polling module (reminders.js): 60s interval, toast + Browser Notification API
- Tasks: enable reminder with custom date/time in edit modal
- Calendar: reminder offset selector (at time / 15min / 1h / 1d before)
- Bell badge shows pending count; reminders auto-dismiss after 30s or on user action
- SW shell cache updated to include reminders.js + reminders.css
- 11 new DB tests covering CRUD, pending query, dismiss, upsert, cascade delete, constraints
This commit is contained in:
Ulas
2026-04-15 11:40:24 +02:00
parent 45008a4af6
commit e384ae1037
16 changed files with 1061 additions and 20 deletions
+21
View File
@@ -597,5 +597,26 @@
"unitWeeks": "Wochen",
"unitMonth": "Monat",
"unitMonths": "Monate"
},
"reminders": {
"sectionTitle": "Erinnerung",
"enableLabel": "Erinnerung setzen",
"dateLabel": "Datum",
"timeLabel": "Uhrzeit",
"offsetLabel": "Erinnern",
"offsetNone": "Keine",
"offset15min": "15 Minuten vorher",
"offset1hour": "1 Stunde vorher",
"offset1day": "1 Tag vorher",
"offsetAtTime": "Zum Startzeitpunkt",
"toastTitle": "Erinnerung",
"dismiss": "Verwerfen",
"notificationPermission": "Browser-Benachrichtigungen",
"notificationEnable": "Benachrichtigungen aktivieren",
"notificationEnabled": "Benachrichtigungen aktiv",
"notificationDenied": "Benachrichtigungen blockiert",
"notificationHint": "Erhalte Benachrichtigungen auch wenn die App geöffnet ist.",
"pendingBadgeTitle": "{{count}} fällige Erinnerung",
"pendingBadgeTitlePlural": "{{count}} fällige Erinnerungen"
}
}