Index: src/routes/epk.js
===================================================================
--- src/routes/epk.js	(revision e6ad94837ba23b51afaaa0d7cf30c5fecfb31935)
+++ src/routes/epk.js	(revision d7746798ec30f65765731ccbef3852624ec58f96)
@@ -1,13 +1,13 @@
 /**
- * EPK / perskit (premium) — een deelbare perspagina per Klonkt-site.
+ * EPK / press kit (premium) — a shareable press page per Klonkt site.
  *
- * GET /pers  (solo) of /user/:slug/pers (hub, via resolveSite + siteUrlBase)
- *   -> nette, openbare perskit: hero (foto/titel/tagline), korte bio, topnummers,
- *      recente posts en een contact-knop. Bedoeld om naar boekers/pers te sturen.
+ * GET /pers  (solo) or /user/:slug/pers (hub, via resolveSite + siteUrlBase)
+ *   -> clean, public press kit: hero (photo/title/tagline), short bio, top tracks,
+ *      recent posts and a contact button. Intended to share with bookers/press.
  *
- * Premium-gated: niet-premium instances hebben GEEN /pers (next() -> 404 via de
- * catch-all). De PAGINA zelf is openbaar (geen login) zodat pers 'm kan bekijken;
- * alleen het BESTAAN ervan is premium. Geen login-e-mail lekken: contact loopt via
- * een expliciet ingesteld pers-adres (epk_contact, per site) of anders de site zelf.
+ * Premium-gated: non-premium instances have NO /pers (next() -> 404 via the
+ * catch-all). The PAGE itself is public (no login) so press can view it;
+ * only its EXISTENCE is premium. No login email leak: contact goes via an
+ * explicitly configured press address (epk_contact, per site) or the site itself.
  */
 
@@ -21,15 +21,15 @@
 
 router.get('/pers', (req, res, next) => {
-  if (!premiumUnlocked()) return next();      // geen premium -> geen perskit
+  if (!premiumUnlocked()) return next();      // no premium -> no press kit
   const site = res.locals.site;
   if (!site) return next();
 
-  // Nummers op de perskit: een door de admin GEKOZEN selectie (max 5, in eigen
-  // volgorde) als die is ingesteld; anders automatisch de top 5 meest beluisterde.
+  // Tracks on the press kit: an admin-CHOSEN selection (max 5, in custom order)
+  // if configured; otherwise automatically the top 5 most-listened.
   let chosenIds = [];
   try {
     const raw = JSON.parse(getSetting('epk_tracks_' + site.id, '') || '[]');
     if (Array.isArray(raw)) chosenIds = raw.filter((x) => typeof x === 'string').slice(0, 5);
-  } catch (e) { /* ongeldige JSON → val terug op top */ }
+  } catch (e) { /* invalid JSON → fall back to top */ }
 
   let tracks;
@@ -41,5 +41,5 @@
     ).all(site.id, ...chosenIds);
     const byId = new Map(rows.map((r) => [r.id, r]));
-    tracks = chosenIds.map((id) => byId.get(id)).filter(Boolean);  // behoud gekozen volgorde
+    tracks = chosenIds.map((id) => byId.get(id)).filter(Boolean);  // preserve chosen order
   } else {
     tracks = db.prepare(
@@ -60,8 +60,8 @@
   ).all(site.id);
 
-  // Pers-contact: per-site instelling (epk_contact_<siteId>) als die er is, anders
-  // de globale epk_contact. NOOIT automatisch de login-mail tonen.
+  // Press contact: per-site setting (epk_contact_<siteId>) if present, otherwise
+  // the global epk_contact. NEVER auto-expose the login email.
   const contact = (getSetting('epk_contact_' + site.id, '') || getSetting('epk_contact', '') || '').trim();
-  // Korte pers-bio: per-site instelling, anders de tagline van de site.
+  // Short press bio: per-site setting, otherwise the site's tagline.
   const bio = (getSetting('epk_bio_' + site.id, '') || site.tagline || '').trim();
 
