Puzzle Snap

Geometric pieces spin in from scattered positions and snap into a mark with sparks, then the wordmark slides out beside it

Installation
$ pnpm dlx shadcn@latest add @remocn/puzzle-snap

Usage

PuzzleSnap draws its own mark: a quarter circle, a dot, a wedge and a small rounded square on a 2×2 grid. Each piece starts far off at a seeded angle, drifts in while it spins, then gets yanked onto its slot over three frames and throws a ring of six sparks. When the last piece lands the whole mark punches, then slides left while your wordmark wipes in on its right.

import { PuzzleSnap } from "@/components/remocn/puzzle-snap";
 
export const LogoSting = () => (
  <PuzzleSnap primaryColor="#E5322D" secondaryColor="#FFFFFF">
    <span
      style={{
        fontSize: 104,
        fontWeight: 800,
        letterSpacing: "-0.04em",
        color: "#FFFFFF",
      }}
    >
      remocn
    </span>
  </PuzzleSnap>
);

Pass only the wordmark as children, not a full lockup: the mark is the sting's own drawing. Without children the mark stays centered and no slide happens. The mark is 20% of the shorter side of the composition (144px at 720p), and the wordmark keeps its own size. Positions come from Remotion's seeded random(), so the same seed always renders the same frames.

Timing

At 30 fps, speed={1} and square on:

FramesMotion
0–9Pieces launch one every 3 frames and fade in over 3 frames
0–22Each piece drifts in for 10 frames with an ease-out, then snaps the last stretch in 3 frames
13, 16, 19, 22Contact frames; each throws a spark ring that lasts 8 frames
22–38The mark punches from 108% and springs back to full size
24–35The mark slides from the center to the left
26–37The wordmark wipes in from the left

With square={false} there are three pieces and everything after the last contact starts 3 frames earlier. The docs preview runs 66 frames. speed scales the timeline.

Props
PropTypeDefaultDescription
children
ReactNode—Wordmark revealed to the right of the assembled mark. Without it the mark settles alone in the center
square
booleantrueInclude the small square piece; false builds the mark from three pieces
seed
number3Seeds the start angle, distance and spin of each piece
primaryColor
string"#E5322D"Quarter circle and square
secondaryColor
string"#FFFFFF"Dot and wedge
sparkColor
string"#FFFFFF"Spark lines at each contact
backgroundColor
string"#111111"Full-frame background
speed
number1Playback multiplier