diff --git a/frontend/apps/artcraft-webapp/src/components/settings-modal/AccountSection.tsx b/frontend/apps/artcraft-webapp/src/components/settings-modal/AccountSection.tsx
new file mode 100644
index 0000000000..f30411e906
--- /dev/null
+++ b/frontend/apps/artcraft-webapp/src/components/settings-modal/AccountSection.tsx
@@ -0,0 +1,564 @@
+import { useState } from "react";
+import { Button } from "@storyteller/ui-button";
+import { Input } from "@storyteller/ui-input";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { faSpinnerThird } from "@fortawesome/pro-solid-svg-icons";
+import { UsersApi, type UserInfo } from "@storyteller/api";
+import { refreshSession, updateSessionUser } from "../../lib/session";
+import { toast } from "../toast/toast";
+
+const USERNAME_REGEX = /^[A-Za-z0-9_-]+$/;
+const EMAIL_REGEX = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
+const USERNAME_MIN = 3;
+const USERNAME_MAX = 16;
+const EMAIL_MAX = 255;
+const PASSWORD_MIN = 6;
+
+type EditingSection = "username" | "email" | "password" | null;
+
+interface AccountSectionProps {
+ user: UserInfo;
+}
+
+export function AccountSection({ user }: AccountSectionProps) {
+ const [editing, setEditing] = useState {title}
+ {isEditing ? editingDescription : collapsedDescription}
+ {message} Enter to generate
- When on, pressing Enter submits the prompt and Shift+Enter
- adds a new line. When off (default), both Enter and
- Shift+Enter add a new line — use the button to submit.
- Enter to generate
+ When on, pressing Enter submits the prompt and Shift+Enter
+ adds a new line. When off (default), both Enter and
+ Shift+Enter add a new line, use the button to submit.
+
+
+
General
+ {activeLabel}