Components

Everything on this site, installable

The site is built from these, so what you install is what you are looking at. Every preview below is the real component running, not a picture of one.

Add the registry once

export CTA_REGISTRY=https://adamjurek.com/r/registry.json

Boot Loader

Scroll effects

No dependencies

A count to a hundred that stalls at ninety until what it is covering has actually arrived. Fills its parent, not the viewport.

Preview: A mark, a number climbing, and a rule filling

Reveal

Scroll effects

No dependencies

Fades and rises its children the first time they reach the viewport. Never un-reveals.

Preview: A card fading and rising into place

Scroll Spin

Scroll effects

No dependencies

Rotates its children with the page scroll, in a rAF callback rather than React state.

Preview: A mark turning as the frame scrolls

Smooth Scroll

Scroll effects

lenis

Mounts Lenis for the page and renders nothing. Respects reduced motion.

Preview: Nothing to see - it changes how the page scrolls

Typed Mark

Text effects

No dependencies

Types a word out one character at a time, cycling the syntax palette. No JavaScript, no state, and it runs with scripting off.

Preview: A name typing itself in nine colours

useScrollProgress

Scroll effects

No dependencies

How far one element has travelled up the viewport, 0 to 1, once per frame. Gated by an observer so an off-screen element costs nothing.

Preview: No UI - it hands you a number between 0 and 1

useScrollTurn

Scroll effects

No dependencies

Scroll position as a rotation, delivered once per frame. Drives a CSS transform or a three.js object, never React state.

Preview: No UI - it hands you an angle every frame

Accordion

Disclosure

No dependencies

details, stacked - every behaviour ships in the element, and items open independently on purpose.

Preview: Three rows, one open, chevrons turning

Archive

Containers

zod

A filterable grid with categories, subcategories and tags. Renders its own links through a callback so the router stays yours.

Preview: A grid of cards above a row of category filters

Aspect Ratio

Page structure

No dependencies

A box that keeps its shape and fills whatever is put in it. CSS aspect-ratio, as a prop.

Preview: A 16:9 frame holding an image to its crop

Card

Containers

No dependencies

Title, optional meta, arbitrary body. Heading level is a prop so the outline stays correct.

Preview: Two cards: one with meta, one as a link

Collapsible

Disclosure

No dependencies

One details, dressed - a sentence that opens, for prose rather than lists.

Preview: A line that opens into a paragraph

Context Menu

Overlays

react-dom

One menu, reachable by right-click, by long press, and by a button. Escape and arrow keys included.

Preview: A menu opening at the pointer with four actions in it

Desk Window

Overlays

No dependencies

A window you can drag, close and stack. Position is written to the element during a drag and to state only on release.

Preview: Two windows on a desk, one dragged in front of the other

Device

Scenes

No dependencies

A phone, a tablet or a laptop in CSS 3D, chosen by the stylesheet rather than by JavaScript, whose screen is a real scroll container with real controls in it.

Preview: The same screen drawn as all three machines

Dialog

Overlays

No dependencies

A native dialog driven by props: top layer, focus trap and Escape from the element, click-outside from here.

Preview: A titled box over a dimmed page

Dock

Page structure

No dependencies

A launcher, what is open, and a corner. Search opens upward and results are the consumer's to compute.

Preview: A dock with a launcher open above it

Folder Shelf

Containers

No dependencies

A desktop of folders that open into draggable windows, several at once, remembered between visits.

Preview: Folders on a desk with a window open over them