Index: .env.example
===================================================================
--- .env.example	(revision 2acdbc5033a7cd74a8c0cdba35c9e55635e175c8)
+++ .env.example	(revision cb4eda53c6bcb2060f9adb4512884698f1ed0013)
@@ -52,2 +52,11 @@
 # External embeds (YouTube/SoundCloud/Spotify) keep working too.
 KLONKT_AUDIO=on
+
+# ── Premium extras (optional) ───────────────────────────────────────
+# The core app + all updates + Cirkels are always free. A handful of extras
+# (newsletter, download-for-email, statistics, EPK, link-in-bio, embeddable
+# player, show agenda, release planning) ask for a one-time Patreon supporter
+# link (klonkt.com / patreon.com/c/roboburr) to unlock — that's how the project
+# is funded. ON by default. Set to "off" to make every feature free on your own
+# instance (it runs on your server, so the gate is a soft nudge, not hard DRM).
+KLONKT_PREMIUM_ENABLED=on
Index: src/services/PatreonService.js
===================================================================
--- src/services/PatreonService.js	(revision 2acdbc5033a7cd74a8c0cdba35c9e55635e175c8)
+++ src/services/PatreonService.js	(revision cb4eda53c6bcb2060f9adb4512884698f1ed0013)
@@ -12,6 +12,9 @@
 // (deliberately accepted: $16 < effort to crack).
 //
-// Premium is OFF by default (KLONKT_PREMIUM_ENABLED != 'on'): no premium UI
-// is shown and nothing is gated. Self-hosters enable it once Patreon is set up.
+// Premium gating is ON by default: the extras (newsletter, statistics, …)
+// require a linked Patreon supporter ($16 lifetime). Set KLONKT_PREMIUM_ENABLED=off
+// to make every feature free (e.g. an internal/demo instance, or a self-hoster who
+// just wants the whole app). On self-host the flag is patchable — the gate is a soft
+// nudge toward supporting the project, not hard DRM.
 
 import crypto from 'node:crypto';
@@ -22,5 +25,6 @@
 
 export function premiumEnabled() {
-  return String(process.env.KLONKT_PREMIUM_ENABLED || '').toLowerCase() === 'on';
+  // Default ON; only an explicit 'off' disables the premium layer.
+  return String(process.env.KLONKT_PREMIUM_ENABLED || 'on').toLowerCase() !== 'off';
 }
 export function licenseBase() { return LICENSE_URL; }
