# Integrations 2

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

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

## Install

```bash
npx shadcn@latest add https://diarmuradi.com/r/integrations-2.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`, `lucide-react`
- Registry items: `https://diarmuradi.com/r/styles/base-nova/badge.json`, `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 { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { Icons } from "@/components/ui/icons"
import { ArrowRightIcon } from 'lucide-react'

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

const columns: 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" }],
]

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-4 md:gap-8">
        <header className="flex flex-col items-center gap-2 text-center">
          <Badge
            variant="secondary"
            className="h-7 rounded-lg sm:h-8 sm:text-sm"
          >
            Integrations
          </Badge>

          <h1 className="text-3xl font-semibold tracking-tight text-balance sm:text-5xl">
            Your tools, unified
          </h1>
          <p className="text-sm text-muted-foreground sm:text-base">
            Connect effortlessly with industry-leading platforms. Zero
            configuration headaches, no unexpected costs.
          </p>
        </header>

        <ul
          aria-label="Connected tools"
          className="flex w-full max-w-2xl list-none items-center justify-center gap-1.5 sm:gap-3"
        >
          {columns.map((group) => (
            <li key={group[0].label} className="min-w-0 flex-1">
              <ul className="flex list-none flex-col gap-1.5 sm:gap-3">
                {group.map((integration) => (
                  <li key={integration.label}>
                    <IntegrationIcon>
                      <integration.icon aria-hidden="true" />
                    </IntegrationIcon>
                    <span className="sr-only">{integration.label}</span>
                  </li>
                ))}
              </ul>
            </li>
          ))}
        </ul>

        <Button
          variant="link"
          className="group/arrow p-0 text-xs sm:text-sm md:text-base"
        >
          View all integrations
          <ArrowRightIcon  data-icon="inline-end" className="transition-transform duration-150 group-hover/arrow:translate-x-0.5 group-active/arrow:translate-x-0.5" />
        </Button>
      </div>
    </section>
  )
}

function IntegrationIcon({
  children,
  className,
}: {
  children: React.ReactNode
  className?: string
}) {
  return (
    <div
      className={cn(
        "group/icon flex aspect-square w-full rounded-xl bg-card shadow-elevated-2xs transition-shadow duration-300 hover:shadow-elevated-sm active:shadow-elevated-sm sm:rounded-2xl md:rounded-3xl lg:rounded-4xl",
        className
      )}
    >
      <div className="m-auto size-1/2 *:size-full *:transition-transform *:duration-300 group-hover/icon:*:scale-110 group-active/icon:*:scale-110">
        {children}
      </div>
    </div>
  )
}
```
