Skip to content
Business Agile
Work
E-commerce · Ecological transition and DIY workshops · In progress

Eco-Actives

One headless e-commerce back end for two brands, with Stancer payments and exclusive workshop slots.

Key figures

brands served by one back end2
tests on the App and slot exclusivity10
webhook contract gaps fixed3
Saleor version in use3.20

Eco-Actives is Cécile BERREBI's company, based in Boulogne-Billancourt. It runs two brands: Eco-Actives, which supports businesses, non-profits and local authorities in their ecological transition, and Ti Kosmeo, which runs workshops where people make natural cosmetics and household products. Both brands sell workshops, gift cards and products. Rather than setting up two separate shops, I am building a single commerce back end that serves both.

The project in detail

Before choosing, I compared several open source options on real trials: Django Oscar in autumn 2024, then Saleor in early 2025. Saleor won for its GraphQL API, its native support for multiple sales channels and its App system, which lets a payment method or a business rule sit next to the platform without touching its core. The chosen version, Saleor 3.20, runs in containers with its dashboard, PostgreSQL and Redis. It has two channels, one per brand, sharing a single warehouse: each brand keeps its own catalogue and prices, and stock is entered once. A script imports the catalogue idempotently, so the environment can be rebuilt identically.

The hard part was a business rule. Cécile runs one workshop at a time: several workshops may be offered for the same slot, and as soon as one is booked, the others must disappear. This is also what makes private bookings possible, when a group books a whole workshop for a hen party or a team building event. Saleor's per-variant stock cannot express this exclusivity, so I placed it in a dedicated service inside a Saleor App written in FastAPI and covered by unit tests.

The same App handles payments through Stancer, a French payment provider, using its version 2 hosted payment page. I wrote it against the official OpenAPI specification rather than the narrative documentation. I validated the App installation and signed webhook verification against a real Saleor instance, which exposed three differences between the documented webhook contract and the actual behaviour, now fixed. The App also forwards quote requests to Brevo and picks the payment return URL according to the brand of the order.

The project is in progress and not yet deployed. The stack runs and is tested locally, with continuous integration running ruff, pytest and strict mypy on every merge request. The Eco-Actives catalogue is still provisional, live payments are waiting for a Stancer test account, and the ecoactives.fr front end is still to be built, following the Ti Kosmeo site already online.

What was done

  1. 01

    A single Saleor instance for two brands, with two sales channels and a shared warehouse

  2. 02

    Exclusive workshop slots handled by a dedicated service, outside Saleor stock

  3. 03

    Saleor App in FastAPI integrating Stancer v2 hosted payments

  4. 04

    Signed webhook verified against a real instance, three contract gaps fixed

  5. 05

    Idempotent catalogue import and ruff, pytest and strict mypy CI on every merge request

Frequently asked questions

Can one e-commerce back end run two brands?

Yes. For Eco-Actives, a single Saleor instance carries two sales channels, one per brand, sharing one warehouse: each brand has its own catalogue and prices, and stock is entered once.

How do you handle exclusive workshop slots in an online shop?

When one person runs every workshop, booking a workshop for a slot must remove the other workshops offered at the same time. This rule lives in a dedicated service connected to Saleor rather than in product stock.

Which French payment provider can be integrated with Saleor?

The Eco-Actives back end integrates Stancer, a French payment provider, through a Saleor App that creates a payment intent and sends the customer to Stancer's hosted payment page.

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