Mohamed Abdelwahab
Mohamed Abdelwahab — photography archive
A wedding photographer's work does not want to sit in a grid of equal squares.
Designed, built, tested and self-hosted
The idea
Most photographer portfolios are a uniform masonry grid — every image the same weight, scroll until you stop. That flattens a body of work that has range in it, and it makes the site interchangeable with every other photographer's.
So the archive scrolls horizontally instead, images vary in scale, and moving between pages is a cream sweep rather than a blank flash. The hero carries film grain. The intent throughout was that the site should feel like it was made for this photographer specifically, not generated for a category.
Motion as the structure
GSAP with ScrollTrigger drives the reveals; Lenis smooths scrolling on desktop and is disabled on touch, where it fights the platform's own inertia rather than improving on it.
Page transitions were the piece worth spending real time on. An instant navigation reads as a page break; the cream sweep makes the archive feel continuous — one artifact you're moving through rather than a set of documents.
Tested and self-hosted
Vitest for units, Playwright against a production build for the flows that matter — the ones where a broken transition would strand you on a half-rendered page.
Deployed to my own Linux VPS behind Caddy with systemd supervising, deploying from GitHub as the source of truth.
Stack
- Next.js
- React
- TypeScript
- GSAP
- Lenis
- Tailwind
- Vitest
- Playwright