diff --git a/src/Web/autopilot-monitor-web/app/admin/components/AdminConfigSettingsSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/AdminConfigSettingsSection.tsx
index d9045c0e..6bfe365a 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/AdminConfigSettingsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/AdminConfigSettingsSection.tsx
@@ -1,6 +1,7 @@
"use client";
import type { AdminConfiguration } from "@/types/adminConfig";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface AdminConfigSettingsSectionProps {
loadingConfig: boolean;
@@ -87,17 +88,12 @@ export function AdminConfigSettingsSection({
}: AdminConfigSettingsSectionProps) {
return (
-
-
-
-
-
Global Settings
-
Configure global settings for all tenants
-
-
-
+
{loadingConfig ? (
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/ConfigReseedSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/ConfigReseedSection.tsx
index b727f7fb..72af0c03 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/ConfigReseedSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/ConfigReseedSection.tsx
@@ -3,6 +3,7 @@
import { useState } from "react";
import { api } from "@/lib/api";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface ConfigReseedSectionProps {
getAccessToken: () => Promise;
@@ -148,17 +149,12 @@ export function ConfigReseedSection({
{/* Fetch & Reseed from GitHub */}
-
-
-
-
-
Fetch & Reseed from GitHub
-
Fetch the latest rules from the GitHub repository and reseed all rule types
-
-
-
+
This operation fetches all rule definitions from the GitHub repository and writes them to Azure Table Storage:
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/DeviceBlockSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/DeviceBlockSection.tsx
index 5f4c2c6d..2359b33f 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/DeviceBlockSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/DeviceBlockSection.tsx
@@ -11,6 +11,7 @@ import { TenantConfiguration } from "./TenantManagementSection";
import { TenantSearchSelect } from "./TenantSearchSelect";
import { useCanMutatePlatform } from "@/hooks/useCanMutatePlatform";
import { firstBlockedSessionId, blockedSessionCount } from "./blockedDeviceHelpers";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface ResolvedDevice {
sessionId: string;
@@ -309,17 +310,12 @@ function DeviceBlockSectionInner({
return (
-
-
-
-
-
Device Block Management
-
Temporarily block a rogue device from sending data. The agent will stop uploading when it receives the block signal.
-
-
-
+
{/* Block / Kill a device form */}
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/DiagnosticsLogPathsSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/DiagnosticsLogPathsSection.tsx
index 96655ca7..1c71e34f 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/DiagnosticsLogPathsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/DiagnosticsLogPathsSection.tsx
@@ -6,6 +6,7 @@ import { ValidationIndicator } from "@/components/ValidationIndicator";
import { BuiltInSectionsList } from "@/components/diagnostics/BuiltInSectionsList";
import { DiagnosticsPathRow } from "@/components/diagnostics/DiagnosticsPathRow";
import type { DiagnosticsBuiltInSection, DiagnosticsLogPath } from "@/types/diagnostics";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
// Re-export so existing consumers importing from this component keep working
export type { DiagnosticsLogPath };
@@ -52,19 +53,12 @@ export function DiagnosticsLogPathsSection({
return (
-
-
-
-
-
Diagnostics Log Paths
-
- What every diagnostics package collects: the built-in sections compiled into the agent, plus the global paths below sent to all tenants. Tenants may add their own paths in Settings.
-
- Leave empty to run the standard maintenance with automatic catch-up (aggregates any missed days within the last 7 days).
- Select a specific date to manually aggregate metrics for that day, e.g. to backfill data older than 7 days.
-
-
-
-
-
-
- Warning: This operation runs across all tenants and may take several minutes to complete.
- Use this only for testing or when immediate cleanup is needed.
-
-
-
-
-
-
-
-
-
- {/* Fetch & Reseed from GitHub */}
-
-
-
-
-
-
Fetch & Reseed from GitHub
-
Fetch the latest rules from the GitHub repository and reseed all rule types
-
-
-
-
-
- This operation fetches all rule definitions from the GitHub repository and writes them to Azure Table Storage:
-
-
-
- •
- Fetches Gather Rules, Analyze Rules, and IME Log Patterns from GitHub
-
-
- •
- Deletes all existing global built-in entries and writes the latest versions
-
-
- •
- Tenant-specific custom rules and overrides are not affected
-
-
-
-
-
-
- Rules are loaded from raw.githubusercontent.com. After a merge to the repository, it may take up to 5 minutes{" "}for GitHub's CDN cache to update. If you see stale rules after reseeding, wait a few minutes and try again.
-
-
-
-
-
-
-
-
-
- {/* Individual Reseed Sections */}
-
- {/* Reseed Analyze Rules */}
-
-
-
Reseed Analyze Rules
-
Fetch and reseed only analyze rules from GitHub
-
-
-
-
-
-
-
-
- {/* Reseed Gather Rules */}
-
-
-
Reseed Gather Rules
-
Fetch and reseed only gather rules from GitHub
-
-
-
-
-
-
-
-
- {/* Reseed IME Log Patterns */}
-
-
-
Reseed IME Log Patterns
-
Fetch and reseed only IME log patterns from GitHub
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/MaintenanceTriggerSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/MaintenanceTriggerSection.tsx
index 8d20f208..18dd4f9e 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/MaintenanceTriggerSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/MaintenanceTriggerSection.tsx
@@ -3,6 +3,7 @@
import { useState } from "react";
import { api } from "@/lib/api";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface MaintenanceTriggerSectionProps {
getAccessToken: () => Promise;
@@ -87,17 +88,12 @@ export function MaintenanceTriggerSection({
return (
-
-
-
-
-
Manual Maintenance Trigger
-
Execute platform-wide maintenance operations
-
-
-
+
Runs all timer-triggered tasks plus additional backfill & repair operations that only run on manual trigger.
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/OpsAlertRulesSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/OpsAlertRulesSection.tsx
index 7e07cf6a..228d5325 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/OpsAlertRulesSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/OpsAlertRulesSection.tsx
@@ -6,6 +6,7 @@ import { ChannelEditor } from "@/components/notifications/ChannelEditor";
import { MAX_NOTIFICATION_CHANNELS, type NotificationChannel } from "@/app/settings/types";
import { toggleChannelBinding } from "./opsChannelRouting";
import { AUTO_ACTION_MODES, describeAutoActionWarning, type AutoActionMode } from "./excessiveEventAutoAction";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
// All known ops event types grouped by category
const OPS_EVENT_TYPES: Record = {
@@ -351,19 +352,12 @@ export function OpsAlertRulesSection({
@@ -526,19 +520,12 @@ export function OpsAlertRulesSection({
{/* Channels */}
-
-
-
-
-
Alert Channels
-
- Named destinations for platform alerts. Each rule above chooses which of these it notifies.
-
-
-
-
+
{channels.length === 0 && (
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/OpsEventsSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/OpsEventsSection.tsx
index 947c4dec..a14d70b9 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/OpsEventsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/OpsEventsSection.tsx
@@ -8,6 +8,7 @@ import TruncatedLabel from "@/components/TruncatedLabel";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
import { extractContinuation } from "@/lib/paginationLink";
import { extractSessionId, buildAutoReason } from "./opsEventSessionHelpers";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface OpsEvent {
id: string;
@@ -242,20 +243,13 @@ export function OpsEventsSection({
return (
{/* Header */}
-
-
-
-
-
-
Operational Events
-
- Vital infrastructure events across consent, maintenance, security, and tenant lifecycle.
-
-
-
-
+
{loading ? "Loading..." : "Refresh"}
-
-
-
+ >
+ }
+ />
{/* Summary Cards */}
{!loading && filteredEvents.length > 0 && (
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/SessionExportSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/SessionExportSection.tsx
index ce4dd220..03cb5fa4 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/SessionExportSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/SessionExportSection.tsx
@@ -7,6 +7,7 @@ import { TenantConfiguration } from "./TenantManagementSection";
import { TenantSearchSelect } from "./TenantSearchSelect";
import { SessionExportEvent, generateCsvExport, generateUiExport } from "@/utils/sessionExportUtils";
import { trackEvent } from "@/lib/appInsights";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
function downloadFile(content: string, filename: string, mimeType: string) {
const blob = new Blob([content], { type: mimeType });
@@ -66,17 +67,12 @@ export function SessionExportSection({
return (
-
-
-
-
-
Session Event Export
-
Fetch and export all events directly from storage — use to analyze timeline phase grouping and ordering
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/SessionReportsSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/SessionReportsSection.tsx
index 438a8915..77d5cd5b 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/SessionReportsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/SessionReportsSection.tsx
@@ -10,6 +10,7 @@ import { isGuid } from "@/utils/inputValidation";
import { trackEvent } from "@/lib/appInsights";
import { useCanMutatePlatform } from "@/hooks/useCanMutatePlatform";
import { TableSkeleton } from "@/components/skeletons/TableSkeleton";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
const PAGE_SIZE = 20;
@@ -367,21 +368,12 @@ function SessionReportsSectionInner({
return (
{/* Section Header */}
-
-
-
-
-
-
Session Reports
-
-
- Sessions reported by Tenant Admins for analysis
-
-
-
-
+
{/* Tenant filter + refresh */}
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/VersionBlockSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/VersionBlockSection.tsx
index 07e316ce..22fe5dc4 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/VersionBlockSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/VersionBlockSection.tsx
@@ -4,6 +4,7 @@ import { useState } from "react";
import { api } from "@/lib/api";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
import { useCanMutatePlatform } from "@/hooks/useCanMutatePlatform";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface BlockedVersion {
versionPattern: string;
@@ -126,17 +127,12 @@ export function VersionBlockSection({
return (
-
-
-
-
-
Version Block Management
-
Block or kill agents by version pattern. Useful for catching old agents that are still running.
-
-
-
+
{/* Pattern help */}
diff --git a/src/Web/autopilot-monitor-web/app/admin/components/VulnerabilityDataSection.tsx b/src/Web/autopilot-monitor-web/app/admin/components/VulnerabilityDataSection.tsx
index f0a7dcf6..b5e54376 100644
--- a/src/Web/autopilot-monitor-web/app/admin/components/VulnerabilityDataSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/components/VulnerabilityDataSection.tsx
@@ -7,6 +7,7 @@ import SaveResetBar from "../../settings/components/SaveResetBar";
import VulnerabilityExposurePanel from "@/components/VulnerabilityExposurePanel";
import type { AdminConfiguration } from "@/types/adminConfig";
import { useCanMutatePlatform } from "@/hooks/useCanMutatePlatform";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
interface VulnerabilityTopCve {
cveId: string;
@@ -422,17 +423,12 @@ export function VulnerabilityDataSection({
return (
{/* Header */}
-
-
-
-
-
Vulnerability Data Configuration
-
Configure vulnerability correlation data sources and API keys.
-
-
-
+
{/* Content */}
diff --git a/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionDelegatedAdmins.tsx b/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionDelegatedAdmins.tsx
index 4846ee55..ba4e635e 100644
--- a/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionDelegatedAdmins.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionDelegatedAdmins.tsx
@@ -7,6 +7,7 @@ import { useTenantList } from "@/hooks/useTenantList";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
import { api } from "@/lib/api";
import { HOME_TENANT_UNRESOLVED } from "@/lib/identityBinding";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
/** One delegated-admin assignment as returned by /api/global/delegated-admins (camelCase JSON). */
interface DelegatedAssignment {
@@ -191,19 +192,12 @@ export function SectionDelegatedAdmins() {
return (
{/* Header */}
-
-
-
-
Delegated Admins (MSP Mode)
-
-
- Grant a person read access to a subset of tenants (a “fleet”), without making them a
- full platform admin. They sign in to their own tenant and see only the tenants you grant here.
-
-
+
{/* Notifications */}
diff --git a/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionTenantGroups.tsx b/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionTenantGroups.tsx
index 497c07a8..4508c6d3 100644
--- a/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionTenantGroups.tsx
+++ b/src/Web/autopilot-monitor-web/app/admin/settings/sections/SectionTenantGroups.tsx
@@ -7,6 +7,7 @@ import { useTenantList } from "@/hooks/useTenantList";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
import { api } from "@/lib/api";
import { HOME_TENANT_UNRESOLVED } from "@/lib/identityBinding";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
/** One UPN assigned to a group (camelCase JSON from the backend). */
interface GroupAssignee {
@@ -245,19 +246,12 @@ export function SectionTenantGroups() {
return (
{/* Header */}
-
-
-
-
Tenant Groups (MSP Mode)
-
-
- Bundle tenants into a named group, then assign people to the group instead of to each tenant.
- Add a tenant once and every assignee gets it; manage your managed-service team by who is assigned here.
-
-
+
{/* Notifications */}
diff --git a/src/Web/autopilot-monitor-web/app/analyze-rules/page.tsx b/src/Web/autopilot-monitor-web/app/analyze-rules/page.tsx
index 8e9e4ccb..bae064fc 100644
--- a/src/Web/autopilot-monitor-web/app/analyze-rules/page.tsx
+++ b/src/Web/autopilot-monitor-web/app/analyze-rules/page.tsx
@@ -31,7 +31,8 @@ function validateEvaluateOnForm(form: RuleForm): string | null {
import AnalyzeRuleFormFields from "./components/AnalyzeRuleFormFields";
import AnalyzeRuleCard, { RuleTrendPoint, RuleRegressionInfo } from "./components/AnalyzeRuleCard";
import TemplateConfigModal from "./components/TemplateConfigModal";
-import { DOCS_URL } from "@/utils/config";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
export default function AnalyzeRulesPage() {
const { user, getAccessToken } = useAuth();
@@ -768,16 +769,13 @@ export default function AnalyzeRulesPage() {
{/* Create Custom Rule Form */}
{showCreateForm && (
-
-
-
-
-
-
Create Custom Analyze Rule
-
Define conditions and confidence scoring for issue detection — see documentation
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/BootstrapSessionsSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/BootstrapSessionsSection.tsx
index f19e1eaf..c6d420cf 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/BootstrapSessionsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/BootstrapSessionsSection.tsx
@@ -2,6 +2,8 @@
import { useState } from "react";
import { BOOTSTRAP_GO_URL } from "@/utils/config";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
// Display-only: the authoritative URL comes from the backend's bootstrapUrl
// (Constants.BootstrapGoBaseUrl); this host renders the sessions list rows.
@@ -131,34 +133,13 @@ export default function BootstrapSessionsSection({
return (
{/* Header */}
-
-
-
-
-
-
-
-
- OOBE Bootstrap
-
-
- Generate time-limited URLs to install the agent before Intune
- enrollment
-
-
-
+
-
-
+ }
+ />
{/* Info banner */}
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/DataManagementSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/DataManagementSection.tsx
index 0078c539..7a54e449 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/DataManagementSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/DataManagementSection.tsx
@@ -2,6 +2,8 @@
import SaveResetBar from "./SaveResetBar";
import ReadOnlyFieldset from "./ReadOnlyFieldset";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface DataManagementSectionProps {
dataRetentionDays: number;
@@ -35,17 +37,13 @@ export default function DataManagementSection({
return (
-
-
-
-
-
Data Management
-
Configure data retention and session timeout policies
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/DiagnosticsSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/DiagnosticsSection.tsx
index f477e3cf..7d274e1f 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/DiagnosticsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/DiagnosticsSection.tsx
@@ -10,6 +10,8 @@ import { ContextPill, DiagnosticsPathRow } from "@/components/diagnostics/Diagno
import SaveResetBar from "./SaveResetBar";
import ReadOnlyFieldset from "./ReadOnlyFieldset";
import { parseSasExpiry } from "./diagnosticsSasExpiry";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
// Re-export for callers that still import from the section. Implementation lives
// in `diagnosticsSasExpiry.ts` so vitest can test it without pulling in JSX.
@@ -89,17 +91,13 @@ export default function DiagnosticsSection({
return (
-
-
-
-
-
Diagnostics Package
-
Upload diagnostic files as a ZIP package to your Azure Blob Storage after enrollment.
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/HardwareWhitelistSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/HardwareWhitelistSection.tsx
index 3ef7c0a4..7f44cb46 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/HardwareWhitelistSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/HardwareWhitelistSection.tsx
@@ -4,6 +4,8 @@ import { useState } from "react";
import SaveResetBar from "./SaveResetBar";
import ReadOnlyFieldset from "./ReadOnlyFieldset";
import { joinList, parseList } from "../lib/hardwareWhitelist";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface HardwareWhitelistSectionProps {
manufacturerWhitelist: string;
@@ -136,22 +138,13 @@ export default function HardwareWhitelistSection({
return (
-
-
-
-
-
- Hardware Whitelist
-
-
- Control which device manufacturers and models the backend accepts
- monitoring data from
-
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/McpUsersSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/McpUsersSection.tsx
index edccdabd..8baac8e9 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/McpUsersSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/McpUsersSection.tsx
@@ -7,6 +7,8 @@ import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch"
import { api } from "@/lib/api";
import { useTenantList } from "@/hooks/useTenantList";
import { HOME_TENANT_UNRESOLVED } from "@/lib/identityBinding";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface McpUser {
upn: string;
@@ -286,18 +288,13 @@ export default function McpUsersSection() {
return (
{/* Header */}
-
-
-
-
MCP User Management
-
-
- Control who can access the AI agent interface (Model Context Protocol) and assign individual usage plans.
-
-
+
{/* Notifications */}
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/NotificationsSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/NotificationsSection.tsx
index 336f57d7..88cfb3ec 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/NotificationsSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/NotificationsSection.tsx
@@ -4,6 +4,8 @@ import SaveResetBar from "./SaveResetBar";
import ReadOnlyFieldset from "./ReadOnlyFieldset";
import { MAX_NOTIFICATION_CHANNELS, NotificationChannel } from "../types";
import { ChannelEditor } from "@/components/notifications/ChannelEditor";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface NotificationsSectionProps {
channels: NotificationChannel[];
@@ -51,19 +53,13 @@ export default function NotificationsSection({
return (
-
-
-
-
-
Notifications
-
- Send notifications to one or more channels — Teams, Slack, Discord, or any JSON webhook (ticketing, automation, bots). Each channel picks which events it receives.
-
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/OffboardingSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/OffboardingSection.tsx
index 163c128f..d58a382b 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/OffboardingSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/OffboardingSection.tsx
@@ -3,6 +3,8 @@
import { useEffect, useRef, useState } from "react";
import { api } from "@/lib/api";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface OffboardingInProgressInfo {
status: string; // "Queued" | "Initiated" | "InProgress" | "Completed" | "Failed"
@@ -118,17 +120,13 @@ export default function OffboardingSection({
<>
{/* Danger Zone: Tenant Offboarding */}
-
-
-
-
-
Danger Zone
-
Irreversible and destructive actions
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/components/UnrestrictedModeSection.tsx b/src/Web/autopilot-monitor-web/app/settings/components/UnrestrictedModeSection.tsx
index d44f4935..586eb3f7 100644
--- a/src/Web/autopilot-monitor-web/app/settings/components/UnrestrictedModeSection.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/components/UnrestrictedModeSection.tsx
@@ -1,6 +1,8 @@
"use client";
import { useState } from "react";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface UnrestrictedModeSectionProps {
unrestrictedMode: boolean;
@@ -34,17 +36,13 @@ export default function UnrestrictedModeSection({
return (
-
-
-
-
Unrestricted Mode
-
-
- Disable agent guardrails for advanced data collection
-
-
+
{/* Active warning banner */}
diff --git a/src/Web/autopilot-monitor-web/app/settings/reporting/sections/SectionMcpUsage.tsx b/src/Web/autopilot-monitor-web/app/settings/reporting/sections/SectionMcpUsage.tsx
index 88facea3..aecd3a3d 100644
--- a/src/Web/autopilot-monitor-web/app/settings/reporting/sections/SectionMcpUsage.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/reporting/sections/SectionMcpUsage.tsx
@@ -5,6 +5,8 @@ import { useCallback, useEffect, useState } from "react";
import { useAuth } from "../../../../contexts/AuthContext";
import { authenticatedFetch, TokenExpiredError } from "@/lib/authenticatedFetch";
import { api } from "@/lib/api";
+import { DocsLink } from "@/components/DocsLink";
+import { DOCS_PATHS } from "@/lib/docsPaths";
interface UsageRecord {
userId: string;
@@ -177,6 +179,7 @@ export function SectionMcpUsage() {
>
{loading ? "Loading..." : "Refresh"}
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionContact.tsx b/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionContact.tsx
index 389fbbc0..155c444b 100644
--- a/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionContact.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionContact.tsx
@@ -3,6 +3,8 @@
import { useTenantConfig } from "../../TenantConfigContext";
import SaveResetBar from "../../components/SaveResetBar";
import ReadOnlyFieldset from "../../components/ReadOnlyFieldset";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
export function SectionContact() {
const {
@@ -17,17 +19,13 @@ export function SectionContact() {
return (
-
-
-
-
-
Contact
-
Where we reach you about the service
-
-
-
+
diff --git a/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionPlan.tsx b/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionPlan.tsx
index 6c414657..cbeb8eb4 100644
--- a/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionPlan.tsx
+++ b/src/Web/autopilot-monitor-web/app/settings/tenant/sections/SectionPlan.tsx
@@ -6,6 +6,8 @@ import { useTenantConfig } from "../../TenantConfigContext";
import { trialDaysLeft } from "@/lib/edition";
import { PlanCards } from "@/components/plans/PlanCards";
import { SITE_URL } from "@/utils/config";
+import { SectionCardHeader } from "@/components/SectionCardHeader";
+import { DOCS_PATHS } from "@/lib/docsPaths";
/**
* Self-service Pro trial switch. The Pro feature set is not finalized yet, so the
@@ -135,17 +137,13 @@ export function SectionPlan() {
return (