Support sending notifications via ntfy.sh or self-hosted ntfy servers
as an alternative to Apprise. Each notification can be configured to
use either provider via a dropdown in the create/edit modal.
Server changes:
- Add ntfyUrl and ntfyToken fields to NotificationSettings
- Add ntfyTopic field to Notification model with getNtfyPayload()
- Route notifications to Apprise or ntfy based on ntfyTopic presence
- Add null guard for appriseApiUrl before sending
- Add undefined guards in update() to prevent partial PATCH from
resetting unrelated fields
Client changes:
- Add ntfy.sh settings section on the notifications config page
- Add provider dropdown (Apprise/ntfy) in notification edit modal
- Extract shared saveSettings() helper to deduplicate form submissions
- Use i18n for all user-visible strings