Index: src/views/pages/admin-listeners.ejs
===================================================================
--- src/views/pages/admin-listeners.ejs	(revision 732272a320793693be207b1b67af729b1feca30f)
+++ src/views/pages/admin-listeners.ejs	(revision 732272a320793693be207b1b67af729b1feca30f)
@@ -0,0 +1,49 @@
+<div class="container admin-listeners-page">
+  <p><a href="/admin" class="btn">&larr; <%= t('aaud.back') %></a></p>
+  <h1><%= t('alis.lis_title') %></h1>
+
+  <%- include('../partials/media-tabs', { active: 'listeners', audioOn: audioOn }) %>
+
+  <%# Waarom dit een eigen tab is en niet een lijstje bij de volgers: dit zijn
+      accounts die aan de BIBLIOTHEEK hangen. Ze krijgen de muziek en met opzet
+      niet de gewone posts, en dat verschil hoort zichtbaar te zijn -- ook voor
+      wie later moet begrijpen waarom ze niet in de volgerslijst staan. %>
+  <p class="admin-tagline"><%= t('alis.lis_intro') %></p>
+
+  <% if (!luisteraars.length) { %>
+    <p class="lis-leeg"><%= t('alis.lis_empty') %></p>
+  <% } else { %>
+    <p class="lis-telling"><strong><%= luisteraars.length %></strong> <%= t('alis.lis_count') %></p>
+    <ul class="lis-lijst">
+      <% luisteraars.forEach(function (l) { %>
+        <li class="lis-rij">
+          <span class="lis-naam"><%= l.name || l.handle || l.actor_uri %></span>
+          <% if (l.handle) { %><span class="lis-handle"><%= l.handle %></span><% } %>
+          <span class="lis-meta">
+            <%= t('alis.lis_since') %> <%= formatDate(l.created_at) %>
+            ·
+            <%= t('alis.lis_last') %>:
+            <%= l.last_delivery_at ? formatDate(l.last_delivery_at) : t('alis.lis_never') %>
+          </span>
+        </li>
+      <% }); %>
+    </ul>
+  <% } %>
+</div>
+
+<style>
+.admin-listeners-page { max-width: 760px; margin: 3rem auto; padding: 0 1rem; }
+.admin-listeners-page h1 { font-family: var(--font-display, serif); font-size: 1.8rem; margin: 0 0 0.4rem; }
+.admin-listeners-page .admin-tagline { color: var(--ink-muted); margin: 0 0 1.5rem; }
+.lis-telling { color: var(--ink-muted); font-size: 0.9rem; }
+.lis-lijst { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
+.lis-rij {
+  display: flex; flex-direction: column; gap: 0.15rem;
+  border: 1px solid var(--rule); border-radius: 8px;
+  padding: 0.7rem 0.85rem; background: var(--paper-2);
+}
+.lis-naam { font-weight: 600; }
+.lis-handle { font-size: 0.85rem; color: var(--ink); }
+.lis-meta { font-size: 0.78rem; color: var(--ink-muted); }
+.lis-leeg { color: var(--ink-muted); }
+</style>
Index: src/views/partials/media-tabs.ejs
===================================================================
--- src/views/partials/media-tabs.ejs	(revision bfadc15a0dbc7cbd6b9323fa2c35b125f82d89e3)
+++ src/views/partials/media-tabs.ejs	(revision 732272a320793693be207b1b67af729b1feca30f)
@@ -1,3 +1,3 @@
-<%# Shared Media tab bar (Afbeeldingen / Audio / Playlists). Params: active = 'images'|'videos'|'audio'|'playlists'; audioOn (bool, default true). %>
+<%# Shared Media tab bar (Afbeeldingen / Audio / Playlists). Params: active = 'images'|'videos'|'audio'|'playlists'|'listeners'; audioOn (bool, default true). %>
 <% var _a = (typeof audioOn === 'undefined') ? true : audioOn; %>
 <nav class="media-tabs" aria-label="Media" style="display:flex;gap:.4rem;margin:0 0 1.25rem;border-bottom:1px solid var(--rule,rgba(128,128,128,.3));flex-wrap:wrap;">
@@ -7,4 +7,5 @@
   <a href="/admin/audio" class="btn" style="border-radius:8px 8px 0 0;<%= active === 'audio' ? 'border-bottom:2px solid var(--accent,#e8b04b);font-weight:600;' : 'opacity:.8;' %>"><%= t('admin.b_audio') %></a>
   <a href="/admin/playlists" class="btn" style="border-radius:8px 8px 0 0;<%= active === 'playlists' ? 'border-bottom:2px solid var(--accent,#e8b04b);font-weight:600;' : 'opacity:.8;' %>"><%= t('admin.b_playlists') %></a>
+  <a href="/admin/listeners" class="btn" style="border-radius:8px 8px 0 0;<%= active === 'listeners' ? 'border-bottom:2px solid var(--accent,#e8b04b);font-weight:600;' : 'opacity:.8;' %>"><%= t('admin.b_listeners') %></a>
   <% } %>
 </nav>
