Swile is a rapidly-growing French startup which provides an all-in-one smartcard and app for employee benefits. In October 2021 the company raised $200 million at a valuation of over $1 billion, and counts Carrefour, Le Monde, Airbnb, Spotify, Red Bull and TikTok among its 25,000 corporate clients. We spoke to engineering manager Nino about how and why Swile built their e-commerce platform on top of Vendure.
Hello, I’m Nino Spiegel. I co-founded a startup about employee benefits called Sweevana that was acquired by Swile in July 2020. Since then, I have been the engineering manager of a team of 6 developers that are in charge of Swile’s e-commerce platform.
Swile is the next generation employee experience platform. We help companies develop a corporate culture that can engage every employee, by delivering a top-notch employee experience. An experience that is both tailor-made and user-centric. Swile has two core products:
the Swile Card - the ultimate employee card, which today brings together all employee benefits and soon all work-related expenses (salaries, expenses, expenses shared among colleagues, etc.)
the Swile App - an app conceived to improve employee experience on a daily basis, that facilitates communication between coworkers (messaging, organization chart, events, birthdays, money collections) while fostering employee engagement (surveys, pulse, e-NPS, etc.)
We needed to have an e-commerce platform, but we had to be able to customize it for a few main reasons. First of all, we needed to integrate partners' catalogs, that we call “vendors”. For instance, we have a big partnership to integrate a lot of french leisure parks, another one for concert & festival ticketing, etc. All of them need to be synchronized at least on a daily basis to have the same stock, but also the same product descriptions and variant details.
We also needed an e-commerce system that can handle multiple payment systems. For instance, you can choose to pay a €100 gift card with your €20 Christmas benefit from last year, €30 from the Christmas benefit from this year, €30 more from the cultural benefits you just received and complete the last €20 with your card. This results in 4 payments that need to be handled in a separate lifecycle and that we might want to refund individually if something goes wrong.
Finally, we needed a coherent stack, as we mainly use Typescript or Ruby for our backends, and we wanted to leverage our internal expertise in these areas.
Vendure is an exciting project and even though it was still in early development when we first looked at it, we were confident that it was going to be a viable option for the long term.
We had decided to use TypeScript, and we didn’t want to re-write all the standard e-commerce features (order management, payments, refunds, customers, products/variants system, tax rates, shipping zones and fees etc.). Vendure was the perfect match for us as it uses NestJS and includes most of the core functionality we needed.
We were confident that it was going to be a viable option for the long term... Vendure was the perfect match for us as it uses NestJS and includes most of the core functionality we needed.
We also wanted to customize a lot of logic as you can imagine regarding our challenges, and Vendure allowed us to add our custom business logic to its core quite seamlessly. This ability to extend the core functionality to add our custom business logic was a must-have for us.
The sheer scale of our catalog presented some challenges - we have around 10,000 products and over 40,000 product variants. Importing and indexing our catalog on a daily basis was a big pain for us, but we were able to come up with solutions which leveraged Vendure’s background job buffering and batching support.
We also needed a lot of custom logic depending on the vendors we integrated. For fulfillment for instance, if you buy 3 different products from 3 different vendors in an order, you have in fact 3 different fulfillments. Some are synchronous when you place the order, others are asynchronous and we need to poll our vendor until we have the ticket. Some are PDF files, others are just codes stored in string. The main goal is to make it transparent for the end user and handle partial refunds if some fulfillment fails. Vendure’s flexible payment and fulfillment support allowed us to meet these challenges.
We use React with TypeScript, and it is integrated in our main webapp (with our team life web app). Integrating it was really a good experience, especially thanks to the GraphQL interface.
We have a lot of plans! We want to integrate many more vendors and new ways to spend your benefits on web and mobile. We also want to expand to other countries, so we will be using the Channels features in the future!