Much of the infrastructure that runs Zenobase dates back to 2012, so was due for a little refresh:
| Before | After | Notes |
|---|---|---|
| Play 2.x (Java 8) | Helidon 4.x SE (Java 25) | Play was convenient, as it included a basic web asset pipeline, but would be an odd choice now for an application where asynchronous message passing isn’t central. Helidon combines advantages of Spring Boot (kitchen sink included) with those of frameworks like Micronaut or Quarkus (sub-second startup times allow scaling down to zero). |
| Elasticsearch 1.x (self-managed) | OpenSearch 3.x (AWS-managed) | Elasticsearch (and its OpenSearch fork) are a good match for an application with a flexible data model that has to support running queries with multiple aggregations. It might now be possible to handle this with a regular SQL database, and with lower scaling costs, but for now, I am happy to offload management of the database. |
| N/A | Auth0 | Supporting basic username-password authentication seems simple enough, until you consider dealing with password resets, credential stuffing attacks etc. And forget about supporting 2FA or passkeys. Auth0 is pricey, but has a free plan that just about works. AWS Cognito was another option, but would have required more upfront work. |
| AngularJS 1.x (JS) | Vue.js 3.x (TS) | Considered both Angular 2 and React, but Vue.js had the simplest upgrade path from AngularJS 1.x. |
| Highcharts | Apache ECharts | Highcharts was the only visualization library that handled automatic scales well enough at the time. It may still be the best, but it’s not open source, and ECharts now has all the required functionality. |
| Bootstrap 2.x | Vuetify | Bootstrap was the look of the 2010s, now it’s all about Material Design. This was also an opportunity to make the web app a bit more usable on mobile devices. |
| AWS OpsWorks (Chef) | Pulumi | Originally used Scalarium, which was acquired by AWS, and then run as AWS OpsWorks, before being phased out. Terraform is now the obvious choice for managing infrastructure, and Pulumi is a convenient layer on top of Terraform. |
| AWS EC2 | AWS ECS Fargate | Fargate seems like the simplest (and most cost-effective) option in the AWS ecosystem for deploying Docker containers. |
| Loggly | AWS CloudWatch Logs & Sentry | Used to tail logs to surface errors that needed addressing… Almost every project I’ve worked on since used Sentry for tracking errors, and it’s really nice. |
| CircleCI | GitHub Actions | CircleCI works well, but there are now pre-built GitHub Actions for almost anything, plus it’s one fewer third-party services. |
| Braintree | Ko-fi & Stripe | The subscription model was never a good fit for Zenobase: People use this service on-and-off for random projects, and almost none of the paying subscribers had actually exhausted their free quota. So it made sense to switch to a donation model. |
| Tumblr | Hexo & GitHub Pages | Not sure why I had decided to host the blog on a social media site; moving to a simple static site generator (the same one I use for my personal blog) was a no-brainer. |