I built and rebuilt 24 Astro themes without reusable components. It cost me a year of my life.
I built Astro themes with Tailwind CSS without reusable components. After a year, I rewrote 24 themes to introduce shared components and upgrade to Tailwind CSS v4. Here’s the real cost of scaling without systems.
Published on December 17, 2025 by Michael AndreuzzaFor my first year building Astro themes with Tailwind CSS, I avoided reusable components.
- No shared buttons.
- No elements.
- No wrappers.
- No system.
Why did I do that?
Because I’m a bit of a weirdo, but let’s be real.
I wanted every theme to be easy to grab, tear apart, and adapt outside of Astro.
Reusable components felt like lock-in. Raw markup felt portable, and stupid at the same time.
That mindset came from an earlier project back in 2020. I was building a theme collection with Handlebars, I was still new to coding, and everything was hardcoded. No components. No system. It wasn’t elegant, but it worked well enough. That project ended up being acquired anyway.
So I carried the same thinking forward, assuming it would scale again.
The trade-offs felt reasonable at the time:
- Reusable components felt like friction.
- Hardcoding styles and markup felt flexible.
- Copying instead of abstracting felt faster.
- I even skipped Astro content collections entirely.
It was a conscious decision — and a shortsighted one.
- Each Astro theme stood on its own.
- That let me ship without overthinking.
- They looked good.
- They sold well from day one.
In the short term, the approach worked but only for newbies to coding, those already knwoing how to code were in flames, and i dont blame them…they knew better. In the long term, the maintenance journey sucked.
This is the real cost of building Astro themes without reusable components and why I eventually rewrote 24 themes from scratch to fix it.
The hidden cost of not using reusable components
The damage didn’t show up immediately. It surfaced months later. As the number of Astro themes grew, the maintenance burden became impossible to ignore — especially as a solo builder.
- The same spacing, width, and whatnot fixed repeatedly across multiple Tailwind CSS codebases
- Different button styles creeping into every theme
- Typography drifting because nothing enforced shared design tokens
- Fear of touching older Astro themes because every change was manual
- Simple improvements turning into multi-day tasks
Every update felt like Russian roulette. A “small change” wasn’t small anymore, it was 24 separate Astro theme updates, tested 24 times, shipped 24 times.
At some point, I realized I wasn’t maintaining a theme library. I was maintaining 24 independent Astro + Tailwind projects.
That doesn’t scale.
The decision to rebuild the system
The breaking point wasn’t a tool update. It was the realization that this setup couldn’t scale.
I knew that if I wanted to keep building and maintaining Astro themes long-term by myself, I needed a shared foundation.
That’s when I made the call to refactor all existing themes and introduce reusable components for the parts used everywhere.
At the same time, I decided to upgrade everything to Tailwind CSS v4, to kill two birds with one stone.
Refactoring 24 Astro themes with reusable components
I rewrote all 24 themes, visually and structurally.
I introduced a shared layer of reusable Astro components:
- Buttons/links (single source of truth)
- Text components for headings and body copy
- Wrappers and layout primitives
These aren’t fancy components, they’re boring they’re everywhere, and that’s exactly why they matter.
What I deliberately didn’t do:
- No mega components that try to do everything
- No design-system overengineering
- No abstraction that fights Astro’s simplicity
- Just the basics
Each Astro theme still controls its look and personality. The goal was long-term maintainability for me and customers.
Before vs after: Maintaining Lexington’s astro themes at Scale
The difference was immediate.
Before reusable components:
- Global changes took hours of repetitive work
- Bugs were fixed multiple times across themes
- Design drift increased with every release
After reusable components:
- One change propagates across all Astro themes
- Bugs, if any, get fixed once
- New themes start faster, not slower
The system didn’t make the themes less flexible. It made them scalable. Even if you want to take the code and use it in your own project, yo still can.
The real lesson for developers
Reusable components aren’t about DRY code. They’re about leverage.
If you’re building anything meant to grow; themes, products, internal tools, or libraries — reusable components let you:
- Ship improvements without fear of breaking things
- Scale without burning out
and many other benefits…
Refactors aren’t optional. They’re just decisions you postpone, with interest.
I wish I’d built the system earlier. But rebuilding it when I did is the reason Lexington can scale now and I am happy to I did so.
If you’re serious about building maintainable software, optimize for systems sooner than feels comfortable.
Speed without structure always sends the bill later, it won’t be cheap…
/Michael Andreuzza