Embedded demo running · sandboxed iframe
01 · 2026 · w/ Mara Lind
Hafen Radio
Live waveform identity that reacts to the stream. WebAudio + GLSL.
Perf
98
A11y
100
BP
100
CLS
0.01
Lighthouse mobile · placeholder scores
Case note · the waveform shader
// hafen-radio/waveform.frag · 60 fps on a 2019 Android
uniform float uLevel[64];
void main() {
float i = floor(vUv.x * 64.0);
float h = uLevel[int(i)] * 0.8 + 0.05;
gl_FragColor = vec4(step(abs(vUv.y - .5), h * .5));
}