Skip to content

All projects

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

  1. Shaders by hand

    gradient.frag and gradient.vert with glslify simplex noise compile through a raw-loader to glslify-loader webpack rule.

  2. Static despite the canvas

    All five routes stay statically prerendered while the canvas runs full viewport.

  3. One request, and optional

    The success-story cards load client-side and are skipped entirely when NEXT_PUBLIC_API_URL is unset.

  4. 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.