Skip to content
Black FridayBlack Friday launch price: Lifetime $149 until 30 Nov. Regular price $299 from 1 Dec.ends in 15d 03:13:37Get Lifetime →
loopkit
proNew301 lines · framer-motion, three

Hero Particle Globe

A data globe that spins while you read. A split hero: copy and two CTAs on one side, a three.js point-cloud globe with a faint wireframe shell and orbiting data arcs on the other.

Use it for
Infrastructure, logistics or any product whose pitch is 'everywhere at once' — global network, worldwide coverage, multi-region.
Themes
Light + dark
License
Commercial use
Live
Global · Realtime

One network, every region

A rotating data globe for products that live everywhere at once: infra, logistics, or a worldwide user base.

tsx
"use client";

import * as React from "react";
import { motion, useReducedMotion } from "framer-motion";
import { cn } from "@/lib/utils";

function useReducedMotionSafe() {
  const prefersReduced = useReducedMotion();
  const [mounted, setMounted] = React.useState(false);
  React.useEffect(() => setMounted(true), []);
  return mounted ? !!prefersReduced : false;
}

/**
 * Split hero: copy on the left, a three.js point-cloud globe with a wireframe
 * shell and a few orbiting data arcs on the right. three.js is imported lazily
 * so it never blocks first paint, and the WebGL context is fully released on
 * unmount.
 */

export interface HeroParticleGlobeProps {
  eyebrow?: string;

The rest is in Pro.

Full source, the rebuild prompt and registry install unlock with Pro or Lifetime.

Get Pro

How it behaves

  • →three.js is imported lazily inside an effect; ~1400×density points are distributed evenly on a sphere surface (golden-ratio-free uniform sampling) and rendered as THREE.Points.
  • →A low-opacity icosahedron wireframe sits just outside the point cloud for a 'globe shell' read; up to 7 quadratic-bezier arcs connect random surface points and fade in and out on a loop when arcs is on.
  • →The whole group auto-rotates at speed; moving the pointer over the globe adds a small parallax tilt that eases back when the pointer leaves.
  • →Colours (ink for points/wireframe, signal/info for arcs) are read from CSS custom properties and refreshed on every .dark class toggle.
  • →If the WebGLRenderer can't acquire a context, the globe is replaced by a static dashed-circle placeholder instead of an empty box.
  • →Render loop pauses off-screen and when the tab is hidden; prefers-reduced-motion draws one static frame.
  • →On unmount: cancels the frame, disposes every geometry/material, calls renderer.dispose() and renderer.forceContextLoss(), and removes the canvas — so dozens of library-card instances never leak contexts.

Accessibility

  • ✓The globe canvas (or its fallback) is aria-hidden; only the heading, copy and two real <a> CTAs are exposed to assistive tech.
  • ✓Heading is a single <h1>; layout stacks to a single readable column under 1024px.
  • ✓CTAs keep the design system's visible focus ring.
  • ✓Honours prefers-reduced-motion.