Index: src/routes/admin-settings.js
===================================================================
--- src/routes/admin-settings.js	(revision 743bb8114bbf5027127df02b295fce2efb02ce8d)
+++ src/routes/admin-settings.js	(revision 6e0249f645aa302be11c2683100109edcedf3ab4)
@@ -1,10 +1,12 @@
 /**
- * Admin: globale instellingen — nu de tenancy-modus (Solo/Hub).
+ * Admin: globale instellingen.
+ *  - tenancy-modus (Solo/Hub)
+ *  - hub-branding (naam/tagline/intro van de generieke hub-hoofdpagina)
  *
- * GET  /admin/settings        -> toon huidige modus + uitleg
- * POST /admin/settings        -> sla modus op (god-only)
+ * GET  /admin/settings   -> toon huidige instellingen
+ * POST /admin/settings   -> sla op (god-only)
  *
- * Schakelen is niet-destructief: Solo verbergt alleen de multi-site-onderdelen
- * en routeert naar de primaire site; er wordt niets verwijderd.
+ * De hub-pagina is generiek (van geen enkele user); deze branding leeft in
+ * globale settings, niet in een site.
  */
 
@@ -12,5 +14,5 @@
 import { renderPage } from '../middleware/render.js';
 import { requireGod } from '../middleware/auth.js';
-import { getTenancy, setTenancy } from '../services/SettingsService.js';
+import { getTenancy, setTenancy, getSetting, setSetting } from '../services/SettingsService.js';
 
 const router = express.Router();
@@ -21,4 +23,7 @@
     bodyClass: 'on-admin',
     tenancy: getTenancy(),
+    hubTitle: getSetting('hub_title') || '',
+    hubTagline: getSetting('hub_tagline') || '',
+    hubIntro: getSetting('hub_intro') || '',
     success: req.query.success || null,
   });
@@ -26,6 +31,17 @@
 
 router.post('/', requireGod, (req, res) => {
-  setTenancy(req.body.tenancy === 'hub' ? 'hub' : 'solo');
-  res.redirect('/admin/settings?success=' + encodeURIComponent('Modus opgeslagen'));
+  if (typeof req.body.tenancy !== 'undefined') {
+    setTenancy(req.body.tenancy === 'hub' ? 'hub' : 'solo');
+  }
+  if (typeof req.body.hub_title !== 'undefined') {
+    setSetting('hub_title', (req.body.hub_title || '').toString().slice(0, 80).trim());
+  }
+  if (typeof req.body.hub_tagline !== 'undefined') {
+    setSetting('hub_tagline', (req.body.hub_tagline || '').toString().slice(0, 120).trim());
+  }
+  if (typeof req.body.hub_intro !== 'undefined') {
+    setSetting('hub_intro', (req.body.hub_intro || '').toString().slice(0, 400).trim());
+  }
+  res.redirect('/admin/settings?success=' + encodeURIComponent('Opgeslagen'));
 });
 
Index: src/routes/hub.js
===================================================================
--- src/routes/hub.js	(revision 743bb8114bbf5027127df02b295fce2efb02ce8d)
+++ src/routes/hub.js	(revision 6e0249f645aa302be11c2683100109edcedf3ab4)
@@ -10,5 +10,5 @@
 import db from '../config/database.js';
 import { renderPage } from '../middleware/render.js';
-import { getTenancy } from '../services/SettingsService.js';
+import { getTenancy, getSetting } from '../services/SettingsService.js';
 
 const router = express.Router();
@@ -35,24 +35,25 @@
   `).all();
 
-  // De PrutFolio's (sites) voor de gebruikers-lijst.
-  const sites = db.prepare(`
-    SELECT s.slug, s.title, s.profile_photo,
-           u.username AS owner_username,
+  // ALLE PrutFolio's (elke user, incl. de admin z'n eigen site) voor de roster.
+  const artists = db.prepare(`
+    SELECT s.slug, s.title, s.tagline, s.profile_photo,
            (SELECT COUNT(*) FROM posts WHERE site_id = s.id AND status = 'published') AS post_count
     FROM sites s
-    LEFT JOIN users u ON u.id = s.owner_id
     ORDER BY s.created_at ASC
   `).all();
 
