NULL//SECTOR
> LOADING RENDERER · 000%
[ SYS://BOOT_OK ] sector 7 · node 0x2F

The page is the shader

A web page, laid out by the browser and drawn by the GPU. Hover the headline, drag through the frame, scroll hard. It's all still HTML.

h1 · GLShader displace · keepGLShader
core // click to overload X 0412 · Y 0233 · Z 0098

// Modules

0x01

Text on the GPU

Every glyph here is rasterised onto the canvas from the page's own CSS. Select it anyway: the DOM is still underneath.

v-gl · text · svg · border
0x02

Shaders per element

Any element takes a TSL shader. These cards scan in the first time you see them; the headline tears when you touch it.

GLShader · view
0x03

Post on the frame

Scroll hard and the frame splits into channels. Drag the mouse and it datamoshes behind you, then heals.

GLPostEffect · feedback
0x04

Holo // interactive

Hover me, press me, or tab here and hit Enter. A plain div with interactive: true hands all of it to its shader.

interactive · hover · press
0x05

Objects in the flow

three.js meshes anchored to layout boxes: lit, depth-sorted with the page, hit-tested. Click the core.

useGLObject · keepGLObject
0x06

Page transitions

Pages glitch into each other, and the outgoing page keeps running until the last block of it is gone.

GLTransitionEffect

Live feed

<video> · GLShader · useGLScroll
hover the feed to clear the signal

Data cloud

GLObjectEffect · feedback · 6k particles

// Protocol

01

Infiltrate

The DOM keeps the layout, the focus order and the screen reader. Nothing about the page changes.

02

Render

The canvas reads every element's computed style and draws it: corners, borders, shadows, text, images, video.

03

Exfiltrate

Then it's pixels: post effects, per-element shaders, 3D, transitions. Scroll on: these snap (v-snap).

Syslog

overflow: auto · useGLInView
03:14:00 [INF] handshake ok · 0x0
03:14:07 [ERR] cache poisoned · 0x9e3779
03:14:14 [DBG] glyph atlas grown · 0x3c6ef3
03:14:21 [WRN] node rerouted · 0xdaa66d
03:14:28 [INF] ice detected · 0x78dde6
03:14:35 [INF] packet dropped · 0x171560
03:14:42 [ERR] frame skipped: nothing changed · 0xb54cda
03:14:49 [DBG] damage rect merged · 0x538453
03:14:56 [WRN] trace evaded · 0xf1bbcd
03:15:03 [INF] uplink stable · 0x8ff347
03:15:10 [INF] shader compiled · 0x2e2ac0
03:15:17 [ERR] texture uploaded · 0xcc623a
03:15:24 [DBG] handshake ok · 0x6a99b4
03:15:31 [WRN] cache poisoned · 0x8d12df

Signals

overflow-x · corner-shape
ch.01 KR-07 · Seoul
ch.02 NX-12 · Lagos
ch.03 VK-03 · Reykjavík
ch.04 ZT-88 · São Paulo
ch.05 MQ-41 · Osaka
ch.06 LB-19 · Tallinn
ch.07 OR-66 · Nairobi
ch.08 JD-02 · Montréal
core temp 37°C NOMINAL
animate() · springs · tweens · back to CSS
end of line

Jack in

Leave a trace on the uplink. We read everything; we answer some of it.

Open uplink