← work
The site's overview: a spiral of coloured image panels turning in 3D under a veil, and on the right “Hey! I'm Tony Moura Salgueiro.”

● personal project▸ 03ASep 2026 — present

This portfolio, a retrospective

role
Design, art direction and architecture
tools
  • Next.js
  • React Three Fiber
  • three.js
  • GSAP
  • TypeScript
  • Python
  • Vercel

The idea

A portfolio designed as an exhibition retrospective: you walk through it, and the career and the professional and personal projects hang there in order. The reference is the Guggenheim's spiral ramp: you start from the present, at the top, and walk down through time. The ramp loops endlessly, and a separate room, the gallery, holds the artistic practice: photography, WebGL experiments, 3D renders.

The site is a camera

Every mechanic is a photographer's gesture. You aim on the ramp: the cursor is a rangefinder, the image doubles with speed and comes back into register when you stop. You shoot by opening a piece: the transition is a shutter. You develop in the gallery: the frames are latent, and the cursor reveals them as it passes. Even loading counts up its percentages like a darkroom.

The loading screen: a large “39%” in wide type and the line “création du monde…”, on a dark ground.
Loading, from 0 to 100%.
Walking the spiral: a curved purple panel facing the camera, framed by the viewfinder's brackets, the mini-helix on the left and the piece's label at the bottom right.
The walk: the viewfinder settles on a piece.
The gallery: a contact sheet of frames on a safelight-red ground, some developed in colour, others still pale, with their film-edge numbers in coral.
The gallery, a contact sheet the cursor develops (here with the demo content, like the other captures).

Art direction

A warm black (#141210), a warm white (#F4F1EC) and a single coral accent (#E9554F), the safelight's and the grease pencil's, once per screen. The light theme is cream photographic paper, and the site follows the hour: light from 8 am to 7 pm, dark after, until you choose. Titles are set in Prototype, text in Geist, labels in Geist Mono, over a living ground that ripples under film grain.

The overview in the light theme: the spiral of panels on a cream ground, and the title in black.
The light theme, on photographic paper.

The grammar is photographic down to the details: film-edge inventory numbers (▸ 12A), “latent” images while loading, a 404 page as a “fogged frame”.

Architecture

A Next.js static export, with the 3D scene in React Three Fiber. The WebGL canvas lives in the root layout and is never destroyed: changing page only swaps the HTML, the scene and its textures stay. Animations run in the render loop, never through React renders. Content is YAML validated by Zod at build time, and a Python pipeline encodes each image in AVIF and WebP at several sizes, with its latent preview, dominant colour and EXIF data.

The site's chain: the content folder (YAML and media under Git LFS), written by the local editor, goes through the Python pipeline, which produces the manifest and its types; Next.js turns it into a static export with a persistent 3D canvas, checked in CI before Vercel publishes it.

Content never touches the code: adding a piece means adding a folder. A local editor does it all without files or a command line: writing in French and English, dropping images, composing the narrative as blocks, and seeing the real result before publishing.