From 585f951abc58ac925104eafa35153841ac525193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 01:49:03 +0100 Subject: [PATCH 01/13] feat(landing): v2 shell + 3-stage flow + real /connectors layout Hero preview rebuilt to mirror the v2 web app. Sidebar: - Compact 3-pill nav (Connectors / Memory / Agents) with search + unread badge, replacing the old vertical 5-route rail - Watchers nested under the selected agent (left-bordered indent) - 'Connections' renamed to 'Connectors' throughout - Org chip header, invite-members card, and user dropdown stripped for density (this is marketing chrome, not a real app shell) Stage tabs cut from 4 to 3: - Connect systems -> mirrors the real /connectors landing: 4-stat strip, Devices card (benefits grid + macOS/CLI/Docker/Serverless target cards), Connections card (paths grid + connector catalog) - Build context -> Memory / entity page - Deploy agents -> Agent detail with Watchers / Providers / Skills / Channels sub-tabs (folds the old 'Monitor signals' tab) Plus: Always-on agents grew a Channels column with per-platform status pills; Knowledge filter bar switched to feed / connection / run dimensions to match v2. Header/content padding tightened (56h header -> 56h with no breadcrumb; 640px shell -> 560px). --- .../src/components/HeroProductCard.tsx | 2252 ++++++++++++----- .../landing/src/components/HeroSection.tsx | 7 +- 2 files changed, 1620 insertions(+), 639 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 07212ffd8..324b5995d 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -492,7 +492,7 @@ function BotIcon({ size = 14 }: { size?: number }) { ); } -function UsersIcon({ size = 14 }: { size?: number }) { +function WatchersIcon({ size = 14 }: { size?: number }) { return ( + ); +} + +function ChevronDownSmall() { + return ( + ); } -function ConnectorsIcon({ size = 14 }: { size?: number }) { +function SearchIcon({ size = 13 }: { size?: number }) { return ( ); } -function KnowledgeIcon({ size = 14 }: { size?: number }) { +/* ------------------------------ data ------------------------------ */ + +type EntityNavItem = { + label: string; + emoji: string; + count: number; + active?: boolean; +}; + +const DEFAULT_ENTITIES: EntityNavItem[] = [ + { label: "Members", emoji: "πŸ‘€", count: 832, active: true }, + { label: "Assets", emoji: "πŸ’Ό", count: 2 }, + { label: "Subscriptions", emoji: "πŸ’³", count: 14 }, + { label: "Topics", emoji: "πŸ—‚", count: 38 }, + { label: "Trips", emoji: "✈️", count: 6 }, +]; + +/* ------------------------------ shell ------------------------------ */ + +type NavStage = "members" | "connectors" | "watchers" | "agents" | "knowledge"; +type Pill = "connections" | "home" | "agents"; + +function pillForStage(stage: NavStage): Pill { + if (stage === "connectors") return "connections"; + if (stage === "agents" || stage === "watchers") return "agents"; + return "home"; +} + +function LobuLeftWing({ size = 14 }: { size?: number }) { + return ( + + ); +} + +function LobuRightWing({ size = 14 }: { size?: number }) { + return ( + + ); +} + +function DatabaseIcon({ size = 14 }: { size?: number }) { return ( ); } -function WatchersIcon({ size = 14 }: { size?: number }) { +function HardDriveIcon({ size = 12 }: { size?: number }) { return ( ); } -function ChevronDownSmall() { +function CableIcon({ size = 12 }: { size?: number }) { return ( ); } -function SearchIcon({ size = 13 }: { size?: number }) { +function RssIcon({ size = 12 }: { size?: number }) { return ( ); } -/* ------------------------------ data ------------------------------ */ - -type EntityNavItem = { - label: string; - emoji: string; - count: number; - active?: boolean; -}; - -const DEFAULT_ENTITIES: EntityNavItem[] = [ - { label: "Members", emoji: "πŸ‘€", count: 832, active: true }, - { label: "Assets", emoji: "πŸ’Ό", count: 2 }, - { label: "Subscriptions", emoji: "πŸ’³", count: 14 }, - { label: "Topics", emoji: "πŸ—‚", count: 38 }, - { label: "Trips", emoji: "✈️", count: 6 }, -]; - -/* ------------------------------ shell ------------------------------ */ - -function Sidebar({ - activeNav, - editMode, - onStageChange, - entities, +function PillButton({ + active, + icon, + label, + onClick, }: { - activeNav: "members" | "connectors" | "watchers" | "agents" | "knowledge"; - editMode?: boolean; - onStageChange?: (stage: HeroStageId) => void; - entities: EntityNavItem[]; + active: boolean; + icon: ComponentChildren; + label: string; + onClick?: () => void; }) { - const sidebarBg = "var(--color-page-surface-dim)"; - const fg = "var(--color-page-text)"; - const fgMuted = "var(--color-page-text-muted)"; - const fgFaint = "var(--color-page-text-muted)"; - const accentBg = "var(--color-page-surface-dim)"; - - function NavRow({ - icon, - label, - count, - active, - onClick, - }: { - icon: ComponentChildren; - label: string; - count?: number; - active?: boolean; - onClick?: () => void; - }) { - const interactive = Boolean(onClick); - return ( - - ); - } - return ( - + ); } -function AppShell({ - activeNav, - editMode, - pageTitle, - pageSubtitle, - toolbar, - children, - rightPanel, - onStageChange, - entities, +function SectionHeader({ + icon, + label, }: { - activeNav: "members" | "connectors" | "watchers" | "agents" | "knowledge"; - editMode?: boolean; - entities: EntityNavItem[]; - pageTitle: string; - pageSubtitle?: string; - toolbar?: ComponentChildren; - children: ComponentChildren; - rightPanel?: ComponentChildren; - onStageChange?: (stage: HeroStageId) => void; + icon: ComponentChildren; + label: string; }) { return (
+ {icon} + {label} +
+ ); +} + +function SidebarRow({ + active, + onClick, + leading, + label, + count, + muted, +}: { + active?: boolean; + onClick?: () => void; + leading: ComponentChildren; + label: string; + count?: number | string; + muted?: boolean; +}) { + return ( + + ); +} + +function StatusDot({ tone }: { tone: "green" | "amber" | "muted" }) { + const bg = + tone === "green" ? "#22c55e" : tone === "amber" ? "#f59e0b" : "#9ca3af"; + return ( + ); } @@ -1629,7 +2325,18 @@ function ConnectorsTable({ connectors }: { connectors: ConnectorRow[] }) { const [openId, setOpenId] = useState( firstWithConnections?.id ?? null ); - const cols = "1.6fr 1.6fr 0.8fr 0.7fr"; + const cols = "1.5fr 1.6fr 0.9fr 0.7fr"; + + function modeFor(c: ConnectorRow, idx: number): ActionMode { + if (c.connections.length === 0) return "disabled"; + return idx % 3 === 1 ? "approval" : "auto"; + } + + function runOnFor(c: ConnectorRow, idx: number): string { + if (c.connections.length === 0) return "β€”"; + const devices = ["Any device", "Burak's MacBook", "ops-runner-01"]; + return devices[idx % devices.length]; + } return (
Connector - Description - Connections + Action mode + Run on Status
{connectors.map((c, i) => { const open = openId === c.id; const isLast = i === connectors.length - 1; const hasConnections = c.connections.length > 0; + const mode = modeFor(c, i); + const runOn = runOnFor(c, i); return (
- {c.name} + + {c.name} + {hasConnections ? ( + + {c.connections.length} connection + {c.connections.length === 1 ? "" : "s"} + + ) : null} + - - {c.description} + + - {hasConnections - ? `${c.connections.length} member${c.connections.length === 1 ? "" : "s"}` - : "β€”"} + + {runOn} {hasConnections ? ( @@ -2018,12 +2734,20 @@ function ExternalLinkIcon() { const KNOWLEDGE_CHIPS: { slug: string; values: string[]; active?: string }[] = [ { - slug: "Topic", - values: ["billing", "release", "bug", "false-positive"], - active: "billing", + slug: "Feed", + values: ["All", "Slack #ops", "Gmail inbox", "Linear bugs"], + active: "All", + }, + { + slug: "Connection", + values: ["All", "Crunchbase", "LinkedIn", "Stripe"], + active: "All", + }, + { + slug: "Run", + values: ["All runs", "Last hour", "Today"], + active: "All runs", }, - { slug: "Source", values: ["Slack", "Gmail", "Linear", "GitHub"] }, - { slug: "Review", values: ["needs-review", "approved"] }, ]; function KnowledgeFeed({ rows }: { rows?: KnowledgeRow[] }) { @@ -2513,53 +3237,245 @@ function ActionField({ ); } -/* ------------------------------ tab 4: connect ------------------------------ */ - -function DeployChannelGroup({ - title, - items, -}: { - title: string; - items: Array<{ label: string; active?: boolean }>; -}) { +/* ------------------------------ tab 4: connect ------------------------------ */ + +function DeployChannelGroup({ + title, + items, +}: { + title: string; + items: Array<{ label: string; active?: boolean }>; +}) { + return ( +
+ + {title} + +
+ {items.map((item) => ( + + {item.label} + + ))} +
+
+ ); +} + +type AgentDetailTab = "watchers" | "providers" | "skills" | "channels"; + +function AgentDetailTabs({ + active, + onChange, +}: { + active: AgentDetailTab; + onChange: (next: AgentDetailTab) => void; +}) { + const tabs: Array<{ id: AgentDetailTab; label: string }> = [ + { id: "watchers", label: "Watchers" }, + { id: "providers", label: "Providers" }, + { id: "skills", label: "Skills" }, + { id: "channels", label: "Channels" }, + ]; + return ( +
+ {tabs.map((t) => { + const isActive = t.id === active; + return ( + + ); + })} +
+ ); +} + +function ProvidersTab() { + const providers = [ + { + name: "Anthropic", + model: "claude-sonnet-4-6", + status: "active", + keyMask: "sk-ant-β€’β€’β€’β€’β€’rj9", + }, + { + name: "OpenAI", + model: "gpt-5", + status: "active", + keyMask: "sk-β€’β€’β€’β€’β€’2c1", + }, + { + name: "Google", + model: "gemini-3-pro", + status: "fallback", + keyMask: "AIzaSyβ€’β€’β€’β€’β€’8Pq", + }, + ]; + return ( +
+
+ Provider + Model + Key + Status +
+ {providers.map((p, i) => ( +
+ {p.name} + + {p.model} + + + {p.keyMask} + + + + +
+ ))} +
+ ); +} + +function SkillsTab() { + const skills = [ + { + slug: "deal-research", + desc: "Pull funding rounds + filings from connected sources", + net: ["crunchbase.com", "*.linkedin.com"], + }, + { + slug: "founder-signals", + desc: "Score founders by recent activity and team growth", + net: ["api.github.com", "*.linkedin.com"], + }, + { + slug: "memory-recall", + desc: "Read typed memory + cite source events", + net: [], + }, + ]; return ( -
- - {title} - -
- {items.map((item) => ( - + {skills.map((s) => ( +
+
+ + {s.slug} + + +
+

- {item.label} - - ))} -

+ {s.desc} +

+ {s.net.length > 0 ? ( +
+ Network + {s.net.map((d) => ( + + {d} + + ))} +
+ ) : null} +
+ ))}
); } -function AgentsConnect({ - info, - agents, -}: { - info: AgentInfo; - agents: AgentRow[]; -}) { +function ChannelsTab({ info }: { info: AgentInfo }) { const mcpClients = [ { label: "OpenClaw", active: true }, { label: "Claude" }, @@ -2574,70 +3490,36 @@ function AgentsConnect({ { label: "Teams" }, { label: "REST API" }, ]; - return ( -
+
-
-
- - - -
-

- Deploy agents everywhere users work -

-

- One Lobu backend reaches MCP clients, chat platforms, and - always-on workers with the same memory and credentials. -

-
-
-
- - - -
-
-
+ MCP + + {info.mcpEndpoint} + - - MCP - - {info.mcpEndpoint} - - Copy - -
+ Copy +
-
@@ -2645,7 +3527,63 @@ function AgentsConnect({
+
+ ); +} +function AgentsConnect({ + info, + agents, + watchers, +}: { + info: AgentInfo; + agents: AgentRow[]; + watchers: WatcherRow[]; +}) { + const [tab, setTab] = useState("watchers"); + const selectedAgent = agents[0]; + return ( +
+
+
+ + + +
+

+ {selectedAgent?.name ?? info.identity} +

+

+ Always-on Β· runs from {info.primaryClient}, Slack, and the REST + API +

+
+ +
+ +
+ {tab === "watchers" ? : null} + {tab === "providers" ? : null} + {tab === "skills" ? : null} + {tab === "channels" ? : null} +
+
); @@ -2713,75 +3651,116 @@ function AlwaysOnAgentsTable({ rows }: { rows: AgentRow[] }) {
Name - Entry point + Channels Skills Status Last run
- {rows.map((row, i) => ( -
- - - - {row.entryPoint} - - - {row.skills.map((s) => ( + {rows.map((row, i) => { + // Pretend the agent is wired to its entryPoint plus a secondary + // channel β€” visualises v2 channel-bindings (one agent, many platforms). + const secondary = + row.entryPoint === "Slack" + ? "REST" + : row.entryPoint === "Telegram" + ? "MCP" + : row.entryPoint === "ChatGPT" + ? "Slack" + : "Slack"; + const channels: Array<{ name: string; tone: "green" | "muted" }> = [ + { + name: row.entryPoint, + tone: row.status === "Active" ? "green" : "muted", + }, + { name: secondary, tone: "muted" }, + ]; + return ( +
+ - {s} - - ))} - - - - - - {row.last} - -
- ))} + aria-hidden="true" + /> + {row.name} +
+ + {channels.map((ch) => ( + + + ))} + + + {row.skills.map((s) => ( + + {s} + + ))} + + + + + + {row.last} + +
+ ); + })}
); } @@ -2806,8 +3785,6 @@ export function HeroProductCard({ const primaryEntity = entities[0]?.label ?? "Members"; const primaryEntitySingular = useCase?.model.entities[0] ?? "Member"; const useCaseLabel = useCase?.label ?? "your team"; - const watcherName = useCase?.memory.watcher.name ?? "Active watchers"; - const watcherSchedule = useCase?.memory.watcher.schedule ?? "On schedule"; const recordRows: RecordRow[] = useCase ? buildRecordRows(useCase) @@ -2832,12 +3809,46 @@ export function HeroProductCard({ primaryClient: "Claude", }; + // Flatten connectorRows (one row per connector with N nested connections) + // into the v2 sidebar shape (one row per individual connection). + const sidebarConnections: SidebarConnection[] = connectorRows + .flatMap((c): SidebarConnection[] => + c.connections.length > 0 + ? c.connections.map((conn) => ({ + label: conn.member, + connectorName: c.name, + initial: c.name.charAt(0).toUpperCase(), + status: c.status === "Connected" ? "active" : "pending", + })) + : [ + { + label: c.name, + connectorName: c.name, + initial: c.name.charAt(0).toUpperCase(), + status: c.status === "Connected" ? "active" : "pending", + }, + ] + ) + .slice(0, 6); + const sidebarAgents: SidebarAgent[] = agentRows + .slice(0, 4) + .map((a) => ({ name: a.name })); + const sidebarWatchers: SidebarWatcher[] = watcherRows + .slice(0, 3) + .map((w) => ({ name: w.name })); + + const shellProps = { + entities, + connections: sidebarConnections, + agents: sidebarAgents, + watchers: sidebarWatchers, + }; + if (stage === "model") { return ( - - } - /> - - } - onStageChange={onStageChange} - > - - - ); - } - - if (stage === "watch") { - return ( - - - - } - /> - - } + pageSubtitle="Pull data into Lobu's memory and expose tools to agents. Pick from the catalog, bring your own MCP server, or write one in TypeScript β€” in Lobu's cloud or on one of your devices." onStageChange={onStageChange} > - + ); } @@ -2915,7 +3893,7 @@ export function HeroProductCard({ return ( } onStageChange={onStageChange} > - + ); } diff --git a/packages/landing/src/components/HeroSection.tsx b/packages/landing/src/components/HeroSection.tsx index f21c8159a..8a4153ff2 100644 --- a/packages/landing/src/components/HeroSection.tsx +++ b/packages/landing/src/components/HeroSection.tsx @@ -46,10 +46,9 @@ export type HeroStageId = | "knowledge"; const STAGE_TABS: Array<{ id: HeroStageId; label: string; index: number }> = [ - { id: "model", label: "Model data", index: 1 }, - { id: "integrate", label: "Connect systems", index: 2 }, - { id: "watch", label: "Monitor signals", index: 3 }, - { id: "connect", label: "Deploy agents", index: 4 }, + { id: "integrate", label: "Connect systems", index: 1 }, + { id: "model", label: "Build context", index: 2 }, + { id: "connect", label: "Deploy agents", index: 3 }, ]; const TAB_CYCLE_MS = 5000; From 7e839d25f7a7650d62025d5b36cd6356d0c4e076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 01:55:36 +0100 Subject: [PATCH 02/13] refactor(landing): fold 5 feature blocks -> 3 + drop corner-labels motif The landing page had a 'look at me' problem: 5 feature blocks each wrapped in a numbered corner-label motif, every section a fresh layout DNA. Tightened to: - Memory + Watchers folded into 'Memory that grows itself' - Skills + Platforms folded into 'One backend, every surface' - Hosting kept standalone SectionCornerLabels component deleted; each section now renders as a plain
with the FeatureBlock inside. ~75 lines net removed and one fewer visual motif competing with the page eyebrow. --- .../src/components/HeroProductCard.tsx | 123 ++++++++++++++++-- .../landing/src/components/LandingPage.tsx | 74 +++-------- .../src/components/SectionCornerLabels.tsx | 34 ----- 3 files changed, 127 insertions(+), 104 deletions(-) delete mode 100644 packages/landing/src/components/SectionCornerLabels.tsx diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 324b5995d..5b25cd546 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -1853,7 +1853,11 @@ function ConnectionsRows({ connector }: { connector: ConnectorRow }) { ); } -function StatsStripCard({ stats }: { stats: Array<{ label: string; value: number }> }) { +function StatsStripCard({ + stats, +}: { + stats: Array<{ label: string; value: number }>; +}) { return (
{stats.map((s) => ( @@ -1919,7 +1923,17 @@ function FeatureGridLite({ function FolderIcon({ size = 14 }: { size?: number }) { return ( -
acc + c.connections.length, 0 diff --git a/packages/landing/src/components/LandingPage.tsx b/packages/landing/src/components/LandingPage.tsx index b398f2a29..e6b0ef7c0 100644 --- a/packages/landing/src/components/LandingPage.tsx +++ b/packages/landing/src/components/LandingPage.tsx @@ -12,15 +12,12 @@ import { DataModelSection } from "./DataModelSection"; import { FeatureBlock } from "./FeatureBlock"; import { HostingGraphic, - PlatformsGraphic, SharedMemoryGraphic, SkillsGraphic, - WatcherGraphic, } from "./FeatureGraphics"; import { HeroProductCard } from "./HeroProductCard"; import { HeroSection, type HeroStageId } from "./HeroSection"; import { LatestBlogPosts, type LatestBlogPost } from "./LatestBlogPosts"; -import { SectionCornerLabels } from "./SectionCornerLabels"; export function LandingPage(props: { defaultUseCaseId?: LandingUseCaseId; @@ -31,7 +28,7 @@ export function LandingPage(props: { const [activeUseCaseId] = useState( props.defaultUseCaseId ?? DEFAULT_LANDING_USE_CASE_ID ); - const [activeStage, setActiveStage] = useState("model"); + const [activeStage, setActiveStage] = useState("integrate"); const [autoAdvance, setAutoAdvance] = useState(true); const startUrl = props.defaultUseCaseId ? getLobuUrl(activeUseCaseId) @@ -64,77 +61,38 @@ export function LandingPage(props: { {/* */} - } /> - +
- } reverse /> - - - - } - /> - - - - } - reverse - /> - + - } /> - + diff --git a/packages/landing/src/components/SectionCornerLabels.tsx b/packages/landing/src/components/SectionCornerLabels.tsx deleted file mode 100644 index 8c7370e4c..000000000 --- a/packages/landing/src/components/SectionCornerLabels.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import type { ComponentChildren } from "preact"; - -type Props = { - index: number; - leftLabel: string; - rightLabel: string; - children: ComponentChildren; - id?: string; -}; - -export function SectionCornerLabels({ - index, - leftLabel, - rightLabel, - children, - id, -}: Props) { - const indexLabel = `[${index.toString().padStart(2, "0")}]`; - - return ( -
-
- - {indexLabel} {leftLabel} - - / {rightLabel} -
- {children} -
- ); -} From cad8f6e6eeea5b0a3c9caa47f30737e447b0efdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:06:23 +0100 Subject: [PATCH 03/13] feat(landing): real brand logos + watcher timeline + agent sidebar expansion - Brand-logo registry (GitHub, LinkedIn, Slack, Gmail, Stripe, HubSpot, Notion, Discord, Telegram, WhatsApp, Crunchbase, Linear, Zoom, OpenClaw, ChatGPT, Claude, Cursor). BrandLogo renders the brand color + simplified mark; BrandLetter is the unrecognized-name fallback. - Replaced colored-letter ConnectorTinyMark / catalog tile / channel pill marks with BrandLogo so the preview stops looking like a wireframe. - Watchers sub-tab in the agent detail now opens a two-pane WatcherDetail view: list of watchers on the left, selected watcher meta + run timeline (success / skipped / error + timestamps + notes) on the right. - Sidebar agent expansion grew Providers (Anthropic / OpenAI / Google), Skills (deal-research / founder-signals / memory-recall), Channels (Slack #vc-deals / REST API), and Settings (Identity) sub-groups, each with example entries so the v2 nav reads as navigable instead of inert chrome. --- .../src/components/HeroProductCard.tsx | 592 ++++++++++++++++-- 1 file changed, 534 insertions(+), 58 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 5b25cd546..d67c6da1b 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -920,7 +920,111 @@ type SidebarConnection = { feedCount?: number; }; -function ConnectorTinyMark({ name }: { name: string }) { +// Brand mark registry. Paths are simplified silhouettes of each vendor's +// SimpleIcons mark (single-color, viewBox 0 0 24 24) so we can re-tint via +// the brand color background. The fallback (BrandLetter) handles names we +// don't have a mark for. +const BRAND_REGISTRY: Record = { + github: { + color: "#181717", + path: + "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.111.82-.261.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12", + }, + linkedin: { + color: "#0A66C2", + path: + "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.063 2.063 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.226.792 24 1.771 24h20.451C23.2 24 24 23.226 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z", + }, + slack: { + color: "#4A154B", + path: + "M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.527 2.527 0 0 1 2.521 2.521 2.527 2.527 0 0 1-2.521 2.521H2.522A2.527 2.527 0 0 1 0 8.834a2.527 2.527 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.527 2.527 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z", + }, + gmail: { + color: "#EA4335", + path: + "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z", + }, + stripe: { + color: "#635BFF", + path: + "M13.479 9.883c-1.626-.604-2.512-1.067-2.512-1.803 0-.622.511-.977 1.422-.977 1.668 0 3.379.642 4.558 1.22l.666-4.111c-.935-.446-2.847-1.177-5.49-1.177-1.87 0-3.425.489-4.536 1.401-1.155.954-1.757 2.334-1.757 4.005 0 3.027 1.847 4.328 4.855 5.42 1.937.696 2.587 1.192 2.587 1.954 0 .74-.629 1.158-1.77 1.158-1.396 0-3.741-.69-5.323-1.585L5.5 19.612c1.305.74 3.722 1.5 6.245 1.5 1.977 0 3.629-.464 4.752-1.358 1.262-.985 1.915-2.432 1.915-4.155 0-3.105-1.89-4.392-4.933-5.516z", + }, + hubspot: { + color: "#FF7A59", + path: + "M18.164 7.93V5.084a2.198 2.198 0 0 0 1.27-1.985v-.067A2.2 2.2 0 0 0 17.238.832h-.067a2.2 2.2 0 0 0-2.198 2.2v.067a2.196 2.196 0 0 0 1.27 1.985V7.93a6.226 6.226 0 0 0-2.957 1.296L5.512 3.917c.027-.103.045-.21.045-.319A1.717 1.717 0 1 0 4.598 4.91l7.69 5.99a6.255 6.255 0 0 0-.939 3.31c0 1.27.382 2.452 1.04 3.444l-2.341 2.34a2.005 2.005 0 0 0-.585-.097 2.05 2.05 0 1 0 2.052 2.05c0-.205-.039-.405-.094-.594l2.314-2.314a6.27 6.27 0 1 0 4.43-11.108zm-1.107 9.397a3.22 3.22 0 1 1 0-6.44 3.22 3.22 0 0 1 0 6.44z", + }, + notion: { + color: "#111111", + path: + "M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933z", + }, + discord: { + color: "#5865F2", + path: + "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z", + }, + telegram: { + color: "#26A5E4", + path: + "M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.464.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z", + }, + whatsapp: { + color: "#25D366", + path: + "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0 0 20.465 3.488", + }, + crunchbase: { + color: "#146AFF", + path: + "M21.6 0H2.4A2.41 2.41 0 0 0 0 2.4v19.2A2.41 2.41 0 0 0 2.4 24h19.2a2.41 2.41 0 0 0 2.4-2.4V2.4A2.41 2.41 0 0 0 21.6 0zM9.7 16.8c-.7 0-1.4-.17-2-.5v.4H6V5.06h1.7v3.7a4.04 4.04 0 0 1 2-.55c2.39 0 4.32 1.94 4.32 4.3 0 2.37-1.93 4.3-4.32 4.3zm6.9-.5c-.6.33-1.3.5-2 .5-2.37 0-4.3-1.93-4.3-4.3 0-2.36 1.93-4.3 4.3-4.3 1.43 0 2.74.7 3.54 1.83l-1.43.95a2.6 2.6 0 0 0-4.7 1.52 2.6 2.6 0 0 0 4.7 1.5l1.43.97a4.27 4.27 0 0 1-1.54 1.33zM9.7 10.04A2.6 2.6 0 0 0 7.1 12.6a2.6 2.6 0 0 0 5.2 0 2.6 2.6 0 0 0-2.6-2.55z", + }, + linear: { + color: "#5E6AD2", + path: + "M.403 13.795A12.131 12.131 0 0 0 10.203 23.6L.403 13.795zM.182 10.103l13.715 13.714a12.18 12.18 0 0 0 3.137-1.21L1.392 6.966a12.18 12.18 0 0 0-1.21 3.137zm3.135-5.836a12.16 12.16 0 0 1 1.51-1.84L21.572 19.17a12.137 12.137 0 0 1-1.84 1.51L3.317 4.267zM6.682 1.43A12.12 12.12 0 0 1 12 0c6.626 0 12 5.374 12 12 0 1.872-.428 3.643-1.193 5.22L6.682 1.43Z", + }, + zoom: { + color: "#0B5CFF", + path: + "M24 12C24 5.4 18.6 0 12 0S0 5.4 0 12s5.4 12 12 12 12-5.4 12-12zM4.4 6.2h7.1c1.7 0 3.1 1.4 3.1 3.1v5.5H7.5c-1.7 0-3.1-1.4-3.1-3.1V6.2zm15.2 9.4l-3-2.6V7.2l3-2.6c.4-.3 1.1 0 1.1.6v10.8c0 .6-.7.9-1.1.6z", + }, + // chat / mcp clients + openclaw: { + color: "#F97316", + path: + "M12 2 4 6v6c0 4.5 3.5 8.5 8 10 4.5-1.5 8-5.5 8-10V6l-8-4zm0 2.2 6 3v4.8c0 3.5-2.8 6.8-6 7.9-3.2-1.1-6-4.4-6-7.9V7.2l6-3z", + }, + chatgpt: { + color: "#10A37F", + path: + "M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.05 6.05 0 0 0 6.515 2.9A5.98 5.98 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z", + }, + claude: { + color: "#D97757", + path: + "M4.709 15.955l4.72-2.647.079-.23-.079-.128H9.2l-.79-.048-2.698-.073-2.34-.097-2.265-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.6-2.552-1.687-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.892.686 1.908 1.477 2.491 1.834.365.304.146-.103.018-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 0 1-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.418 1.002 2.228 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.2-1.657-.85-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.926-1.415-2.167-1.142-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.388-1.924.316-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.413.164-.716-.37.067-.662.4-.59 2.388-3.036 1.44-1.882.93-1.087-.006-.158h-.054L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z", + }, + cursor: { + color: "#000000", + path: + "M11.925 24l10.425-6-10.425-6L1.5 18l10.425 6zM22.35 6L11.925 0 1.5 6v12l10.425-6L22.35 6z", + }, +}; + +function brandKey(name: string): string | null { + const k = name.trim().toLowerCase().replace(/[^a-z0-9]/g, ""); + if (!k) return null; + if (k in BRAND_REGISTRY) return k; + // suffix matches (e.g. "Crunchbase API" -> "crunchbase") + for (const key of Object.keys(BRAND_REGISTRY)) { + if (k.startsWith(key) || k.includes(key)) return key; + } + return null; +} + +function BrandLetter({ name }: { name: string }) { const initial = name.charAt(0).toUpperCase() || "?"; let hash = 0; for (let i = 0; i < name.length; i++) @@ -928,8 +1032,8 @@ function ConnectorTinyMark({ name }: { name: string }) { const hue = Math.abs(hash) % 360; return (
@@ -1048,10 +1291,17 @@ function AgentsPillSection({ />
} + leading={} label="Claude Desktop" /> - } label="OpenClaw" /> + } + label="OpenClaw" + /> + } + label="Cursor" + />
); @@ -2161,30 +2411,18 @@ function DeviceTargetCard({ } function ConnectorCatalogTile({ - initial, name, category, }: { - initial: string; name: string; category: string; }) { - let hash = 0; - for (let i = 0; i < name.length; i++) - hash = (hash * 31 + name.charCodeAt(i)) | 0; - const hue = Math.abs(hash) % 360; return (
- +
({ - initial: c.name.charAt(0).toUpperCase(), - name: c.name, - category: c.description, - })); + const catalogTiles: Array<{ name: string; category: string }> = connectorRows + .slice(0, 8) + .map((c) => ({ + name: c.name, + category: c.description, + })); + const fallbacks: Array<{ name: string; category: string }> = [ + { name: "Slack", category: "Chat" }, + { name: "GitHub", category: "Code" }, + { name: "Linear", category: "Issues" }, + { name: "Notion", category: "Docs" }, + { name: "Gmail", category: "Email" }, + { name: "Stripe", category: "Payments" }, + { name: "HubSpot", category: "CRM" }, + { name: "LinkedIn", category: "People" }, + ]; while (catalogTiles.length < 8) { - const fallbacks = [ - { initial: "S", name: "Slack", category: "Chat" }, - { initial: "G", name: "GitHub", category: "Code" }, - { initial: "L", name: "Linear", category: "Issues" }, - { initial: "N", name: "Notion", category: "Docs" }, - ]; catalogTiles.push(fallbacks[catalogTiles.length % fallbacks.length]); } @@ -3357,7 +3600,7 @@ function DeployChannelGroup({ {items.map((item) => ( + {item.label} ))} @@ -3630,6 +3874,246 @@ function ChannelsTab({ info }: { info: AgentInfo }) { ); } +function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { + const [selectedIdx, setSelectedIdx] = useState(0); + const selected = watchers[selectedIdx] ?? watchers[0]; + if (!selected) return null; + + const runs: Array<{ + when: string; + status: "success" | "running" | "skipped" | "error"; + note: string; + }> = [ + { + when: "Just now", + status: "success", + note: `Wrote 14 new ${selected.entity} updates to memory`, + }, + { + when: "12m ago", + status: "success", + note: `Wrote 3 new ${selected.entity} updates to memory`, + }, + { + when: "1h ago", + status: "skipped", + note: "No new events since last run", + }, + { + when: "2h ago", + status: "success", + note: `Wrote 22 ${selected.entity} updates Β· 4 superseded by newer rows`, + }, + { + when: "5h ago", + status: "error", + note: "Upstream rate-limited β€” retried via fallback provider", + }, + ]; + + return ( +
+ {/* List of watchers */} +
+
+ {watchers.length} watchers +
+
    + {watchers.map((w, i) => { + const active = i === selectedIdx; + return ( +
  • + +
  • + ); + })} +
+
+ + {/* Selected watcher detail */} +
+
+
+ + + {selected.name} + + +
+ + {selected.schedule} + +
+ +
+
+
+ Entity +
+
+ {entityEmoji(selected.entity)} {selected.entity} +
+
+
+
+ Owner agent +
+
+ {selected.agent} +
+
+
+
+ Last run +
+
+ {selected.last} +
+
+
+ +
+ Run timeline +
+ +
    + {runs.map((r, i) => { + const tone = + r.status === "success" + ? "green" + : r.status === "running" + ? "amber" + : r.status === "error" + ? "muted" + : "muted"; + return ( +
  1. + + + +
    +
    + + {r.status} + + + {r.when} + +
    +

    + {r.note} +

    +
    +
  2. + ); + })} +
+
+
+ ); +} + function AgentsConnect({ info, agents, @@ -3677,7 +4161,7 @@ function AgentsConnect({
- {tab === "watchers" ? : null} + {tab === "watchers" ? : null} {tab === "providers" ? : null} {tab === "skills" ? : null} {tab === "channels" ? : null} @@ -3814,18 +4298,10 @@ function AlwaysOnAgentsTable({ rows }: { rows: AgentRow[] }) { background: "var(--color-page-surface-dim)", color: "var(--color-page-text)", border: "1px solid var(--color-page-border)", + opacity: ch.tone === "green" ? 1 : 0.6, }} > - ))} From 9b4914d3bf49efc7779002fa32f40dd1079cb168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:10:06 +0100 Subject: [PATCH 04/13] fix(landing): watcher tab shows single watcher detail, not list+detail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Watchers sub-tab was rendering a two-pane (list + detail) layout which duplicated what the sidebar already shows. v2's actual route is /agents/$agentId?tab=watchers&w= β€” a single watcher's detail. Dropped the list pane; the content card is now just the selected watcher (meta + run timeline). --- .../src/components/HeroProductCard.tsx | 165 +++++------------- 1 file changed, 48 insertions(+), 117 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index d67c6da1b..db84f31db 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -927,94 +927,80 @@ type SidebarConnection = { const BRAND_REGISTRY: Record = { github: { color: "#181717", - path: - "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.111.82-.261.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12", + path: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.111.82-.261.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12", }, linkedin: { color: "#0A66C2", - path: - "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.063 2.063 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.226.792 24 1.771 24h20.451C23.2 24 24 23.226 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z", + path: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.063 2.063 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.226.792 24 1.771 24h20.451C23.2 24 24 23.226 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z", }, slack: { color: "#4A154B", - path: - "M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.527 2.527 0 0 1 2.521 2.521 2.527 2.527 0 0 1-2.521 2.521H2.522A2.527 2.527 0 0 1 0 8.834a2.527 2.527 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.527 2.527 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z", + path: "M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.527 2.527 0 0 1 2.521 2.521 2.527 2.527 0 0 1-2.521 2.521H2.522A2.527 2.527 0 0 1 0 8.834a2.527 2.527 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.527 2.527 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z", }, gmail: { color: "#EA4335", - path: - "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z", + path: "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z", }, stripe: { color: "#635BFF", - path: - "M13.479 9.883c-1.626-.604-2.512-1.067-2.512-1.803 0-.622.511-.977 1.422-.977 1.668 0 3.379.642 4.558 1.22l.666-4.111c-.935-.446-2.847-1.177-5.49-1.177-1.87 0-3.425.489-4.536 1.401-1.155.954-1.757 2.334-1.757 4.005 0 3.027 1.847 4.328 4.855 5.42 1.937.696 2.587 1.192 2.587 1.954 0 .74-.629 1.158-1.77 1.158-1.396 0-3.741-.69-5.323-1.585L5.5 19.612c1.305.74 3.722 1.5 6.245 1.5 1.977 0 3.629-.464 4.752-1.358 1.262-.985 1.915-2.432 1.915-4.155 0-3.105-1.89-4.392-4.933-5.516z", + path: "M13.479 9.883c-1.626-.604-2.512-1.067-2.512-1.803 0-.622.511-.977 1.422-.977 1.668 0 3.379.642 4.558 1.22l.666-4.111c-.935-.446-2.847-1.177-5.49-1.177-1.87 0-3.425.489-4.536 1.401-1.155.954-1.757 2.334-1.757 4.005 0 3.027 1.847 4.328 4.855 5.42 1.937.696 2.587 1.192 2.587 1.954 0 .74-.629 1.158-1.77 1.158-1.396 0-3.741-.69-5.323-1.585L5.5 19.612c1.305.74 3.722 1.5 6.245 1.5 1.977 0 3.629-.464 4.752-1.358 1.262-.985 1.915-2.432 1.915-4.155 0-3.105-1.89-4.392-4.933-5.516z", }, hubspot: { color: "#FF7A59", - path: - "M18.164 7.93V5.084a2.198 2.198 0 0 0 1.27-1.985v-.067A2.2 2.2 0 0 0 17.238.832h-.067a2.2 2.2 0 0 0-2.198 2.2v.067a2.196 2.196 0 0 0 1.27 1.985V7.93a6.226 6.226 0 0 0-2.957 1.296L5.512 3.917c.027-.103.045-.21.045-.319A1.717 1.717 0 1 0 4.598 4.91l7.69 5.99a6.255 6.255 0 0 0-.939 3.31c0 1.27.382 2.452 1.04 3.444l-2.341 2.34a2.005 2.005 0 0 0-.585-.097 2.05 2.05 0 1 0 2.052 2.05c0-.205-.039-.405-.094-.594l2.314-2.314a6.27 6.27 0 1 0 4.43-11.108zm-1.107 9.397a3.22 3.22 0 1 1 0-6.44 3.22 3.22 0 0 1 0 6.44z", + path: "M18.164 7.93V5.084a2.198 2.198 0 0 0 1.27-1.985v-.067A2.2 2.2 0 0 0 17.238.832h-.067a2.2 2.2 0 0 0-2.198 2.2v.067a2.196 2.196 0 0 0 1.27 1.985V7.93a6.226 6.226 0 0 0-2.957 1.296L5.512 3.917c.027-.103.045-.21.045-.319A1.717 1.717 0 1 0 4.598 4.91l7.69 5.99a6.255 6.255 0 0 0-.939 3.31c0 1.27.382 2.452 1.04 3.444l-2.341 2.34a2.005 2.005 0 0 0-.585-.097 2.05 2.05 0 1 0 2.052 2.05c0-.205-.039-.405-.094-.594l2.314-2.314a6.27 6.27 0 1 0 4.43-11.108zm-1.107 9.397a3.22 3.22 0 1 1 0-6.44 3.22 3.22 0 0 1 0 6.44z", }, notion: { color: "#111111", - path: - "M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933z", + path: "M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933z", }, discord: { color: "#5865F2", - path: - "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z", + path: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z", }, telegram: { color: "#26A5E4", - path: - "M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.464.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z", + path: "M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.464.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z", }, whatsapp: { color: "#25D366", - path: - "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0 0 20.465 3.488", + path: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0 0 20.465 3.488", }, crunchbase: { color: "#146AFF", - path: - "M21.6 0H2.4A2.41 2.41 0 0 0 0 2.4v19.2A2.41 2.41 0 0 0 2.4 24h19.2a2.41 2.41 0 0 0 2.4-2.4V2.4A2.41 2.41 0 0 0 21.6 0zM9.7 16.8c-.7 0-1.4-.17-2-.5v.4H6V5.06h1.7v3.7a4.04 4.04 0 0 1 2-.55c2.39 0 4.32 1.94 4.32 4.3 0 2.37-1.93 4.3-4.32 4.3zm6.9-.5c-.6.33-1.3.5-2 .5-2.37 0-4.3-1.93-4.3-4.3 0-2.36 1.93-4.3 4.3-4.3 1.43 0 2.74.7 3.54 1.83l-1.43.95a2.6 2.6 0 0 0-4.7 1.52 2.6 2.6 0 0 0 4.7 1.5l1.43.97a4.27 4.27 0 0 1-1.54 1.33zM9.7 10.04A2.6 2.6 0 0 0 7.1 12.6a2.6 2.6 0 0 0 5.2 0 2.6 2.6 0 0 0-2.6-2.55z", + path: "M21.6 0H2.4A2.41 2.41 0 0 0 0 2.4v19.2A2.41 2.41 0 0 0 2.4 24h19.2a2.41 2.41 0 0 0 2.4-2.4V2.4A2.41 2.41 0 0 0 21.6 0zM9.7 16.8c-.7 0-1.4-.17-2-.5v.4H6V5.06h1.7v3.7a4.04 4.04 0 0 1 2-.55c2.39 0 4.32 1.94 4.32 4.3 0 2.37-1.93 4.3-4.32 4.3zm6.9-.5c-.6.33-1.3.5-2 .5-2.37 0-4.3-1.93-4.3-4.3 0-2.36 1.93-4.3 4.3-4.3 1.43 0 2.74.7 3.54 1.83l-1.43.95a2.6 2.6 0 0 0-4.7 1.52 2.6 2.6 0 0 0 4.7 1.5l1.43.97a4.27 4.27 0 0 1-1.54 1.33zM9.7 10.04A2.6 2.6 0 0 0 7.1 12.6a2.6 2.6 0 0 0 5.2 0 2.6 2.6 0 0 0-2.6-2.55z", }, linear: { color: "#5E6AD2", - path: - "M.403 13.795A12.131 12.131 0 0 0 10.203 23.6L.403 13.795zM.182 10.103l13.715 13.714a12.18 12.18 0 0 0 3.137-1.21L1.392 6.966a12.18 12.18 0 0 0-1.21 3.137zm3.135-5.836a12.16 12.16 0 0 1 1.51-1.84L21.572 19.17a12.137 12.137 0 0 1-1.84 1.51L3.317 4.267zM6.682 1.43A12.12 12.12 0 0 1 12 0c6.626 0 12 5.374 12 12 0 1.872-.428 3.643-1.193 5.22L6.682 1.43Z", + path: "M.403 13.795A12.131 12.131 0 0 0 10.203 23.6L.403 13.795zM.182 10.103l13.715 13.714a12.18 12.18 0 0 0 3.137-1.21L1.392 6.966a12.18 12.18 0 0 0-1.21 3.137zm3.135-5.836a12.16 12.16 0 0 1 1.51-1.84L21.572 19.17a12.137 12.137 0 0 1-1.84 1.51L3.317 4.267zM6.682 1.43A12.12 12.12 0 0 1 12 0c6.626 0 12 5.374 12 12 0 1.872-.428 3.643-1.193 5.22L6.682 1.43Z", }, zoom: { color: "#0B5CFF", - path: - "M24 12C24 5.4 18.6 0 12 0S0 5.4 0 12s5.4 12 12 12 12-5.4 12-12zM4.4 6.2h7.1c1.7 0 3.1 1.4 3.1 3.1v5.5H7.5c-1.7 0-3.1-1.4-3.1-3.1V6.2zm15.2 9.4l-3-2.6V7.2l3-2.6c.4-.3 1.1 0 1.1.6v10.8c0 .6-.7.9-1.1.6z", + path: "M24 12C24 5.4 18.6 0 12 0S0 5.4 0 12s5.4 12 12 12 12-5.4 12-12zM4.4 6.2h7.1c1.7 0 3.1 1.4 3.1 3.1v5.5H7.5c-1.7 0-3.1-1.4-3.1-3.1V6.2zm15.2 9.4l-3-2.6V7.2l3-2.6c.4-.3 1.1 0 1.1.6v10.8c0 .6-.7.9-1.1.6z", }, // chat / mcp clients openclaw: { color: "#F97316", - path: - "M12 2 4 6v6c0 4.5 3.5 8.5 8 10 4.5-1.5 8-5.5 8-10V6l-8-4zm0 2.2 6 3v4.8c0 3.5-2.8 6.8-6 7.9-3.2-1.1-6-4.4-6-7.9V7.2l6-3z", + path: "M12 2 4 6v6c0 4.5 3.5 8.5 8 10 4.5-1.5 8-5.5 8-10V6l-8-4zm0 2.2 6 3v4.8c0 3.5-2.8 6.8-6 7.9-3.2-1.1-6-4.4-6-7.9V7.2l6-3z", }, chatgpt: { color: "#10A37F", - path: - "M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.05 6.05 0 0 0 6.515 2.9A5.98 5.98 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z", + path: "M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.05 6.05 0 0 0 6.515 2.9A5.98 5.98 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z", }, claude: { color: "#D97757", - path: - "M4.709 15.955l4.72-2.647.079-.23-.079-.128H9.2l-.79-.048-2.698-.073-2.34-.097-2.265-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.6-2.552-1.687-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.892.686 1.908 1.477 2.491 1.834.365.304.146-.103.018-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 0 1-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.418 1.002 2.228 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.2-1.657-.85-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.926-1.415-2.167-1.142-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.388-1.924.316-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.413.164-.716-.37.067-.662.4-.59 2.388-3.036 1.44-1.882.93-1.087-.006-.158h-.054L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z", + path: "M4.709 15.955l4.72-2.647.079-.23-.079-.128H9.2l-.79-.048-2.698-.073-2.34-.097-2.265-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.6-2.552-1.687-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.892.686 1.908 1.477 2.491 1.834.365.304.146-.103.018-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 0 1-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.418 1.002 2.228 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.2-1.657-.85-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.926-1.415-2.167-1.142-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.388-1.924.316-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.413.164-.716-.37.067-.662.4-.59 2.388-3.036 1.44-1.882.93-1.087-.006-.158h-.054L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z", }, cursor: { color: "#000000", - path: - "M11.925 24l10.425-6-10.425-6L1.5 18l10.425 6zM22.35 6L11.925 0 1.5 6v12l10.425-6L22.35 6z", + path: "M11.925 24l10.425-6-10.425-6L1.5 18l10.425 6zM22.35 6L11.925 0 1.5 6v12l10.425-6L22.35 6z", }, }; function brandKey(name: string): string | null { - const k = name.trim().toLowerCase().replace(/[^a-z0-9]/g, ""); + const k = name + .trim() + .toLowerCase() + .replace(/[^a-z0-9]/g, ""); if (!k) return null; if (k in BRAND_REGISTRY) return k; // suffix matches (e.g. "Crunchbase API" -> "crunchbase") @@ -1033,7 +1019,11 @@ function BrandLetter({ name }: { name: string }) { return (
) : null} @@ -3875,8 +3868,11 @@ function ChannelsTab({ info }: { info: AgentInfo }) { } function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { - const [selectedIdx, setSelectedIdx] = useState(0); - const selected = watchers[selectedIdx] ?? watchers[0]; + // Sidebar already lists every watcher under the active agent, so the + // content pane only renders the currently-selected one β€” matches v2 + // /agents/$agentId?tab=watchers&w= where the route is a single + // watcher, not a list. + const selected = watchers[0]; if (!selected) return null; const runs: Array<{ @@ -3912,82 +3908,18 @@ function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { ]; return ( -
- {/* List of watchers */} -
-
- {watchers.length} watchers -
-
    - {watchers.map((w, i) => { - const active = i === selectedIdx; - return ( -
  • - -
  • - ); - })} -
-
- - {/* Selected watcher detail */} -
+
- + -
); } From b76c1307bd35a345e118a55e5545dc24d8c0f7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:21:50 +0100 Subject: [PATCH 05/13] fix(landing): remove page headers, drop AlwaysOnAgentsTable, strip borders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AppShell's page-title header is now optional. All three stages pass pageTitle="" so the preview goes straight into content with no duplicated 'Connectors' / 'Companies' / 'Agents' chrome. - Deploy agents: - Dropped horizontal Watchers/Providers/Skills/Channels sub-tab strip (in the real design these are sidebar nav rows, not content tabs) - Removed search input from the agents toolbar - Removed AlwaysOnAgentsTable (doesn't exist on real /agents pages); replaced with a faithful 'Bring your own agent' card mirroring /agents index β€” Cursor / Claude Code / ChatGPT / OpenClaw brand tiles - Borderless internal cards across stats strip, FeatureGridLite, DeviceTargetCard, ConnectorCatalogTile, WatcherDetail, and the Devices/Connections section wrappers. Surface-dim background carries the grouping instead. --- .../src/components/HeroProductCard.tsx | 930 +++++------------- 1 file changed, 242 insertions(+), 688 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index db84f31db..7eaf5c1d8 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -1406,38 +1406,39 @@ function AppShell({ />
- {/* Breadcrumb + page header */} -
-
-
-

- {pageTitle} -

- {pageSubtitle ? ( -

+

+
+

- {pageSubtitle} -

+ {pageTitle} +

+ {pageSubtitle ? ( +

+ {pageSubtitle} +

+ ) : null} +
+ {toolbar ? ( + ) : null}
- {toolbar ? ( - - ) : null}
-
+ ) : null}
{children}
{rightPanel}
@@ -2102,12 +2103,12 @@ function StatsStripCard({ stats: Array<{ label: string; value: number }>; }) { return ( -
+
{stats.map((s) => (
{s.value} @@ -2137,8 +2138,8 @@ function FeatureGridLite({ {items.map((it) => (
{icon} @@ -2391,9 +2376,14 @@ function DeviceTargetCard({ {action.label} @@ -2412,8 +2402,8 @@ function ConnectorCatalogTile({ }) { return (
@@ -2561,14 +2551,11 @@ function ConnectorsLanding({
-
-
- +
+
+

Devices @@ -2588,14 +2575,11 @@ function ConnectorsLanding({

-
-
- +
+
+

Connections @@ -3574,298 +3558,6 @@ function ActionField({ /* ------------------------------ tab 4: connect ------------------------------ */ -function DeployChannelGroup({ - title, - items, -}: { - title: string; - items: Array<{ label: string; active?: boolean }>; -}) { - return ( -
- - {title} - -
- {items.map((item) => ( - - - {item.label} - - ))} -
-
- ); -} - -type AgentDetailTab = "watchers" | "providers" | "skills" | "channels"; - -function AgentDetailTabs({ - active, - onChange, -}: { - active: AgentDetailTab; - onChange: (next: AgentDetailTab) => void; -}) { - const tabs: Array<{ id: AgentDetailTab; label: string }> = [ - { id: "watchers", label: "Watchers" }, - { id: "providers", label: "Providers" }, - { id: "skills", label: "Skills" }, - { id: "channels", label: "Channels" }, - ]; - return ( -
- {tabs.map((t) => { - const isActive = t.id === active; - return ( - - ); - })} -
- ); -} - -function ProvidersTab() { - const providers = [ - { - name: "Anthropic", - model: "claude-sonnet-4-6", - status: "active", - keyMask: "sk-ant-β€’β€’β€’β€’β€’rj9", - }, - { - name: "OpenAI", - model: "gpt-5", - status: "active", - keyMask: "sk-β€’β€’β€’β€’β€’2c1", - }, - { - name: "Google", - model: "gemini-3-pro", - status: "fallback", - keyMask: "AIzaSyβ€’β€’β€’β€’β€’8Pq", - }, - ]; - return ( -
-
- Provider - Model - Key - Status -
- {providers.map((p, i) => ( -
- {p.name} - - {p.model} - - - {p.keyMask} - - - - -
- ))} -
- ); -} - -function SkillsTab() { - const skills = [ - { - slug: "deal-research", - desc: "Pull funding rounds + filings from connected sources", - net: ["crunchbase.com", "*.linkedin.com"], - }, - { - slug: "founder-signals", - desc: "Score founders by recent activity and team growth", - net: ["api.github.com", "*.linkedin.com"], - }, - { - slug: "memory-recall", - desc: "Read typed memory + cite source events", - net: [], - }, - ]; - return ( -
- {skills.map((s) => ( -
-
- - {s.slug} - - -
-

- {s.desc} -

- {s.net.length > 0 ? ( -
- Network - {s.net.map((d) => ( - - {d} - - ))} -
- ) : null} -
- ))} -
- ); -} - -function ChannelsTab({ info }: { info: AgentInfo }) { - const mcpClients = [ - { label: "OpenClaw", active: true }, - { label: "Claude" }, - { label: "ChatGPT" }, - { label: "Any MCP client" }, - ]; - const chatChannels = [ - { label: "Slack", active: true }, - { label: "Telegram" }, - { label: "Discord" }, - { label: "WhatsApp" }, - { label: "Teams" }, - { label: "REST API" }, - ]; - return ( -
-
- - MCP - - {info.mcpEndpoint} - - Copy - -
-
-
- - -
-
-
- ); -} function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { // Sidebar already lists every watcher under the active agent, so the @@ -3908,145 +3600,180 @@ function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { ]; return ( -
-
-
- - - {selected.name} - - -
+
+
+
+ - {selected.schedule} + {selected.name} +
+ + {selected.schedule} + +
-
-
-
- Entity -
-
- {entityEmoji(selected.entity)} {selected.entity} -
+
+
+
+ Entity
-
-
- Owner agent -
-
- {selected.agent} -
+
+ {entityEmoji(selected.entity)} {selected.entity}
-
-
- Last run -
-
- {selected.last} -
+
+
+
+ Owner agent +
+
+ {selected.agent}
- -
- Run timeline +
+
+ Last run +
+
+ {selected.last} +
+
-
    - {runs.map((r, i) => { - const tone = - r.status === "success" - ? "green" - : r.status === "running" - ? "amber" - : r.status === "error" - ? "muted" - : "muted"; - return ( -
  1. - - - -
    -
    - - {r.status} - - - {r.when} - -
    -

    + Run timeline +

    + +
      + {runs.map((r, i) => { + const tone = + r.status === "success" + ? "green" + : r.status === "running" + ? "amber" + : r.status === "error" + ? "muted" + : "muted"; + return ( +
    1. + + + +
      +
      + + {r.status} + + - {r.note} -

      + {r.when} +
      -
    2. - ); - })} -
    +

    + {r.note} +

    +
+ + ); + })} + +
+ ); +} + +function BringYourOwnAgentCard() { + const clients: Array<{ name: string; brand: string }> = [ + { name: "Cursor", brand: "cursor" }, + { name: "Claude Code", brand: "claude" }, + { name: "ChatGPT", brand: "chatgpt" }, + { name: "OpenClaw", brand: "openclaw" }, + ]; + return ( +
+
+ +

+ Bring your own agent +

+
+

+ Hook up Cursor, Claude Code, ChatGPT, Codex, or any MCP-capable app. + Same memory and connections as Lobu-hosted agents. +

+
+ {clients.map((c) => ( +
+ +
+
+ {c.name} +
+
+
+ ))} +
); } function AgentsConnect({ - info, agents, watchers, }: { @@ -4054,51 +3781,37 @@ function AgentsConnect({ agents: AgentRow[]; watchers: WatcherRow[]; }) { - const [tab, setTab] = useState("watchers"); const selectedAgent = agents[0]; return ( -
-
-
- +
+ + + +
+

- - -
-

- {selectedAgent?.name ?? info.identity} -

-

- Always-on Β· runs from {info.primaryClient}, Slack, and the REST - API -

-
- -

- -
- {tab === "watchers" ? : null} - {tab === "providers" ? : null} - {tab === "skills" ? : null} - {tab === "channels" ? : null} + {selectedAgent?.name ?? "Agent"} +

+

+ Always-on +

+
- + +
); } @@ -4134,142 +3847,6 @@ const DEFAULT_AGENT_ROWS: AgentRow[] = [ }, ]; -function AlwaysOnAgentsTable({ rows }: { rows: AgentRow[] }) { - return ( -
-
- -

- Always-on agents -

- - Run from MCP clients, chat platforms, or schedules - - - - } /> - -
-
- Name - Channels - Skills - Status - Last run -
- {rows.map((row, i) => { - // Pretend the agent is wired to its entryPoint plus a secondary - // channel β€” visualises v2 channel-bindings (one agent, many platforms). - const secondary = - row.entryPoint === "Slack" - ? "REST" - : row.entryPoint === "Telegram" - ? "MCP" - : row.entryPoint === "ChatGPT" - ? "Slack" - : "Slack"; - const channels: Array<{ name: string; tone: "green" | "muted" }> = [ - { - name: row.entryPoint, - tone: row.status === "Active" ? "green" : "muted", - }, - { name: secondary, tone: "muted" }, - ]; - return ( -
- - - - {channels.map((ch) => ( - - - {ch.name} - - ))} - - - {row.skills.map((s) => ( - - {s} - - ))} - - - - - - {row.last} - -
- ); - })} -
- ); -} /* ------------------------------ entry ------------------------------ */ @@ -4355,19 +3932,7 @@ export function HeroProductCard({ - - } - /> - } /> - - } + pageTitle="" onStageChange={onStageChange} >
@@ -4386,8 +3951,7 @@ export function HeroProductCard({ @@ -4400,15 +3964,7 @@ export function HeroProductCard({ - - - } /> - - } + pageTitle="" onStageChange={onStageChange} > @@ -4421,9 +3977,7 @@ export function HeroProductCard({ } + pageTitle="" onStageChange={onStageChange} > Date: Fri, 15 May 2026 02:24:35 +0100 Subject: [PATCH 06/13] fix(landing): sidebar tab rows + drop overflow scroll - Providers / Skills / Channels / Settings in the agent expansion are single nav rows (AgentTabLink), not nested sub-lists with sample values. Only Watchers stays expanded with the actual watcher list, matching v2 agents-section. - Removed the fictional 'Run policy' Settings sub-item. - Dropped overflow-y-auto and the fixed 560px shell height so the preview lays out content in full instead of clipping inside a scroll container. --- .../src/components/HeroProductCard.tsx | 89 +++++++------------ 1 file changed, 31 insertions(+), 58 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 7eaf5c1d8..f56a1d31e 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -1123,6 +1123,27 @@ function ConnectorsPillSection({ type SidebarAgent = { name: string }; type SidebarWatcher = { name: string }; +function AgentTabLink({ + icon, + label, +}: { + icon: ComponentChildren; + label: string; +}) { + return ( + + ); +} + function AgentSubGroup({ label, icon, @@ -1212,65 +1233,21 @@ function AgentsPillSection({ }))} active={activeNav === "watchers"} /> - } label="Providers" - icon={} - items={[ - { - name: "Anthropic", - leading: ( - - ), - }, - { - name: "OpenAI", - leading: ( - - ), - }, - { - name: "Google", - leading: ( - - ), - }, - ]} /> - } label="Skills" - icon={} - items={[ - { name: "deal-research" }, - { name: "founder-signals" }, - { name: "memory-recall" }, - ]} /> - } label="Channels" - icon={} - items={[ - { - name: "Slack #vc-deals", - leading: ( - - ), - }, - { - name: "REST API", - leading: , - }, - ]} /> - } label="Settings" - icon={} - items={[{ name: "Identity" }, { name: "Run policy" }]} />
) : null} @@ -1333,7 +1310,7 @@ function Sidebar({ }} > -
+
{pill === "home" ? (
) : null} -
{children}
+
{children}
{rightPanel}
@@ -3558,7 +3533,6 @@ function ActionField({ /* ------------------------------ tab 4: connect ------------------------------ */ - function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { // Sidebar already lists every watcher under the active agent, so the // content pane only renders the currently-selected one β€” matches v2 @@ -3847,7 +3821,6 @@ const DEFAULT_AGENT_ROWS: AgentRow[] = [ }, ]; - /* ------------------------------ entry ------------------------------ */ export function HeroProductCard({ From 321977efff86903c7de868d9c8dc489c84e47d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:29:27 +0100 Subject: [PATCH 07/13] feat(landing): real device-target CTAs + watcher timeline with memory writes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DeviceTargetCard action gained three explicit kinds: - link: opens the URL (macOS β†’ real .dmg download from github.com/lobu-ai/lobu/releases/latest) - copy: copy-to-clipboard with copy/check icon swap (CLI install + login command, Docker run command) - status: passive label (Serverless 'Free in beta') Watcher run timeline entries now carry an optional 'writes' array. When present, the run renders a stack of memory-event preview cards underneath β€” entity emoji + title + body + branded source attribution. Demo content uses concrete VC examples (Lovable Series C, Anton Osika hires, Anysphere/Cursor $900M) sourced from TechCrunch / LinkedIn / Crunchbase with real brand logos. --- .../src/components/HeroProductCard.tsx | 296 ++++++++++++++---- 1 file changed, 242 insertions(+), 54 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index f56a1d31e..8a1b1104d 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -1237,10 +1237,7 @@ function AgentsPillSection({ icon={} label="Providers" /> - } - label="Skills" - /> + } label="Skills" /> } label="Channels" @@ -2314,6 +2311,68 @@ function KeyIcon({ size = 14 }: { size?: number }) { ); } +type DeviceAction = + | { kind: "link"; label: string; href: string } + | { kind: "copy"; label: string; command: string } + | { kind: "status"; label: string }; + +function CopyIcon({ size = 11 }: { size?: number }) { + return ( + + ); +} + +function CheckIcon({ size = 11 }: { size?: number }) { + return ( + + ); +} + +function ExternalIcon({ size = 11 }: { size?: number }) { + return ( + + ); +} + function DeviceTargetCard({ icon, name, @@ -2323,10 +2382,65 @@ function DeviceTargetCard({ icon: ComponentChildren; name: string; description: string; - action: { label: string; tone?: "primary" | "ghost" | "muted" }; + action: DeviceAction; }) { - const isPrimary = action.tone === "primary"; - const isMuted = action.tone === "muted"; + const [copied, setCopied] = useState(false); + const handleCopy = async () => { + if (action.kind !== "copy" || typeof navigator === "undefined" || !navigator.clipboard) return; + try { + await navigator.clipboard.writeText(action.command); + setCopied(true); + setTimeout(() => setCopied(false), 1500); + } catch { + // noop + } + }; + + let cta: ComponentChildren; + if (action.kind === "link") { + cta = ( + + {action.label} + + + ); + } else if (action.kind === "copy") { + cta = ( + + ); + } else { + cta = ( + + {action.label} + + ); + } return (
{description}

-
- - {action.label} - -
+
{cta}
); } @@ -2438,7 +2536,18 @@ function ConnectorsLanding({ }, ]; - const deviceTargets = [ + const cliCommand = "npm i -g @lobu/cli\nlobu login"; + const dockerCommand = `docker run -d --name lobu-bridge \\ + -v lobu-state:/var/lib/lobu \\ + -e LOBU_WORKSPACE_URL= \\ + ghcr.io/lobu-ai/lobu-bridge:latest`; + + const deviceTargets: Array<{ + icon: ComponentChildren; + name: string; + description: string; + action: DeviceAction; + }> = [ { icon: ( , name: "CLI", description: "Authenticates local tools (Claude Code, Cursor, MCP clients) against this workspace.", - action: { label: "Install + log in", tone: "ghost" as const }, + action: { kind: "copy", label: "Install + log in", command: cliCommand }, }, { icon: , name: "Docker", description: "Self-hosted bridge in a container. Run on a server or VPS for always-on connectors.", - action: { label: "Run command", tone: "ghost" as const }, + action: { kind: "copy", label: "Run command", command: dockerCommand }, }, { icon: , name: "Serverless", description: "Lobu hosts the bridge. Connectors run in sandboxed cloud workers β€” no install.", - action: { label: "Free in beta", tone: "muted" as const }, + action: { kind: "status", label: "Free in beta" }, }, ]; @@ -3541,35 +3654,68 @@ function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { const selected = watchers[0]; if (!selected) return null; + type MemoryWrite = { + entityType: string; + title: string; + body: string; + source: string; + sourceBrand: string; + }; const runs: Array<{ when: string; status: "success" | "running" | "skipped" | "error"; - note: string; + summary: string; + writes?: MemoryWrite[]; }> = [ { when: "Just now", status: "success", - note: `Wrote 14 new ${selected.entity} updates to memory`, + summary: "Wrote 3 memory events", + writes: [ + { + entityType: "Company", + title: "Lovable", + body: "Raised $200M Series C led by a16z, valuation $1.8B. Headcount up 40% in 60 days.", + source: "TechCrunch", + sourceBrand: "chatgpt", + }, + { + entityType: "Founder", + title: "Anton Osika", + body: "Hired 8 engineers in October β€” 4 ex-Stripe, 2 ex-OpenAI. Public on LinkedIn.", + source: "LinkedIn", + sourceBrand: "linkedin", + }, + ], }, { when: "12m ago", status: "success", - note: `Wrote 3 new ${selected.entity} updates to memory`, + summary: "Wrote 1 memory event", + writes: [ + { + entityType: "Company", + title: "Anysphere", + body: "Cursor parent secured $900M from Thrive Capital. Pre-money $9B.", + source: "Crunchbase", + sourceBrand: "crunchbase", + }, + ], }, { when: "1h ago", status: "skipped", - note: "No new events since last run", + summary: "No new events since last run", }, { when: "2h ago", status: "success", - note: `Wrote 22 ${selected.entity} updates Β· 4 superseded by newer rows`, + summary: "Wrote 22 events Β· 4 superseded older rows", }, { when: "5h ago", status: "error", - note: "Upstream rate-limited β€” retried via fallback provider", + summary: "LinkedIn rate-limited β€” retried via fallback (succeeded)", }, ]; @@ -3649,7 +3795,7 @@ function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { Run timeline
-
    +
      {runs.map((r, i) => { const tone = r.status === "success" @@ -3664,32 +3810,74 @@ function WatcherDetail({ watchers }: { watchers: WatcherRow[] }) { -
      +
      - - {r.status} + + + {r.status} + + + {r.summary} + {r.when}
      -

      - {r.note} -

      + {r.writes && r.writes.length > 0 ? ( +
      + {r.writes.map((w, wi) => ( +
      +
      + + {entityEmoji(w.entityType)} {w.title} + + +
      +

      + {w.body} +

      +
      + + Source: {w.source} +
      +
      + ))} +
      + ) : null}
      ); From fc69a6b0dbded86f5d4b9594a4650b98fa7a8f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:31:51 +0100 Subject: [PATCH 08/13] fix(landing): rename Settings to Personality in agent sidebar Match v2 agents-section where the Identity tab is surfaced as 'Personality'. Drop the generic 'Settings' link. --- .../src/components/HeroProductCard.tsx | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 8a1b1104d..5b9a6331b 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -634,6 +634,32 @@ function DatabaseIcon({ size = 14 }: { size?: number }) { ); } +function FingerprintIcon({ size = 12 }: { size?: number }) { + return ( + + ); +} + function HardDriveIcon({ size = 12 }: { size?: number }) { return ( } - label="Settings" + icon={} + label="Personality" />
      ) : null} @@ -2386,7 +2412,12 @@ function DeviceTargetCard({ }) { const [copied, setCopied] = useState(false); const handleCopy = async () => { - if (action.kind !== "copy" || typeof navigator === "undefined" || !navigator.clipboard) return; + if ( + action.kind !== "copy" || + typeof navigator === "undefined" || + !navigator.clipboard + ) + return; try { await navigator.clipboard.writeText(action.command); setCopied(true); From e88a17276e6300d6a38d1a28d810cbc4ab38ec5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:35:49 +0100 Subject: [PATCH 09/13] =?UTF-8?q?fix(landing):=20knowledge=20=E2=80=94=20s?= =?UTF-8?q?earch=20input=20+=202=20items,=20no=20filter=20chips?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace KnowledgeFilterBar (Feed / Connection / Run chip groups) with a single search input. Cap rendered cards at 2 to keep the preview glanceable. Deleted KNOWLEDGE_CHIPS data + KnowledgeFilterBar component. --- .../src/components/HeroProductCard.tsx | 117 +++++------------- 1 file changed, 30 insertions(+), 87 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 5b9a6331b..12b1a4479 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -3170,48 +3170,41 @@ function ExternalLinkIcon() { ); } -const KNOWLEDGE_CHIPS: { slug: string; values: string[]; active?: string }[] = [ - { - slug: "Feed", - values: ["All", "Slack #ops", "Gmail inbox", "Linear bugs"], - active: "All", - }, - { - slug: "Connection", - values: ["All", "Crunchbase", "LinkedIn", "Stripe"], - active: "All", - }, - { - slug: "Run", - values: ["All runs", "Last hour", "Today"], - active: "All runs", - }, -]; + +function KnowledgeSearchInput() { + return ( +
      + + +
      + ); +} function KnowledgeFeed({ rows }: { rows?: KnowledgeRow[] }) { const useDynamic = rows && rows.length > 0; + const items = useDynamic + ? rows.slice(0, 2).map((row) => ( + + )) + : KNOWLEDGE_ITEMS.slice(0, 2).map((item) => + item.kind === "action" ? ( + + ) : ( + + ) + ); return (
      - -
      - {useDynamic - ? `${rows.length} items Β· sorted by recency` - : "1,284 items Β· sorted by recency"} -
      -
      - {useDynamic - ? rows.map((row) => ) - : KNOWLEDGE_ITEMS.map((item) => - item.kind === "action" ? ( - - ) : ( - - ) - )} -
      + +
      {items}
      ); } @@ -3309,56 +3302,6 @@ function UseCaseKnowledgeCard({ row }: { row: KnowledgeRow }) { ); } -function KnowledgeFilterBar() { - return ( -
      - {KNOWLEDGE_CHIPS.map((group, gi) => ( -
      - - {group.slug} - - {group.values.map((v) => { - const isActive = group.active === v; - return ( - - {v} - - ); - })} -
      - ))} -
      - ); -} function KnowledgeCard({ item }: { item: KnowledgeMemoryItem }) { return ( From 472bdc13f0bfb208c0358d2255af52793c44052f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:41:26 +0100 Subject: [PATCH 10/13] fix(landing): use-case-aware connectors + section cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sidebar connector rows are now one per connector (not per sub-connection) so switching use cases actually changes what shows up β€” Crunchbase / LinkedIn / News feeds for VC, GitHub / Linear / PagerDuty for engineering, etc. β€” instead of always rendering the same hardcoded sample-member names (Albert Lund / Jenna Roberts). Each row now has the connector's brand logo + a feed count. - Removed 'Connected apps' section from Agents pill (Claude Desktop / OpenClaw / Cursor tiles). - Removed Hosting (Self-host or managed) feature block and the entire DataModelSection ('One memory schema, every record type') from the page. - ArchitectureSection drops its [06] corner-label header strip for consistency with the rest of the page. Its dotted background (dotted-bg + rounded-2xl border) was already in place; with the data model section removed it now stands in as the page's single patterned showcase. --- .../src/components/ArchitectureSection.tsx | 12 +--- .../src/components/HeroProductCard.tsx | 56 +++++-------------- .../landing/src/components/LandingPage.tsx | 25 +-------- 3 files changed, 17 insertions(+), 76 deletions(-) diff --git a/packages/landing/src/components/ArchitectureSection.tsx b/packages/landing/src/components/ArchitectureSection.tsx index 93c22650f..17dd3a6f6 100644 --- a/packages/landing/src/components/ArchitectureSection.tsx +++ b/packages/landing/src/components/ArchitectureSection.tsx @@ -7,18 +7,8 @@ export function ArchitectureSection(props: { return (
      -
      - - [06] Architecture - - / Gateway ↔ Workers -
      -
      - } - label="Connected apps" - /> -
      - } - label="Claude Desktop" - /> - } - label="OpenClaw" - /> - } - label="Cursor" - /> -
      ); } @@ -3170,7 +3152,6 @@ function ExternalLinkIcon() { ); } - function KnowledgeSearchInput() { return (
      0; const items = useDynamic - ? rows.slice(0, 2).map((row) => ( - - )) + ? rows + .slice(0, 2) + .map((row) => ) : KNOWLEDGE_ITEMS.slice(0, 2).map((item) => item.kind === "action" ? ( @@ -3302,7 +3283,6 @@ function UseCaseKnowledgeCard({ row }: { row: KnowledgeRow }) { ); } - function KnowledgeCard({ item }: { item: KnowledgeMemoryItem }) { return (
      - c.connections.length > 0 - ? c.connections.map((conn) => ({ - label: conn.member, - connectorName: c.name, - initial: c.name.charAt(0).toUpperCase(), - status: c.status === "Connected" ? "active" : "pending", - })) - : [ - { - label: c.name, - connectorName: c.name, - initial: c.name.charAt(0).toUpperCase(), - status: c.status === "Connected" ? "active" : "pending", - }, - ] - ) - .slice(0, 6); + .slice(0, 6) + .map((c) => ({ + label: c.name, + connectorName: c.name, + initial: c.name.charAt(0).toUpperCase(), + status: c.status === "Connected" ? "active" : "pending", + feedCount: c.connections.length > 0 ? c.connections.length : undefined, + })); const sidebarAgents: SidebarAgent[] = agentRows .slice(0, 4) .map((a) => ({ name: a.name })); diff --git a/packages/landing/src/components/LandingPage.tsx b/packages/landing/src/components/LandingPage.tsx index e6b0ef7c0..508a294e3 100644 --- a/packages/landing/src/components/LandingPage.tsx +++ b/packages/landing/src/components/LandingPage.tsx @@ -8,13 +8,8 @@ import { } from "../use-case-showcases"; import { ArchitectureSection } from "./ArchitectureSection"; import { CTA } from "./CTA"; -import { DataModelSection } from "./DataModelSection"; import { FeatureBlock } from "./FeatureBlock"; -import { - HostingGraphic, - SharedMemoryGraphic, - SkillsGraphic, -} from "./FeatureGraphics"; +import { SharedMemoryGraphic, SkillsGraphic } from "./FeatureGraphics"; import { HeroProductCard } from "./HeroProductCard"; import { HeroSection, type HeroStageId } from "./HeroSection"; import { LatestBlogPosts, type LatestBlogPost } from "./LatestBlogPosts"; @@ -90,26 +85,8 @@ export function LandingPage(props: { />
      -
      - } - /> -
      - -
      - -
      - {props.latestPosts?.length ? ( From b3bec0f7e60bc56884415e1e7f3d58a5aa923d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:45:23 +0100 Subject: [PATCH 11/13] fix(landing): device tiles match the connector catalog tile shape MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DeviceTargetCard rebuilt around a shared BrandTile primitive β€” the same compact brand-mark + name + 1-line subtitle layout the ConnectorCatalogTile already uses for Crunchbase / LinkedIn / GitHub. - macOS: black Apple-glyph tile, 'Menu bar app Β· .dmg', external-link trailing icon, real github releases link. - CLI: dark Terminal tile, 'npm i -g @lobu/cli', copy trailing icon. - Docker: Docker-blue whale tile, 'Self-hosted bridge', copy trailing icon. - Serverless: sky-blue Cloud tile, 'Free in beta', green status dot. Devices section now reads as the same visual rhythm as Connections instead of bigger description-and-button cards. --- .../src/components/HeroProductCard.tsx | 239 +++++++++++------- 1 file changed, 146 insertions(+), 93 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 585df1e9c..639d11f45 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -2381,104 +2381,145 @@ function ExternalIcon({ size = 11 }: { size?: number }) { ); } -function DeviceTargetCard({ +function BrandTile({ icon, + iconBg, name, - description, - action, + subtitle, + trailing, + onClick, + href, }: { icon: ComponentChildren; + iconBg: string; name: string; - description: string; - action: DeviceAction; + subtitle: string; + trailing?: ComponentChildren; + onClick?: () => void; + href?: string; }) { - const [copied, setCopied] = useState(false); - const handleCopy = async () => { - if ( - action.kind !== "copy" || - typeof navigator === "undefined" || - !navigator.clipboard - ) - return; - try { - await navigator.clipboard.writeText(action.command); - setCopied(true); - setTimeout(() => setCopied(false), 1500); - } catch { - // noop - } - }; - - let cta: ComponentChildren; - if (action.kind === "link") { - cta = ( + const inner = ( + <> + +
      +
      + {name} +
      +
      + {subtitle} +
      +
      + {trailing ? ( + + {trailing} + + ) : null} + + ); + const cls = + "flex items-center gap-2 rounded-md p-2 transition-colors hover:bg-[var(--color-page-surface)]"; + const style = { background: "var(--color-page-surface-dim)" }; + if (href) { + return ( - {action.label} - + {inner} ); - } else if (action.kind === "copy") { - cta = ( - ); - } else { - cta = ( - - {action.label} - - ); } return ( -
      -
      - {icon} - - {name} - -
      -

      - {description} -

      -
      {cta}
      +
      + {inner}
      ); } +function DeviceTargetCard({ + icon, + iconBg, + name, + subtitle, + action, +}: { + icon: ComponentChildren; + iconBg: string; + name: string; + subtitle: string; + action: DeviceAction; +}) { + const [copied, setCopied] = useState(false); + if (action.kind === "link") { + return ( + } + href={action.href} + /> + ); + } + if (action.kind === "copy") { + const handleCopy = async () => { + if (typeof navigator === "undefined" || !navigator.clipboard) return; + try { + await navigator.clipboard.writeText(action.command); + setCopied(true); + setTimeout(() => setCopied(false), 1500); + } catch { + // noop + } + }; + return ( + : } + onClick={handleCopy} + /> + ); + } + return ( + } + /> + ); +} + function ConnectorCatalogTile({ name, category, @@ -2557,25 +2598,26 @@ function ConnectorsLanding({ const deviceTargets: Array<{ icon: ComponentChildren; + iconBg: string; name: string; - description: string; + subtitle: string; action: DeviceAction; }> = [ { icon: ( ), + iconBg: "#111111", name: "macOS", - description: - "Menu bar app. Syncs local folders, Screen Time, browser history.", + subtitle: "Menu bar app Β· .dmg", action: { kind: "link", label: "Download .dmg", @@ -2583,24 +2625,34 @@ function ConnectorsLanding({ }, }, { - icon: , + icon: , + iconBg: "#1F2937", name: "CLI", - description: - "Authenticates local tools (Claude Code, Cursor, MCP clients) against this workspace.", + subtitle: "npm i -g @lobu/cli", action: { kind: "copy", label: "Install + log in", command: cliCommand }, }, { - icon: , + icon: ( + + ), + iconBg: "#2496ED", name: "Docker", - description: - "Self-hosted bridge in a container. Run on a server or VPS for always-on connectors.", + subtitle: "Self-hosted bridge", action: { kind: "copy", label: "Run command", command: dockerCommand }, }, { - icon: , + icon: , + iconBg: "#0EA5E9", name: "Serverless", - description: - "Lobu hosts the bridge. Connectors run in sandboxed cloud workers β€” no install.", + subtitle: "Free in beta", action: { kind: "status", label: "Free in beta" }, }, ]; @@ -2668,8 +2720,9 @@ function ConnectorsLanding({ ))} From 0779fea67ba54ffcd3a9764458f6914e4b156b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 02:48:35 +0100 Subject: [PATCH 12/13] fix(landing): drop entity/table borders + agent Active badges MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Build-context view: - EntitySchemaSummary loses its outer card border (and the emoji-tile border); the schema/relationships/automation chips read against the page surface directly. - MembersTable loses its border too β€” header + rows align with the rest of the borderless content pane. Agent detail: - Removed the 'Active' badge next to the agent identity and beside the watcher name. Status is already implied by the green status dot. - Replaced with a 'Next run in 47m' line on the agent header and a ' Β· next in 47m' suffix on the watcher header, which is the more useful runtime signal. --- .../src/components/HeroProductCard.tsx | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/landing/src/components/HeroProductCard.tsx b/packages/landing/src/components/HeroProductCard.tsx index 639d11f45..cbf484775 100644 --- a/packages/landing/src/components/HeroProductCard.tsx +++ b/packages/landing/src/components/HeroProductCard.tsx @@ -1601,10 +1601,7 @@ const DEFAULT_RECORD_ROWS: RecordRow[] = [ function MembersTable({ rows }: { rows: RecordRow[] }) { return ( -
      +
      +
      -
      - {selected.schedule} + {selected.schedule} Β· next in 47m
      @@ -3974,10 +3966,9 @@ function AgentsConnect({ class="text-[12px]" style={{ color: "var(--color-page-text-muted)" }} > - Always-on + Next run in 47m

      -
      From c88f7a223a9df695f6f6bd5923f324cf4c58b3e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Fri, 15 May 2026 03:08:46 +0100 Subject: [PATCH 13/13] chore(landing): audit cleanup + mobile sidebar drawer Cleanup from the post-redesign audit: - Drop dead Footer links (#autonomous / #platforms / #hosting) and replace the Product column with the sections that still exist (Memory / Skills / Architecture / MCP). - Delete orphaned DataModelSection.tsx and the unused HostingGraphic / WatcherGraphic / PlatformsGraphic / LogoStrip exports from FeatureGraphics.tsx. - Delete stale screenshots in public/images/docs/. - Drop dead linkTabsToCampaigns prop + the commented LogoStrip line in LandingPage.tsx and its sole call site in index.astro. - Tighten HeroStageId to drop the unused 'watch' variant. - Rename 'Connections UI' to 'Connectors UI' in guides/troubleshooting.md to match the renamed nav. Mobile sidebar: - AppShell tracks a mobileOpen state. On 0 bytes .../docs/security-permissions-section.png | Bin 23912 -> 0 bytes .../src/components/DataModelSection.tsx | 395 ------------------ .../src/components/FeatureGraphics.tsx | 291 ------------- packages/landing/src/components/Footer.tsx | 4 +- .../src/components/HeroProductCard.tsx | 147 ++++++- .../landing/src/components/HeroSection.tsx | 7 +- .../landing/src/components/LandingPage.tsx | 3 - .../content/docs/guides/troubleshooting.md | 2 +- packages/landing/src/pages/index.astro | 2 +- 10 files changed, 136 insertions(+), 715 deletions(-) delete mode 100644 packages/landing/public/images/docs/lobu-home.png delete mode 100644 packages/landing/public/images/docs/security-permissions-section.png delete mode 100644 packages/landing/src/components/DataModelSection.tsx diff --git a/packages/landing/public/images/docs/lobu-home.png b/packages/landing/public/images/docs/lobu-home.png deleted file mode 100644 index 4875c2524886465c1aeeaa132464d70e6f85cdb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95392 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
      0Y= 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

      4+>-_!3JxWVUoob<7 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 diff --git a/packages/landing/public/images/docs/security-permissions-section.png b/packages/landing/public/images/docs/security-permissions-section.png deleted file mode 100644 index 4e793185f467080ace5954cf5a43b33aa83f0de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23912 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

      yqd8t|_|@Gi^8l@7dgR-OZ;V z(A~5rihQ0u9>{Nyf<_7fNLC`a(GW}HHh8dv|W#rp{5tu`rQ+{qePy8;bXxS zL*Pk7v(Ez0bx~!=4Z6YDb~l0Pz$W1OtB7x=W@dfz_KJ)dlMnG3Ae~z@`Q)CT&t`Kv z%oZtYNHm|puwe~w0pqmVhyK(1ZNEh@T~KS4T>zYPxW&}SoN!aTZu9=n=XPspYYR7+ zr5$SFEWcB@`~c$xG2kAp)BAGFtbr%*?EnAw5zB&J&fWWf=c4R7q2Ulc0emWy&g(<* z`k>Qjdd=@;Je?Zu$8f7H9e9k)m0(+TPWH3WAYp#RV)TrF8_kf3yobS?JH-kav zwcYPGo9C9@`q|8H=K(z32{`3&A?!)fPJX)|1=C~O_I*BQ&3V8`_sxs4yQSr&z>}YV z$;{!lQQ@N{)$ew0U$G+N!2w>OhSZBsr^gqbG2H*-#o~S;hFe0w3B)a~iUn)7MZK5* z^MD|SQopSMZxdt)vLgBR4V`f<)2sm?kDg-5``tbGmT#ZwMsNHFX;7J z8uSv_UtR#5YqPg`{?sy4up`uLb}n$fImM{=>>Xp)1-ZcKe$X*rqQG+l7#JoFibKDE z4x!@_W23eW@ELET5kOf4JlpPQ%D}+$5Oj9nK%LV!8i$m{;b^=8Q_$cza&j~&k0xbc z8W>c^ppK@=(KI=lCh2$V@MwM;&2OXmjqLpP`2Wp~%)nE=7#JM?$8T4@APG9+yc)Q# z6L`?MFz7t-1M?mLNrrF0<)FY5Th+ls5VpXBXBZgXaDrCxCisKTy+qLx2NeJR|Ksv! iOMnbEP-lmkVaeKb)0; = { - Member: "πŸ‘€", - Person: "πŸ‘€", - Company: "🏒", - Founder: "πŸ§‘β€πŸš€", - Investor: "🏦", - "Fund Round": "πŸ’°", - Sector: "🏭", - Contract: "πŸ“œ", - Clause: "πŸ“‘", - Risk: "⚠️", - Incident: "🚨", - Service: "🧩", - Deploy: "πŸš€", - "Pull Request": "πŸ”§", - Customer: "πŸ‘₯", - Ticket: "🎫", - Issue: "🐞", - Organization: "🏒", - Deal: "πŸ’°", - Task: "βœ…", - Project: "πŸ“", - Decision: "βœ…", - Topic: "πŸ—‚", - Match: "πŸ”—", - Post: "πŸ“", -}; - -const ATTRIBUTE_ICONS: Record = { - Type: "🏷", - Name: "πŸͺͺ", - Company: "🏒", - Founder: "πŸ§‘β€πŸš€", - Founders: "πŸ§‘β€πŸš€", - Funding: "πŸ’°", - Stage: "πŸ“ˆ", - Valuation: "πŸ“Š", - Sector: "🏭", - Role: "πŸ‘€", - Amount: "πŸ’Έ", - Lead: "🏦", - Risk: "⚠️", - Status: "βœ…", - Owner: "πŸ§‘β€πŸ’Ό", - Source: "πŸ”—", -}; - -const FALLBACK_ENTITIES: EntityCard[] = [ - { - id: "user", - label: "User", - emoji: "πŸ‘€", - badge: "Entity", - attributes: [ - { name: "Identity", icon: "πŸͺͺ" }, - { name: "Sources", icon: "πŸ”—" }, - { name: "Preferences", icon: "βš™οΈ" }, - ], - moreCount: 3, - }, - { - id: "source", - label: "Source", - emoji: "πŸ“„", - badge: "Entity", - attributes: [ - { name: "Content", icon: "πŸ“" }, - { name: "Evidence", icon: "πŸ”Ž" }, - { name: "Owner", icon: "πŸ§‘β€πŸ’Ό" }, - ], - moreCount: 2, - }, - { - id: "topic", - label: "Topic", - emoji: "πŸ—‚", - badge: "Entity", - attributes: [ - { name: "Summary", icon: "πŸ“" }, - { name: "Watchers", icon: "πŸ””" }, - { name: "Linked records", icon: "πŸ”" }, - ], - moreCount: 2, - }, -]; - -function entityEmoji(label: string): string { - if (ENTITY_EMOJI_FALLBACKS[label]) return ENTITY_EMOJI_FALLBACKS[label]; - if (label.endsWith("s") && ENTITY_EMOJI_FALLBACKS[label.slice(0, -1)]) { - return ENTITY_EMOJI_FALLBACKS[label.slice(0, -1)]; - } - return "πŸ“„"; -} - -function attributeIcon(label: string): string { - return ATTRIBUTE_ICONS[label] ?? "β€’"; -} - -function buildUseCaseCards(useCaseId?: LandingUseCaseId): { - entities: EntityCard[]; - relationships: { afterIndex: number; label: string }[]; - description: string; -} { - const useCase = useCaseId ? landingUseCases[useCaseId] : null; - if (!useCase) { - return { - entities: FALLBACK_ENTITIES, - relationships: [ - { afterIndex: 0, label: "connects" }, - { afterIndex: 1, label: "links to" }, - ], - description: - "Users, sources, and topics become typed memory. Extend the schema with your own objects and relationships.", - }; - } - - const children = useCase.memory.recordTree.children ?? []; - const entities = useCase.model.entities.slice(0, 3).map((label) => { - const selectedId = useCase.memory.entitySelections?.[label]; - const child = children.find((node) => node.kind === label); - const highlights = - (selectedId && useCase.memory.nodeHighlights?.[selectedId]) || - (child && useCase.memory.nodeHighlights?.[child.id]) || - []; - const attributes = ( - highlights.length ? highlights : useCase.memory.highlights - ) - .slice(0, 3) - .map((field) => ({ - name: field.label, - icon: attributeIcon(field.label), - })); - - return { - id: selectedId ?? child?.id ?? label.toLowerCase().replace(/\s+/g, "-"), - label, - emoji: entityEmoji(label), - badge: "Entity", - attributes, - moreCount: Math.max(0, highlights.length - attributes.length), - }; - }); - - const relationships = entities.slice(0, -1).map((entity, index) => { - const next = entities[index + 1]; - const matchingRelation = useCase.memory.relations.find((rel) => { - const sourceType = rel.sourceType.toLowerCase().replace(/_/g, " "); - const targetType = rel.targetType.toLowerCase().replace(/_/g, " "); - const left = entity.label.toLowerCase(); - const right = next.label.toLowerCase(); - return ( - (sourceType === left && targetType === right) || - (sourceType === right && targetType === left) - ); - }); - return { - afterIndex: index, - label: matchingRelation?.label.replace(/_/g, " ") ?? "linked to", - }; - }); - - return { - entities: entities.length ? entities : FALLBACK_ENTITIES, - relationships, - description: `${useCase.label} agents use ${useCase.model.entities.slice(0, 5).join(", ")} as typed memory. Add your own entities and relationships as the workflow grows.`, - }; -} - -function EntityCardView({ entity }: { entity: EntityCard }) { - return ( -

      - ); -} - -function AddObjectCard() { - return ( -
      - - - Add object - -
      - ); -} - -function Connector({ label }: { label: string }) { - return ( -