From f5022c269143c879ab02904bc843193554fed204 Mon Sep 17 00:00:00 2001 From: Mahesh Sanikommu Date: Thu, 18 Jun 2026 22:06:30 -0700 Subject: [PATCH] feat(web): add Slack connect card to home + space selector polish Adds the 'Add Supermemory to your Slack' card (status + install) on the home dashboard, and removes the border on the space-selector trigger. --- apps/web/components/dashboard-view.tsx | 2 + apps/web/components/slack-connect-card.tsx | 106 +++++++++++++++++++++ apps/web/components/space-selector.tsx | 4 +- 3 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 apps/web/components/slack-connect-card.tsx diff --git a/apps/web/components/dashboard-view.tsx b/apps/web/components/dashboard-view.tsx index fe2e3f0c..3f497a5e 100644 --- a/apps/web/components/dashboard-view.tsx +++ b/apps/web/components/dashboard-view.tsx @@ -31,6 +31,7 @@ import { import { StaticGraphPreview } from "@/components/memory-graph/graph-card" import { Tooltip, TooltipContent, TooltipTrigger } from "@ui/components/tooltip" import { ChromeIcon, RaycastIcon } from "@/components/integration-icons" +import { SlackConnectCard } from "@/components/slack-connect-card" import { GoogleDrive, Notion, MCPIcon } from "@ui/assets/icons" import { analytics } from "@/lib/analytics" import type { IntegrationParamValue } from "@/lib/search-params" @@ -1325,6 +1326,7 @@ export function DashboardView({ )} >
+ {headerNotice ?
{headerNotice}
: null} {/* Header */} diff --git a/apps/web/components/slack-connect-card.tsx b/apps/web/components/slack-connect-card.tsx new file mode 100644 index 00000000..2fc6de2c --- /dev/null +++ b/apps/web/components/slack-connect-card.tsx @@ -0,0 +1,106 @@ +"use client" + +import { useEffect, useState } from "react" +import { useHasCompanyBrain } from "@/hooks/use-company-brain" + +const BACKEND = + process.env.NEXT_PUBLIC_BACKEND_URL ?? "https://api.supermemory.ai" + +type SlackStatus = { connected: boolean; teamName: string | null } + +function SlackMark({ className }: { className?: string }) { + return ( + + ) +} + +export function SlackConnectCard() { + const isCompanyBrain = useHasCompanyBrain() + const [status, setStatus] = useState(null) + const [loading, setLoading] = useState(true) + + useEffect(() => { + if (!isCompanyBrain) return + let active = true + ;(async () => { + try { + const res = await fetch(`${BACKEND}/brain/slack/status`, { + credentials: "include", + }) + if (active && res.ok) setStatus((await res.json()) as SlackStatus) + } finally { + if (active) setLoading(false) + } + })() + return () => { + active = false + } + }, [isCompanyBrain]) + + if (!isCompanyBrain || loading) return null + + const connected = status?.connected + + return ( +
+
+

+ Add Supermemory to your Slack +

+

+ {connected + ? `Connected to ${status?.teamName ?? "your workspace"}.` + : "Answer from your company brain and act on connected apps — right inside Slack."} +

+
+ {connected ? ( + + + Connected + + ) : ( + + + Add to Slack + + )} +
+ ) +} diff --git a/apps/web/components/space-selector.tsx b/apps/web/components/space-selector.tsx index f4af92b8..8bba3f38 100644 --- a/apps/web/components/space-selector.tsx +++ b/apps/web/components/space-selector.tsx @@ -61,8 +61,8 @@ export interface SpaceSelectorProps { const triggerVariants = { default: - "h-10 min-h-10 shrink-0 rounded-full border border-[#161F2C] bg-muted px-3 gap-2 " + - "hover:bg-white/5 hover:border-[#2261CA33] " + + "h-10 min-h-10 shrink-0 rounded-full bg-muted px-3 gap-2 " + + "hover:bg-white/5 " + "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2261CA33]/35", insideOut: "h-10 min-h-10 gap-2 px-3 rounded-full bg-[#0D121A] shadow-inside-out hover:bg-[#121820]",