-
- {t.label}
+ {tiles.map((t, index) => (
+
+
{t.value}
+ {index === 2 && canInvite && (
+
+ )}
))}
)
}
+function MobileStatLabel({ label }: { label: string }) {
+ const mobile =
+ label === "Connected sources"
+ ? "Sources"
+ : label === "Active members"
+ ? "Members"
+ : label
+
+ return (
+ <>
+
{mobile}
+
{label}
+ >
+ )
+}
+
function RecentMemories({
docs,
loading,
diff --git a/apps/web/components/brain-home/connections-board.tsx b/apps/web/components/brain-home/connections-board.tsx
index 7f39f183..4f7be0b6 100644
--- a/apps/web/components/brain-home/connections-board.tsx
+++ b/apps/web/components/brain-home/connections-board.tsx
@@ -411,7 +411,7 @@ function TileSkeleton({ showDivider = false }: { showDivider?: boolean }) {
function SlackBanner() {
return (
-
-
+
+
-
+
- Company Brain in Slack
+ Slack agent
+ Company Brain in Slack
-
- Install Supermemory so your team can{" "}
- @supermemory in any
- channel.
+
+
+ Ask @supermemory from
+ any channel.
+
+
+ Install Supermemory so your team can{" "}
+ @supermemory in any
+ channel.
+
-
- Add to Slack
+
+ Add
+ Add to Slack
diff --git a/apps/web/components/company-brain-header.tsx b/apps/web/components/company-brain-header.tsx
index 41ccb1c4..cde0cd77 100644
--- a/apps/web/components/company-brain-header.tsx
+++ b/apps/web/components/company-brain-header.tsx
@@ -184,16 +184,16 @@ export function CompanyBrainHeader({ onOpenSearch }: CompanyBrainHeaderProps) {
}, [setFeedbackOpen])
return (
-
-
+
+
-
+
Company Brain
@@ -381,7 +381,7 @@ export function CompanyBrainHeader({ onOpenSearch }: CompanyBrainHeaderProps) {
)}
-
+
{isMobile ? (
<>
diff --git a/apps/web/components/onboarding-brain/company-brain-onboarding.tsx b/apps/web/components/onboarding-brain/company-brain-onboarding.tsx
index 1a709f0c..64937900 100644
--- a/apps/web/components/onboarding-brain/company-brain-onboarding.tsx
+++ b/apps/web/components/onboarding-brain/company-brain-onboarding.tsx
@@ -43,12 +43,21 @@ const BACKEND =
type Phase = "confirm" | "research"
function normalizeDomain(input: string): string {
- return input
+ const host = input
.trim()
.toLowerCase()
.replace(/^https?:\/\//, "")
.replace(/^www\./, "")
.replace(/\/.*$/, "")
+
+ // The confirmation card is often filled with a company name (for example,
+ // "Zomato") even though research needs a hostname. Preserve explicit TLDs,
+ // and make the common single-label case usable without a failed API round trip.
+ if (/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(host)) {
+ return `${host}.com`
+ }
+
+ return host
}
export function CompanyBrainOnboarding({
@@ -306,30 +315,35 @@ function DockedHeader({
}) {
const brandName = workspaceNameFromDomain(domain) || domain
return (
-
+
-
- {brandName}
-
-
- {done ? "Company Brain ready" : "Building your Company Brain…"}
-
+
+
+ {brandName}
+
+
+ {done ? "Company Brain ready" : "Building your Company Brain…"}
+
+
{done ? (
) : (
-
+
)}
)
diff --git a/apps/web/components/onboarding-brain/shell.tsx b/apps/web/components/onboarding-brain/shell.tsx
index f2eb9f8a..9044ea08 100644
--- a/apps/web/components/onboarding-brain/shell.tsx
+++ b/apps/web/components/onboarding-brain/shell.tsx
@@ -19,7 +19,7 @@ export function BrainShell({ step, steps, children }: ShellProps) {
return (
@@ -46,20 +46,25 @@ export function BrainShell({ step, steps, children }: ShellProps) {
}}
/>
-
-
-
+
+
+
+
-
+
{!isLast && (
-
+
-
-
+
+
+
-
+
{mode === "personal" ? (
<>
-
+
More integrations
-
+
(Gmail, GitHub, OneDrive…)
@@ -591,7 +591,7 @@ export function StepSources({
{moreOpen ? (
-
+