{% extends "admin/base.html" %} {% block title %}Analytics · bragi admin{% endblock %} {% block content %} {# Zero-JS tabs: real radios (keyboard + focus accessible) toggle panes via CSS :has(). The admin commits to JS only for mutation flows; a read-only view switch stays JS-free. #}

Analytics

Pageviews over the last {{ window }} days: {{ total_30d }}. Bots are filtered at emit time; only browser / feed-reader / other UA classes are recorded.

{% if top_pages %} {% for p in top_pages %} {# Title link swaps the per-path daily trend into #page-trend (a plain htmx GET, so page_detail returns its partial). #} {% endfor %}
PagePathPageviews
{{ p.title or p.path }} {{ p.path }} {{ p.count }}
{% else %}

No pageviews recorded in the last {{ window }} days.

{% endif %}
{% if days %} {% for c in classes %}{% endfor %} {% for day in days %} {% set row = by_day[day] %} {% for c in classes %}{% endfor %} {% endfor %}
Day{{ c }}Total
{{ day }}{{ row.get(c, 0) }}{{ row.values() | sum }}
{% else %}

No pageviews recorded in the last {{ window }} days.

{% endif %}
{% if top_referrers %} {% for r in top_referrers %} {% endfor %}
ReferrerPageviews
{% if r.href %}{{ r.referrer }}{% else %}{{ r.referrer }}{% endif %}{{ r.count }}
{% else %}

No external referrers recorded in the last {{ window }} days.

{% endif %}
{% endblock %}