How to Sync Existing React Components with Stitch Design Updates
TLDR: The stitch::react-components skill automates a four-phase pipeline—retrieval, style extraction, architectural enforcement, and validation—to keep your React codebase synchronized with evolving Stitch designs.
The google-labs-code/stitch-skills repository provides a purpose-built automation layer for React projects that originate from Stitch designs. When your design system receives updates, the stitch::react-components skill ensures your existing components inherit fresh tokens, structural patterns, and navigation logic without manual drift. This guide explains how to sync existing React components with Stitch design updates using the official skill workflow defined in plugins/stitch-build/skills/react-components/SKILL.md.
Phase 1 – Retrieval & Networking
All screens are fetched via the Stitch MCP (list_tools → get_screen) and saved under .stitch/designs/ according to the source code. If a design already exists locally, the skill prompts you to reuse or refresh it, preventing accidental overwrites.
The fetch-stitch.sh script handles HTML and PNG downloads, accounting for GCS TLS quirks to ensure reliable transfers. Before proceeding, a visual audit of each downloaded screenshot is required to confirm the UI intent matches the design.
Phase 2 – Style Extraction
The skill parses the tailwind.config object embedded in the HTML <head> of each downloaded screen. It extracts colors, fonts, spacing, radii, and typography, then overwrites resources/style-guide.json with the refreshed token set. This guarantees that components consume project-specific design tokens rather than stale or hard-coded values.
Phase 3 – Architectural Rules
After syncing the style guide, the skill enforces strict conventions that prevent architectural decay:
- Modular components – Each reusable UI pattern must live in
src/components/, preventing monolithic page files. - Logic isolation – Event and business logic belongs in
src/hooks/, keeping UI pure and testable. - Data decoupling – Static content resides in
src/data/mockData.ts, avoiding hard-coded strings or images. - Typed Props – Every component must export a
Readonly …Propsinterface; the validator fails compilation without it. - Navigation wiring – Replace every
href="#"with a proper<Link>component and wire the logo to/for functional routing across viewports. - Theme-mapped Tailwind – Use classes derived from
style-guide.json, never raw hex values, ensuring visual consistency and dark-mode support.
Violations trigger the npm run validate script, halting the pipeline until resolved.
Phase 4 – Execution & Validation
With components scaffolded using resources/component-template.tsx and the data layer in place, the skill optionally runs validation and development commands. It explicitly asks for permission before executing npm run validate, tsc --noEmit, or npm run dev, preserving control over the workflow.
Implementation Commands
To sync an existing React project with updated Stitch designs, execute these commands:
# Install the skill globally (if not already present)
npx skills add google-labs-code/stitch-skills --skill react:components --global
# The skill automatically triggers Phase 1-3. For manual token extraction:
node scripts/extract-tailwind-tokens.js
Update your components to consume the refreshed tokens:
// src/components/Card.tsx
import { CardProps } from '../data/mockData';
import { theme } from '../../resources/style-guide.json';
export function Card({ title, description }: Readonly<CardProps>) {
return (
<div className={`bg-${theme.colors.primary} p-${theme.spacing[4]} rounded-${theme.borderRadius.md}`}>
<h2 className={`text-${theme.fontSize.lg} font-${theme.fontFamily.sans}`}>{title}</h2>
<p>{description}</p>
</div>
);
}
Validate the synchronization:
npm run validate src/components/Card.tsx
tsc --noEmit
npm run dev
Summary
- Automated retrieval via
fetch-stitch.shdownloads fresh HTML and PNG assets to.stitch/designs/. - Token extraction updates
resources/style-guide.jsondirectly from the Tailwind config in Stitch exports. - Architectural enforcement requires modular components in
src/components/, isolated logic insrc/hooks/, and decoupled data insrc/data/mockData.ts. - Validation gate ensures
Readonlyprops, proper navigation wiring, and theme-mapped Tailwind classes before code execution.
Frequently Asked Questions
How does the skill handle existing design files?
The skill detects existing files in .stitch/designs/ and prompts you to choose between reusing the cached version or refreshing from the Stitch source. This prevents accidental overwrites while allowing deliberate updates when designs change.
What happens if my components violate the architectural rules?
The npm run validate script (triggered in Phase 3) fails with specific errors pointing to violations such as missing Readonly interfaces, hard-coded colors, or logic embedded in components. The pipeline halts until you refactor the code to comply with the rules defined in resources/architecture-checklist.md.
Can I run the validation and dev server automatically?
No. The skill explicitly asks for permission before running npm run validate, tsc --noEmit, or npm run dev during Phase 4. This gated approach ensures you review generated code before executing potentially destructive or time-consuming commands.
Where do I find the validation rules and component templates?
The core rules reside in plugins/stitch-build/skills/react-components/SKILL.md, while the checklist used by the validator is stored in resources/architecture-checklist.md. Component scaffolding uses resources/component-template.tsx as the boilerplate for new or updated components.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →