Index: src/routes/artists.js
===================================================================
--- src/routes/artists.js	(revision 8afbdd6572a947bce4726d5aa0d0aa0d6c7e5067)
+++ src/routes/artists.js	(revision ce8c8c298d5ac9eae09ab3f1c522a1710ba832f8)
@@ -26,12 +26,17 @@
   if (!Number.isFinite(page) || page < 1) page = 1;
 
+  // De hoofd-/labelsite (oudste) is geen artiest -> uit de directory weren,
+  // consistent met de hub-home die 'm apart toont.
+  const mainRow = db.prepare('SELECT id FROM sites ORDER BY created_at ASC LIMIT 1').get();
+  const mainId = mainRow ? mainRow.id : '';
+
   // Zoekterm tegen titel/slug/tagline (case-insensitive via LIKE; SQLite LIKE is
   // standaard ongevoelig voor ASCII-hoofdletters). De ESCAPE '\' maakt %, _ en \
   // in de zoekterm letterlijk (anders zouden ze als wildcards werken).
-  const where = q
-    ? "WHERE (s.title LIKE @like ESCAPE '\\' OR s.slug LIKE @like ESCAPE '\\' OR s.tagline LIKE @like ESCAPE '\\')"
-    : '';
   const like = '%' + q.replace(/[\\%_]/g, (m) => '\\' + m) + '%';
-  const params = q ? { like } : {};
+  const conds = ['s.id != @mainId'];
+  if (q) conds.push("(s.title LIKE @like ESCAPE '\\' OR s.slug LIKE @like ESCAPE '\\' OR s.tagline LIKE @like ESCAPE '\\')");
+  const where = 'WHERE ' + conds.join(' AND ');
+  const params = q ? { mainId, like } : { mainId };
 
   const total = db.prepare(`SELECT COUNT(*) AS c FROM sites s ${where}`)
Index: src/routes/hub.js
===================================================================
--- src/routes/hub.js	(revision 8afbdd6572a947bce4726d5aa0d0aa0d6c7e5067)
+++ src/routes/hub.js	(revision ce8c8c298d5ac9eae09ab3f1c522a1710ba832f8)
@@ -35,7 +35,20 @@
   `).all();
 
+  // De hoofd-/labelsite (oudste = de bedrijfs-/hoofdaccount) is GEEN artiest;
+  // die tonen we apart bovenaan, niet in de Artiesten-roster.
+  const mainSite = db.prepare(`
+    SELECT s.id, s.slug, s.title, s.tagline, s.profile_photo, s.accent,
+           u.avatar_url AS owner_avatar,
+           (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
+    LIMIT 1
+  `).get() || null;
+  const mainId = mainSite ? mainSite.id : '';
+
   // Uitgelichte PrutFolio's voor de home-roster: meest-actief eerst (aantal
-  // gepubliceerde posts), dan nieuwste. Beperkt tot HOME_ROSTER_LIMIT zodat de
-  // home schaalt — de volledige, doorzoekbare lijst staat op /artiesten.
+  // gepubliceerde posts), dan nieuwste. Excl. de hoofdsite. Beperkt tot
+  // HOME_ROSTER_LIMIT zodat de home schaalt — volledige lijst staat op /artiesten.
   const HOME_ROSTER_LIMIT = 24;
   const artists = db.prepare(`
@@ -45,8 +58,9 @@
     FROM sites s
     LEFT JOIN users u ON u.id = s.owner_id
+    WHERE s.id != @mainId
     ORDER BY post_count DESC, s.created_at DESC
-    LIMIT ?
-  `).all(HOME_ROSTER_LIMIT);
-  const totalArtists = db.prepare('SELECT COUNT(*) AS c FROM sites').get().c;
+    LIMIT @limit
+  `).all({ mainId, limit: HOME_ROSTER_LIMIT });
+  const totalArtists = db.prepare('SELECT COUNT(*) AS c FROM sites WHERE id != ?').get(mainId).c;
 
   // De hub-pagina is GENERIEK (van geen enkele user) — branding komt uit globale
@@ -64,4 +78,5 @@
     bodyClass: 'on-home on-hub',
     hub,
+    mainSite,
     artists,
     totalArtists,