-  // De primaire/oudste site geldt als de bedrijfssite (label). De roster toont
-  // alleen de artiesten (alle overige sites), niet de bedrijfssite zelf.
-  const company = res.locals.site || null;
-  const artists = company ? sites.filter((s) => s.slug !== company.slug) : sites;
+  // De hub-pagina is GENERIEK (van geen enkele user) — branding komt uit globale
+  // instellingen die de admin in Beheer beheert, niet uit een site.
+  const hub = {
+    title: getSetting('hub_title') || 'Overzicht',
+    tagline: getSetting('hub_tagline') || '',
+    intro: getSetting('hub_intro') || '',
+  };
 
   renderPage(req, res, 'pages/hub-home', {
-    pageTitle: company ? company.title : 'Overzicht',
-    socialDescr: (company && (company.description || company.tagline)) || '',
+    pageTitle: hub.title,
+    socialDescr: hub.intro || hub.tagline || '',
     bodyClass: 'on-home on-hub',
-    company,
+    hub,
     artists,
     posts,
Index: src/views/pages/admin-settings.ejs
===================================================================
--- src/views/pages/admin-settings.ejs	(revision 743bb8114bbf5027127df02b295fce2efb02ce8d)
+++ src/views/pages/admin-settings.ejs	(revision 6e0249f645aa302be11c2683100109edcedf3ab4)
@@ -30,4 +30,29 @@
     </form>
   </section>
+
+  <% if (tenancy === 'hub') { %>
+  <section class="set-card" style="margin-top:1rem">
+    <h2>Hub-hoofdpagina</h2>
+    <p class="set-help">
+      De openbare hub-pagina (<code>/</code>) is generiek — van geen enkele gebruiker.
+      Hier stel je de naam en intro in. Jouw eigen PrutFolio blijft los bestaan onder <code>/user/</code>.
+    </p>
+    <form method="post" action="/admin/settings" class="set-form">
+      <label class="set-field">
+        <span>Naam</span>
+        <input type="text" name="hub_title" maxlength="80" value="<%= hubTitle %>" placeholder="bijv. Studio Noord">
+      </label>
+      <label class="set-field">
+        <span>Tagline</span>
+        <input type="text" name="hub_tagline" maxlength="120" value="<%= hubTagline %>" placeholder="bijv. Onafhankelijk muzieklabel">
+      </label>
+      <label class="set-field">
+        <span>Intro</span>
+        <textarea name="hub_intro" maxlength="400" rows="3" placeholder="Korte introtekst onder de titel."><%= hubIntro %></textarea>
+      </label>
+      <button type="submit" class="btn btn-primary">Opslaan</button>
+    </form>
+  </section>
+  <% } %>
 </div>
 
@@ -48,4 +73,13 @@
 .set-opt code { background: var(--paper-2); padding: 0.05rem 0.35rem; border-radius: 3px; font-size: 0.85em; }
 .set-form .btn { align-self: flex-start; }
+.set-field { display: flex; flex-direction: column; gap: 0.3rem; }
+.set-field > span { font-size: 0.8rem; font-weight: 600; color: var(--ink-soft, var(--ink-muted)); }
+.set-field input, .set-field textarea {
+  width: 100%; box-sizing: border-box; padding: 0.55rem 0.7rem;
+  border: 1px solid var(--rule); border-radius: 6px; background: var(--paper); color: var(--ink);
+  font: inherit; font-size: 0.95rem;
+}
+.set-field textarea { resize: vertical; }
+.set-field input:focus, .set-field textarea:focus { outline: 2px solid var(--accent); outline-offset: -1px; border-color: var(--accent); }
 .alert { padding: 0.75rem 1rem; border-radius: 6px; margin-bottom: 1rem; }
 .alert-success { background: #d1fae5; color: #065f46; border: 1px solid #a7f3d0; }
Index: src/views/pages/hub-home.ejs
===================================================================
--- src/views/pages/hub-home.ejs	(revision 743bb8114bbf5027127df02b295fce2efb02ce8d)
+++ src/views/pages/hub-home.ejs	(revision 6e0249f645aa302be11c2683100109edcedf3ab4)
@@ -4,10 +4,10 @@
   <header class="hub-hero">
     <div class="hub-hero-inner container">
-      <h1 class="hub-hero-title"><%= company ? company.title : 'Overzicht' %></h1>
-      <% if (company && company.tagline) { %>
-        <p class="hub-hero-tag"><%= company.tagline %></p>
+      <h1 class="hub-hero-title"><%= hub.title %></h1>
+      <% if (hub.tagline) { %>
+        <p class="hub-hero-tag"><%= hub.tagline %></p>
       <% } %>
-      <% if (company && (company.profile_bio || company.description)) { %>
-        <p class="hub-hero-desc"><%= company.profile_bio || company.description %></p>
+      <% if (hub.intro) { %>
+        <p class="hub-hero-desc"><%= hub.intro %></p>
       <% } %>
     </div>
