Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision d988fa056c5c2e97a7cf67c778246b1a3e9f9e2b)
+++ src/routes/posts.js	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
@@ -86,5 +86,5 @@
   'tag', 'type', 'user', 'users', 'artiesten', 'leden', 'favorieten', 'feed.xml', 'atom.xml', 'sitemap.xml',
   'manifest.webmanifest', 'sw.js', 'favicon.ico', 'favicon.svg', 'assets',
-  'authorize_interaction', 'fediverse', 'tijdlijn',
+  'authorize_interaction', 'fediverse', 'tijdlijn', 'meldingen',
 ]);
 
@@ -606,4 +606,11 @@
   if (site) { try { await ActivityPubService.sendInteraction(site, 'boost', (req.body.note || '').toString(), (req.body.author || '').toString()); } catch (e) { /* ignore */ } }
   res.redirect('/tijdlijn?success=' + encodeURIComponent('Geboost 🔁'));
+});
+
+// Notifications inbox (new followers + replies/likes/boosts on your posts).
+router.get('/meldingen', requireSiteManager, (req, res) => {
+  const site = res.locals.site;
+  const items = site ? ActivityPubService.getNotifications(site.slug, 80) : [];
+  renderPage(req, res, 'pages/fedi-notifications', { pageTitle: 'Meldingen', bodyClass: 'on-special', items });
 });
 
Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision d988fa056c5c2e97a7cf67c778246b1a3e9f9e2b)
+++ src/services/ActivityPubService.js	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
@@ -737,4 +737,29 @@
 }
 
+// Notifications inbox: new followers + replies/likes/boosts on this site's posts.
+export function getNotifications(slug, limit) {
+  const out = [];
+  try {
+    for (const f of db.prepare('SELECT actor_uri, created_at FROM ap_followers WHERE slug = ? ORDER BY created_at DESC LIMIT 50').all(slug)) {
+      out.push({ type: 'follow', handle: deriveHandle(f.actor_uri), url: f.actor_uri, created_at: f.created_at });
+    }
+  } catch { /* ignore */ }
+  try {
+    const rows = db.prepare(`
+      SELECT i.kind, i.actor_name, i.actor_handle, i.actor_url, i.content, i.created_at,
+             p.slug AS post_slug, p.title AS post_title
+      FROM ap_interactions i LEFT JOIN posts p ON p.id = i.post_id
+      WHERE p.site_id = (SELECT id FROM sites WHERE slug = ?)
+      ORDER BY i.created_at DESC LIMIT 80
+    `).all(slug);
+    for (const r of rows) out.push({
+      type: r.kind, name: r.actor_name, handle: r.actor_handle, url: r.actor_url,
+      content: r.content, post_slug: r.post_slug, post_title: r.post_title, created_at: r.created_at,
+    });
+  } catch { /* ignore */ }
+  out.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
+  return out.slice(0, limit || 60);
+}
+
 export default {
   getOrCreateKeys, apWants, sendAP, actorId, noteId,
@@ -744,3 +769,4 @@
   listOutbox, deliverOutboxDelete,
   webfingerResolve, followActor, unfollowActor, listFollowing, getTimeline, sendInteraction,
+  getNotifications,
 };
Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision d988fa056c5c2e97a7cf67c778246b1a3e9f9e2b)
+++ src/services/i18n.js	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
@@ -26,5 +26,5 @@
     'nav.language': 'Taal',
     'nav.notifications': 'Meldingen',
-    'notif.title': 'Meldingen', 'notif.empty': 'Nog geen meldingen.', 'notif.someone': 'Iemand',
+    'notif.title': 'Meldingen', 'notif.empty': 'Nog geen meldingen.', 'notif.someone': 'Iemand', 'notif.followed': 'volgt je nu', 'notif.liked': 'likete je post', 'notif.boosted': 'boostte je post', 'notif.replied': 'reageerde op',
     'notif.reply': '{actor} reageerde op je reactie', 'notif.comment': '{actor} reageerde op je post', 'notif.like': '{actor} vindt je post leuk',
     'switch.agenda': 'Agenda',
@@ -1029,5 +1029,5 @@
     'nav.language': 'Language',
     'nav.notifications': 'Notifications',
-    'notif.title': 'Notifications', 'notif.empty': 'No notifications yet.', 'notif.someone': 'Someone',
+    'notif.title': 'Notifications', 'notif.empty': 'No notifications yet.', 'notif.someone': 'Someone', 'notif.followed': 'followed you', 'notif.liked': 'liked your post', 'notif.boosted': 'boosted your post', 'notif.replied': 'replied to',
     'notif.reply': '{actor} replied to your comment', 'notif.comment': '{actor} commented on your post', 'notif.like': '{actor} liked your post',
     'switch.agenda': 'Agenda',
@@ -2023,5 +2023,5 @@
     'nav.language': 'Sprache',
     'nav.notifications': 'Benachrichtigungen',
