Skip to content
Business Agile
← Work
Web · Art project, photography · Oct 2026

FabArto

Sixty galleries published one at a time, as each model’s written release comes in.

fabarto.eu
FabArto home page, Fabrice LABIT’s portfolio

Lighthouse desktop · measured on 29 October 2026

99
Performance
98
Accessibility
100
Best practices
100
SEO
LCP
0.7 s
Largest Contentful Paint
CLS
0
Cumulative Layout Shift
TBT
0 ms
Total Blocking Time

FabArto is the art project of Fabrice LABIT, a Paris photographer for whom I also built the Maison Ozaé website. The domain spent eighteen months as a holding page while the work took shape: a full screen image, the project name, two links. Since October 2026, fabarto.eu is the portfolio it was waiting for: 60 galleries, 1414 photographs, in French and English, 130 prerendered pages served as static files.

In pictures

fabarto.eu
FabArto home page on desktop
The home page opens on the photographer’s triptych and his welcome text, before the grid of sixty galleries.
FabArto home page on mobile
On mobile the triptych becomes a single full screen image and the French to English switch stays in the header.
fabarto.eu
FabArto about page, studio section
The about page ends on the studio itself, as a mosaic, each photo opening in the site’s own viewer.
FabArto about page on mobile
On mobile the about page keeps the same column of text, the one where Fabrice explains his approach and his shoots.
fabarto.eu
FabArto age gate
The age gate is set by a CSS rule: with no answer, and even with no JavaScript, the site stays hidden.

The project in detail

The photographs arrive through a Nextcloud deposit Fabrice fills himself, one folder per model. The first version read the selection from his own export names: a file marked Instagram had already cleared a platform that forbids nudity, so it went on the site; a Patreon, HD or print export stayed out. The rule was elegant, and it was wrong.

Fabrice asked whether his galleries really carried all his photographs. Counting said no: 1193 frames published out of the 1414 in the deposit, 221 missing, and in one model’s gallery 11 shots showing out of 91. The filter is gone, every deposited file is converted, and an audit now matches the deposit against the gallery folder by folder. It leaves 1414 photographs for 1617 files, because one crop per frame is kept: that is a choice, and Fabrice can revisit it.

Ingesting is not publishing. Every gallery carries a flag that only lifts once the model’s written release is in hand: while it is down, the images sit in the build but the page shows its skeleton and says the release is awaited. That is the difference between a page kept out of search and a page that shows nothing: a noindex tag keeps a page out of search engines, it stops nobody from reading it.

At conversion each photograph becomes four files: AVIF and WebP, at 640 pixels for the grid and 1024 for the viewer, which makes 5630 files for 1414 photographs. Metadata is stripped on the way. Camera EXIF carries the GPS coordinates of the shoot and the owner’s name, and these are photographs of identifiable people: the location of the session is not ours to publish.

The age gate works without JavaScript: a CSS rule hides the site until the answer is given, so a visitor with scripts off sees nothing by default. The answer is remembered by the browser, and if storage is refused the visit stays open for the session rather than hitting a dead button. The site also carries the RTA label parental filters read. Measured on 29 October 2026, it scores 99 for performance on desktop Lighthouse, with its main paint at 0.7 second on a home page that loads sixty covers.

What was done

  1. 01

    60 galleries and 1414 photographs published, in French and English

  2. 02

    Publication locked gallery by gallery on the model’s written release

  3. 03

    Folder by folder audit: 221 missing frames found and published

  4. 04

    AVIF and WebP at two widths, EXIF metadata stripped at conversion

  5. 05

    Age gate that holds without JavaScript, RTA label for parental filters

  6. 06

    130 prerendered pages, 99 for performance on desktop Lighthouse

Frequently asked questions

How do you keep a nude photography site away from minors?

With an age gate that does not depend on JavaScript: a CSS rule hides the site until the answer is given. The site also carries the RTA label, which parental filters and operating systems read. None of this verifies an age; it makes access deliberate and flags the content to the tools that filter.

How do you know a site really publishes everything it was given?

By counting it. Our first sorting rule kept only the photographer’s Instagram exports: it published 1193 frames out of the 1414 deposited and left 221 out, 80 of them in a single gallery of 91. An audit that matches the deposit against the gallery folder by folder showed it in one pass. The rule went, the audit stayed.

What stops a photo from going online by mistake?

A per gallery lock, separate from ingesting the images. Until the model’s written release is in hand, the page exists, builds, holds the files, and shows nothing. Publishing becomes a deliberate act, one gallery at a time, not a side effect of depositing photos.

Other work

A project? Let's talk this week.

A short brief, an answer within 48 hours, a firm estimate after scoping.

Describe my project