diff --git a/apps/web/e2e/helpers.ts b/apps/web/e2e/helpers.ts
index edc646d..84f94c4 100644
--- a/apps/web/e2e/helpers.ts
+++ b/apps/web/e2e/helpers.ts
@@ -245,7 +245,6 @@ export async function openUserSettings(
| "integrations"
| "models"
| "memory"
- | "profile"
| "voice"
| "notifications"
| "usage"
diff --git a/apps/web/e2e/user-profile-edit.spec.ts b/apps/web/e2e/user-profile-edit.spec.ts
index 612ab13..8d25c39 100644
--- a/apps/web/e2e/user-profile-edit.spec.ts
+++ b/apps/web/e2e/user-profile-edit.spec.ts
@@ -1,5 +1,5 @@
/**
- * E2E: Settings → About you edits a fact in place: its wording, category and the spaces it
+ * E2E: Settings → General → About you edits a fact in place: its wording, category and the spaces it
* shows in.
*/
import { expect, test } from "@playwright/test";
@@ -15,7 +15,7 @@ test("a fact's wording, category and spaces are edited in place", async ({ page
addFacts: [{ category: "preferences", value: "Prefers tea" }],
});
- const settings = await openUserSettings(page, "profile");
+ const settings = await openUserSettings(page);
const profile = settings.getByTestId("user-profile-settings");
const tea = profile.getByTestId("user-fact").filter({ hasText: "Prefers tea" });
await tea.getByRole("button", { name: "Edit" }).click();
diff --git a/apps/web/e2e/user-profile.spec.ts b/apps/web/e2e/user-profile.spec.ts
index da47b22..8d5840e 100644
--- a/apps/web/e2e/user-profile.spec.ts
+++ b/apps/web/e2e/user-profile.spec.ts
@@ -1,6 +1,6 @@
/**
* E2E: onboarding fills the user profile without asking (time zone, locale and language from
- * the browser) and records the focus answer as a fact; Settings → About you shows every fact
+ * the browser) and records the focus answer as a fact; Settings → General → About you shows every fact
* with its origin, confirms a pending one, and forgets one or all of them.
*/
import { expect, test } from "@playwright/test";
@@ -58,8 +58,8 @@ test("onboarding feeds the profile; facts can be confirmed and forgotten", async
addFacts: [{ category: "health", value: "Allergic to peanuts", source: "onboarding" }],
});
- const settings = await openUserSettings(page, "profile");
- await expect(settings).toHaveAttribute("data-settings-section", "profile");
+ const settings = await openUserSettings(page);
+ await expect(settings).toHaveAttribute("data-settings-section", "general");
const profile = settings.getByTestId("user-profile-settings");
await expect(profile.getByTestId("profile-field-timeZone")).toContainText("Europe/Vienna");
await expect(profile.getByTestId("profile-field-language")).toContainText("English");
@@ -99,6 +99,6 @@ test("onboarding feeds the profile; facts can be confirmed and forgotten", async
await profile.getByRole("button", { name: "Forget everything" }).click();
await page.getByRole("alertdialog").getByRole("button", { name: "Forget", exact: true }).click();
- await expect(profile).toContainText("Nothing yet");
+ await expect(profile).toHaveCount(0);
expect(await rpc<{ facts: unknown[] }>(page, "profile/get", null)).toMatchObject({ facts: [] });
});
diff --git a/apps/web/src/components/UserProfileSettings.tsx b/apps/web/src/components/UserProfileSettings.tsx
index 3811a9a..33ce9da 100644
--- a/apps/web/src/components/UserProfileSettings.tsx
+++ b/apps/web/src/components/UserProfileSettings.tsx
@@ -151,54 +151,51 @@ export function UserProfileSettings() {
);
+ if (!error && (!state || (fields.length === 0 && groups.length === 0))) return null;
+
return (
-
+
+
+ About you
+
{error ? (
{error}
) : null}
- {state && fields.length === 0 && groups.length === 0 ? (
-
- Nothing yet
-
- ) : null}
{fields.length > 0 ? (
-
-
- {fields.map(({ field, value }) => (
-
- deleteButton(
- describedBy,
- () => void apply(() => rpc.profile.update(CLEARED_PROFILE_FIELD[field])),
- )
- }
- />
- ))}
-
-
+
+ {fields.map(({ field, value }) => (
+
+ deleteButton(
+ describedBy,
+ () => void apply(() => rpc.profile.update(CLEARED_PROFILE_FIELD[field])),
+ )
+ }
+ />
+ ))}
+
) : null}
{groups.map((group) => (
-
-
+
+
{categoryLabels[group.category]}
-
-
+
{group.facts.map((fact) =>
fact.id === editingId ? (
-
+
))}
{fields.length > 0 || groups.length > 0 ? (
+
);
}
diff --git a/apps/web/src/locales/de/messages.po b/apps/web/src/locales/de/messages.po
index dec4450..959281e 100644
--- a/apps/web/src/locales/de/messages.po
+++ b/apps/web/src/locales/de/messages.po
@@ -311,7 +311,7 @@ msgstr "Über Gruppen"
msgid "About spaces"
msgstr "Über Spaces"
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr "Über dich"
@@ -3645,10 +3645,6 @@ msgstr "Nichts läuft mehr"
msgid "Nothing remembered yet"
msgstr "Noch nichts gemerkt"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr "Noch nichts"
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/en/messages.po b/apps/web/src/locales/en/messages.po
index e7f8af5..21bb1e3 100644
--- a/apps/web/src/locales/en/messages.po
+++ b/apps/web/src/locales/en/messages.po
@@ -311,7 +311,7 @@ msgstr "About groups"
msgid "About spaces"
msgstr "About spaces"
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr "About you"
@@ -3645,10 +3645,6 @@ msgstr "Nothing is still running"
msgid "Nothing remembered yet"
msgstr "Nothing remembered yet"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr "Nothing yet"
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/es/messages.po b/apps/web/src/locales/es/messages.po
index d7e1dfc..2d61b67 100644
--- a/apps/web/src/locales/es/messages.po
+++ b/apps/web/src/locales/es/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "No queda nada en ejecución"
msgid "Nothing remembered yet"
msgstr "Aún no hay recuerdos"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/hi/messages.po b/apps/web/src/locales/hi/messages.po
index 5f3916b..eda68e8 100644
--- a/apps/web/src/locales/hi/messages.po
+++ b/apps/web/src/locales/hi/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "कुछ भी नहीं चल रहा"
msgid "Nothing remembered yet"
msgstr "अभी तक कुछ याद नहीं किया गया"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/ko/messages.po b/apps/web/src/locales/ko/messages.po
index d80d4a0..389c68f 100644
--- a/apps/web/src/locales/ko/messages.po
+++ b/apps/web/src/locales/ko/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "실행 중인 작업 없음"
msgid "Nothing remembered yet"
msgstr "아직 기억한 내용이 없습니다"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/pt-BR/messages.po b/apps/web/src/locales/pt-BR/messages.po
index a053432..d209761 100644
--- a/apps/web/src/locales/pt-BR/messages.po
+++ b/apps/web/src/locales/pt-BR/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "Nada ainda está em execução"
msgid "Nothing remembered yet"
msgstr "Nada memorizado ainda"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/ru/messages.po b/apps/web/src/locales/ru/messages.po
index cee96f9..1b13bb2 100644
--- a/apps/web/src/locales/ru/messages.po
+++ b/apps/web/src/locales/ru/messages.po
@@ -311,7 +311,7 @@ msgstr "О группах"
msgid "About spaces"
msgstr "О пространствах"
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr ""
msgid "Nothing remembered yet"
msgstr "Пока ничего не запомнено"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/tr/messages.po b/apps/web/src/locales/tr/messages.po
index 4f13318..52a7c02 100644
--- a/apps/web/src/locales/tr/messages.po
+++ b/apps/web/src/locales/tr/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "Hâlâ çalışan bir şey yok"
msgid "Nothing remembered yet"
msgstr "Henüz hatırlanan bir şey yok"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/locales/zh-CN/messages.po b/apps/web/src/locales/zh-CN/messages.po
index b8db110..9b69750 100644
--- a/apps/web/src/locales/zh-CN/messages.po
+++ b/apps/web/src/locales/zh-CN/messages.po
@@ -311,7 +311,7 @@ msgstr ""
msgid "About spaces"
msgstr ""
-#: src/pages/SettingsOverlay.tsx
+#: src/components/UserProfileSettings.tsx
msgid "About you"
msgstr ""
@@ -3645,10 +3645,6 @@ msgstr "没有仍在运行的任务"
msgid "Nothing remembered yet"
msgstr "暂无记忆"
-#: src/components/UserProfileSettings.tsx
-msgid "Nothing yet"
-msgstr ""
-
#: src/pages/SettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Notifications"
diff --git a/apps/web/src/pages/AccountSettingsOverlay.tsx b/apps/web/src/pages/AccountSettingsOverlay.tsx
index c6dd604..0a12aca 100644
--- a/apps/web/src/pages/AccountSettingsOverlay.tsx
+++ b/apps/web/src/pages/AccountSettingsOverlay.tsx
@@ -15,6 +15,7 @@ import { SuccessPop } from "../components/ai/primitives";
import { ComputersUnavailableHint } from "../components/ComputersUnavailableHint";
import { DesktopUpdateSection } from "../components/DesktopUpdates";
import { SoftwareUpdateSection } from "../components/SoftwareUpdateSection";
+import { UserProfileSettings } from "../components/UserProfileSettings";
import { authClient } from "../lib/auth";
import { getActiveUiLocale, setUiLocale } from "../lib/i18n";
import {
@@ -65,6 +66,8 @@ export function GeneralSettingsPanels({
{email ? {email}
: null}
+
+
{messagingEnabled && onOpenMessaging ? (
diff --git a/apps/web/src/pages/SettingsOverlay.tsx b/apps/web/src/pages/SettingsOverlay.tsx
index fa87efd..fc9aff6 100644
--- a/apps/web/src/pages/SettingsOverlay.tsx
+++ b/apps/web/src/pages/SettingsOverlay.tsx
@@ -12,7 +12,6 @@ import {
Monitor,
Settings,
ShieldCheck,
- UserRound,
Volume2,
XIcon,
} from "lucide-react";
@@ -20,7 +19,6 @@ import { type ComponentType, useEffect, useRef, useState } from "react";
import { computersAreUnavailable } from "../components/ComputersUnavailableHint";
import { MediaSettings } from "../components/MediaSettings";
import { NotificationSettingsPanel } from "../components/NotificationSettingsPanel";
-import { UserProfileSettings } from "../components/UserProfileSettings";
import {
ComputerSettingsPanel,
GeneralSettingsPanels,
@@ -38,7 +36,6 @@ export type SettingsSection =
| "integrations"
| "models"
| "memory"
- | "profile"
| "voice"
| "media"
| "notifications"
@@ -108,7 +105,6 @@ export function SettingsOverlay({
{ id: "integrations", label: t`Integrations`, icon: LayoutGrid },
{ id: "models", label: t`Models`, icon: Cpu },
{ id: "memory", label: t`Memory`, icon: Brain },
- { id: "profile", label: t`About you`, icon: UserRound },
{ id: "voice", label: t`Voice`, icon: Volume2 },
...(isDeploymentOwner ? [{ id: "media" as const, label: t`Media`, icon: Clapperboard }] : []),
{ id: "notifications", label: t`Notifications`, icon: Bell },
@@ -247,7 +243,6 @@ export function SettingsOverlay({
onOpenMcp={onOpenMcp ? () => leaveSettings(onOpenMcp) : undefined}
/>
) : null}
- {section === "profile" ? : null}
{section === "media" && isDeploymentOwner ? : null}
{section === "notifications" ? : null}
{section === "usage" ? (