diff --git a/frontend/src/app/(authenticated)/layout.tsx b/frontend/src/app/(authenticated)/layout.tsx
new file mode 100644
index 0000000..31b8daf
--- /dev/null
+++ b/frontend/src/app/(authenticated)/layout.tsx
@@ -0,0 +1,34 @@
+/**
+ * Authenticated Route Group Layout
+ * Wraps all authenticated routes with AuthGuard and provides common layout structure
+ */
+
+import type { Metadata } from 'next';
+import { AuthGuard } from '@/components/auth';
+import { Header } from '@/components/layout/Header';
+import { Footer } from '@/components/layout/Footer';
+
+export const metadata: Metadata = {
+ title: {
+ template: '%s | FastNext Template',
+ default: 'Dashboard',
+ },
+};
+
+export default function AuthenticatedLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/(authenticated)/settings/layout.tsx b/frontend/src/app/(authenticated)/settings/layout.tsx
new file mode 100644
index 0000000..26cf42a
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/layout.tsx
@@ -0,0 +1,88 @@
+/**
+ * Settings Layout
+ * Provides tabbed navigation for settings pages
+ */
+
+'use client';
+
+import { usePathname } from 'next/navigation';
+import Link from 'next/link';
+import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs';
+import { User, Lock, Monitor, Settings as SettingsIcon } from 'lucide-react';
+
+/**
+ * Settings tabs configuration
+ */
+const settingsTabs = [
+ {
+ value: 'profile',
+ label: 'Profile',
+ href: '/settings/profile',
+ icon: User,
+ },
+ {
+ value: 'password',
+ label: 'Password',
+ href: '/settings/password',
+ icon: Lock,
+ },
+ {
+ value: 'sessions',
+ label: 'Sessions',
+ href: '/settings/sessions',
+ icon: Monitor,
+ },
+ {
+ value: 'preferences',
+ label: 'Preferences',
+ href: '/settings/preferences',
+ icon: SettingsIcon,
+ },
+];
+
+export default function SettingsLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const pathname = usePathname();
+
+ // Determine active tab based on pathname
+ const activeTab = settingsTabs.find((tab) => pathname.startsWith(tab.href))?.value || 'profile';
+
+ return (
+
+ {/* Page Header */}
+
+
+ Settings
+
+
+ Manage your account settings and preferences
+
+
+
+ {/* Tabs Navigation */}
+
+
+ {settingsTabs.map((tab) => {
+ const Icon = tab.icon;
+ return (
+
+
+
+ {tab.label}
+
+
+ );
+ })}
+
+
+ {/* Tab Content */}
+
+ {children}
+
+
+
+ );
+}
diff --git a/frontend/src/app/(authenticated)/settings/page.tsx b/frontend/src/app/(authenticated)/settings/page.tsx
new file mode 100644
index 0000000..a5392e0
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/page.tsx
@@ -0,0 +1,10 @@
+/**
+ * Settings Index Page
+ * Redirects to /settings/profile
+ */
+
+import { redirect } from 'next/navigation';
+
+export default function SettingsPage() {
+ redirect('/settings/profile');
+}
diff --git a/frontend/src/app/(authenticated)/settings/password/page.tsx b/frontend/src/app/(authenticated)/settings/password/page.tsx
new file mode 100644
index 0000000..4edacfa
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/password/page.tsx
@@ -0,0 +1,23 @@
+/**
+ * Password Settings Page
+ * Change password functionality
+ */
+
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'Password Settings',
+};
+
+export default function PasswordSettingsPage() {
+ return (
+
+
+ Password Settings
+
+
+ Change your password (Coming in Task 3.3)
+
+
+ );
+}
diff --git a/frontend/src/app/(authenticated)/settings/preferences/page.tsx b/frontend/src/app/(authenticated)/settings/preferences/page.tsx
new file mode 100644
index 0000000..db19d98
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/preferences/page.tsx
@@ -0,0 +1,23 @@
+/**
+ * User Preferences Page
+ * Theme, notifications, and other preferences
+ */
+
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'Preferences',
+};
+
+export default function PreferencesPage() {
+ return (
+
+
+ Preferences
+
+
+ Configure your preferences (Coming in Task 3.5)
+
+
+ );
+}
diff --git a/frontend/src/app/(authenticated)/settings/profile/page.tsx b/frontend/src/app/(authenticated)/settings/profile/page.tsx
new file mode 100644
index 0000000..bd6e224
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/profile/page.tsx
@@ -0,0 +1,23 @@
+/**
+ * Profile Settings Page
+ * User profile management - edit name, email, phone, preferences
+ */
+
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'Profile Settings',
+};
+
+export default function ProfileSettingsPage() {
+ return (
+
+
+ Profile Settings
+
+
+ Manage your profile information (Coming in Task 3.2)
+
+
+ );
+}
diff --git a/frontend/src/app/(authenticated)/settings/sessions/page.tsx b/frontend/src/app/(authenticated)/settings/sessions/page.tsx
new file mode 100644
index 0000000..369dd0d
--- /dev/null
+++ b/frontend/src/app/(authenticated)/settings/sessions/page.tsx
@@ -0,0 +1,23 @@
+/**
+ * Session Management Page
+ * View and manage active sessions across devices
+ */
+
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'Active Sessions',
+};
+
+export default function SessionsPage() {
+ return (
+
+
+ Active Sessions
+
+
+ Manage your active sessions (Coming in Task 3.4)
+
+
+ );
+}