6 min read

My 2024 programming stack

Last year, I chronicled my tech stack journey - from languages to frameworks to tools, diving deep into what made my developer life tick. Now, a year wiser (and maybe a bit more cynical about free tiers), it's time for my 2024 update.
My 2024 programming stack

Last year and the year before I wrote about the tech I use to create stuff. We're almost 18 months later, older and wiser, so it's time for an updated list.

Framework: Next.js (app router) / Laravel

2023: Next.js (app router) - 2022: Next.js (pages router)

Last year I was super hyped about Next.js and the whole React Server components paradigm shift. It felt out of this world awesome to be able to mix and match client & server things. Inserting a row inside your form component feels like magic (and it sorta is).

But ... my enthusiasm has cooled quite a bit. It is a lot of magic, and it requires an awful lot of context-switching. Also, it suddenly became very easy to hit Vercel's limits. Caching was an afterthought so running React Server components quickly adds to those precious serverless seconds.

With Next.js/React looking more like PHP each day you might as well just switch to the real deal. I've been dabbling with Laravel a lot these past weeks and I love it. It includes everything you could ever want from a framework, and whatever problem you throw at it, the answer is never that there's a PaaS for that. The Laravel ecosystem has real solutions to problems, which (most often) don't require you to open your wallet.

Writing Laravel really helped me with my React/JavaScript/Next.js fatigue, and I guess going forward, I'll probably try to use Next.js and Laravel side by side. Next.js for smaller projects which lean more towards client-side interactivity and Laravel for Real Applications™.

Language: TypeScript / PHP

2023: TypeScript - 2022: TypeScript

I tried not having to use PHP ever again for a very long time. But then I joined Automattic, and even though my title there was JavaScript Engineer, I probably wrote more PHP than JavaScript/TypeScript there.

Which was okay.

CMS: A lot

2023: WordPress - 2022: DatoCMS

This is what I wrote last year:

WordPress is likely the answer you would expect from someone working at Automattic ???? But I really mean it. I love WordPress.

Looking back, I think I was a bit too enthusiastic there. WordPress is solid, and it would be my go-to CMS for whoever needs a content website on a budget. It's also very easy to get very messy. I've seen too many sites with tons of plugins enabled that just broke.

My blog currently runs on Ghost, which is an excellent blogging tool. For websites that need custom post types, structured data, and i18n I'd still use DatoCMS, because it's awesome at that.

There are also options that I want to use at some point in the future: Strapi for its open-source headless approach, Stamatic since it's built on top of Laravel, and so many more.

Mobile: Expo / Swift(UI)

2023: React Native

I've been working on this React Native project ever since before COVID. While I love the ideas behind React Native (cross-platform, write in JS), I've found keeping a React Native app up-to-date with the latest version to be one of the worst developer experiences on the market.

While restarting development on the project, I've migrated it to Expo, which is sort of an ecosystem around React Native, with an easier upgrade path and first party tested packages. I like it, and even though it's not perfect, it's a big improvement over bare React Native.

Lately, I've been creating some smaller apps and I like the simplicity of just doing that inside XCode using SwiftUI.

State management: redux-toolkit, redux-persist, react-query

2023: same - 2022: Redux-toolkit + redux-persist (+ swr)

State management can still be a pain, but these tools have proven reliable enough that I didn't feel the need to explore alternatives this past year. The combination of redux-toolkit for global state, redux-persist for persistence, and react-query for server state management continues to serve well for most React use cases.

APIs: no APIs

2023: no APIs - 2022: GraphQL

Last year I hoped that React Server Components would free us from having to write backend APIs. I still hold on to that dream, though the reality has proven more complex than initially promised.

Styling: Tailwind

2023: Tailwind - 2022: stitches

Tailwind is still the best way for a non-design savvy programmer to create things that look better than what a 5-year-old would come up with. The defaults are great, and thanks to projects like Tailwind UI it's incredibly straightforward to create great user interfaces.

Also, tools like v0 are excellent at creating Tailwind components.

Hosting: self-hosting

2023: Vercel - 2022: Vercel / Lambda / Docker

I was a very loyal Vercel fanboy, but the increase in usage from React Server Components, and their dropping out from sponsoring Woordje's hosting forced me to look elsewhere.

Elsewhere turned out to be hosting things myself again, just like in The Good Old Days™.

I use Coolify to manage a few cheap VPS boxes, and it's been a breeze. The switch from Vercel to self-hosted VPS boxes cut my hosting costs significantly while giving me more computational resources to work with.

For my Laravel project Lijsje, I use Laravel Envoyer & Forge to handle the continuous deployment & server configuration.

Databases: self-hosted / Supabase / Turso

2023: Drizzle & PlanetScale - 2022: Prisma & PlanetScale

Last year, I recommended the generous free plan of PlanetScale for hosting MySQL databases. Well, they discontinued it.

I'm finally starting to grow old enough to realize that free plans are always messy. Eventually, every free tier of every service will probably be discontinued, which always means that you'll need to migrate to something else against the clock.

I migrated Woordje from PlanetScale to Supabase, which is a great & open-source Firebase alternative.

For the Endgame landing page I utilized Turso, a hosted SQLite database PaaS. All my other recent projects use self-hosted MariaDB instances.

Editor: Cursor

2023: PHPStorm - 2022: VSCode

At Automattic, I really had to use PHPStorm because it could index and search the enormous codebase 10,000 times faster than VSCode.

But since I'm not working there anymore, I'm using whatever I want.

My beloved editor at the moment is Cursor. It packs so many AI features and does them so amazingly well that it hypercharges my productivity.

You can open your code inside a notebook inside Cursor, ask it to implement a feature, and it will nail it on most tries (given a little guidance here and there).

AI: Claude, Midjourney & Cursor

2023: GPT4, Midjourney & Copilot - 2022: Copilot

I've been a fan of Claude ever since I first used it. It's better at everything than ChatGPT. Don't take my word for it:

For image generation my goto tool is still Midjourney, and I'm very happy that they finally have a Web UI.

Analytics: Plausible

2023: Plausible - 2022: Plausible

Just like last year:

Nothing to add here. Plausible is still my favorite privacy-first analytics solution.

The only change is that I now self-host it.

Terminal: iTerm / tmux

2023: iTerm - 2022: Hyper

Thanks to my ex-colleague (and forever friend) Juan I got into tmux and it changed my terminal habits forever.

Tmux is sort of like a window manager for your terminal. You type one command to enter a session, and then you can create as many windows and panes as you like. The best part: these sessions persist even if you close your terminal - they'll be right there when you reconnect.

As someone who accidentally closes his IDE multiple times a day, this saves me a lot of setup.

I'm also a very big fan of the status bar

Conclusion

I think this past year taught me a couple of things:

  • Not everything has to be a single page React app, it's okay to embrace old and proven technologies again.
  • There's no such thing a free lunch: don't rely too much on PaaS free plans which will inevitably disappear one day.
  • tmux is amazing.
  • AI will take my job(*) this year 🫠

(* I forgot I don't have a job for a moment. )