<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2" -->

---
title: No more tech debt | daily.dev
description: A software engineer recounts completing a design system migration that unified styles across React, HTMX, and Jinja stacks, replacing the unsupported JoyUI...
canonical: https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: No more tech debt | daily.dev
og:description: A software engineer recounts completing a design system migration that unified styles across React, HTMX, and Jinja stacks, replacing the unsupported JoyUI...
og:url: https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2
og:image: https://api.daily.dev/og/posts/z8Zhkg5M2.png
og:image:alt: No more tech debt
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# No more tech debt

**[swizec.com](https://daily.dev/sources/swizec)** · 5 min read · 53 upvotes · 6 comments

## Summary

A software engineer recounts completing a design system migration that unified styles across React, HTMX, and Jinja stacks, replacing the unsupported JoyUI library with a custom Tailwind + ShadCN/BaseUI component system. The approach started with small tooling (a DESIGN.md guide, linters, minimal component library), followed by a big-bang migration PR, a month of iterative polish, then a second large push using AI coding agents. One agent session ran 6-7 hours and dropped @mui/joy imports from 592 files to 146 in a week, producing 45 pull requests across 8 stacks. The piece argues that thorough cleanup matters because AI agents amplify existing codebase patterns rather than reasoning from first principles, so leaving no trace of old code lets agents build consistently good UI going forward.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://swizec.com/blog/no-more-tech-debt>

## Questions this post answers

### How many files changed when migrating away from @mui/joy using an AI coding agent in one long session?

A single agent session running six to seven hours dropped the number of files importing @mui/joy from 592 to 146 within a week, as part of a broader design system migration. The work was split into 45 pull requests across 8 different tech stacks, each migrating one page in a vertical slice with before and after screenshots for visual validation before merging.

_Teams planning an AI-driven migration can find real-world agent workflows like this one on daily.dev._

### Why do AI coding agents produce inconsistent UI code in a messy codebase?

Agents amplify whatever patterns already exist in a codebase rather than reasoning from first principles, so when a codebase mixes conventions, agents reproduce that inconsistency instead of fixing it. They perform well when told to follow a specific existing pattern, but poorly at inventing cleaner approaches without heavy guidance, which is why fully removing old code and conventions before relying on agents matters.

_Developers cleaning up codebases for better agent output can track these lessons on daily.dev._

### What steps help prepare a codebase before doing a big bang rewrite with AI agents?

Preparation included building a customized Tailwind skin matching brand colors, a minimal ShadCN plus BaseUI component library, a setup allowing old and new components to coexist without looking broken, a DESIGN.md file documenting the migration path, and a handful of linters enforcing use of the new design system before attempting the full rewrite.

_Engineers scoping their own migration playbook can follow similar strategies on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@apperside** · 10 upvotes

> At least for someone code quality still matters, in this AI era a lot of people lose interest in code quality, favoring an "if it works it's fine". Well, for those people, just to let you know that karma is watching you

**@kelvin\_lima** · 8 upvotes

> Unifying React, HTMX, and Jinja under one Tailwind setup sounds like a solid architectural win.

**@eliasdevv** · 2 upvotes

> how do you reconcile React's virtual DOM diffing with HTMX's incremental swaps when both share the same Tailwind build? does Jinja's server‑side rendering ever interfere with client‑side hydration

**@ristotoldsep** · 0 upvotes

> AI will happily copy your tech debt at machine speed. Cleaning the patterns first is the move.

## Similar posts on daily.dev

- [Agents change the math on big bang migrations](https://daily.dev/posts/agents-change-the-math-on-big-bang-migrations-pac5lf3qj) · swizec.com · 35 upvotes · 8 comments
- [Styling Linear for the future with StyleX](https://daily.dev/posts/styling-linear-for-the-future-with-stylex-qmtpzoc4t) · Reid Burke · 59 upvotes · 4 comments
- [Using AI to Migrate from Lit to React](https://daily.dev/posts/using-ai-to-migrate-from-lit-to-react-ydipy0nml) · Viget · 2 upvotes · 0 comments
- [Linear Completes 1,000-PR Migration From styled-components to Meta's StyleX](https://daily.dev/posts/linear-completes-1-000-pr-migration-from-styled-components-to-meta-s-stylex-twjve9pqu) · InfoQ · 14 upvotes · 4 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#general-programming](https://daily.dev/tags/general-programming), [#ai-agents](https://daily.dev/tags/ai-agents), [#tailwind-css](https://daily.dev/tags/tailwind-css)

[View this post on daily.dev](https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"No more tech debt","url":"https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2"},"datePublished":"2026-10-17T17:01:11.992Z","dateModified":"2026-10-17T17:01:45.436Z","description":"A software engineer recounts completing a design system migration that unified styles across React, HTMX, and Jinja stacks, replacing the unsupported JoyUI...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/be7ae1d85006535ab8d08d9faa4e4027?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/be7ae1d85006535ab8d08d9faa4e4027?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"swizec.com","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"swizec.com","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/a0733daf6e014e23a638ded7f2d4cd70","url":"https://daily.dev/sources/swizec"},"commentCount":6,"discussionUrl":"https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":53},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":6}],"keywords":"webdev,general-programming,ai-agents,tailwind-css","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"swizec.com","item":"https://daily.dev/sources/swizec"},{"@type":"ListItem","position":3,"name":"No more tech debt"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2","comment":[{"@type":"Comment","text":"At least for someone code quality still matters, in this AI era a lot of people lose interest in code quality, favoring an “if it works it’s fine”. Well, for those people, just to let you know that karma is watching you","datePublished":"2026-10-18T01:58:27.601Z","url":"https://daily.dev/posts/z8Zhkg5M2#c-xh8r6GRBY","author":{"@type":"Person","name":"Apperside","url":"https://daily.dev/apperside","image":"https://avatars.githubusercontent.com/u/5955338?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":10}},{"@type":"Comment","text":"Unifying React, HTMX, and Jinja under one Tailwind setup sounds like a solid architectural win.","datePublished":"2026-10-17T21:15:48.501Z","url":"https://daily.dev/posts/z8Zhkg5M2#c-03UWpqyW1","author":{"@type":"Person","name":"Kelvin Lima","url":"https://daily.dev/kelvin_lima","image":"https://media.daily.dev/image/upload/s--aETMiQc5--/f_auto/v1787513560/avatars/avatar_asGeTu7mKynRnhXcOxYVt?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":8}},{"@type":"Comment","text":"how do you reconcile React’s virtual DOM diffing with HTMX’s incremental swaps when both share the same Tailwind build? does Jinja’s server‑side rendering ever interfere with client‑side hydration","datePublished":"2026-10-18T12:18:31.749Z","url":"https://daily.dev/posts/z8Zhkg5M2#c-4WOXiFScz","author":{"@type":"Person","name":"elias-devv","url":"https://daily.dev/eliasdevv","image":"https://avatars.githubusercontent.com/u/338986921?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2}},{"@type":"Comment","text":"AI will happily copy your tech debt at machine speed. Cleaning the patterns first is the move.","datePublished":"2026-10-19T13:43:41.702Z","url":"https://daily.dev/posts/z8Zhkg5M2#c-BvJW3zD2z","author":{"@type":"Person","name":"Risto Tõldsep","url":"https://daily.dev/ristotoldsep","image":"https://lh3.googleusercontent.com/a/ACg8ocLDWc6mZn0JwNmXXw6WY0L_HJ6pegzRttooC5VgtXESHSj3MNYx=s96-c"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/no-more-tech-debt-z8zhkg5m2#faq","mainEntity":[{"@type":"Question","name":"How many files changed when migrating away from @mui/joy using an AI coding agent in one long session?","acceptedAnswer":{"@type":"Answer","text":"A single agent session running six to seven hours dropped the number of files importing @mui/joy from 592 to 146 within a week, as part of a broader design system migration. The work was split into 45 pull requests across 8 different tech stacks, each migrating one page in a vertical slice with before and after screenshots for visual validation before merging. Teams planning an AI-driven migration can find real-world agent workflows like this one on daily.dev."}},{"@type":"Question","name":"Why do AI coding agents produce inconsistent UI code in a messy codebase?","acceptedAnswer":{"@type":"Answer","text":"Agents amplify whatever patterns already exist in a codebase rather than reasoning from first principles, so when a codebase mixes conventions, agents reproduce that inconsistency instead of fixing it. They perform well when told to follow a specific existing pattern, but poorly at inventing cleaner approaches without heavy guidance, which is why fully removing old code and conventions before relying on agents matters. Developers cleaning up codebases for better agent output can track these lessons on daily.dev."}},{"@type":"Question","name":"What steps help prepare a codebase before doing a big bang rewrite with AI agents?","acceptedAnswer":{"@type":"Answer","text":"Preparation included building a customized Tailwind skin matching brand colors, a minimal ShadCN plus BaseUI component library, a setup allowing old and new components to coexist without looking broken, a DESIGN.md file documenting the migration path, and a handful of linters enforcing use of the new design system before attempting the full rewrite. Engineers scoping their own migration playbook can follow similar strategies on daily.dev."}}]}
```

