Switching to Tailwind CSS: Why I Migrated Every Project
I switched from CSS modules and styled-components to Tailwind CSS across every product. Here's why it eliminated naming decisions.

Before Tailwind, I used CSS modules for some products and styled-components for others. Each approach had merits. Each created problems that Tailwind eliminates.
CSS modules: good scoping, bad naming. Every class needed a name. .container, .wrapper, .card-header, .card-body. Naming consumed time and created inconsistency between products.
Styled-components: good co-location, bad performance. Runtime CSS generation added bundle size and complexity. The developer experience was nice until the production performance wasn't.
Tailwind CSS: no naming, no runtime, consistent design tokens, works identically across every project. The migration was mechanical but the productivity improvement was permanent.
Why Tailwind Works for Multi-Product Founders
Zero naming overhead. px-4 py-2 rounded-lg bg-teal-500 describes what it does. No debating .btn-primary vs .button-main. No remembering project-specific class names. The cognitive load of naming disappears.
Design consistency by default. Tailwind's spacing scale, color palette, and typography presets enforce consistency without a formal design system. Every product looks cohesive because the same constraints underpin every component.
Cross-project uniformity. When I switch from Aviation Infinity to ClickAi to kingallem.com, the styling approach is identical. The same utility classes, the same spacing scale, the same color tokens. No context-switching cost for CSS.
Rapid prototyping. Building a new UI component takes minutes because the styling is inline. No switching between HTML and CSS files. No creating new stylesheets. The feedback loop between writing markup and seeing the result is immediate.
The Migration Process
Migrating existing CSS to Tailwind was straightforward but tedious:
- Install Tailwind and configure it
- Convert each component, replacing CSS classes with utility classes
- Remove old CSS files
- Verify visual consistency
The conversion was mechanical, as each CSS rule has a Tailwind equivalent. The tedium was in the volume, not the complexity. I migrated one product at a time, verifying visual parity before moving to the next.
The Criticism That Doesn't Bother Me
"Tailwind markup is ugly." I've heard this from developers who spend their time reading code and value aesthetic cleanliness. I spend my time writing UI and value speed. The tradeoff (uglier markup for faster development) is one I accept completely.
The HTML template of a Tailwind component has long class strings. The CSS file doesn't exist. The net code volume is similar. The development speed is higher. For a solo founder, that's the right optimization.
Enjoyed this article?
I write about building products, AI, aviation, and the journey of entrepreneurship. Follow along for more.
Keep reading

Getting Started with Allem SDK: React Hooks for AI, Forms & Auth
Allem SDK is a collection of React hooks for AI chat, form validation, authentication, analytics, and utilities. Here is how to install and use it.

Getting Started with Allem UI: React & React Native Components
Allem UI is an accessible component library for React and React Native with 44+ components, dark mode, and Tailwind CSS v4. Here is how to install and use it.

The Agento Suite: Building 6 AI Products in Parallel
In 2026, I launched six AI products across legal tech, travel, healthcare, and developer tools. Here is the architecture and playbook for building in parallel.