Index: src/services/PostAccessService.js
===================================================================
--- src/services/PostAccessService.js	(revision 8b65e67e700ea809fa6f1d5e556db13ed2a0696c)
+++ src/services/PostAccessService.js	(revision d85b66f559540eafc15e272713f7309f657ceb42)
@@ -44,9 +44,12 @@
  *
  * @param post     de rij uit `posts`
- * @param viewer   { user, site, unlockedSlug } -- unlockedSlug is de slug uit
- *                 een vers ?u=-bewijs van /paid/unlock, al geverifieerd door de
- *                 aanroeper. Deze module doet geen crypto.
+ * @param viewer   { user, site, unlockedSlug, isFollower } -- unlockedSlug is de
+ *                 slug uit een vers ?u=-bewijs van /paid/unlock, al geverifieerd
+ *                 door de aanroeper; isFollower komt uit OpenWebAuthService en
+ *                 zegt dat een bewezen fedi-actor deze site volgt. Deze module
+ *                 doet geen crypto en raakt de database niet aan: ophalen doet
+ *                 de aanroeper, beslissen doet deze.
  */
-export function postAccess(post, { user = null, site = null, unlockedSlug = null } = {}) {
+export function postAccess(post, { user = null, site = null, unlockedSlug = null, isFollower = false } = {}) {
   if (!post) return 'forbidden';
 
@@ -62,5 +65,13 @@
 
   if (post.paid && String(unlockedSlug || '') !== String(post.slug)) return 'paid';
-  if (post.fan_only && !user) return 'fan';
+  // `fan_only` betekende altijd al "mijn volgers op de fediverse", maar de poort
+  // vroeg om een lokaal account -- de verkeerde vraag, die juist de mensen
+  // buitensloot voor wie hij openstond. `isFollower` is het antwoord op de
+  // ECHTE vraag: een bezoeker die via OpenWebAuth bewees @iemand@ergens te zijn
+  // en die deze site volgt. Wie dat bewijs levert, komt binnen.
+  //
+  // Het lokale account blijft er ook door, zoals het altijd deed: dat is een
+  // andere manier om te weten wie iemand is, niet een mindere.
+  if (post.fan_only && !user && !isFollower) return 'fan';
   return 'full';
 }
