← All insights

Why we still write CSS by hand in 2025 (and what we use Tailwind for).

A pragmatic take on the utility-class vs. semantic-class debate.

We write custom CSS for our themes. We use Tailwind for internal admin UIs. The dividing line is who's going to maintain the codebase in five years.

For public-facing themes — where editors might tweak a colour token or a developer might inherit the codebase mid-engagement — semantic CSS with design tokens is more durable. The tokens are readable, the class names describe intent, and you can change the design system without rewriting markup.

For internal tools — where the same engineers ship features at speed and there's no "design handoff" — Tailwind is faster. We don't fight it.

The heuristic we use: if the markup will outlive its engineer, semantic CSS. If it won't, utility classes are fine.

Working on something like this?

Let's talk.

A real engineer reads every message. Usually within a few business hours.