2026 · Archive · Ad network
ProfitOn
A publisher-acquisition landing for an ad network, carrying a full-viewport React Three Fiber canvas driven by shaders written by hand.
- Next.js 15
- three.js
- React Three Fiber
- GLSL
- MUI 7
- GSAP
- routes, all statically prerendered
- 5
- shaders written by hand
- 2
- runtime request, and it is optional
- 1
- popups that explain the archive
- 7
What I walked into
An ad network’s landing with a full-viewport canvas, whose platform behind the calls to action no longer exists.
The question was how to keep the page honest without faking a working product.
What I changed, and why
Shaders by hand
gradient.frag and gradient.vert with glslify simplex noise compile through a raw-loader to glslify-loader webpack rule.
Static despite the canvas
All five routes stay statically prerendered while the canvas runs full viewport.
One request, and optional
The success-story cards load client-side and are skipped entirely when NEXT_PUBLIC_API_URL is unset.
Honest dead ends
The dead calls to action go through a provider with seven configured popups that explain what this archive is.
Rather than faking a working platform, the dead calls to action explain what this archive is.
Where it landed
The landing runs its hand-written shaders on a full-viewport canvas while all five routes are prerendered.
The one runtime request is optional, and every dead call to action says plainly what the archive is.