Nocly.fr
Back to projects

Alexandre Bongiorno's photography portfolio

A bespoke editorial portfolio and its back-office for a photographer

Client
Alexandre Bongiorno
Period
2026
Tech stack
Next.js 16TypeScriptTailwind v4PostgreSQL (Neon)Drizzle ORMAuth.js

Context

Alexandre Bongiorno, a Marseille-based photographer (documentary, portrait, landscape), needed a portfolio worthy of his work — and one he could keep alive himself, without going back to a developer for every new series.

The challenge

Ship a polished editorial site and a back-office simple enough for a non-developer photographer to manage 75+ photos, their order and their layout on his own — all on a tight infrastructure budget.

Before

Work scattered across Instagram, no single place to show it properly, and a dependency on someone else for the smallest update.

After

A portfolio he runs himself: Alexandre adds, reorders and lays out his photos from a back-office, without touching a line of code.

The approach

Next.js 16 (App Router, Server Components, next/image for optimization), TypeScript and Tailwind CSS v4. An admin back-office protected by Auth.js v5: drag-and-drop upload, mouse reordering (dnd-kit), customizable sections. A deliberate architecture choice: images are stored on the server's own disk with a quota gauge rather than on a paid third-party service — for cost and data control. Persistence on Neon (serverless Postgres) via type-safe Drizzle ORM, with built-in visit and interaction tracking. Self-hosted deployment with a persistent volume.

Previews

Editorial homepage with a full-screen hero
Gallery: photo grid with a customizable layout
Back-office: drag-and-drop upload and photo reordering

Outcome

Delivered and live in production at bongiorno.nocly.fr, fully manageable by Alexandre himself. A client project taken end to end — from design to hosting — that showcases the product side (a CMS a non-technical user can actually run) as much as the technical side.

Key numbers

75+
photos managed from the back-office
100%
client autonomy over content
0
paid third-party storage service
5 Go
storage quota with a live gauge
ClientFull-stackCustom CMS