At Bixoto we’re quite ambitious but we’re a small team so we have to make pragmatic choices for the technologies we use. For example, the website is using Magento under the hood, so we haven’t had the need to recode an e-commerce stack from the ground. Magento has its issues, but it has tons of plugins that saved us a lot of time, that we could allocate to do things that bring more value to the company.
We do not want to stop there, though: in July 2023 we replaced the whole Magento frontend with a SvelteKit app. This has tremendously improved the experience of our customers by making the website lighter and a lot faster: we were able to ditch Varnish and achieve the same level of performance without any page cache. It also made the developer experience simpler: it now takes it now takes a few seconds to release, instead of the two minutes at 100% CPU with Magento. We still use the checkout from Magento as it’s a complicated part to rewrite for now.
Under the hood, the new front is a SvelteKit app that uses data from ElasticSearch for the catalogue, and Strapi for the static content. We index products from Magento into ElasticSearch using a modified version of VsBridge (that we plan to open-source once we stabilize it). We configured the indexers as “index on save”, so every time a product is modified in Magento, it’s automatically mirrored into ElasticSearch.
How course, with hundreds of thousands of products from nearly a dozen of suppliers we don’t manage the products by hand; right from the beginning we used Python scripts to load products, run pricing, dispatch orders. This collection of scripts has since grown to a more generic framework that allow us to integrate a new supplier under a few days. We have a simple standalone app responsible for centralizing the product information from all suppliers, so at any point, for any product, we can know which suppliers have it in stock and at which price.
This system has a lot of moving parts, so we use the TIG stack for monitoring and alerting (Telegraf, InfluxDB, Grafana), in addition to Sentry and UptimeRobot. We monitor the performance metrics of the website using Google’s PageSpeed API and check them in Grafana. We use Mattermost’s web hooks to post Sentry errors and Grafana alerts in a channel dedicated to incidents. We have a centralized documentation repository that documents every aspect of the system so we can quickly react to issues. Each time we resolve a production issue, we log it in the documentation and write down what we have done to ensure it won’t happen again. Since we’re a remote-first company, writing things down is a very important part of the workflow.
There would be a lot of other things to mention, but this first post gives an overview of the technical stack behind the website. This will likely evolve in the future –and if you want to be part of it, we’re hiring!