'use client'; import Link from 'next/link'; import Image from 'next/image'; import { ArrowUpRight, Code2, Heart, Terminal, Copy, Check, } from 'lucide-react'; import { useState, type ReactNode, type MouseEvent } from 'react'; import { SectionHeading } from './home-features'; // Some provider logos ship a dedicated `-dark` variant (white-on-dark // or stroke-inverted). Use those in dark mode instead of inverting the // light SVG via CSS — `dark:invert` mangles full-colour logos // (Google's primary palette, LlamaIndex's gradient, CrewAI's brand). const PROVIDERS: { name: string; logo: string; logoDark?: string }[] = [ { name: 'Anthropic', logo: '/images/providers/anthropic-logo.svg', logoDark: '/images/providers/anthropic-logo-dark.svg', }, { name: 'OpenAI', logo: '/images/providers/openai-logo.svg', logoDark: '/images/providers/openai-logo-dark.svg', }, { name: 'Vercel AI', logo: '/images/providers/vercel-logo.svg', logoDark: '/images/providers/vercel-logo-dark.svg', }, { name: 'Google', logo: '/images/providers/google-logo.svg' }, { name: 'LangChain', logo: '/images/providers/langchain-logo.svg', logoDark: '/images/providers/langchain-logo-dark.svg', }, { name: 'CrewAI', logo: '/images/providers/crewai-logo.svg' }, { name: 'LlamaIndex', logo: '/images/providers/llamaIndex-logo.svg' }, { name: 'Mastra', logo: '/images/providers/mastra-logo.svg', logoDark: '/images/providers/mastra-logo-dark.svg', }, ]; const CLIENTS: { name: string; logo: string; h: number }[] = [ { name: 'Claude', logo: '/images/clients/claude.svg', h: 20 }, { name: 'Codex', logo: '/images/clients/codex.png', h: 20 }, { name: 'Cursor', logo: '/images/clients/cursor.svg', h: 20 }, { name: 'Windsurf', logo: '/images/clients/windsurf.svg', h: 20 }, { name: 'OpenClaw', logo: '/images/clients/openclaw.svg', h: 20 }, ]; /** * Welcome-page audience selector — surfaces the three ways into Composio. * "Build with the SDK" gets the full width of the top row and a strip of * provider logos showing which frameworks ship first-class support; the * two non-developer surfaces (For You + CLI) sit below in a 2-col row. */ export function HomeSurfaces() { return (
{/* Full-width Developers card */}
); } function SurfaceCard({ eyebrowIcon, eyebrow, title, description, href, external, spanFull, extra, }: { eyebrowIcon: ReactNode; eyebrow: string; title: string; description: string; href: string; external: boolean; spanFull?: boolean; extra?: ReactNode; }) { const externalProps = external ? { target: '_blank' as const, rel: 'noopener noreferrer' } : {}; return (
{eyebrowIcon} {eyebrow}

{title}

{description}

{extra} ); } const CLI_INSTALL_COMMAND = 'curl -fsSL https://composio.dev/install | bash'; function CliInstall() { const [copied, setCopied] = useState(false); function handleCopy(e: MouseEvent) { // The whole card is wrapped in a — keep this click from // navigating to /docs/cli. e.preventDefault(); e.stopPropagation(); navigator.clipboard.writeText(CLI_INSTALL_COMMAND).then(() => { setCopied(true); window.setTimeout(() => setCopied(false), 1500); }); } return (
$ {CLI_INSTALL_COMMAND}
); } function ClientStrip() { return (
{CLIENTS.map((c) => ( {c.name} ))}
); } function ProviderStrip() { return (
{PROVIDERS.map((p) => (
{p.logoDark ? ( <> {p.name} ) : ( {p.name} )} {p.name}
))}
); }