Index: src/routes/admin-epk.js
===================================================================
--- src/routes/admin-epk.js	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
+++ src/routes/admin-epk.js	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
@@ -0,0 +1,43 @@
+/**
+ * Admin: Perskit (EPK) bewerken — per-site bio + pers-contact.
+ *
+ * GET  /admin/epk   -> formulier met huidige bio + contact
+ * POST /admin/epk   -> opslaan (app_settings: epk_bio_<siteId> / epk_contact_<siteId>)
+ *
+ * De perskit-pagina zelf (/pers) leest deze waarden; tracks + recente posts komen
+ * automatisch. Perskit is premium + solo (zie routes/epk.js).
+ */
+
+import express from 'express';
+import { renderPage } from '../middleware/render.js';
+import { requireGod } from '../middleware/auth.js';
+import { getSetting, setSetting } from '../services/SettingsService.js';
+import { premiumUnlocked } from '../services/PatreonService.js';
+
+const router = express.Router();
+
+router.get('/', requireGod, (req, res) => {
+  const site = res.locals.site;
+  if (!site) return res.status(404).send('Geen site');
+  if (!premiumUnlocked()) {
+    return res.status(403).send('Perskit is een premium-functie.');
+  }
+  renderPage(req, res, 'pages/admin-epk', {
+    pageTitle: 'Perskit bewerken',
+    bodyClass: 'on-admin',
+    site,
+    epkBio: getSetting('epk_bio_' + site.id, '') || '',
+    epkContact: getSetting('epk_contact_' + site.id, '') || '',
+    success: req.query.success || null,
+  });
+});
+
+router.post('/', requireGod, (req, res) => {
+  const site = res.locals.site;
+  if (!site) return res.status(404).send('Geen site');
+  setSetting('epk_bio_' + site.id, (req.body.epk_bio || '').toString().slice(0, 1000).trim());
+  setSetting('epk_contact_' + site.id, (req.body.epk_contact || '').toString().slice(0, 300).trim());
+  res.redirect('/admin/epk?success=' + encodeURIComponent('Perskit opgeslagen'));
+});
+
+export default router;
Index: src/server.js
===================================================================
--- src/server.js	(revision 0f11c69fb7522205b71622a2944d96d598caea30)
+++ src/server.js	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
@@ -61,4 +61,5 @@
 import showsRoutes from './routes/shows.js';
 import adminShowsRoutes from './routes/admin-shows.js';
+import adminEpkRoutes from './routes/admin-epk.js';
 import changelogRoutes from './routes/changelog.js';
 
@@ -265,4 +266,5 @@
 app.use('/admin/newsletter', adminNewsletterRoutes);
 app.use('/admin/shows', adminShowsRoutes);
+app.use('/admin/epk', adminEpkRoutes);
 app.use('/admin', adminRoutes);
 app.use('/prutter', prutterRoutes);
Index: src/views/pages/admin-epk.ejs
===================================================================
--- src/views/pages/admin-epk.ejs	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
+++ src/views/pages/admin-epk.ejs	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
@@ -0,0 +1,31 @@
+<div class="container admin-page">
+  <h1>Perskit bewerken</h1>
+  <p><a href="/admin" class="btn">&larr; Beheer</a> <a href="/pers" class="btn" target="_blank" rel="noopener">📰 Bekijk perskit</a></p>
+
+  <% if (success) { %><div class="alert alert-success"><%= success %></div><% } %>
+
+  <section class="set-card">
+    <h2>Tekst</h2>
+    <p class="set-help">
+      De perskit (<code>/pers</code>) toont je sitenaam + foto, deze bio en contact,
+      plus automatisch je meest beluisterde nummers en recente posts. Laat de bio
+      leeg om de site-tagline te gebruiken; laat contact leeg om niets te tonen
+      (je login-mail wordt nooit automatisch getoond).
+    </p>
+
+    <form method="post" action="/admin/epk" class="set-form">
+      <label class="set-field">
+        <span>Pers-bio</span>
+        <textarea name="epk_bio" rows="5" maxlength="1000"
+                  placeholder="Korte beschrijving van jou/het project voor pers &amp; boekers."><%= epkBio %></textarea>
+      </label>
+      <label class="set-field">
+        <span>Pers-contact</span>
+        <input type="text" name="epk_contact" maxlength="300"
+               placeholder="bv. pers@jouwdomein.nl of een boekingslink"
+               value="<%= epkContact %>">
+      </label>
+      <button type="submit" class="btn btn-primary">Opslaan</button>
+    </form>
+  </section>
+</div>
Index: src/views/pages/admin.ejs
===================================================================
--- src/views/pages/admin.ejs	(revision 0f11c69fb7522205b71622a2944d96d598caea30)
+++ src/views/pages/admin.ejs	(revision 9d9f3c1e9e57ef71ff065970e57f927f9c586ea5)
@@ -34,5 +34,5 @@
       <a href="/admin/stats" class="btn">📊 Statistieken</a>
       <a href="/admin/newsletter" class="btn">✉️ Nieuwsbrief</a>
-      <% if (tenancy !== 'hub' && primarySite) { %><a href="/pers" class="btn" target="_blank">📰 Perskit</a><% } %>
+      <% if (tenancy !== 'hub' && primarySite) { %><a href="/admin/epk" class="btn">📰 Perskit bewerken</a> <a href="/pers" class="btn" target="_blank">👁 Bekijk perskit</a><% } %>
       <% if (tenancy !== 'hub' && primarySite) { %><a href="/downloads" class="btn" target="_blank">⬇ Downloads</a><% } %>
       <% if (tenancy !== 'hub' && primarySite) { %><a href="/links" class="btn" target="_blank">🔗 Link-in-bio</a><% } %>
