<?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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Vineeth Pawar - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Vineeth Pawar - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 22 Jun 2026 19:17:07 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/vpawar/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Build a Scalable Design System in a Monorepo ]]>
                </title>
                <description>
                    <![CDATA[ When you hear "Scalable Design System with a Monorepo Ecosystem" it might sound like a bunch of jargon glued together. Let's simplify: Design system: the building blocks of your product (buttons, inp ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-build-a-scalable-design-system-in-a-monorepo/</link>
                <guid isPermaLink="false">6a397b0b12901591d0138d81</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design Systems ]]>
                    </category>
                
                    <category>
                        <![CDATA[ monorepo ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Frontend Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Vineeth Pawar ]]>
                </dc:creator>
                <pubDate>Mon, 22 Jun 2026 18:12:27 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/e1f42e08-4158-4ecb-8d71-5371cfe86707.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When you hear "Scalable Design System with a Monorepo Ecosystem" it might sound like a bunch of jargon glued together. Let's simplify:</p>
<ul>
<li><p><strong>Design system</strong>: the building blocks of your product (buttons, inputs, styles, tokens, patterns).</p>
</li>
<li><p><strong>Monorepo</strong>: one big repo with multiple packages living together, sharing tooling and workflows.</p>
</li>
</ul>
<p>Now here's the magic: when you combine them, you get modularity, consistency, and a faster development cycle. Basically the dream setup for teams working across web, mobile, and beyond.</p>
<p>In this article, you'll learn how to build a modular, scalable design system using React and Turborepo – the same approach used by Microsoft, IBM, and Shopify.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a href="#heading-prerequisites">Prerequisites</a></p>
</li>
<li><p><a href="#heading-whos-already-doing-this">Who's Already Doing This?</a></p>
</li>
<li><p><a href="#heading-why-it-works">Why it Works</a></p>
</li>
<li><p><a href="#heading-think-of-it-like-a-ladder">Think of it Like a Ladder</a></p>
</li>
<li><p><a href="#heading-the-same-design-system-everywhere">The Same Design System, Everywhere</a></p>
</li>
<li><p><a href="#heading-should-you-go-monorepo">Should You Go Monorepo?</a></p>
</li>
<li><p><a href="#heading-when-a-monorepo-is-not-the-right-fit">When a Monorepo Is Not the Right Fit</a></p>
</li>
<li><p><a href="#heading-lets-build-our-design-system">Let's Build Our Design System</a></p>
<ul>
<li><p><a href="#heading-create-your-turborepo-project">Create Your Turborepo Project</a></p>
</li>
<li><p><a href="#heading-design-your-package-structure">Design Your Package Structure</a></p>
</li>
<li><p><a href="#heading-build-your-design-tokens-package">Build Your Design Tokens Package</a></p>
</li>
<li><p><a href="#heading-create-primitive-components">Create Primitive Components</a></p>
</li>
<li><p><a href="#heading-configure-the-turborepo-pipeline">Configure the Turborepo Pipeline</a></p>
</li>
<li><p><a href="#heading-build-the-yourds-packages">Build the @yourds Packages</a></p>
</li>
<li><p><a href="#heading-use-your-design-system-in-an-app">Use Your Design System in an App</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-wrapping-up">Wrapping Up</a></p>
</li>
</ul>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Before you follow along, you'll want to have a few things in place:</p>
<ul>
<li><p><strong>Working knowledge of React and TypeScript:</strong> You should be comfortable creating components and reading basic type annotations.</p>
</li>
<li><p><strong>Familiarity with the command line:</strong> You'll run <code>npx</code>, <code>npm</code>, and similar commands throughout.</p>
</li>
<li><p><strong>Node.js installed (v18 or later)</strong>: Verify with <code>node -v</code>. If you don't have it, install it from <a href="https://nodejs.org">nodejs.org</a>.</p>
</li>
<li><p><strong>A package manager:</strong> This guide uses <code>npm</code>, but <code>pnpm</code> or <code>yarn</code> will work with minor command tweaks.</p>
</li>
<li><p><strong>A code editor</strong> of your choice (VS Code is a popular fit for TypeScript work).</p>
</li>
</ul>
<p>You don't need any prior experience with monorepos or Turborepo. We'll set everything up from scratch.</p>
<h2 id="heading-whos-already-doing-this">Who's Already Doing This?</h2>
<p>Turns out, some of the biggest design systems you've heard of run inside monorepos:</p>
<ol>
<li><p><a href="https://github.com/microsoft/fluentui/wiki/Fluent-UI-React-Repo-Structure/d7060a0782b639b657cf7a9c0826bff757ad78b5">Microsoft Fluent UI</a>: lives in a multi-package monorepo that ships React components, Web Components, and even design tokens.</p>
</li>
<li><p><a href="https://github.com/carbon-design-system/ibm-products">IBM Carbon</a>: multiple packages like <code>@carbon/ibm-products</code> come straight out of their Carbon monorepo.</p>
</li>
<li><p><a href="https://github.com/Shopify/polaris-react">Shopify Polaris</a>: openly describes itself as a monorepo, packaging React components, docs, and even a VS Code extension.</p>
</li>
<li><p><a href="https://github.com/atlassian/pragmatic-drag-and-drop">Atlassian Atlaskit</a>: their public <code>@atlaskit/*</code> packages are published from a large internal monorepo.</p>
</li>
<li><p><a href="https://github.com/mui/mui-public/tree/master">MUI</a> (Material UI): maintained as a mono-repository to coordinate React components, tooling, and docs.</p>
</li>
<li><p><a href="https://github.com/elastic/eui">Elastic EUI</a>: developed and released from a single repo, with discussions about monorepo publishing flows.</p>
</li>
</ol>
<h2 id="heading-why-it-works">Why it Works</h2>
<p>When you put all the pieces of your design system in one repository, you get a few specific advantages that are hard to replicate in a split-repo setup. Each of these reinforces the others, which is why teams that adopt this pattern rarely go back.</p>
<p>Here's what makes it work:</p>
<ul>
<li><p><strong>Consistency</strong>: tokens, styles, and primitives are defined once and flow everywhere.</p>
</li>
<li><p><strong>Faster iteration</strong>: fix a bug in Button and the updates cascade to mobile, desktop, and docs instantly.</p>
</li>
<li><p><strong>Shared tooling</strong>: linting, tests, CI pipelines, and release workflows are configured once, and then applied to all packages.</p>
</li>
<li><p><strong>Versioning control</strong>: with tools like Changesets or Lerna, you can release packages independently but keep them aligned.</p>
</li>
<li><p><strong>Cross-platform flexibility</strong>: the same building blocks can power React web apps, React Native, Electron apps, SDKs, and documentation sites.</p>
</li>
</ul>
<h2 id="heading-think-of-it-like-a-ladder">Think of it Like a Ladder 🪜</h2>
<p>The cleanest way to picture a monorepo design system is as a series of stacked layers. Each layer builds on the one beneath it, and each layer has a clear job.</p>
<p>New contributors find their way around faster because the relationships between packages are predictable: tokens flow up into primitives, primitives compose into layouts, and layouts assemble into screens.</p>
<p>The diagram below shows this stack visually:</p>
<img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhcenvi46zcjfwrl1odj.png" alt="Layered architecture of a monorepo design system: design tokens at the base, then plugins (utility helpers), then layouts, then screens, then navigators at the top, with the app shell consuming a single package that pulls all layers together" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>At the base, you've got <code>primitives</code> (tokens, styles).</p>
<p>Above that: <code>plugins</code> (utility helpers).</p>
<p>Then come <code>layouts</code>, built from plugins + primitives.</p>
<p>Then <code>screens</code>, built from layouts.</p>
<p>Finally, <code>navigators</code> tie screens together.</p>
<p>At the very top: your app imports just one package, and boom! The UI is environment-agnostic.</p>
<h2 id="heading-the-same-design-system-everywhere">The Same Design System, Everywhere</h2>
<p>The real payoff of this ladder is that you climb it once, then reuse the whole thing across every platform you ship to.</p>
<p>A button defined in your <code>primitives</code> package can render in a web app, a React Native mobile app, an Electron desktop app, or a documentation site without you rewriting it for each environment.</p>
<p>The diagram below shows the same design system flowing into three different app types, with each environment importing the same package and getting consistent styling, behaviour, and accessibility out of the box:</p>
<img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsa4y8m103unz7hefr3u.png" alt="The same design system feeding three different apps from a single import: a web application on a browser, a desktop application in an Electron-style window, and a mobile application on a phone screen. Each app pulls from the shared primitives and tokens packages, ensuring buttons, typography, and spacing look and behave the same everywhere" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>Whether it's web, desktop, or mobile, the design system climbs that same ladder.</p>
<h2 id="heading-should-you-go-monorepo">Should You Go Monorepo?</h2>
<p>Not every team needs one. But if you're building a design system that's meant to serve multiple apps, stay consistent across platforms, and support lots of contributors, then a monorepo becomes less of a buzzword and more of a sanity-saver.</p>
<h2 id="heading-when-a-monorepo-is-not-the-right-fit">When a Monorepo Is Not the Right Fit</h2>
<p>A quick clarification first, because monorepos sometimes get tangled up with another debate. The "monorepo vs polyrepo" question is <strong>not</strong> the same as the "monolith vs microservices" question. You can absolutely run microservices out of a monorepo (Google and Facebook do this at massive scale).</p>
<p>The two choices live on different axes: monorepo vs polyrepo is about <em>where the code lives</em>, while monolith vs microservices is about <em>how the runtime is shaped</em>.</p>
<p>With that out of the way, here are a few signs a monorepo may not be the best fit for your situation:</p>
<ul>
<li><p><strong>You're a small team shipping a single product.</strong> The tooling overhead of a monorepo (workspace config, build pipelines, package boundaries) may slow you down more than it helps. A single React app with no shared libraries probably doesn't need this layer.</p>
</li>
<li><p><strong>Your packages have wildly different release cadences and stakeholders.</strong> If two parts of your codebase are owned by teams that need very different deploy pipelines, governance, or security postures, separate repos can reduce friction.</p>
</li>
<li><p><strong>You can't invest in monorepo tooling.</strong> Tools like Turborepo, Nx, and Changesets do a lot of heavy lifting, but they have a learning curve. If your team can't dedicate time to set them up and maintain them, you may struggle.</p>
</li>
<li><p><strong>You're using languages or runtimes that don't share well.</strong> Monorepos shine when most packages live in the same toolchain. Mixing Node, Go, Rust, and Python in one repo is possible, but the build-tool story gets harder.</p>
</li>
</ul>
<p>For most teams building a serious design system, none of these are dealbreakers. But it's worth checking your situation before committing.</p>
<h2 id="heading-lets-build-our-design-system">Let's Build Our Design System</h2>
<h3 id="heading-create-your-turborepo-project">Create Your Turborepo Project</h3>
<p>Start by creating a new Turborepo project. This gives you the perfect foundation for a scalable monorepo.</p>
<pre><code class="language-plaintext"># Create a new Turborepo project
npx create-turbo@latest my-design-system

# Navigate to the project
cd my-design-system

# Install dependencies
npm install
</code></pre>
<p>Turborepo creates a workspace with <code>apps/</code> and <code>packages/</code> folders, shared tooling configuration, and optimized build pipelines.</p>
<h3 id="heading-design-your-package-structure">Design Your Package Structure</h3>
<p>Next, create a logical hierarchy for your design system packages. Think of it like a ladder, as I mentioned above: each level builds on the one below.</p>
<pre><code class="language-plaintext">my-design-system/
├── packages/
│   ├── tokens/          # Design tokens (colors, spacing, typography)
│   ├── primitives/      # Base components (Button, Input, Card)
│   ├── layouts/         # Layout components (Grid, Stack, Container)
├── apps/
│   ├── web/            # Example web app
│   └── docs/           # Documentation site
└── turbo.json          # Turborepo configuration
</code></pre>
<h4 id="heading-detailed-file-structure">Detailed file structure</h4>
<pre><code class="language-plaintext">my-design-system/
├── packages/
│   ├── tokens/
│   │   ├── src/
│   │   │   ├── colors.ts
│   │   │   ├── spacing.ts
│   │   │   ├── typography.ts
│   │   │   └── index.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── primitives/
│   │   ├── src/
│   │   │   ├── Button/
│   │   │   │   └── Button.tsx
│   │   │   ├── Input/
│   │   │   │   └── Input.tsx
│   │   │   └── index.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── layouts/
│   │   ├── src/
│   │   │   ├── Grid/
│   │   │   ├── Stack/
│   │   │   └── index.ts
│   │   └── package.json
├── apps/
│   ├── web/
│   │   ├── src/
│   │   │   ├── App.tsx
│   │   │   └── main.tsx
│   │   ├── index.html
│   │   └── package.json
│   └── docs/
│       ├── src/
│       └── package.json
├── turbo.json
├── package.json
└── README.md
</code></pre>
<h3 id="heading-build-your-design-tokens-package">Build Your Design Tokens Package</h3>
<p>Start with the foundation: <strong>design tokens</strong>. Tokens are the smallest, most reusable units of a design system: a color value, a spacing step, a font size, a border radius. Instead of hard-coding <code>padding: 16px</code> or <code>color: #3b82f6</code> everywhere, you reference a token like <code>spacing.md</code> or <code>colors.primary[500]</code>.</p>
<p>The benefits are huge:</p>
<ul>
<li><p><strong>One place to change a value:</strong> update a token once and every component that uses it updates automatically.</p>
</li>
<li><p><strong>Theming becomes trivial:</strong> want a dark mode? Just swap which tokens resolve to which values.</p>
</li>
<li><p><strong>Cross-platform consistency:</strong> the same token names work in web CSS, native styles, even Figma.</p>
</li>
</ul>
<p>Tokens are the DNA of your design system. Let's build them.</p>
<pre><code class="language-plaintext"># Create the tokens package
mkdir -p packages/tokens/src
cd packages/tokens
</code></pre>
<p>Update these in your <code>packages/tokens/package.json</code>. This file declares the package name, version, build scripts, and dev dependencies needed to compile the token source files into a publishable package:</p>
<pre><code class="language-json">{
  "name": "@yourds/tokens",
  "version": "1.0.0",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsup src/index.ts --format cjs,esm --dts",
    "dev": "tsup src/index.ts --format cjs,esm --dts --watch"
  },
  "devDependencies": {
    "tsup": "^8.0.0",
    "typescript": "^5.0.0"
  }
}
</code></pre>
<p>Update these in your <code>packages/tokens/src/colors.ts</code>. This file defines the <strong>color tokens</strong>: a named palette of color values organised by intent (primary, gray) and shade (50 is lightest, 900 is darkest). Components reference these by name rather than hardcoding hex codes:</p>
<pre><code class="language-javascript">export const colors = {
  primary: {
    50: '#f0f9ff',
    100: '#e0f2fe',
    500: '#3b82f6',
    600: '#2563eb',
    900: '#1e3a8a'
  },
  gray: {
    50: '#f9fafb',
    100: '#f3f4f6',
    500: '#6b7280',
    900: '#111827'
  }
} as const;
</code></pre>
<p>Update these in your <code>packages/tokens/src/spacing.ts</code>. This file defines the <strong>spacing scale</strong>: a set of standard size steps that components use for padding, margin, and gap values. Using a fixed scale (xs, sm, md, lg, and so on) keeps spacing consistent across the UI:</p>
<pre><code class="language-typescript">export const spacing = {
  xs: '0.25rem',    // 4px
  sm: '0.5rem',     // 8px
  md: '1rem',       // 16px
  lg: '1.5rem',     // 24px
  xl: '2rem',       // 32px
  '2xl': '3rem'     // 48px
} as const;
</code></pre>
<p>Update these in your <code>packages/tokens/src/typography.ts</code>. This file defines the <strong>typography tokens</strong>: font sizes and font weights that components use for text. Like spacing, these are named steps rather than arbitrary pixel values:</p>
<pre><code class="language-typescript">export const typography = {
  fontSizes: {
    xs: '0.75rem',
    sm: '0.875rem',
    base: '1rem',
    lg: '1.125rem',
    xl: '1.25rem',
    '2xl': '1.5rem'
  },
  fontWeights: {
    normal: 400,
    medium: 500,
    semibold: 600,
    bold: 700
  }
} as const;
</code></pre>
<p>Update these in your <code>packages/tokens/src/index.ts</code>. This file is the <strong>public entry point</strong> of the package: it re-exports everything from the three token files so consumers can do <code>import { colors, spacing, typography } from "@yourds/tokens"</code> in a single line:</p>
<pre><code class="language-typescript">export * from './colors';
export * from './spacing';
export * from './typography';
</code></pre>
<h3 id="heading-create-primitive-components">Create Primitive Components</h3>
<p>Build your base components that consume the design tokens:</p>
<pre><code class="language-plaintext"># Create the primitives package
mkdir -p packages/primitives/src
cd packages/primitives

# Install dependencies
npm install react react-dom
</code></pre>
<p>Update these in your <code>packages/primitives/package.json</code>:</p>
<pre><code class="language-json">{
  "name": "@yourds/primitives",
  "version": "1.0.0",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsup src/index.ts --format cjs,esm --dts --external react",
    "dev": "tsup src/index.ts --format cjs,esm --dts --external react --watch"
  },
  "peerDependencies": {
    "react": "^18.0.0",
    "react-dom": "^18.0.0"
  },
  "devDependencies": {
    "@types/react": "^18.0.0",
    "tsup": "^8.0.0",
    "typescript": "^5.0.0"
  }
}
</code></pre>
<p>Update these in your <code>packages/primitives/src/Button/Button.tsx</code>:</p>
<pre><code class="language-typescript">import React from 'react';
import { colors, spacing } from '@yourds/tokens';

interface ButtonProps {
  variant?: 'primary' | 'secondary' | 'outline';
  size?: 'sm' | 'md' | 'lg';
  children: React.ReactNode;
  onClick?: () =&gt; void;
  disabled?: boolean;
}

export const Button: React.FC&lt;ButtonProps&gt; = ({
  variant = 'primary',
  size = 'md',
  children,
  disabled = false,
  ...props
}) =&gt; {
  const baseStyles = {
    border: 'none',
    borderRadius: '0.5rem',
    cursor: disabled ? 'not-allowed' : 'pointer',
    fontWeight: 500,
    transition: 'all 0.2s ease',
    opacity: disabled ? 0.6 : 1
  };

  const variants = {
    primary: {
      backgroundColor: colors.primary[500],
      color: 'white',
      ':hover': { backgroundColor: colors.primary[600] }
    },
    secondary: {
      backgroundColor: colors.gray[100],
      color: colors.gray[900],
      ':hover': { backgroundColor: colors.gray[200] }
    },
    outline: {
      backgroundColor: 'transparent',
      color: colors.primary[500],
      border: `1px solid ${colors.primary[500]}`,
      ':hover': { backgroundColor: colors.primary[50] }
    }
  };

  const sizes = {
    sm: { padding: `\({spacing.xs} \){spacing.sm}`, fontSize: '0.875rem' },
    md: { padding: `\({spacing.sm} \){spacing.md}`, fontSize: '1rem' },
    lg: { padding: `\({spacing.md} \){spacing.lg}`, fontSize: '1.125rem' }
  };

  const buttonStyle = {
    ...baseStyles,
    ...variants[variant],
    ...sizes[size]
  };

  return (
    &lt;button style={buttonStyle} disabled={disabled} {...props}&gt;
      {children}
    &lt;/button&gt;
  );
};
</code></pre>
<p>Update these in your <code>packages/primitives/src/index.ts</code>:</p>
<pre><code class="language-typescript">export { Button } from './Button/Button';
export type { ButtonProps } from './Button/Button';
</code></pre>
<h3 id="heading-configure-the-turborepo-pipeline">Configure the Turborepo Pipeline</h3>
<p>Now, set up the build pipeline in <code>turbo.json</code> to ensure packages build in the correct order.</p>
<pre><code class="language-json">{
  "$schema": "https://turbo.build/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {},
    "type-check": {
      "dependsOn": ["^build"]
    }
  }
}
</code></pre>
<h3 id="heading-build-the-yourds-packages">Build the @yourds Packages</h3>
<p>With the tokens and primitives packages defined, the next step is to compile them so they can be consumed by your apps.</p>
<p>Running <code>npm install</code> at the root resolves all workspace dependencies, including the internal links between <code>@yourds/tokens</code> and <code>@yourds/primitives</code>. Then <code>npm run build</code> walks through every package and runs each one's <code>build</code> script, which Turborepo orders correctly so <code>tokens</code> compiles before <code>primitives</code> (since primitives depend on tokens). The final <code>npm install</code> step then registers the built packages so your <code>apps/web</code> app can import them by name:</p>
<pre><code class="language-plaintext"># Go to the root of the monorepo
npm install

# Compile every package in the right order
npm run build

# Register the built packages for the apps to use
npm install @yourds/tokens @yourds/primitives
</code></pre>
<p>If everything ran successfully, you should see a <code>dist/</code> folder inside both <code>packages/tokens</code> and <code>packages/primitives</code>, containing compiled JavaScript and TypeScript declaration files.</p>
<h3 id="heading-use-your-design-system-in-an-app">Use Your Design System in an App</h3>
<p>Now you can consume your design system in any React application.</p>
<p>The example below replaces the default content in your <code>apps/web/src/App.tsx</code> file with a small home page that demonstrates two things at once: importing primitives (the <code>Button</code> component) from <code>@yourds/primitives</code>, and importing tokens (<code>colors</code>, <code>spacing</code>) directly from <code>@yourds/tokens</code> to style standard HTML elements like the wrapper <code>&lt;div&gt;</code> and the <code>&lt;h1&gt;</code>.</p>
<p>The result is a fully working page that uses your design system end-to-end, with zero hardcoded colors or spacing values:</p>
<pre><code class="language-typescript">import { Button } from "@yourds/primitives";
import { colors, spacing } from "@yourds/tokens";

export default function Home() {
  return (
    &lt;div style={{ padding: spacing.lg }}&gt;
      &lt;h1 style={{ color: colors.primary[500] }}&gt;My App with Design System&lt;/h1&gt;
      &lt;Button variant="primary" size="lg"&gt;
        Get Started
      &lt;/Button&gt;
      &lt;Button variant="outline" size="md"&gt;
        Learn More
      &lt;/Button&gt;
    &lt;/div&gt;
  );
}
</code></pre>
<p>Once you save the file, run the app in development mode:</p>
<pre><code class="language-plaintext">npx turbo dev --filter=web
</code></pre>
<p>You should see your home page render with the <code>primary[500]</code> blue heading, padded by <code>spacing.lg</code>, and two buttons styled by your shared design system. Any change you make to a token (say, swapping the primary color) will flow into this page automatically the next time you rebuild.</p>
<h2 id="heading-wrapping-up">Wrapping up</h2>
<p>A monorepo won't magically make your design system perfect. But it does give you:</p>
<ul>
<li><p>A shared space where everything connects</p>
</li>
<li><p>The agility to publish parts independently</p>
</li>
<li><p>The clarity to scale design across teams and platforms</p>
</li>
</ul>
<p>No wonder the biggest design systems in the world are already doing it.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