-    'notif.title': 'Benachrichtigungen', 'notif.empty': 'Noch keine Benachrichtigungen.', 'notif.someone': 'Jemand',
+    'notif.title': 'Benachrichtigungen', 'notif.empty': 'Noch keine Benachrichtigungen.', 'notif.someone': 'Jemand', 'notif.followed': 'folgt dir jetzt', 'notif.liked': 'gefällt dein Beitrag', 'notif.boosted': 'teilte deinen Beitrag', 'notif.replied': 'antwortete auf',
     'notif.reply': '{actor} hat auf deinen Kommentar geantwortet', 'notif.comment': '{actor} hat deinen Beitrag kommentiert', 'notif.like': '{actor} gefällt dein Beitrag',
     'switch.agenda': 'Termine',
Index: src/views/pages/admin.ejs
===================================================================
--- src/views/pages/admin.ejs	(revision d988fa056c5c2e97a7cf67c778246b1a3e9f9e2b)
+++ src/views/pages/admin.ejs	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
@@ -58,4 +58,5 @@
     <% } %>
     <a href="/tijdlijn" class="btn">🌐 <%= t('tl.title') %></a>
+    <a href="/meldingen" class="btn">🔔 <%= t('notif.title') %></a>
     <a href="/admin/updates" class="btn"><%= t('admin.b_updates') %></a>
     <a href="/admin/handleiding" class="btn"><%= t('admin.b_help') %></a>
Index: src/views/pages/fedi-notifications.ejs
===================================================================
--- src/views/pages/fedi-notifications.ejs	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
+++ src/views/pages/fedi-notifications.ejs	(revision 00f669baaff99e0e44d5d5291bb86169ba3f5be3)
@@ -0,0 +1,48 @@
+<div class="nt-wrap">
+  <h1 class="nt-title"><%= t('notif.title') %></h1>
+  <% if (!items || !items.length) { %>
+    <p class="nt-empty"><%= t('notif.empty') %></p>
+  <% } else { %>
+    <ul class="nt-list">
+      <% items.forEach(function(n){ %>
+        <li class="nt-item">
+          <span class="nt-icon"><%= n.type === 'follow' ? '👤' : (n.type === 'like' ? '⭐' : (n.type === 'announce' ? '🔁' : '💬')) %></span>
+          <div class="nt-body">
+            <div class="nt-line">
+              <a class="nt-who" href="<%= n.url %>" target="_blank" rel="nofollow noopener"><%= n.name || n.handle %></a>
+              <% if (n.handle && n.name) { %><span class="nt-handle"><%= n.handle %></span><% } %>
+              <span class="nt-what">
+                <% if (n.type === 'follow') { %><%= t('notif.followed') %>
+                <% } else if (n.type === 'like') { %><%= t('notif.liked') %>
+                <% } else if (n.type === 'announce') { %><%= t('notif.boosted') %>
+                <% } else { %><%= t('notif.replied') %><% } %>
+                <% if (n.post_slug) { %><a href="/<%= n.post_slug %>"><%= n.post_title || n.post_slug %></a><% } %>
+              </span>
+              <% if (n.created_at) { %><span class="nt-time"><%= formatDateTime(n.created_at) %></span><% } %>
+            </div>
+            <% if (n.type === 'reply' && n.content) { %><div class="nt-content"><%- n.content %></div><% } %>
+          </div>
+        </li>
+      <% }); %>
+    </ul>
+  <% } %>
+</div>
+
+<style>
+  .nt-wrap { max-width: 620px; margin: 2rem auto; padding: 0 1rem; }
+  .nt-title { margin: 0 0 1.25rem; }
+  .nt-empty { color: var(--ink-soft, #888); }
+  .nt-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: .5rem; }
+  .nt-item { display: flex; gap: .7rem; padding: .7rem .9rem; border-radius: 12px; background: color-mix(in srgb, var(--ink, #000) 4%, transparent); border: 1px solid color-mix(in srgb, var(--ink, #000) 8%, transparent); }
+  .nt-icon { font-size: 1.1rem; flex: 0 0 1.4rem; text-align: center; }
+  .nt-body { flex: 1; min-width: 0; }
+  .nt-line { display: flex; align-items: baseline; gap: .35rem; flex-wrap: wrap; }
+  .nt-who { font-weight: 600; color: var(--ink, inherit); text-decoration: none; }
+  .nt-who:hover { text-decoration: underline; }
+  .nt-handle { color: var(--ink-soft, #888); font-size: .82rem; }
+  .nt-what { color: var(--ink-soft, #aaa); }
+  .nt-what a { color: var(--accent, #06c); }
+  .nt-time { color: var(--ink-soft, #999); font-size: .78rem; margin-left: auto; }
+  .nt-content { margin: .3rem 0 0; line-height: 1.45; color: var(--ink, inherit); overflow-wrap: anywhere; }
+  .nt-content p { margin: .2rem 0; } .nt-content p:first-child { margin-top: 0; }
+</style>
