We may have used other popular technologies,
but we don't have a single project using them left and
would never consider using them again.
Things like Angular, GatsbyJS, Redux or MongoDB
are so far in the back mirror that we've
dropped them off the "hold" section completely.
TECHNOLOGY RADAR
The technology radar presents our “blessed” technologies, and other technologies that may become some of our blessed technologies - and some that we explicitly want to avoid. We call it the Technology Radar like Thoughtworks and other tech companies just for familiarity.
:format(webp))
The Four Rings
RING
DESCRIPTION
adopt
We use these when they are appropriate for the type of the project. We’ve used them extensively and they’ve proven to be very successful choices for the appropriate projects.
trial
Things nearly certain to be worth using at least in the future, and may end up replacing some of our adopted technologies. Can be used in new projects where the risk can be controlled.
assess
Worth exploring with the goal of understanding. Not yet for any customer projects.
hold
Things we’ve trialed and used, but we would not like to use them in new projects.
The Radar
NAME
RING
TAGS
DESCRIPTION

Typescript
adopt
languages
We try to stick to a single language. We use Typescript for everything. We know many more, but regardless we’ll do everything with Typescript where it is good enough.

ReactJS
adopt
frontend
For Web and Mobile. We continue to assess other options as serious ones pop up, but nothing much better, and its ecosystem has ever shown up.

NodeJS
adopt
backend
We'll use NodeJS as a default choice for backends. We keep one eye on Deno; and another on Bun. We may use those but basic Node remains our standard choice.

NextJS
adopt
frameworks
websites
We use this for websites. It has the needed features like SSR, SSG, ISG, and a routing architecture which is a perfect fit for websites. No need to poke around with the build.

Prisma
adopt
webapp
libraries
An ORM with excellent developer experience. It doesn’t abstract too much and produces efficient queries. Provides strict typing for all DB access and solid DB migrations. We use it to access Postgres. Currently Drizzle has the upper hand here; and we default to Drizzle over Prisma.

Postgres
adopt
webapp
datastores
Databases come and go, except Postgres, it always stays because it is solid and extensible for most use cases.

Redis
adopt
webapp
datastores
Great for Caching and Queueing. Sometimes as a message bus.

Tailwind
adopt
webapp
website
styling
It’s easy to pick up. It has very little abstraction. It produces CSS as external style sheets which are important for Website projects.

ShadCN
adopt
webapp
styling
ShadCN is a collection of accessible and customizable React components built with Tailwind CSS, offering a foundation for building modern, consistent UI designs.

Render.com
adopt
webapp
platforms
Similar to Heroku, but it’s moderately priced and will do the boring OPS work for us that repeats itself in every project. Let’s us create scaleable web apps with postgres + redis with prodution and staging environments and automatic deployments, distributed logging an in a few hours. We currently prefer Digital Ocean Apps due to more lenient pricing; also Render still lacks object storage which is a huge gap.

Vercel.com
adopt
website
platforms
Serverless deployment platform. Great for websites when paired with NextJS. Global CDN. Automated website performance monitoring built in.

Figma
adopt
tools
UX/Design tool of choice. Good for communicating ideas.

OpenAI Codex
adopt
tools
Used along with Cursor and Claude Code. This is a fast developing space and the preferred AI coding tools may change every other week.

Claude Code
adopt
tools
One of the AI coding tools preferred along with Codex and Cursor.

Cursor
adopt
tools
One of the AI coding tools preferred along with Claude Code and Codex.

React Native
adopt
mobileapp
frameworks
When Mobile, then React Native

Storyblok
adopt
website
datastores
Headless CMS with a Visual Editor. It’s extensible enough for most our use cases in websites and has among the best user experiences for content editors.

Sanity
adopt
website
datastores
Pairing Sanity with Shopify projects is a great choice because of their excellent integration.

Framer Motion
adopt
frontend
libraries
Modern, react-oriented, and battle-tested in our production-grade projects animation framework. Creating a bit more complicated animations with this tool feels like a breeze ;-)

Conventional commits
adopt
tools
The way we structure our commit messages ( https://conventionalcommits.org/ ).

Vite
adopt
webapp
website
tools
We usually don’t have a need to muck about with build tools since we always base our projects on frameworks that make the build tool choice for us, but Vite is on the radar when it’s not an option.

Hydrogen
adopt
e-commerce
frontend
frameworks
Released by Shopify enables you to build a custom, headless, and optimized-for-performance e-commerce experience. Greatly aligns with our company tech stack.

T3 App Stack
adopt
webapp
frameworks
Currently our go-to for full-stack apps. We prefer to architect our apps as single full-stack deployables with back- and frontend in the same codebase when it makes sense, which is almost always in our projects, and T3 is a very good fit.

Digital Ocen Apps
adopt
website
platforms
Many PaaS providers have per-developer pricing which rubs us and our clients the wrong way. Digital Ocean has a wide feature set and decent pricing; without the unreasonable per-developer pricing model.

Astro
adopt
frameworks
website
We find Astro to be superior in certain use-cases, particularly when content is crucial and optimal performance is needed to satisfy SEO gods.

Drizzle
adopt
webapp
libraries
Drizzle ORM is a lightweight, TypeScript-first Object-Relational Mapping library designed for simplicity, type safety, and seamless integration with modern JavaScript and SQL workflows.

ThreeJS + React-Three
trial
website
libraries
Our default choice when we need full programmatic control of anything webgl/3d. We do not use this often enough though so it's mostly been employed in minor one-off cases.

BunJS
trial
tools
Super fast all-in-one Javascript runtime. We can use it but currently the advantages aren't enough to dethrone NodeJS as the default choice in client projects.
PayloadCMS
trial
website
datastores
Payload CMS is a NextJS process-hosted, TypeScript-based headless content management system that offers extensive customization, robust APIs, and a developer-friendly experience. We've actively trialed it, but are a bit cautious after the acquisition by Figma.

Oxygen
assess
e-commerce
platforms
Fastest way to deploy Hydrogen storefronts.

BlitzJS
hold
webapp
frameworks
Fullstack JS framework. Built on top of React/NextJS/Prisma/Postgres. We used it as our “Ruby on Rails” for Web Applications. It’s mostly an opinionated collection of libraries on top of NextJS and very productive, but has been surpassed in support and popularity by the T3 stack which we prefer now.

Chakra
hold
webapp
styling
We're putting Chakra UI on a little break for our Web Apps. It's been great, but there are some cool new ways to style apps popping up. Time to see what's out there and keep things fresh!

Remix
hold
website
webapp
framework
We’ved trialed Remix and Next.js remains our preferred option. Since Remix has had an incredible amount of API churn and are moving towards their own React fork; we do not consider it a wise or stable choice for future projects.

SolidJS
hold
website
frontend
frameworks
Keeping our eye on this if we’d get a specific use case, but its ecosystem is too minimal, nor does its advantages bring enough value considering its disadvantages in comparison to React.

VueJS
hold
webapp
frontend
We’ve trialed VueJS and deduced there is no reason to use it over React. For our engineers and projects, it’s worse in all regards.

Flutter
hold
mobileapp
frameworks
We’ve trialed this when the use case seemed to be a fit. We find it has too many rough edges and it diverges too much from our core JS foundation.

NestJS
hold
webapp
frameworks
backend
We rarely need pure backend frameworks. If we did, we’d explore other options before trialing NestJS again. E.g. Moleculer, AdonisJS, or just plain express.