# Integrations 3

A shadcn/ui block from the [@diarmuradi](https://diarmuradi.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/diarmuradi/integrations-3).

- Page, with a live preview: https://shadcn.exchange/r/diarmuradi/integrations-3
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/diarmuradi/integrations-3-light-2ad8947eb8ec37e1.png
- Registry item: https://diarmuradi.com/r/integrations-3.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://diarmuradi.com/r/integrations-3.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `cn`
- Registry items: `https://diarmuradi.com/r/styles/base-nova/button.json`, `https://diarmuradi.com/r/styles/base-nova/icons.json`

## Files

### `integrations.tsx`

```tsx
"use client"

import { cn } from "cn"

import { Button } from "@/components/ui/button"
import { Icons } from "@/components/ui/icons"

type IntegrationItem = {
  label: string
  icon: React.ComponentType<React.HTMLAttributes<SVGElement>>
}

const integrations: IntegrationItem[] = [
  { icon: Icons.Cursor, label: "Cursor" },
  { icon: Icons.Gemini, label: "Gemini" },
  { icon: Icons.VisualStudioCode, label: "VS Code" },
  { icon: Icons.Grok, label: "Grok" },
  { icon: Icons.MicrosoftCopilot, label: "Copilot" },
  { icon: Icons.OpenAI, label: "OpenAI" },
  { icon: Icons.Replit, label: "Replit" },
  { icon: Icons.DeepSeek, label: "DeepSeek" },
  { icon: Icons.Ollama, label: "Ollama" },
  { icon: Icons.Windsurf, label: "Windsurf" },
  { icon: Icons.Anthropic, label: "Anthropic" },
  { icon: Icons.HumeAI, label: "Hume AI" },
  { icon: Icons.Shadcn, label: "shadcn/ui" },
  { icon: Icons.N8n, label: "n8n" },
  { icon: Icons.Cursor, label: "Cursor 2" },
]

export function Integration() {
  return (
    <section
      aria-label="Integrations"
      className="flex items-center justify-center px-4"
    >
      <div className="flex w-full max-w-5xl flex-col gap-6 md:gap-12 lg:flex-row-reverse lg:gap-12">
        <header className="flex shrink-0 flex-col gap-4 lg:max-w-sm">
          <h1 className="text-center text-3xl font-semibold tracking-tight text-balance sm:text-5xl lg:text-start">
            Tool Integrations
          </h1>
          <p className="text-center text-sm text-muted-foreground sm:text-base lg:text-start">
            Zero additional fees, unlimited potential - connect with your
            preferred tools and platforms effortlessly.
          </p>
          <Button
            variant="link"
            className="mt-auto self-center p-0 lg:self-start"
          >
            Access All Integrations
          </Button>
        </header>

        <ul className="grid w-full max-w-md list-none grid-cols-5 gap-2 self-center">
          {integrations.map((integration, index) => (
            <li key={integration.label}>
              <IntegrationIcon muted={index % 2 !== 0}>
                <integration.icon aria-hidden="true" />
              </IntegrationIcon>
              <span className="sr-only">{integration.label}</span>
            </li>
          ))}
        </ul>
      </div>
    </section>
  )
}

function IntegrationIcon({
  children,
  muted,
  className,
}: {
  children: React.ReactNode
  muted?: boolean
  className?: string
}) {
  return (
    <div
      className={cn(
        "flex aspect-square w-full rounded-2xl transition-shadow duration-300 sm:rounded-4xl",
        muted
          ? null
          : "bg-card shadow-elevated-2xs hover:shadow-elevated-sm active:shadow-elevated-sm",
        className
      )}
    >
      <div className="m-auto size-2/5 *:size-full">{children}</div>
    </div>
  )
}
```
