For an intro to Narl Records see my previous post.
Tech Stack
It's a fairly simple setup so far, setting a solid base for future features and improvements.
Web App
The web app is built with React and React Router in framework mode. This has been my first time really building with the server side features React Router brings, and it has been a great experience.
Styling and components come from MUI, with a tweaked theme and some custom styling here and there. Utilizing an off the shelf design system has let me focus my time and engery on the product itself. Down the line I may migrate to Base UI with a fully custom theme.
I went with PostgreSQL, managed by Neon, for a database as and Drizzle as the ORM. I've used a handful of other ORMs and Drizzle has been the best DX by far. The fact that the schema and types are written together is huge. And the v1 relations are very powerful.
Storage
As noted in the Intro post storage is primarily handled by using the atproto network. But this is only when the artist is ready to publish the songs. Prior to that the artist is able to create a draft and while in draft songs and artwork are stored by Narl Records.
Wanting something lightweight and simple I chose Backblaze B2 for object storage. It's really helpful that B2 has an AWS S3 compatible API, meaning the @aws-sdk/s3-client library works out of the box!
And after searching around on how to best optimize my B2 usage I came across Cloudflare's Bandwidth Alliance. Which gives zero rated egress when used with B2. So I setup a cloudflare worker that proxies B2 requests from the Web App server to B2.
Deployment
With this project I also wanted to test the waters with GitLab. I've really liked GitLab's CI/CD "stage" pattern. Where all pipelines go through the same "stages" but can have conditional items based on the pipeline's context. There's no back and forth between where the job is defined and used.
The staging environment (narl.jacehensley.dev) is deployed to Fly.io. This website is also deployed to Fly and since it's deployed as a subdomain it made setting up the certs easier. I've been really happy with Fly, never any issues and the pricing is perfect for a project of this size.
Once ready, production (narlrecords.com) will be deployed to Railway.