Cilia
A ribbed form on a curved axis, with the rib tips lit.
- Price
- USD 10, all access
- Built with
- Plain React
A seed head on the golden angle, with a pulse moving outward.
Vogel's spiral: radius by the square root, angle by 137.5 degrees. A ring of light travels out through the seeds.
The full source and any assets are delivered after checkout. One payment of USD 10 unlocks every pro element. The start of the file is shown here.
"use client";
/**
* Phyllotaxis — a seed head on the golden angle, with a pulse running
* out through the spirals. Morphology 04. Ships with PointPlotter.tsx.
*
* <Phyllotaxis ink="#f7efe3" accent="#e4a256" points={9000} speed={1} />
*/
import { PointPlotter, type PlotFn } from "./PointPlotter";
export type PhyllotaxisProps = { ink?: string; accent?: string; points?: number; speed?: number; className?: string };
const { cos, sin, sqrt, PI } = Math;
const GOLDEN = PI * (3 - sqrt(5));
const plot: PlotFn = (i, n, t) => {
// Vogel's spiral: r grows with √i, angle steps by the golden angle.
const scaleR = 185 / sqrt(n);
const breathe = 1 + 0.035 * sin(t * 0.8 + i * 0.004);
const r = scaleR * sqrt(i) * breathe;
const theta = i * GOLDEN + t * 0.12 + 0.15 * sin(t * 0.3) * (r / 185);
if (r > 188) return null;
const x = 200 + r * cos(theta);
const y = 200 + r * sin(theta);
// A ring of accents travelling outward through the seeds.
const ripple = cos(i * 0.02 - t * 2.2);
return [x, y, ripple > 0.985];
};"use client";
/**
* Point Plotter — the engine under the Morphology series.
*
* No dependencies. Every organism in the series is a function
* `plot(i, n, t, pointer)` that places the i-th of n points in a
* 400×400 space and says whether it is an accent point. This file
* draws those points, tens of thousands a frame, on a 2D canvas: faint
* ink for the body, a brighter colour with a soft glow for the
* accents, and the formula as a caption in the corner.
*
* Ships with every organism. You should not need to edit it.
*/
import { useEffect, useRef } from "react";
export type Pointer = { x: number; y: number; active: boolean };
/**
* [x, y, accent, weight?] in 400×400 space, or null to skip the point.
* `weight` (0–1) dims the point — used for depth on the 3D forms.
*/
export type PlotPoint = readonly [number, number, boolean] | readonly [number, number, boolean, number] | null;
export type PlotFn = (i: number, n: number, t: number, pointer: Pointer) => PlotPoint;
export type PointPlotterProps = {
plot: PlotFn;
points: number;Inside
Install
No packages to install.
2 files: Phyllotaxis.tsx, PointPlotter.tsx.
A ribbed form on a curved axis, with the rib tips lit.
A jellyfish with a pulsing bell and sixteen trailing tentacles.
A radial shell with a lattice of pores.
What you get, what it runs on, what it costs to run and what the licence allows.
One React component file per element, plus any shader or asset files it needs. Members of a series also get the small engine file they share. Free elements are copied from the page. Pro elements are a download after one payment of USD 10, which unlocks all of them. Each element imports only public packages, which are listed on its page.
React 19. The 3D and shader elements use three.js through React Three Fiber. The 2D ones use Framer Motion or plain CSS and canvas. They work in Next.js, Vite, Remix and any other React setup. Framer and Webflow users can embed an element as a code component.
Yes. Every element exposes its look as props, the same controls shown on its page. Anything beyond the props is yours to edit in the file.
Yes. Every element page has a Save frame button that downloads the current frame as a PNG at the size shown. Make the browser window large for a print-size still. For motion, record the page or ask us for a rendered clip. The licence covers web, print, decks and video, for your own work and your clients' work.
The 3D elements mount when they scroll into view and unmount when they leave, so an element off screen costs nothing. The shader backgrounds cost a fraction of a video background. The 2D elements are a few kilobytes.
Free elements are MIT. Use them anywhere, including client work. Pro elements are licensed to you for unlimited projects of your own and your clients'. You may not resell or redistribute the source itself.
Yes. A custom element, such as your product in 3D or a branded shader, is a small project quoted up front. All-access members are asked first about what we build next.