{% extends "base.html" %} {% comment %} The inbox (issue #14): conversation list, thread, contact panel. SPEC §14 mandates HTMX polling rather than SSE, "every 3 s on list and open thread (ETag/304 to keep payloads near-zero when unchanged)". Two things in the inline script at the bottom of this file make that work, and both are non-obvious enough to be worth reading before editing: 1. htmx does not send If-None-Match. Without it the server has nothing to compare against and every poll is a full render. 2. htmx 2's default responseHandling swaps on 304 — its rule for 2xx is the regex [23].. , which "304" matches — so an unchanged poll would swap an empty body over the pane and blank it. Everything platform-specific about what may be sent is decided server-side by apps/messaging/compliance.py and arrives here as a sentence. There is no per-platform branching anywhere in these templates, on purpose. No inline event handlers: the CSP allows 'unsafe-eval' for Alpine's x-* expressions but NOT 'unsafe-inline', so an onclick= attribute is silently inert. {% endcomment %} {% load common_extras %} {% block title %}Inbox · DemandTrail Messaging{% endblock %} {% block page_header %}
Every conversation across your connected channels.
Select a conversation
{% if unread_count %}{{ unread_count }} conversation{{ unread_count|pluralize }} need{{ unread_count|pluralize:"s," }} a reply.{% else %}You are all caught up.{% endif %} Use j and k to move through the list.
{% if conversations %} {% endif %}