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.