The tech we use here at Sharp Silicon has changed over the years. We're a small company so we can't afford to have too many types of tech in use. We want to take advantage of the latest cloud functionality. We want to have a look-and-feel that's easy to do and consistent without being restrictive.
Right now we've firmed up on:
For data we've got Supabase, MongoDB and DynamoDB options. Supabase is a cloud version of PostgreSql and is still in beta. We've been playing around with it for a few months and are enjoying the DX. It also seems super-fast and we've had no trouble with the reliability despite being in beta. If there was one thing we could wish for it would be for it to go live! Both MongoDB and DynamoDB are NoSQL databases and are ideal for simple or non-structured data. The DX with DynamoDB though makes us position it as a last resort option, with MongoDB being far more powerful and easy to use.
We've got the authentication sorted out in all three options (Supabase, MongoDB and DynamoDB). Supabase comes with its own authentication tools so we have integrated those into our libraries. It's pretty similar to Amazon's Cognito so we were able to build that pretty quickly, having built the Cognito integration last year for another project. MongoDB is so widespread now that creating simple authentication functionality was straightforward too, just because of the community code available. For that we're using Google as a provider for the time being.
We're less certain about how we do our react. The battle is between NextJS and Remix. We're currently using NextJS but we're also looking at remix.run as an alternative. NextJS inspired Remix which then went on to inspire NextJS to improve too. With Shopify's acquisition of Remix we'll be interested to see if they create a Vercel-like Remix hosting option.
This all sits in Nrwl's NX mono repo. We host in Vercel. The source code is in Github.
This is a great setup for many reasons. We no longer have to worry about keeping our internal packages all up to date - the mono repo just keeps the latest source code continually compiled and available. We can structure our code neatly into libraries, shared by multiple apps without having to go through package version hell. Going live with a new release is just a case of merging a (fully tested) development branch onto main and pushing it to remote - Vercel automatically picks up the change, builds it and releases a new version of the websites.
Developing systems with javascript used to feel like you were a trapeze artist with greasey hands and no safety net. With typescript you can program with a lot more confidence.
We take advantage of the code generators that come with the NX mono repo. We can generate a bare-bones Cypress end-to-end test suite for each web site with just a few clicks. It all just works.
Going forward, we're as confident as we can be with javascript that our code is organised, reliable and maintainable.