Skip to main content
Clever Ops

Orbit Satellites

Two or three tiny satellites orbit the pointer on offset periods, trailing slightly on fast moves and tightening formation over links and buttons, affordance as gravity.

Preview & code

Loading Orbit Satellites preview

Installation

pnpm dlx shadcn@latest add @cleverui/cursor-orbit-satellites

Requires the @cleverui registry in your components.json, a one-off, two-line setup.

Usage

tsx
import { CursorOrbitSatellites } from '@/components/ui/cursor-orbit-satellites'
Exampletsx
import { CursorOrbitSatellites } from '@/components/ui/cursor-orbit-satellites'

export default function CursorOrbitSatellitesDemo() {
  return (
    <div className="relative min-h-[560px] overflow-hidden">
      <CursorOrbitSatellites />
      <div className="relative mx-auto flex min-h-[560px] max-w-3xl flex-col items-center justify-center px-6 py-24 text-center">
        <p className="font-mono text-[11px] uppercase tracking-[0.2em] text-muted-foreground sm:text-xs">
          Spectacle · moons of the pointer
        </p>
        <h2 className="mt-4 text-4xl font-semibold tracking-tight text-balance sm:text-5xl">
          Affordance as gravity.
        </h2>
        <p className="mt-4 max-w-md text-sm leading-relaxed text-muted-foreground">
          Three satellites on non-repeating periods. Hover a control and the formation
          tightens, interactivity announced by orbit alone.
        </p>
        <div className="mt-10 flex flex-wrap items-center justify-center gap-3">
          <a
            href="#orbit-demo"
            className="rounded-lg border border-border/60 bg-card px-5 py-2.5 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-hidden"
          >
            Pull them in
          </a>
          <button
            type="button"
            className="rounded-lg border border-border/60 bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-hidden"
          >
            Lock formation
          </button>
        </div>
      </div>
    </div>
  )
}

API reference

CursorOrbitSatellites accepts the following props.

PropTypeDefaultDescription
countnumber3satellites in formation (2-3)
baseRadiusnumber26orbit radius at rest in px
targetSelectorstring'a, button, [data-orbit]'hovering these tightens and speeds the formation

…plus everything from React.HTMLAttributes<HTMLDivElement>: className, event handlers, aria attributes and the rest pass straight through.

Frequently asked questions

How do I install the Orbit Satellites component?

Register the @cleverui registry in your components.json ("@cleverui": "https://cleverops.com.au/r/{name}.json"), then run `npx shadcn@latest add @cleverui/cursor-orbit-satellites`. The shadcn CLI copies the source into your project, you own the code from that point. You can also copy the source directly from this page.

What dependencies does Orbit Satellites require?

Orbit Satellites uses motion on top of React and Tailwind CSS. You don't need to install it manually, the shadcn CLI resolves and installs npm dependencies automatically when you add the component.

Can I theme Orbit Satellites to match my brand?

Yes. The component is styled entirely with Tailwind utilities over standard design tokens (primary, background, muted, border), so it inherits your existing shadcn/ui theme automatically. Change your CSS variables and the component follows, no source edits needed for palette, radius, or fonts.

Want this built for you?

CleverUI is built by the Clever Ops web team. If you'd rather ship a hand-coded, fast, custom website than assemble one, we build them for Australian businesses every week.

Explore web development services