Empire Cloud
One connected operating layer
A free React integration section with accessible hub-and-spoke relationships and animated data beams.
Connected by design
Bring product, customer and delivery signals into one dependable workspace. Each connection stays visible, understandable and ready to act on.
Explore every integrationOne connected operating layer
<IntegrationBeamNetwork
title="Every tool, moving as one system"
description="Bring product, customer and delivery signals into one dependable workspace."
cta={{ label: "Explore every integration", href: "/components" }}
hub={{
label: "Empire Cloud",
description: "One connected operating layer",
}}
items={[
{
id: "stripe",
label: "Stripe",
description: "Payments and subscription events",
href: "/integrations/stripe",
},
{
id: "slack",
label: "Slack",
description: "Team alerts and approvals",
href: "/integrations/slack",
},
{
id: "github",
label: "GitHub",
description: "Commits, checks and releases",
},
{
id: "linear",
label: "Linear",
description: "Issues and delivery progress",
},
]}
/>Integration Beam Network is a free React integration section for Next.js, built with GSAP and styled with Tailwind. It places a product hub at the centre of four to eight integration cards, joins every relationship with a settled SVG path and sends short data packets along those paths in an outbound, inbound or alternating direction.
The heading, call to action, hub and integrations are ordinary static HTML, while the SVG is decorative and hidden from assistive technology. One scoped GSAP timeline animates stroke dash offsets and gives the destination a restrained acknowledgement. It pauses while fully offscreen or while the tab is hidden, and reduced motion creates no travelling packets or node scaling at all.
Add the @te registry to your components.json once:
{
"registries": {
"@te": "https://templateempire.io/r/{name}.json"
}
}Then install the component:
npx shadcn@latest add @te/integration-beam-networkimport { IntegrationBeamNetwork } from "@/components/integration-beam-network";
const integrations = [
{
id: "stripe",
label: "Stripe",
description: "Payments and subscription events",
href: "/integrations/stripe",
},
{
id: "slack",
label: "Slack",
description: "Team alerts and approvals",
href: "/integrations/slack",
},
{
id: "github",
label: "GitHub",
description: "Commits, checks and releases",
},
{
id: "linear",
label: "Linear",
description: "Issues and delivery progress",
},
];
export default function Page() {
return (
<IntegrationBeamNetwork
title="Every tool, moving as one system"
description="Bring product, customer and delivery signals together."
hub={{ label: "Empire Cloud", description: "One operating layer" }}
items={integrations}
direction="alternating"
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
| eyebrow | string | "Connected by design" | Introductory label rendered above the section heading. |
| title | string | required | Section heading, rendered as the single h2. |
| description | string | undefined | Optional supporting copy below the heading. |
| cta | { label: string; href: string } | undefined | Optional call to action rendered as a real anchor. |
| hub | { label: string; description?: string } | required | Central product node and its optional supporting copy. |
| items | { id: string; label: string; description: string; href?: string }[] | required | Four to eight integrations. Stable IDs own the React keys and connector relationships. |
| layout | "radial" | "split" | "radial" | Desktop network geometry. Both variants become a readable vertical network below 48rem. |
| direction | "outbound" | "inbound" | "alternating" | "outbound" | Direction travelled by the data packets. |
| pathCurvature | number | 0.36 | Connector bend, clamped from 0.1 through 0.8. |
| beamDuration | number | 2.4 | Seconds each packet takes to travel a connector, clamped from 1.2 through 8. |
| nodeSize | number | 56 | Integration mark diameter in CSS pixels, clamped from 40 through 88. |
| className | string | undefined | Additional classes merged onto the section root. |
Integration Beam Network exposes two Tier 3 colour tokens. --integration-network-line controls the settled relationship paths and defaults to --border. --integration-network-beam controls the travelling packet and falls back through the brand colour to --primary. Geometry and timing belong to the typed props in the playground, while content stays in your items and hub data:
:root {
--integration-network-line: var(--border);
--integration-network-beam: var(--color-brand-400, var(--primary));
}