Like most engineers, I’m always curious about the technology stack the companies I admire are built upon. We’ve had several people ask about what we use at Tidelift, so I thought it might be fun to share a bit about the technology decisions we’ve made on our journey so far and why we made them.
We’ve set up Tidelift to be fairly simple for our development team to both work on and operate. The web app has a single page app as the frontend and a Rails app as the backend.
The frontend is written using Vue.js and makes use of Bulma for styling. We also obviously use Babel and Webpack so that we can write everything using modern ECMAScript syntax but then transpile it to something supported by current browsers. We also have followed the design system pattern and built on top of vue-design-system so that we can have a set of easily reusable components across the application.
The backend is a straightforward Ruby on Rails app with a bunch of APIs and worker processes using sidekiq. This serves up all of the APIs used by the frontend. We use Auth0 to help with authentication. And we use ActiveAdmin to build out a lot of our internal admin tools.
In addition, we have a few small little services that we run to handle parsing manifest files for various ecosystems. Some of these are written in the language of that ecosystem (for example, the Clojars parser!) while a couple are just little standalone Sinatra services.
Given our need to run services across different programming languages, we invested early on in running everything in containers on managed Kubernetes which gives us deployment flexibility with consistent operational and deployment strategy. It also makes it easy for the team to stand up new things if necessary as well as to scale as our data volume grows.
We also invested from day one in ensuring that everything has (and runs) tests as we open pull requests. This includes linting so that we never have to discuss how many spaces should be used for a line of code. Then as we merge things to master, we have an automated deploy process which lets us have the new code running in production quickly and safely.