Index: src/routes/auth.js
===================================================================
--- src/routes/auth.js	(revision 029f047c2a08e4991412f75369d040bee40c9c49)
+++ src/routes/auth.js	(revision e9229f2d5c61bfbe528b763e03dc9c5639a57c62)
@@ -8,4 +8,12 @@
 import { safeNext } from '../middleware/auth.js';
 import { googleConfigured, authorizeUrl, exchangeCode, fetchUserinfo } from '../config/google.js';
+import { premiumUnlocked } from '../services/PatreonService.js';
+
+// Fan-login (luisteraars inloggen met Google om te reageren) is een premium-
+// feature: beschikbaar als Google is ingesteld ÉN de premium-laag ontgrendeld is
+// (premium uit = vrij; aan = Patreon vereist).
+function fanLoginReady() {
+  return googleConfigured() && premiumUnlocked();
+}
 import { mailerConfigured, sendMail } from '../config/mailer.js';
 
@@ -47,5 +55,5 @@
     success: req.query.success || null,
     username: '',
-    googleReady: googleConfigured(),
+    googleReady: fanLoginReady(),
     next,
   });
@@ -60,5 +68,5 @@
     return renderPage(req, res, 'pages/auth-login', {
       pageTitle: 'Inloggen', bodyClass: 'on-special',
-      error, success: null, username: username || '', googleReady: googleConfigured(), next,
+      error, success: null, username: username || '', googleReady: fanLoginReady(), next,
     });
   };
@@ -226,6 +234,6 @@
 // Per-instance, eigen Google-client. Geeft ALTIJD rol member — nooit beheer.
 router.get('/google', (req, res) => {
-  if (!googleConfigured()) {
-    return res.redirect('/auth/login?error=' + encodeURIComponent('Google-login is op deze site niet ingesteld.'));
+  if (!fanLoginReady()) {
+    return res.redirect('/auth/login?error=' + encodeURIComponent('Inloggen met Google is op deze site niet beschikbaar.'));
   }
   const state = crypto.randomBytes(16).toString('hex');
@@ -248,4 +256,5 @@
 router.get('/google/callback', async (req, res) => {
   const fail = (msg) => res.redirect('/auth/login?error=' + encodeURIComponent(msg));
+  if (!fanLoginReady()) return fail('Inloggen met Google is op deze site niet beschikbaar.');
   try {
     const { code, state } = req.query;
