<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Your AI coding tools are ignoring your design system. Here's how I fixed it.]]></title><description><![CDATA[Your AI coding tools are ignoring your design system. Here's how I fixed it.]]></description><link>https://uiforge-products.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Your AI coding tools are ignoring your design system. Here&apos;s how I fixed it.</title><link>https://uiforge-products.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 18:12:23 GMT</lastBuildDate><atom:link href="https://uiforge-products.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Your AI coding tools are ignoring your design system. Here's how I fixed it.]]></title><description><![CDATA[Every screen Claude or Cursor generated for me looked almost right.
Slightly different button radius. A shade off on the primary color. Spacing that was close to my scale but not on it. Each screen fi]]></description><link>https://uiforge-products.hashnode.dev/your-ai-coding-tools-are-ignoring-your-design-system-here-s-how-i-fixed-it</link><guid isPermaLink="true">https://uiforge-products.hashnode.dev/your-ai-coding-tools-are-ignoring-your-design-system-here-s-how-i-fixed-it</guid><category><![CDATA[dev]]></category><category><![CDATA[AI]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[SaaS]]></category><category><![CDATA[Design Systems]]></category><dc:creator><![CDATA[Dejan Veljanoski]]></dc:creator><pubDate>Thu, 30 Jul 2026 20:47:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a6bb6394350a91a39f147e9/34cf105d-6f63-4acc-baf8-bd490d700287.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every screen Claude or Cursor generated for me looked almost right.</p>
<p>Slightly different button radius. A shade off on the primary color. Spacing that was close to my scale but not on it. Each screen fine in isolation — put five of them together and the app looked like it was built by five different freelancers who'd never met.</p>
<p>I started calling it UI drift, and once you see it, you can't unsee it in every AI-built product on the internet.</p>
<p>Why drift happens</p>
<p>It's not the model's fault. It's a context problem:</p>
<p>Your design system isn't in the prompt. The AI defaults to its training-data average: generic Tailwind, purple gradients, shadcn-out-of-the-box. That's why so many vibe-coded apps look identical.<br />When it is in the prompt, it's stale. You pasted your tokens into a rules file three weeks ago, then changed the design. Now the AI is confidently generating against a snapshot that no longer exists.<br />When it's fresh, it's too big. Dumping an entire design system into context on every prompt burns tokens, slows everything down, and buries the signal — models follow a focused 2KB rules file far better than a 200KB JSON dump.</p>
<p>So you get to pick: generic output, outdated output, or expensive output.</p>
<p>I wanted a fourth option.</p>
<p>What I built</p>
<p>GliaKit is a Next.js SaaS boilerplate with a design system your AI tools actually follow. The core idea is a single source of truth with three synced views:</p>
<p>A Figma library — tokens, components, and screens (this part is free on Figma Community)<br />Cursor rules + Claude rules files — generated from the library, so they always describe the current system, not a memory of it<br />The Next.js codebase — components that map 1:1 to the Figma components, so what the AI generates already exists in code</p>
<p>When the design changes, the rules files change with it. Your AI stops hallucinating a design system and starts referencing yours.</p>
<p>The token-efficiency part</p>
<p>This was the constraint that shaped everything: the rules files are deliberately minimal. Instead of feeding the model every property of every component, they encode just the decisions — the token scale, the component names, the composition rules. Less context re-ingested per prompt means cheaper generations, faster responses, and (counterintuitively) more consistent output, because the model isn't drowning in irrelevant detail.</p>
<p>If you use Figma MCP, the same logic applies: the file is structured so MCP pulls compact, relevant context instead of the whole document.</p>
<p>What "day one" actually looks like<br />Duplicate the free Figma kit, restyle the tokens to your brand<br />Grab the boilerplate, run the sync so the rules files reflect your tokens<br />Prompt Cursor or Claude: "build the billing settings page"<br />Get a screen that uses your components, your spacing, your colors — on the first try</p>
<p>No "make the buttons match the other buttons" follow-up prompts. That prompt is where indie builders' evenings go to die.</p>
<p>Honest scope<br />The Figma UI kit is free — take it, use it, no strings.<br />The boilerplate (Next.js code + synced rules files) is paid. It's the part that took months and it's how I keep building this.<br />It won't make AI output pixel-perfect 100% of the time. It makes the failure mode "small fix" instead of "different app."<br />Try it / tear it apart</p>
<p>The free kit is on <a href="https://www.figma.com/community/file/1662380003116366149/gliakit-saas-ui-kit-design-system-figma-code">Figma Community</a>, and everything else is at <a href="https://www.gliakit.com/">https://www.gliakit.com/</a>.</p>
<p>I'm genuinely curious how others are handling drift — hand-maintained rules files? MCP? Just accepting the chaos? Tell me in the comments, especially if you think there's a better approach than syncing. I'd rather find out here than after v2.</p>
]]></content:encoded></item></channel></rss>