diff --git a/web/src/App.vue b/web/src/App.vue
index ea8c0e9..17cced8 100644
--- a/web/src/App.vue
+++ b/web/src/App.vue
@@ -166,6 +166,9 @@ onMounted(async () => {
// Search or Playlist render hearts correctly without first visiting Home.
// (fire-and-forget; fetchFavorites swallows the 401 when not yet logged in.)
playerStore.fetchFavorites();
+ // Non-critical: reads savedQueuesEnabled so the nav entry can show/hide.
+ // Guests get a 403 (swallowed) → the entry stays hidden for them.
+ if (!session.isGuest.value) playerStore.fetchBotSettings();
syncTimer = setInterval(() => playerStore.syncElapsed(), 3000);
mobileRaf = requestAnimationFrame(updateMobileProgress);
// Reconcile the dedicated-link scope only after the bot list is known: the
diff --git a/web/src/components/Navbar.vue b/web/src/components/Navbar.vue
index 67bbc85..28f9b19 100644
--- a/web/src/components/Navbar.vue
+++ b/web/src/components/Navbar.vue
@@ -7,6 +7,12 @@