1. Publish @theme as a contract
Expose colors, typography, radii, shadows, and motion as named design tokens in one (or few) theme files. Document breaking changes the same way you would for a REST schema: semantic names stable, values negotiable. Random text-[#…] in feature code is a code-review fail unless tied to a one-off experiment with a ticket to fold it into the theme.
2. Monorepo: one source of style truth
In a monorepo, I put shared tokens and base layers in a small internal package or shared CSS entry that every app imports. Each app adds its own @source globs for local templates—never duplicate the full theme per package. That keeps bundle drift and “why is marketing blue different from admin blue?” incidents out of production.
3. Component libraries: own the seams
Headless primitives plus Tailwind classes work if you standardize variants and slots (e.g. cva or equivalent) and forbid copy-pasting twenty-line class strings across repos. Shared UI ships with typed props and documented variants, not “grep the codebase for this magic string.”
4. Governance beats heroics
Use ESLint (or your stack’s equivalent) with Tailwind-aware rules, require focus-visible and contrast checks in the design system docs, and block infinite arbitrary spacing in hot paths. Pull requests should answer: does this belong in the theme, a component, or is it truly local?
5. Content scanning is an ops concern
Misconfigured @source paths cause missing utilities in prod or bloated dev scans. I keep a checklist per app: frameworks (Next, Vite, Laravel Blade, etc.), story files, emails if they share tokens. CI runs the production build so “works locally” cannot hide a bad glob.
6. Performance and accessibility by default
Track CSS output size after major releases; split marketing and app shells if they diverge. Bake in RTL, reduced motion, and keyboard focus into the same tokens and utilities the team uses daily—large teams will not retrofit a11y from a separate stylesheet later.
Tailwind 4 does not remove the need for architecture and discipline; it gives you a faster, more portable place to put them. Scale the tokens, scan paths, and components—not the number of one-off classes nobody can rename safely.