Index: src/routes/prutter.js
===================================================================
--- src/routes/prutter.js	(revision f63cbc22ee20c4ac230e3564c560021a8e7fdec4)
+++ src/routes/prutter.js	(revision 8aa85d06c34d1b16a4f9440e4c87fac432d0cf6e)
@@ -19,4 +19,6 @@
 import { renderPage } from '../middleware/render.js';
 import { requireAuth, isViewer } from '../middleware/auth.js';
+import { getTenancy } from '../services/SettingsService.js';
+import { premiumUnlocked } from '../services/PatreonService.js';
 import PermissionsService from '../services/PermissionsService.js';
 
@@ -31,7 +33,15 @@
 }
 
-// Middleware: require both auth + Prutter enabled
+// Middleware: Prutter = Hub-feature achter de premium-laag, plus login.
+//  - alleen in Hub-modus (DM tussen artiesten/leden van het collectief)
+//  - vergrendeld als de premium-laag aan staat maar Patreon niet gekoppeld is
+//    (premium uit = niet gegate → huidige gedrag, demo's blijven werken)
+//  - geen anonieme DMs
 function requirePrutter(req, res, next) {
   if (!siteAllowsDM(req, res)) return res.status(404).send('Prutter not enabled on this site');
+  if (getTenancy() !== 'hub') return res.status(404).send('Prutter is alleen beschikbaar in Hub-modus');
+  if (!premiumUnlocked()) {
+    return res.status(403).send('Prutter is een premium-functie — koppel Patreon in Beheer → Instellingen.');
+  }
   return requireAuth(req, res, next);
 }
