diff --git a/frontend-modern/src/App.tsx b/frontend-modern/src/App.tsx
index 15ae3e8..4d335d0 100644
--- a/frontend-modern/src/App.tsx
+++ b/frontend-modern/src/App.tsx
@@ -1055,7 +1055,7 @@ function AppLayout(props: {
});
const platformTabs = createMemo(() => {
- return [
+ const allPlatforms = [
{
id: 'proxmox' as const,
label: 'Proxmox',
@@ -1067,6 +1067,7 @@ function AppLayout(props: {
icon: (
),
+ alwaysShow: true, // Proxmox is the default, always show
},
{
id: 'docker' as const,
@@ -1079,6 +1080,7 @@ function AppLayout(props: {
icon: (
),
+ alwaysShow: true, // Docker is commonly used, keep visible
},
{
id: 'kubernetes' as const,
@@ -1086,11 +1088,12 @@ function AppLayout(props: {
route: '/kubernetes',
settingsRoute: '/settings/agents',
tooltip: 'Monitor Kubernetes clusters and workloads',
- enabled: hasKubernetesClusters() || !!seenPlatforms()['kubernetes'],
+ enabled: hasKubernetesClusters(),
live: hasKubernetesClusters(),
icon: (
),
+ alwaysShow: false, // Only show when clusters exist
},
{
id: 'hosts' as const,
@@ -1103,8 +1106,12 @@ function AppLayout(props: {
icon: (
),
+ alwaysShow: true, // Hosts is commonly used, keep visible
},
];
+
+ // Filter out platforms that should be hidden when not configured
+ return allPlatforms.filter(p => p.alwaysShow || p.enabled);
});
const utilityTabs = createMemo(() => {
diff --git a/frontend-modern/src/components/Proxmox/ProxmoxSectionNav.tsx b/frontend-modern/src/components/Proxmox/ProxmoxSectionNav.tsx
index 5b9779d..bdcbf05 100644
--- a/frontend-modern/src/components/Proxmox/ProxmoxSectionNav.tsx
+++ b/frontend-modern/src/components/Proxmox/ProxmoxSectionNav.tsx
@@ -51,14 +51,18 @@ export const ProxmoxSectionNav: Component = (props) => {
const navigate = useNavigate();
const { state } = useWebSocket();
- // Only show Mail Gateway tab if PMG instances are configured
- // Only show Ceph tab if Ceph clusters are detected (from agent or Proxmox API)
+ // Only show tabs if the corresponding feature has data:
+ // - Mail Gateway: requires PMG instances
+ // - Ceph: requires Ceph clusters (from agent or Proxmox API)
+ // - Replication: requires replication jobs
const sections = createMemo(() => {
const hasPMG = state.pmg && state.pmg.length > 0;
const hasCeph = state.cephClusters && state.cephClusters.length > 0;
+ const hasReplication = state.replicationJobs && state.replicationJobs.length > 0;
return allSections.filter((section) =>
(section.id !== 'mail' || hasPMG) &&
- (section.id !== 'ceph' || hasCeph)
+ (section.id !== 'ceph' || hasCeph) &&
+ (section.id !== 'replication' || hasReplication)
);
});