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": "weeks",
"unitMonth": "month",
"unitMonths": "months"
},
"reminders": {
"sectionTitle": "Reminder",
"enableLabel": "Set reminder",
"dateLabel": "Date",
"timeLabel": "Time",
"offsetLabel": "Remind me",
"offsetNone": "None",
"offset15min": "15 minutes before",
"offset1hour": "1 hour before",
"offset1day": "1 day before",
"offsetAtTime": "At event time",
"toastTitle": "Reminder",
"dismiss": "Dismiss",
"notificationPermission": "Browser notifications",
"notificationEnable": "Enable notifications",
"notificationEnabled": "Notifications active",
"notificationDenied": "Notifications blocked",
"notificationHint": "Receive notifications while the app is open.",
"pendingBadgeTitle": "{{count}} reminder due",
"pendingBadgeTitlePlural": "{{count}} reminders due"
}
}