Pick a template to autofill, edit fields, preview, then send. Test toggle = log-only drill (no push fan-out).
Every alert ever composed, sent, cancelled, or expired. Includes drills.
Pre-written alert content for common scenarios. Use during a real event for one-click compose.
Shown on the public /safety page. Editing here creates a new version (the old version is preserved in audit history).
Multi-tenant alert issuers. Each authority logs in at /safety-authority/, can compose alerts within their authorized scope (alert types, geographic zone, max severity). By default, authority alerts land as drafts — you review them here before fan-out. Flip Auto-send on for trusted authorities (e.g. an established mayor's office) so their in-scope alerts go live immediately.
For a new property manager, mayor's office, hotel emergency coordinator, etc. They'll log in at /safety-authority/ with the credentials you set here.
Every device that has subscribed to push notifications. Each row is one browser/PWA install. Use the platform badge to see whether it's an iPhone (Apple Push), Android (FCM), or desktop browser. has keys = the auth/p256dh keys that pywebpush needs to deliver are populated.
Compose a test alert that's logged as a drill but not fanned out to real subscribers. Preview the full notification copy + audience size before sending a real one.
How to test for real: in the Compose tab, check the 🧪 Test (drill) checkbox before clicking Send. The alert is recorded in the audit log with no recipients. Audience preview still shows.
To eventually run a real-fan-out drill (only to opted-in testers), build a "tester" subscriber group — that's a follow-on feature once the public /safety page is live.