My Tech Stack in 2023
Programming has been my main source of income for two years now.
My biggest meta bet as a programmer is on the browser, and these tools are meant for building things that run in web browsers for years to come.
I’m fortunate enough to have a working environment where I’m encouraged to push small, experimental things to production, and constantly explore new ways of doing things.
That makes for a rapid feedback cycle, or an OODA loop, or the thing that Bret Victor was talking about. Quick iteration, taking cues on how what you’re doing impacts where it arrives. Optimizing for flow and sharpening intuition.
I’m not going to talk about AI or large language models here, that’s a whole topic in itself. ChatGPT is a tool I like using to help me learn and reduce boilerplate code, but it has yet to transform how I ship code every day. I assume this will change in the near future, but that future will probably involve these tools in some way. I’m also writing my own blog posts, for better or for worse.
This is an opinioned list of tools I enjoy using in personal and professional projects right now. The cream of the crop, only the finest. Either open source or with generous free tiers.
From bundling to UI frameworks to backend infrastructure, the all-star team to build just about anything. Plus a few bonus picks:
Most of the things I publish in my day-to-day work run on Vite. Whether it’s a React or a SolidJS app, last year I built templates internally to migrate away from Webpack and it’s been a very positive change. Everything is a bit snappier and easier to configure. An absolute cornerstone of my coding work.
Effortless prototyping. Almost everything I do is a prototype in some sense, and Tailwind allows me to implement styles quicker than any other way I’ve tried. I can read the HTML and see the page in my head, that feels amazing. I recently converted this site from Styled Components to Tailwind, and I think that makes maintenance easier going forward. It has become enough of a standard that it’s difficult to see it going away anytime soon.
A beautiful combination of Radix UI and Tailwind, providing source code for accessible and good-looking components that you can style as you please. Makes recurring UI patterns like modals and accordions so easy and nice to implement and customize.
This blog is built on Next.js. It could be on Astro as well, and maybe someday I’ll convert it. But I like Next.js, especially for apps that need a little bit of backend functionality. It’s pleasant to use and performant, it abstracts away a lot of little things that I’d prefer not to focus on when looking to build something new.
I’m not yet sold on the App Router or React Server Components, but I don’t think anyone should hold back on adopting Next.js because of that. The Next 12 way of doing things works just fine in Next 13. It does a lot of things really well, and now there’s a handy way to deploy Next apps outside of Vercel too. More on that later in this list…
I still like working with React, especially when doing 3D stuff! React-three-fiber is such a wonderful library wrapping Three.js inside React. Poimandres is one of the best open-source collectives around and they deserve all praises and support coming their way.
However, in 2022, I gradually started migrating from React toward SolidJS. During the second half of 2022, the majority of apps I wrote for a variety of news articles
and services were in SolidJS. From little games to calculators to data visualizations, it’s a joy to build stuff with.
The supporting libraries are getting better all the time, too. A special shout-out to
Astro is another tool I’ve only recently started shipping stuff with, and it’s been a similar revelation to SolidJS. Everything is just easy, and performant, and lightweight. I’d still pick Next.js for more complex apps, but Astro is a clear winner when it comes to static sites. Works so nicely with SolidJS too. Here’s a recent example I did — in Finnish only at this point I’m afraid!
SST is the easiest way to build serverless infrastructure on AWS. It’s the most approachable toolkit, yet one of the most powerful ones. It is one abstraction level higher from AWS Cloud Development Kit (CDK), which allows writing infrastructure as code (IaC). That means setting up a database and directing authorized traffic to it via backend functions, as well as tearing it all down with a single shell command.
As with other IaC tools, the main idea is that all the resources are defined with code and then created on the platform. The platform, in this case, is the vast, nigh-impenetrable jungle that is Amazon Web Services. With a serverless approach, even a small application is a compound of multiple resources.
SST makes managing all this very pleasant. I’ve shipped serverless backends to production that served data seen by millions, first with the SST beta version, then the v1, and I’m looking forward to doing more of that with the recent v2 update. There’s support for Vite, Astro, Next.js and much more.
Easy hosting. If it’s a personal project that I want to try out quickly, I usually initialize the repo, get it on GitHub and plug the repo into one of these two services. That way you get immediate feedback on each commit, and whether your code actually works in its intended environment. I don’t see a huge difference in these, both are sterling options and largely up to personal taste.
DynamoDB on AWS is a nice database that I’ve used with success in the past, but there’s a bit of a learning curve. Planetscale looks like the optimal SQL database for serverless applications. My initial impressions are very positive, looks particularly interesting combined with Drizzle ORM.
This is one of those things that really opened my eyes on the possibilities of TypeScript. Having IDE validation between
the frontend and the backend? Wow. React hooks familiar from Tanstack Query. Plays well with Next.js, especially with the brilliantly modular
create-t3-app. Or perhaps
one would prefer a SolidJS version,
Auth.js looks like a very nice way to solve recurring authentication problems. Pluggable into DynamoDB, Fauna, Supabase, Sveltekit, SolidStart and so on. I’m curious to see how SST’s auth solution matches up.
I’m keeping a close eye on Bling, not least because everything made by Tanner Linsley tends to be great. A framework-agnostic way to bring together server-side and client-side code.