Maison Ozaé brings together Fabrice LABIT, photographer, and Grégory CAUZOT, videographer, around wedding photography and film, in France and abroad. Their need: a portfolio that shows their stories large, loads fast on a phone and speaks to French and English speaking couples alike. I designed and built their website, maisonozae.eu, in two stages.
In pictures
The project in detail
The first version, launched in July 2025, was a Vite and React application exported as static files: one page per wedding story, a masonry gallery and a contact form. Over the following months I added the home video, films embedded in the story grid and photo galleries for weddings without video.
In September 2026 I rebuilt the site on TanStack Start with static prerendering, served by nginx. Every page exists in French and English with translated URLs, and the root sends visitors to their browser language. The site has 59 prerendered pages: about twenty wedding stories, one page per member of the duo, a services page and legal pages that name the host and every provider from a single source. The contact form goes through a small FastAPI service that relays messages to Brevo, with rate limiting. This new version is in acceptance testing; the first one stays online until it goes live.
The main challenge was performance on a site made almost entirely of photographs: nearly 4,000 source files. At build time, a script generates AVIF and WebP variants per width plus a blurred placeholder for each image. I moved those placeholders out of the JavaScript sent to the browser, fixed a srcset that duplicated its largest variant on 566 images, loaded the Adobe font without blocking rendering and computed which masonry photos appear first so they get priority. The mobile PageSpeed score of the home page went from 67 to over 80, the wedding pages from 70 to 81, and the simulated largest contentful paint was brought down to 4.1 seconds, with no loss of image quality.
SEO follows the same approach: a title and description per page, structured data, a sitemap generated from the pages actually built and an llms.txt file for answer engines. This is the kind of website redesign I run when the content is heavy: the design stays the client's, the work goes into what visitors and search engines actually receive.


