The portfolio is the product
One grammar, everywhere
Every content block on the site is an operator with a typed header: VIEW for live things, TXT for prose, DATA for facts, SYS for instruments. Cables connect them, and the dither field behind everything is generated by a visible chain of four SYS nodes — the same bg_01 → bg_04 chain is wired into this page, so turn the knobs and watch the field re-cook. Settings persist between visits.
There are two modes. PATCH is the spatial view you're probably in now. READ strips the boxes away and stacks everything as a clean document. Small screens and reduced-motion visitors get READ by default; nobody is forced to fight the metaphor.
Layouts are ASCII pictures
Node placement isn't hand-tuned pixel positions. Each page declares its network as an ASCII grid-areas sketch; a small resolver turns that into positions at runtime, snaps everything to the background dot grid, and pushes overlapping nodes apart when copy grows.
This page is placed by the system it's describing. Resize the window and watch it re-cook.
The cables are real
The wires aren't decoration anymore. Each link is a subscription on a small vanilla-JS message bus: on the homepage, the work index emits a selection, a post_fx node transforms it in transit (that's the INVERT chip), and the viewer renders whatever arrives. Every delivery sends a pulse down the cable that carried it — what you see drawn is what actually ran.
The same runtime owns every timer, listener and observer behind a page and tears them all down between navigations. Even the homepage's auto-cycle is a visible node now: a cycle_clock operator ticks the index, and hovering the index dims it.
There's no demo embed on this one. You're inside it. Things worth trying:
- P toggles PATCH / READ · the same content, two renderings
- DRAG any node by its header · the cables follow
- TAB opens operator search in patch mode · ⌘K works anywhere
- BG CHAIN right here on this page · noise, dither and palette for the whole site
- HOME INDEX select a project · the signal pulses index → post_fx → viewer, and hovering dims the cycle_clock
Next on the bench: container operators — one lazy-boot path for every embedded demo — and a signal monitor that live-prints the message bus, so you can watch this site think.
NEXT ▸ fast
the research platform behind the engine