Index: src/assets/css/style.css
===================================================================
--- src/assets/css/style.css	(revision 09ac0a5edda8dae503aa340c60148e673e483dd3)
+++ src/assets/css/style.css	(revision 03bfdceaccb6b6a383a19b046571885d0b1196ea)
@@ -2028,4 +2028,10 @@
     margin-bottom: 1.5rem;
 }
+/* Hub-landing (body.on-hub): verberg de site-chrome. In hub-modus staan masthead
+   + view-switcher altijd in de DOM (zodat htmx tussen hub-home en artiest-sites
+   kan schakelen zonder full-reload); hier toggelen we hun zichtbaarheid. De
+   hub-home heeft z'n eigen kop/nav in de content. */
+body.on-hub .masthead,
+body.on-hub .view-switcher-wrap { display: none !important; }
 .view-switcher {
     display: flex;
Index: src/views/pages/hub-home.ejs
===================================================================
--- src/views/pages/hub-home.ejs	(revision 09ac0a5edda8dae503aa340c60148e673e483dd3)
+++ src/views/pages/hub-home.ejs	(revision 03bfdceaccb6b6a383a19b046571885d0b1196ea)
@@ -34,5 +34,7 @@
     <% if (mainSite) { %>
     <section class="hub-sec hub-sec-main">
-      <a class="hub-main-card" href="/user/<%= mainSite.slug %>">
+      <a class="hub-main-card" href="/user/<%= mainSite.slug %>"
+         hx-get="/user/<%= mainSite.slug %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML"
+         hx-push-url="/user/<%= mainSite.slug %>" hx-indicator="#pcms-loading">
         <% var _mAva = mainSite.profile_photo || mainSite.owner_avatar; %>
         <span class="hub-main-avatar"<% if (_mAva) { %> style="background-image:url('<%= _mAva %>')"<% } else { %> style="background:<%= mainSite.accent || 'var(--accent)' %>;color:#fff"<% } %>>
@@ -60,5 +62,7 @@
       <div class="roster">
         <% artists.forEach(function(a){ %>
-          <a class="roster-card" href="/user/<%= a.slug %>">
+          <a class="roster-card" href="/user/<%= a.slug %>"
+             hx-get="/user/<%= a.slug %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML"
+             hx-push-url="/user/<%= a.slug %>" hx-indicator="#pcms-loading">
             <% var _ava = a.profile_photo || a.owner_avatar; %>
             <span class="roster-avatar"<% if (_ava) { %> style="background-image:url('<%= _ava %>')"<% } else { %> style="background:<%= a.accent || 'var(--accent)' %>;color:#fff"<% } %>>
@@ -85,5 +89,7 @@
       <div class="hub-feed">
         <% posts.forEach(function(p){ %>
-          <a class="feed-item" href="/user/<%= p.site_slug %>/<%= p.slug %>">
+          <a class="feed-item" href="/user/<%= p.site_slug %>/<%= p.slug %>"
+             hx-get="/user/<%= p.site_slug %>/<%= p.slug %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML"
+             hx-push-url="/user/<%= p.site_slug %>/<%= p.slug %>" hx-indicator="#pcms-loading">
             <% if (p.cover_image_url) { %>
               <span class="feed-cover" style="background-image:url('<%= p.cover_image_url %>')"></span>
Index: src/views/partials/topnav.ejs
===================================================================
--- src/views/partials/topnav.ejs	(revision 09ac0a5edda8dae503aa340c60148e673e483dd3)
+++ src/views/partials/topnav.ejs	(revision 03bfdceaccb6b6a383a19b046571885d0b1196ea)
@@ -28,8 +28,9 @@
         <a href="<%= _siteUrlBase %>/" class="nav-link nav-link-admin">← Terug naar site</a>
       <% } else if (typeof tenancy !== 'undefined' && tenancy === 'hub') { %>
-        <%# Hub: de brand is de hub-naam en gaat naar de hub-home (volledige nav, geen
-            HTMX, zodat de headerloze overview correct rendert). Eigen class want
-            .site-title is overal display:none. %>
-        <a class="nav-hub-home" href="/" aria-label="Home" title="Home">
+        <%# Hub: de brand gaat naar de hub-home via HTMX. De chrome wordt in hub-modus
+            altijd gerenderd en via body.on-hub (CSS) verborgen op de landing, dus htmx
+            kan schakelen zonder full-reload → de audioplayer blijft leven. %>
+        <a class="nav-hub-home" href="/" aria-label="Home" title="Home"
+           hx-get="/?partial=1" hx-target="#pcms-main" hx-swap="innerHTML" hx-push-url="/" hx-indicator="#pcms-loading">
           <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
         </a>
Index: src/views/shell.ejs
===================================================================
--- src/views/shell.ejs	(revision 09ac0a5edda8dae503aa340c60148e673e483dd3)
+++ src/views/shell.ejs	(revision 03bfdceaccb6b6a383a19b046571885d0b1196ea)
@@ -267,8 +267,15 @@
     - auth-pagina's (on-auth): focus-schermen voor in-/uitloggen.
     Die chrome hoort bij een Klonkt-site en verschijnt dus op /user/-pagina's. %>
+<% var _isHub  = (typeof tenancy !== 'undefined' && tenancy === 'hub'); %>
+<% var _onAuth = (typeof bodyClass === 'string' && bodyClass.indexOf('on-auth') >= 0); %>
 <% var bareChrome = (typeof bodyClass === 'string' && (bodyClass.indexOf('on-hub') >= 0 || bodyClass.indexOf('on-auth') >= 0))
-     || ((typeof tenancy !== 'undefined' && tenancy === 'hub') && !siteUrlBase && !isAdminPage); %>
-
-<% if (!bareChrome) { %>
+     || (_isHub && !siteUrlBase && !isAdminPage); %>
+<%# In HUB-modus de chrome ALTIJD renderen (CSS verbergt 'm op de hub-landing via
+    body.on-hub) zodat htmx tussen hub-home en artiest-sites kan schakelen zónder
+    full-reload → de audioplayer blijft leven, geen verspringen. profile-header
+    self-hidet als er geen site is. Solo/circle: ongewijzigd (!bareChrome). %>
+<% var renderChrome = _isHub ? !_onAuth : !bareChrome; %>
+
+<% if (renderChrome) { %>
   <%- include('partials/topnav') %>
   <%- include('partials/profile-header') %>
@@ -279,5 +286,5 @@
     on non-feed pages (post, account, search, auth) it navigates to /
     in the chosen view. Click logic is in shell.ejs at the bottom. %>
-<% if (!isAdminPage && !bareChrome) { %>
+<% if (!isAdminPage && renderChrome) { %>
   <%- include('partials/view-switcher') %>
 <% } %>
@@ -353,4 +360,8 @@
     PAGE_CLASSES.forEach(function(c) { document.body.classList.remove(c); });
     document.body.classList.add(firstClass);
+    // 'on-hub' is een modifier náást de page-class: apart toggelen zodat de
+    // hub-chrome (topnav/view-switcher) via CSS mee-schakelt bij htmx-navigatie
+    // tussen hub-home (on-hub) en artiest-sites (geen on-hub).
+    document.body.classList.toggle('on-hub', /(^|\s)on-hub(\s|$)/.test(String(next)));
   });
 })();
