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

FabArto

A holding page tooled like a full website, ready to become an artist's portfolio.

Lighthouse desktop · measured on 22 September 2026

86
Performance
100
Accessibility
100
Best practices
100
SEO
LCP
2.5 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 fabarto.eu site is currently a holding page: a full screen image, the project name and two links, to Patreon and Instagram. The need looked modest: hold the domain properly while the work takes shape, without having to rebuild everything the day the real site arrives. So it needed a light page today, built on foundations able to carry a full portfolio tomorrow, with its galleries and its search visibility.

In pictures

FabArto holding page on mobile
On mobile, the image recomposes and the Patreon and Instagram links stay visible.

The project in detail

I built the first version in April 2025 with Vite, React and Tailwind CSS, then put it behind Traefik in June 2025, on the same OVH server as maisonozae.eu. The page adapts to every screen, with text and image recomposing from phone to large display.

In September 2026 I migrated the page to the stack I use on all my sites: TanStack Start, Tailwind CSS v4 and TypeScript, with head tags managed per route. It will be the base of the future site, which can grow page by page with no change of tooling. It was also a chance to set up the full chain on a very small project: a Docker image served by nginx as a non root user, per environment deployment behind Traefik, a test of the home component and a verification pipeline on every merge request, split into three parallel jobs for lint, tests and type checking.

Several rules I now apply on every project come from this one. The route file generated by TanStack Router must be committed, otherwise the build breaks on a clean clone while passing locally. The nginx user must be explicitly attached to its group, or the process runs with the wrong identifier without any warning. And a pipeline that only checks the code after the merge comes too late: verification has to run before.

This project illustrates maintenance as I see it: even a single route page deserves reproducible deployment and automated checks, because that is what makes it safe to evolve. The day FabArto becomes a full portfolio, the foundation will already be there, tested and in production.

What was done

  1. 01

    Responsive holding page, full screen image and Patreon and Instagram links

  2. 02

    Migration to TanStack Start, base of the future site

  3. 03

    nginx Docker image running as a non root user

  4. 04

    Per environment deployment behind Traefik

  5. 05

    Lint, tests and typing checked on every merge request

Frequently asked questions

Why industrialise a simple holding page?

Because it will become a website: setting up deployment, tests and automated checks from the start costs little on a single page and avoids doing it in a hurry the day the site grows.

What is a merge request verification pipeline?

Checks run automatically before any code is merged, here lint, tests and type checking in three parallel jobs. An error is caught before it reaches the development branch, not after.

Where can a small static page be hosted reliably?

FabArto runs in an nginx Docker image on an OVH server, behind Traefik, which handles the HTTPS certificate. The same server hosts other sites, each isolated in its own container with its own deployment.

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