Index: src/routes/admin-sites.js
===================================================================
--- src/routes/admin-sites.js	(revision 98ecf51d81042b5773ac053aa13dfc773dbdf4e9)
+++ src/routes/admin-sites.js	(revision 7881080819a21d5ba5da32d94ef51da0d866eea0)
@@ -161,9 +161,9 @@
   const sites = db.prepare(`
     SELECT s.id, s.slug, s.title, s.description, s.created_at,
-           s.is_public, s.robots_index,
+           s.is_public, s.robots_index, s.is_primary,
            u.username AS owner_username,
            (SELECT COUNT(*) FROM posts WHERE site_id = s.id) AS post_count
     FROM sites s LEFT JOIN users u ON u.id = s.owner_id
-    ORDER BY s.created_at DESC
+    ORDER BY s.is_primary DESC, s.created_at DESC
   `).all();
 
@@ -354,4 +354,17 @@
 });
 
+// ==================== MAAK PRIMAIR ====================
+// God kiest welke site de primaire/hoofd-site is (de label-/bedrijfssite in hub;
+// in solo dé site). Precies één site is primair → eerst alles uit, dan deze aan.
+router.post('/:slug/make-primary', requireGod, (req, res) => {
+  const site = db.prepare('SELECT id FROM sites WHERE slug = ?').get(req.params.slug);
+  if (!site) return res.redirect('/admin/sites?error=Niet+gevonden');
+  db.transaction(() => {
+    db.prepare('UPDATE sites SET is_primary = 0').run();
+    db.prepare('UPDATE sites SET is_primary = 1 WHERE id = ?').run(site.id);
+  })();
+  res.redirect('/admin/sites?success=' + encodeURIComponent('Primaire site bijgewerkt'));
+});
+
 // ==================== DELETE ====================
 router.post('/:slug/delete', requireGod, (req, res) => {
