
Case study
Pinelab.studio
A multi-tenant platform for small web shops
My name is Martijn and I have been a software developer for about 7 years now. I started as Java developer, but later moved towards Node.js with Typescript. I recently started my own company, Pinelab, where I specialize in helping small businesses with their online presence, mainly focussing on e-commerce.

Most of my clients need a small and easy to work with webshop and almost never need any special features. Instead of re-implementing the same shop over and over again, I decided it is easier to have a single platform for all of these similar webshops. I created an ecommerce SaaS platform where it relatively easy to set up a shop for new clients: the same backend with all its features, and reusable front-end components. So, alot of features, relatively cheap, because they are shared amongst clients.
In my previous job, I worked with Node.js and GraphQL, so this is the preferred stack for me. Obviously, I was also looking for an e-commerce platform that supports multi-channel, to enable the multi-client setup of the platform. Vendure is the only platform meeting the requirements of Node.js, GraphQL and multichannel. I already had experience with TypeOrm, NestJS and Apollo Server, which I saw Vendure was using under the hood, so Vendure was the best pick for me.
For the Pinelab shop platform I created, I needed multiple channels and channel-based permissions, to prevent clients from accessing each others' data.
Besides that, I added other features to Vendure for the Pinelab shop platform:
- Storing assets on Google Cloud, because I run my platform on Google Cloud Run, which doesn’t have local filesystem available.
- Triggering webhooks based on Vendure events, to trigger rebuilds of the storefront.
- Exporting a tax overview for clients.
- Making stock levels publicly available for the storefront.
None of these features required me to touch the Vendure source code; everything could be implemented using the plugin system.
For the storefront I began with Angular, because I was familiar with it (and it felt a bit like using NestJS). Using the Vendure documentation it was very easy to implement the storefront against the GraphQL API.
I soon realized optimizing SEO was a bit of a struggle, so I moved to Gridsome, a Vue static page generator. Everytime a client updates their shop, a rebuild is triggered and all static pages are deployed to Netlify.
I will keep using Vendure for the Pinelab shop platform and also intend to use it for larger projects, because of its customizability. I try to publish every plugin and contribute to the Vendure source whenever there is time, to support this great open source project. Keep track of the progress and plugins on Pinelab.studio.