From d4199fe258d97040b5100f97ca80418c4c12777e Mon Sep 17 00:00:00 2001 From: Emir Karabeg Date: Fri, 10 Apr 2026 18:22:53 -0700 Subject: [PATCH 1/6] improvement(integrations, models): ui/ux --- apps/sim/app/(landing)/blog/[slug]/page.tsx | 2 +- apps/sim/app/(landing)/blog/page.tsx | 6 +- .../app/(landing)/components/landing-faq.tsx | 46 +- .../navbar/components/product-dropdown.tsx | 149 ++++ .../components/template-card-button.tsx | 10 +- .../(landing)/integrations/[slug]/page.tsx | 809 +++++++++--------- .../components/integration-card.tsx | 124 ++- .../components/integration-grid.tsx | 39 +- .../components/integration-icon.tsx | 4 +- .../integrations/data/integrations.json | 736 ++++++++-------- .../app/(landing)/integrations/data/types.ts | 2 +- apps/sim/app/(landing)/integrations/page.tsx | 103 ++- .../models/[provider]/[model]/page.tsx | 295 +++---- .../app/(landing)/models/[provider]/page.tsx | 250 +++--- .../components/model-comparison-charts.tsx | 268 ++++++ .../models/components/model-directory.tsx | 279 +++--- .../models/components/model-primitives.tsx | 127 ++- .../components/model-timeline-chart.tsx | 149 ++++ apps/sim/app/(landing)/models/page.tsx | 219 ++--- apps/sim/app/(landing)/models/utils.ts | 2 + apps/sim/blocks/blocks/apify.ts | 2 +- apps/sim/blocks/blocks/apollo.ts | 2 +- apps/sim/blocks/blocks/brandfetch.ts | 2 +- apps/sim/blocks/blocks/browser_use.ts | 2 +- apps/sim/blocks/blocks/clay.ts | 2 +- apps/sim/blocks/blocks/dagster.ts | 2 +- apps/sim/blocks/blocks/elevenlabs.ts | 2 +- apps/sim/blocks/blocks/enrich.ts | 2 +- apps/sim/blocks/blocks/firecrawl.ts | 2 +- apps/sim/blocks/blocks/fireflies.ts | 4 +- apps/sim/blocks/blocks/gong.ts | 2 +- apps/sim/blocks/blocks/grain.ts | 2 +- apps/sim/blocks/blocks/hunter.ts | 2 +- apps/sim/blocks/blocks/linkedin.ts | 2 +- apps/sim/blocks/blocks/reddit.ts | 2 +- apps/sim/blocks/blocks/sixtyfour.ts | 2 +- apps/sim/blocks/blocks/spotify.ts | 2 +- apps/sim/blocks/blocks/stagehand.ts | 2 +- apps/sim/blocks/blocks/x.ts | 2 +- apps/sim/blocks/blocks/youtube.ts | 2 +- apps/sim/blocks/types.ts | 5 +- apps/sim/providers/models.ts | 145 ++++ scripts/generate-docs.ts | 95 +- 43 files changed, 2378 insertions(+), 1528 deletions(-) create mode 100644 apps/sim/app/(landing)/components/navbar/components/product-dropdown.tsx create mode 100644 apps/sim/app/(landing)/models/components/model-comparison-charts.tsx create mode 100644 apps/sim/app/(landing)/models/components/model-timeline-chart.tsx 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/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 ( - <> +