diff --git a/apps/sim/app/(landing)/blog/[slug]/page.tsx b/apps/sim/app/(landing)/blog/[slug]/page.tsx index 18572123ef8..2333ddb67a8 100644 --- a/apps/sim/app/(landing)/blog/[slug]/page.tsx +++ b/apps/sim/app/(landing)/blog/[slug]/page.tsx @@ -161,7 +161,7 @@ export default async function Page({ params }: { params: Promise<{ slug: string

{p.title}

-

+

{p.description}

diff --git a/apps/sim/app/(landing)/blog/page.tsx b/apps/sim/app/(landing)/blog/page.tsx index 591dbebd370..9bae1dd8aea 100644 --- a/apps/sim/app/(landing)/blog/page.tsx +++ b/apps/sim/app/(landing)/blog/page.tsx @@ -110,7 +110,7 @@ export default async function BlogIndex({

Latest from Sim

-

+

Announcements, insights, and guides for building AI agent workflows.

@@ -152,7 +152,7 @@ export default async function BlogIndex({

{p.title}

-

+

{p.description}

@@ -191,7 +191,7 @@ export default async function BlogIndex({

{p.title}

-

+

{p.description}

diff --git a/apps/sim/app/(landing)/components/footer/footer.tsx b/apps/sim/app/(landing)/components/footer/footer.tsx index 4cc34914e88..6cd9c3f7f3e 100644 --- a/apps/sim/app/(landing)/components/footer/footer.tsx +++ b/apps/sim/app/(landing)/components/footer/footer.tsx @@ -63,10 +63,8 @@ const INTEGRATION_LINKS: FooterItem[] = [ { label: 'Linear', href: 'https://docs.sim.ai/tools/linear', external: true }, { label: 'Airtable', href: 'https://docs.sim.ai/tools/airtable', external: true }, { label: 'Firecrawl', href: 'https://docs.sim.ai/tools/firecrawl', external: true }, - { label: 'Pinecone', href: 'https://docs.sim.ai/tools/pinecone', external: true }, { label: 'Discord', href: 'https://docs.sim.ai/tools/discord', external: true }, { label: 'Microsoft Teams', href: 'https://docs.sim.ai/tools/microsoft_teams', external: true }, - { label: 'Outlook', href: 'https://docs.sim.ai/tools/outlook', external: true }, { label: 'Telegram', href: 'https://docs.sim.ai/tools/telegram', external: true }, ] diff --git a/apps/sim/app/(landing)/components/landing-faq.tsx b/apps/sim/app/(landing)/components/landing-faq.tsx index 435d0ca8e90..8b17bff4793 100644 --- a/apps/sim/app/(landing)/components/landing-faq.tsx +++ b/apps/sim/app/(landing)/components/landing-faq.tsx @@ -1,6 +1,7 @@ 'use client' import { useState } from 'react' +import { AnimatePresence, motion } from 'framer-motion' import { ChevronDown } from '@/components/emcn' import { cn } from '@/lib/core/utils/cn' @@ -15,46 +16,67 @@ interface LandingFAQProps { export function LandingFAQ({ faqs }: LandingFAQProps) { const [openIndex, setOpenIndex] = useState(0) + const [hoveredIndex, setHoveredIndex] = useState(null) return ( -
+
{faqs.map(({ question, answer }, index) => { const isOpen = openIndex === index + const isHovered = hoveredIndex === index + const showDivider = index > 0 && hoveredIndex !== index && hoveredIndex !== index - 1 return (
+
- {isOpen && ( -
-

- {answer} -

-
- )} + + {isOpen && ( + +
+

+ {answer} +

+
+
+ )} +
) })} diff --git a/apps/sim/app/(landing)/components/navbar/components/product-dropdown.tsx b/apps/sim/app/(landing)/components/navbar/components/product-dropdown.tsx new file mode 100644 index 00000000000..fdfb88097fb --- /dev/null +++ b/apps/sim/app/(landing)/components/navbar/components/product-dropdown.tsx @@ -0,0 +1,149 @@ +import type { ComponentType, SVGProps } from 'react' +import Link from 'next/link' +import { + AgentIcon, + ApiIcon, + McpIcon, + PackageSearchIcon, + TableIcon, + WorkflowIcon, +} from '@/components/icons' + +interface ProductLink { + label: string + description: string + href: string + external?: boolean + icon: ComponentType> +} + +interface SidebarLink { + label: string + href: string + external?: boolean +} + +const PLATFORM: ProductLink[] = [ + { + label: 'Workflows', + description: 'Visual AI automation builder', + href: 'https://docs.sim.ai/getting-started', + external: true, + icon: WorkflowIcon, + }, + { + label: 'Agent', + description: 'Build autonomous AI agents', + href: 'https://docs.sim.ai/blocks/agent', + external: true, + icon: AgentIcon, + }, + { + label: 'MCP', + description: 'Connect external tools', + href: 'https://docs.sim.ai/mcp', + external: true, + icon: McpIcon, + }, + { + label: 'Knowledge Base', + description: 'Retrieval-augmented context', + href: 'https://docs.sim.ai/knowledgebase', + external: true, + icon: PackageSearchIcon, + }, + { + label: 'Tables', + description: 'Structured data storage', + href: 'https://docs.sim.ai/tables', + external: true, + icon: TableIcon, + }, + { + label: 'API', + description: 'Deploy workflows as endpoints', + href: 'https://docs.sim.ai/api-reference/getting-started', + external: true, + icon: ApiIcon, + }, +] + +const EXPLORE: SidebarLink[] = [ + { label: 'Models', href: '/models' }, + { label: 'Integrations', href: '/integrations' }, + { label: 'Changelog', href: '/changelog' }, + { label: 'Self-hosting', href: 'https://docs.sim.ai/self-hosting', external: true }, +] + +function DropdownLink({ link }: { link: ProductLink }) { + const Icon = link.icon + const Tag = link.external ? 'a' : Link + const props = link.external + ? { href: link.href, target: '_blank' as const, rel: 'noopener noreferrer' } + : { href: link.href } + + return ( + + +
+ + {link.label} + + + {link.description} + +
+
+ ) +} + +export function ProductDropdown() { + return ( +
+
+
+ + Platform + +
+
+ +
+ {PLATFORM.map((link) => ( + + ))} +
+
+ +
+ +
+
+ + Explore + +
+
+ + {EXPLORE.map((link) => { + const Tag = link.external ? 'a' : Link + const props = link.external + ? { href: link.href, target: '_blank' as const, rel: 'noopener noreferrer' } + : { href: link.href } + return ( + + {link.label} + + ) + })} +
+
+ ) +} diff --git a/apps/sim/app/(landing)/integrations/[slug]/components/template-card-button.tsx b/apps/sim/app/(landing)/integrations/[slug]/components/template-card-button.tsx index feb7f40a669..5fffa1121b6 100644 --- a/apps/sim/app/(landing)/integrations/[slug]/components/template-card-button.tsx +++ b/apps/sim/app/(landing)/integrations/[slug]/components/template-card-button.tsx @@ -2,13 +2,15 @@ import { useRouter } from 'next/navigation' import { LandingPromptStorage } from '@/lib/core/utils/browser-storage' +import { cn } from '@/lib/core/utils/cn' interface TemplateCardButtonProps { prompt: string + className?: string children: React.ReactNode } -export function TemplateCardButton({ prompt, children }: TemplateCardButtonProps) { +export function TemplateCardButton({ prompt, className, children }: TemplateCardButtonProps) { const router = useRouter() function handleClick() { @@ -17,11 +19,7 @@ export function TemplateCardButton({ prompt, children }: TemplateCardButtonProps } return ( - ) diff --git a/apps/sim/app/(landing)/integrations/[slug]/page.tsx b/apps/sim/app/(landing)/integrations/[slug]/page.tsx index 9927c35d1f0..35290f9e711 100644 --- a/apps/sim/app/(landing)/integrations/[slug]/page.tsx +++ b/apps/sim/app/(landing)/integrations/[slug]/page.tsx @@ -283,7 +283,7 @@ export default async function IntegrationPage({ params }: { params: Promise<{ sl } return ( - <> +