There is a weird uncanny valley with LLM-generated UI right now. The code functions perfectly, but if you look at a lot of new SaaS apps, the design usually screams "AI slop."
It usually comes down to these four dead giveaways:
The Bubble Effect: The AI blindly slaps rounded-xl on absolutely everything.
Amnesia Colors: By prompt #4, the LLM forgets your exact hex code and drifts into a generic "Tailwind Blue."
Dirty Shadows: Heavy, muddy box shadows that look like 2012 Bootstrap.
Zero Taste: Safe, boring typography with no real spacing logic.
When you don't aggressively constrain an AI, it defaults to the mathematical average of the internet. And the average of the internet looks cheap.
The Immediate Fix
If you are vibecoding a SaaS right now, stop letting the AI guess your styles. Create a DESIGN.md file in your root folder and paste these constraints in it:
ALWAYS use crisp, tight borders. Max border-radius is rounded-md. No bubbly UI.
PRIMARY BRAND COLOR is strictly your hex code. Never use default Tailwind blues.
SHADOWS: Use modern, layered shadows. No heavy drop shadows.
TYPOGRAPHY: Use tight tracking on headers and generous line-height on body text.
Just tell Cursor/Claude to reference DESIGN.md for all styling.
The Next Step (My Architectural Experiment)
While the manual file trick works, the AI still suffers from token drift over long chat sessions. Lately, I have been building a local MCP server that acts as a global design governance layer. It physically locks the AI into your specific design rules so it cannot hallucinate bad UI.
I built a live prototype to visualize how this governance interface works. Please check it out here and join the waitlist if you want early access: https://no-name-till-now.lovable.app
I am curious how other solo devs are handling this right now. Are you manually cleaning up the Tailwind CSS after the AI does its thing, or have you found a better way to enforce strict design systems?
Top comments (0)