diff --git a/frontend/src/components/guild/SettingsLayout.demo.tsx b/frontend/src/components/guild/SettingsLayout.demo.tsx
new file mode 100644
index 0000000..8217832
--- /dev/null
+++ b/frontend/src/components/guild/SettingsLayout.demo.tsx
@@ -0,0 +1,73 @@
+'use client';
+
+import React from 'react';
+import { SettingsLayout } from './SettingsLayout';
+
+/**
+ * Demo page showcasing the Guild Settings Layout.
+ * Uses dummy router hooks (no actual routing required).
+ */
+export default function SettingsLayoutDemo(): JSX.Element {
+ return (
+
+
+ {/* Page header */}
+
+
+ General Settings
+
+
+ Manage your guild's basic information and configuration.
+
+
+
+ {/* Mock form */}
+
+
+
+ Guild Profile
+
+
+
+
+
+ Guild Name
+
+
+
+
+
+
+ Description
+
+
+
+
+
+
+ Save Changes
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/guild/SettingsLayout.tsx b/frontend/src/components/guild/SettingsLayout.tsx
new file mode 100644
index 0000000..0869e8b
--- /dev/null
+++ b/frontend/src/components/guild/SettingsLayout.tsx
@@ -0,0 +1,137 @@
+'use client';
+
+import React, { useState } from 'react';
+import Link from 'next/link';
+import { usePathname } from 'next/navigation';
+import {
+ Settings,
+ Users,
+ Wallet,
+ Plug,
+ Menu,
+ X,
+} from 'lucide-react';
+import { cn } from '@/lib/utils';
+
+interface SettingsNavItem {
+ id: string;
+ label: string;
+ href: string;
+ icon: React.ReactNode;
+}
+
+const settingsNavItems: SettingsNavItem[] = [
+ { id: 'general', label: 'General', href: '/guilds/[id]/settings/general', icon: },
+ { id: 'members', label: 'Members', href: '/guilds/[id]/settings/members', icon: },
+ { id: 'treasury', label: 'Treasury', href: '/guilds/[id]/settings/treasury', icon: },
+ { id: 'integrations', label: 'Integrations', href: '/guilds/[id]/settings/integrations', icon: },
+];
+
+interface SettingsLayoutProps {
+ children: React.ReactNode;
+ /** Optional guild name for the header */
+ guildName?: string;
+}
+
+/**
+ * Guild Settings Layout
+ *
+ * Dashboard shell for Guild Admin management.
+ * Persistent left sidebar with navigation links and a central content area.
+ * Sidebar collapses into a hamburger menu on mobile (md breakpoint and below).
+ */
+export function SettingsLayout({
+ children,
+ guildName = 'Guild Settings',
+}: SettingsLayoutProps): JSX.Element {
+ const [sidebarOpen, setSidebarOpen] = useState(false);
+ const pathname = usePathname();
+
+ const isActive = (href: string) => {
+ // Simple matching for demo — in production this uses route params
+ const segment = href.split('/').pop();
+ return pathname?.includes(segment ?? '');
+ };
+
+ return (
+
+ {/* Mobile overlay */}
+ {sidebarOpen && (
+
setSidebarOpen(false)}
+ aria-hidden="true"
+ />
+ )}
+
+ {/* Sidebar */}
+
+ {/* Sidebar header */}
+
+
+ {guildName}
+
+ setSidebarOpen(false)}
+ className="rounded-md p-1.5 text-gray-400 hover:text-gray-600 md:hidden"
+ aria-label="Close sidebar"
+ >
+
+
+
+
+ {/* Navigation links */}
+
+ {settingsNavItems.map((item) => (
+ setSidebarOpen(false)}
+ className={cn(
+ 'flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors',
+ isActive(item.href)
+ ? 'bg-blue-50 text-blue-700 dark:bg-blue-900/20 dark:text-blue-400'
+ : 'text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200',
+ )}
+ >
+ {item.icon}
+ {item.label}
+
+ ))}
+
+
+ {/* Sidebar footer */}
+
+
+ Guild Admin Panel
+
+
+
+
+ {/* Main content area */}
+
+ {/* Top bar (mobile hamburger) */}
+
+ setSidebarOpen(true)}
+ className="rounded-md p-2 text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
+ aria-label="Open sidebar"
+ >
+
+
+
+ {guildName}
+
+
+
+ {/* Content */}
+ {children}
+
+
+ );
+}
diff --git a/frontend/src/components/guild/index.ts b/frontend/src/components/guild/index.ts
index e5f4791..09b87a2 100644
--- a/frontend/src/components/guild/index.ts
+++ b/frontend/src/components/guild/index.ts
@@ -1,2 +1,5 @@
export { default as GuildCard } from './GuildCard'
-export type { GuildTier } from './GuildCard'
\ No newline at end of file
+export type { GuildTier } from './GuildCard'
+export { RoleBadge } from './RoleBadge'
+export type { GuildRole } from './RoleBadge'
+export { SettingsLayout } from './SettingsLayout'
\ No newline at end of file