Gatus probes every public service every minute and renders a status page. ntfy turns HTTP POSTs into push notifications on my phone, no app servers in between. The bridge sits between them: when Gatus posts a failure, the bridge reformats the alert and forwards it to the right ntfy topic.
The interesting bit is what isn't in there. No PagerDuty, no Slack webhooks, no third-party uptime service. The whole notification path lives on the same box as the things being watched, which would be a problem — except the bridge also pings healthchecks.io every five minutes from a separate cron, so when that stops pinging, healthchecks.io alerts me. The watcher-of-the-watcher is the only external dependency.