+
+
Profile
+
+ Manage your account information and preferences.
+
+
+
+ {/* Email Section */}
+ {!isGuestUser && (
+
+
Email
+
+
+
+
+ {os.auth.user?.user.email_verified ? (
+
+ ) : (
+
+ )}
+
+ {!os.auth.user?.user.email_verified && (
+
+ {verificationStatus === "unverified" ? (
+ <>
+ Your email is not verified.{" "}
+
+ >
+ ) : (
+ "Verification email sent. Check your inbox."
+ )}
+
+ )}
+
+
+ )}
+
+ {/* Password Section */}
+ {(isEmailUser || isGuestUser) && (
+
+
Password
+
+ Update your password to keep your account secure.
+
+
+
+ )}
+
+ {/* User Preferences (System Prompt) */}
+
+
User Preferences
+
+ Customize your default system prompt for AI conversations.
+
+
+
+
+ {/* Danger Zone */}
+
+
Danger Zone
+
+ Permanently delete your account and all associated data. This action cannot be undone.
+
+
+
+
+ {/* Dialogs */}
+ {(isEmailUser || isGuestUser) && (
+
+ )}
+
+
+ );
+}
diff --git a/frontend/src/components/settings/SettingsPage.tsx b/frontend/src/components/settings/SettingsPage.tsx
new file mode 100644
index 00000000..7f0a9ff5
--- /dev/null
+++ b/frontend/src/components/settings/SettingsPage.tsx
@@ -0,0 +1,314 @@
+import { useState, useEffect, useCallback, useMemo } from "react";
+import {
+ User,
+ CreditCard,
+ Key,
+ Users,
+ Trash2,
+ Info,
+ LogOut,
+ ArrowLeft,
+ Settings,
+ AlertCircle
+} from "lucide-react";
+import { useNavigate, useRouter } from "@tanstack/react-router";
+import { useOpenSecret } from "@opensecret/react";
+import { useQuery } from "@tanstack/react-query";
+import { Button } from "@/components/ui/button";
+import { Badge } from "@/components/ui/badge";
+import { cn } from "@/utils/utils";
+import { useLocalState } from "@/state/useLocalState";
+import { getBillingService } from "@/billing/billingService";
+import { isIOS } from "@/utils/platform";
+import type { TeamStatus } from "@/types/team";
+import { ProfileSection } from "./ProfileSection";
+import { SubscriptionSection } from "./SubscriptionSection";
+import { ApiManagementSection } from "./ApiManagementSection";
+import { TeamManagementSection } from "./TeamManagementSection";
+import { DataPrivacySection } from "./DataPrivacySection";
+import { AboutSection } from "./AboutSection";
+import packageJson from "../../../package.json";
+
+export type SettingsTab = "profile" | "subscription" | "api" | "team" | "data" | "about";
+
+interface SettingsPageProps {
+ initialTab?: string;
+ creditsSuccess?: boolean;
+}
+
+const TAB_CONFIG: {
+ id: SettingsTab;
+ label: string;
+ icon: React.ElementType;
+ requiresTeam?: boolean;
+ requiresApiAccess?: boolean;
+}[] = [
+ { id: "profile", label: "Profile", icon: User },
+ { id: "subscription", label: "Subscription", icon: CreditCard },
+ { id: "api", label: "API Management", icon: Key, requiresApiAccess: true },
+ { id: "team", label: "Team", icon: Users, requiresTeam: true },
+ { id: "data", label: "Data & Privacy", icon: Trash2 },
+ { id: "about", label: "About", icon: Info }
+];
+
+export function SettingsPage({ initialTab, creditsSuccess }: SettingsPageProps) {
+ const [activeTab, setActiveTab] = useState