Synthèse, home

Work

Dobrunia

More than ten years beside a creative studio: ceramics, classes, interior design. The site is a full personal e-commerce powered by Elara, Stripe included.

cliente-commerceElara

Role
Design, development, hosting, long-term maintenance.
Period
Over ten years
Stack
Rust (axum), PostgreSQL, Astro, Stripe, Playwright, axe
The dobruniadesign.com shop on desktop: the studio's logo, its menu (shop, classes, work, stockists, about, news, contact), collection filters and four hand-painted pieces photographed at a market in Nice and on the beach, each with its stock and price.

The brief

Dobrunia Design is a ceramics studio in Nice; its pieces are painted by hand. I have been developing its site for more than ten years. The current repository holds 575 commits since July 2019, when I rewrote the React front end as web components.

In 2026, the studio wanted to manage everything online: the shop, the classes, the limited editions and requests from professionals. In March, I moved the front end to Astro and replaced WordPress with a Rust API on PostgreSQL. By the end of March, Stripe payment worked and WordPress was retired.

In use

Since September 2026, the shop has been the home page, at the studio’s request. Each product has its variants and its stock. Orders ship by Colissimo, by weight, or are collected at the studio, with an invoice and a tracking link.

Classes have their calendar, with online booking and payment. The “duo” gift voucher gives, for each unit bought, a code valid for two seats. The seat, the voucher and the booking are recorded in a single transaction.

The site also offers limited editions, in quantity and in duration, and a form for professionals.

The “Réalisations” page: a grid of the studio's projects (Rustic pot, Bougies, Plaques en papier, Nouvelle vague, a terrazzo collection) under the Design, Décoration and Mise en scène filters.

Architecture

The Rust API, the Astro server and PostgreSQL run in three containers. Only Astro is exposed to the public. The API answers it, and each response is validated by a typed contract before it reaches a page.

Emails go out after the data is saved: a booking writes its messages to an outbox, in the same transaction, then a job sends them. Stock and invoice numbers are assigned in locked transactions. Each image is produced in WebP and AVIF, down to a 300 px thumbnail, and the browser loads the size it displays.

To leave WordPress, I wrote an exporter, a collector for the studio’s Etsy listings and a translation script, on a local model, for the English version.

A product page on a phone: the breadcrumb, a photo of a striped handmade mug above a pebble beach, gallery thumbnails and, at the bottom, a fixed bar with the price from 17,00 EUR, a cart button and “Acheter maintenant”.

Decisions

Measure, then fix. The home page grid loaded in a deferred island, and the browser discovered the first image late. I rendered it on the server, with a preload. In production, the mobile Lighthouse score went from 78 to between 92 and 99, and the main image display time (LCP) from 5.6 s to between 1.9 and 3.1 s.

Payment on the site. With Stripe Embedded Checkout, the customer pays on the site’s page. The amount paid is compared with the order total before validation, and a reconciliation catches missed Stripe notifications.

Checks on every push. In August 2026, I ran two full audits of the site and fixed their findings. Each push runs Rust static analysis, the tests, the dependency audit and the Playwright suite, with zero axe violations on public pages.

A simple back office. The back office is written in Astro, with classic forms. Its limits on complex screens shaped the design of Elara.

Today

dobruniadesign.com is live and takes its sales through Stripe. This is the code I extracted Elara from: authentication, media, the email outbox, the shop, classes and gift vouchers come from it.

A project in mind? Let's talk