# Integrations 9

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

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

## Install

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

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

## Dependencies

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

## Files

### `integrations.tsx`

```tsx
"use client"

import Link from "next/link"

import { FancyButton } from "@/components/ui/fancy-button"
import { Icons } from "@/components/ui/icons"

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

type IntegrationLayer = {
  label: string
  description: string
  rotation: number
  integrations: IntegrationItem[]
}

const layers: IntegrationLayer[] = [
  {
    label: "Create",
    description: "From a spark to a plan",
    rotation: -6,
    integrations: [
      { label: "OpenAI", icon: Icons.OpenAI },
      { label: "Gemini", icon: Icons.Gemini },
      { label: "Anthropic", icon: Icons.Anthropic },
    ],
  },
  {
    label: "Build",
    description: "Turn your ideas into work",
    rotation: 0,
    integrations: [
      { label: "Cursor", icon: Icons.Cursor },
      { label: "VS Code", icon: Icons.VisualStudioCode },
      { label: "React", icon: Icons.React },
    ],
  },
  {
    label: "Ship",
    description: "Put something great out there",
    rotation: 6,
    integrations: [
      { label: "GitHub", icon: Icons.GitHub },
      { label: "Next.js", icon: Icons.Nextjs },
      { label: "v0", icon: Icons.V0 },
    ],
  },
]

export function Integration() {
  return (
    <section
      aria-label="Integrations"
      className="@container mx-auto w-full max-w-6xl px-6 py-16 lg:py-24"
    >
      <div className="grid items-center gap-10 @3xl:grid-cols-2 @3xl:gap-12">
        <header className="flex max-w-md flex-col items-start gap-5">
          <p className="text-sm font-medium text-muted-foreground">
            From start to shipped
          </p>
          <h1 className="text-3xl font-semibold tracking-tight text-balance sm:text-5xl">
            Every layer.
            <br />
            Working together.
          </h1>
          <p className="text-base text-pretty text-muted-foreground">
            Your workflow has more than one chapter. Connect the tools that help
            you write each one.
          </p>
          <FancyButton
            size="lg"
            render={<Link href="#workflow-layers" role="link" />}
          >
            Connect every layer
          </FancyButton>
        </header>
        <ul
          id="workflow-layers"
          aria-label="Connected workflow"
          className="flex min-w-0 scroll-mt-8 flex-col gap-5 py-4 sm:gap-6 sm:px-4"
        >
          {layers.map(({ label, description, rotation, integrations }) => (
            <li
              key={label}
              style={{ transform: `rotate(${rotation}deg)` }}
              className="grid grid-cols-[1fr_auto] items-center gap-3 rounded-3xl bg-card p-4 shadow-elevated-md sm:rounded-4xl sm:p-6"
            >
              <div className="flex min-w-0 flex-col gap-3">
                <h2 className="text-lg font-semibold sm:text-2xl">{label}</h2>
                <p className="text-sm text-muted-foreground">{description}</p>
              </div>
              <ul className="flex shrink-0 items-center gap-2 sm:gap-4">
                {integrations.map(({ label, icon: Icon }) => (
                  <li key={label}>
                    <Icon className="size-7 sm:size-10" aria-hidden="true" />
                    <span className="sr-only">{label}</span>
                  </li>
                ))}
              </ul>
            </li>
          ))}
        </ul>
      </div>
    </section>
  )
}
```
