{% extends "base.html" %} {% block title %}Broadcast Notifications{% endblock %} {% block content %}

Broadcast Notification

Send an in-app notification to all active iOS app users in the selected roles. Messages are delivered within 60 seconds via the app's background poll.

{% with messages = get_flashed_messages(with_categories=true) %} {% for category, message in messages %} {% endfor %} {% endwith %}
{# ── Compose Form ─────────────────────────────────────────────────── #}
Compose Message
Appears as the notification banner title on iPad.
The full message body shown in the notification and in-app inbox. 0 / 500
{% for role in roles %}
{% endfor %}
Only active users in the selected roles will receive this message.
{# ── Broadcast History ─────────────────────────────────────────────── #}
Recent Broadcasts (last 50)
{% if history %}
{% for b in history %} {% endfor %}
Sent Title Roles Recipients By
{{ b.sent_at.strftime('%b %-d, %Y') }}
{{ b.sent_at.strftime('%I:%M %p') }}
{{ b.title }}
{{ b.body }}
{% for role in b.target_roles %} {{ role_labels.get(role, role) }} {% endfor %} {{ b.recipient_count }} {{ b.sent_by.display_name if b.sent_by else '—' }}
{% else %}
No broadcasts sent yet.
{% endif %}
{# ── Broadcast Detail Modal ──────────────────────────────────────────────── #} {% endblock %}