Skip to main content
All projects

Case study · 2026 · Web · Motion · WebGL

Nicola Chen.

A South Tyrolean filmmaker whose work lived in a flat template grid. We rebuilt the portfolio as a living surface — a barrel-lens WebGL grid of seventeen films you drag, lean into, and dive through, with a page-to-page transition that never cuts to black.

Visit site·WebGL lens-grid · cross-document transitions · 17 works

01 · The brief

Real footage, a grid that flattened it.

Nicola Chen shoots music videos, short films and road films across the Dolomites. The footage is the work — light, motion, place. The old site filed it into a static thumbnail grid that felt like a contact sheet, not a reel.

A filmmaker's portfolio shouldn't read like a catalogue. It should feel like an edit suite: dark, polychrome only where the image lives, and alive the moment you touch it.

02 · The surface

A grid you inhabit.

Seventeen works sit on a five-column lattice that repeats forever. Each tile is a Three.js plane rendered to a render-target, then warped by a barrel shader in post the lens breathes at the centre and opens at the edges, a camera's eye rather than an effect.

Drag carries inertia and modular wrap, so the surface never ends. Hover scales and brightens the tile under the lens; a click dives it toward the camera and opens the film. It reads as one continuous space, not a page of boxes.

03 · Direction

Monochrome UI, one amber like a key light.

Base#0B0F10
Lens#182025
Text#F3EFE9
Amber#E6A463
Switzer · Spline Sans Mono · one amber, polychrome footage only

AaAaAa

04 · The transition

No hard cut.

No

Grid film and back uses cross-document View Transitions: the browser snapshots both pages and composites them, so there is never a frame where neither exists. The white flash is gone by construction, not by patching.

Sharp accelerating in, soft decelerating out one symmetric motion language across the whole site. You fall into a film and rise back to the grid on the same curve, reversed.

05 · The work

Explore it yourself.

This is the live site's grid, running here. Drag to pan the lattice, hover to bring a tile under the lens, click to open a film on the real site.

Trascina per esplorare — clicca per aprire il progetto live

06 · Decisions

What the build turned on.

Barrel lens, in post

The fisheye is a fullscreen post-pass over a render-target — not baked into geometry — so raycasting and hover stay exact.

Infinite, not paginated

Modulo-wrapped offset means the grid never hits an edge; the work feels boundless instead of finite.

One amber

Monochrome chrome, colour only inside the footage. A single warm accent does the pointing.

Native, not fake-4K

Reels served at native resolution, stills re-extracted to true 4K — sharpness where the source allows it, honesty where it doesn't.

07 · Process

How it came together.

  1. 01ReconPulled the real footage and stills, mapped every work to a tile.
  2. 02AssetsRe-extracted stills to native 4K; cut clean poster frames.
  3. 03The gridBuilt the Three.js lattice + barrel post-pass, drag, inertia, wrap.
  4. 04The transitionWired cross-document View Transitions — no black, no flash.
  5. 05ShipReduced-motion fallbacks, mobile pan, 60fps on desktop.

08 · Outcome

What changed.

  • on one explorable surface
  • no hard cut between any two pages
  • stills re-extracted at native resolution
  • nicola-chen.vercel.app
Awear of Love
Next project

Awear of Love

View project
Start a project