Ship before lunch
A landing page your village dresses: one attribute, another look.
Components whose motion is the point. They read the village's motion: its durations, its spring, how far things travel and how intense the effects may be. Switch the village above and the same component moves differently, with no prop changed.
The same three items, revealed one after another. Each village sets its motion in its recipe.
Smooth ease-out, a short rise, a light spring.
Slower and floaty, a longer rise.
Exact: fades in place, no travel, no overshoot.
Springs that overshoot: things drop into place.
Motion components bring rasengan-motion with them. Put its head script in your template, so the page knows before its first paint whether to animate, and its provider around the app.
import { MotionProvider, MotionScript } from "@/lib/motion";
// In <head>: sets <html data-motion> to ready, final or off before the first paint.
<MotionScript />
// Around the app, once.
<MotionProvider>{children}</MotionProvider>Move the pointer here, over the buttons and the field.
A custom cursor that follows on the village's spring, wraps itself around buttons and links, and shows labels.
Images or cards in 3D (coverflow, ring, helix, sphere, stack, grid), moving between layouts, with drag, keys and a detail view.
An endless loop of logos, quotes or tags at a steady speed, with a pause button and only the copies it needs.
A number whose digits roll to their value, formatted for any locale: counters, prices, live stats.
A landing page your village dresses: one attribute, another look.
A curtain between pages or states (wipe, blinds, iris, fade) that works with any router and moves focus to the new heading.
Decrypting your village tokens
Text that decodes itself from random glyphs, letter after letter: on view, on hover, or when it changes.
A heading or a paragraph that appears word by word, letter by letter or line by line, timed by the village's motion.
Hello. I write your landing page, then I ship it.
Text typed with a natural rhythm, pausing after commas and full stops; several strings typed and deleted in turn.