I rebuilt from scratch the website of Ti Kosmeo, the natural cosmetics and household products workshop brand run by Cécile BERREBI in Boulogne-Billancourt, just outside Paris. The previous site had run on WordPress since 2023. The need was twofold: a faster, clearer site for individuals and groups, and a cutover that would lose neither the rankings already earned nor the bookings in progress.
In pictures
The project in detail
The new site starts from a full design mockup, seven page templates for mobile and desktop, which I merged into one responsive page per route. It lists ten workshops filterable by theme, each with its own page, reviews and related suggestions, plus pages for children's birthdays, private events, gift cards, recipes and partners. The 45 reviews shown are real: I collected them from Google, Wecandoo and Funbooker with a scripted headless browser, then deduplicated them with an explicit rule based on the person and the visit date, never on text similarity.
Booking stays on Wecandoo: I kept the affiliate links identical so commission tracking did not change at cutover. The migration was handled as a full SEO project: 72 legacy sitemap URLs mapped, 55 permanent redirects in nginx, WordPress images rehosted, per-page metadata and complete legal pages. This is the method I apply to any website redesign: an indexed address is only replaced together with its redirect.
I then applied my performance playbook: images resized to WebP steps at build time, per page code splitting, a Leaflet map loaded only on approach, a lighter favicon. The mobile PageSpeed score of the home page went from 62 to 90, workshop pages from about 70 to 93, and accessibility from 94 to 100.
A small FastAPI service relays private event, birthday and gift card requests to Brevo, with a honeypot field, escaped input and rate limiting. The site is deployed in three environments (development, staging and production) behind Traefik, the first two kept out of search indexes by HTTP header, with continuous integration checking lint, tests and typing on every merge request: 62 tests on the site and 11 on the API.




