skills/react-native/SKILL.md
Convert Stitch HTML designs to React Native components with StyleSheet
npx skillsauth add google-labs-code/stitch-skills stitch::react-nativeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a mobile engineer focused on transforming Stitch web designs into clean, production-ready React Native code. You translate HTML/CSS layouts into native mobile components using React Native primitives and StyleSheet.
list_tools to find the Stitch MCP prefix. Use this prefix (e.g., stitch:) for all subsequent calls.[prefix]:get_screen to retrieve the design JSON..stitch/designs/{page}.html and .stitch/designs/{page}.png already exist:
bash scripts/fetch-stitch.sh "[htmlCode.downloadUrl]" ".stitch/designs/{page}.html"=w{width} to the screenshot URL first, where {width} is the width value from the screen metadata (Google CDN serves low-res thumbnails by default). Then run: bash scripts/fetch-stitch.sh "[screenshot.downloadUrl]=w{width}" ".stitch/designs/{page}.png".stitch/designs/{page}.png) to confirm design intent and layout details.Map HTML elements to React Native components using these rules:
| HTML | React Native | Notes |
|------|-------------|-------|
| <div> | View | Default container |
| <span>, <p>, <h1>-<h6> | Text | All text must be wrapped in Text. Nest Text for inline styling. |
| <img> | Image | Use source={{ uri }} for remote images, require() for local assets. |
| <button>, <a> | Pressable | Prefer Pressable over TouchableOpacity. Use onPress instead of onClick. |
| <input> | TextInput | Map placeholder, value, onChangeText. |
| <scroll container> | ScrollView | For short lists only. Use FlatList for long or dynamic lists. |
| <ul>/<ol> with many items | FlatList | Requires data, renderItem, keyExtractor. |
| <section> with grouped data | SectionList | For grouped data with headers. Use tab navigator for tab-based layouts. |
| <select> | Third-party picker or custom modal | React Native has no built-in select. |
| <svg> | react-native-svg | Convert SVG markup to Svg, Path, Circle, etc. |
| Root wrapper | SafeAreaView | Wrap top-level screens to avoid notch/status bar overlap. |
CSS and Tailwind classes do not work in React Native. Convert all styles to StyleSheet.create():
Layout: Flexbox is the default layout system. flexDirection defaults to 'column' (not 'row' like web CSS).
display: flex is implicit on every View.justify-content maps to justifyContent.align-items maps to alignItems.gap maps to gap (React Native 0.71+). For older versions, use marginBottom on children.Dimensions: Use numbers (not strings). width: 100 means 100 density-independent pixels.
width: '100%'.useWindowDimensions() from react-native.vw/vh. Calculate from Dimensions.get('window').Typography: All text styles must be on Text components, never on View.
font-size maps to fontSize (number, not string).font-weight maps to fontWeight (string: '400', '700', 'bold').line-height maps to lineHeight (number).letter-spacing maps to letterSpacing.text-transform maps to textTransform.color applies to Text only.Borders and shadows:
border-radius maps to borderRadius.box-shadow does not exist. Use elevation (Android) and shadowColor/shadowOffset/shadowOpacity/shadowRadius (iOS).Platform.select() to apply platform-specific shadow styles.Unsupported CSS properties (handle manually or skip):
hover, transition, animation (use react-native-reanimated for animations).position: fixed (use position: 'absolute' with manual offset).overflow: auto (use ScrollView).z-index works but only between sibling views.opacity works. visibility: hidden does not exist; use conditional rendering or opacity: 0.Color extraction: Extract the Tailwind config from the HTML <head>. Map color tokens to a theme.ts constants file instead of hardcoding hex values in StyleSheet.
When the design requires different behavior on iOS and Android:
import { Platform } from 'react-native';
const styles = StyleSheet.create({
shadow: Platform.select({
ios: {
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 4,
},
android: {
elevation: 4,
},
}),
});
src/components/atoms/, src/components/molecules/, src/components/organisms/.src/hooks/. Components should only handle rendering.src/data/mockData.ts. Components receive data through props.[ComponentName]Props with readonly property modifiers.src/theme.ts. Reference them in StyleSheet.create().NativeStackScreenProps or BottomTabScreenProps.accessibilityLabel and accessibilityRole. Images need accessibilityLabel. Use accessibilityState for toggles and checkboxes.SafeAreaView from react-native-safe-area-context (not the one from react-native).node_modules is missing, run npm install to enable the validation tools.src/theme.ts from the extracted Tailwind config. Define colors, spacing, typography, and shadow presets.src/data/mockData.ts based on the design content. Extract all text, image URIs, and list data.resources/component-template.tsx as a base. Find and replace all instances of StitchComponent with the actual component name. Map HTML elements to React Native primitives following the mapping table above.NavigationContainer with a stack or tab navigator in App.tsx.npm run validate <file_path> for each component.resources/architecture-checklist.md.npx react-native start or npx expo start to verify the live result on a simulator/device.<Text>. Verify all text nodes are wrapped.<img>, React Native Image has no intrinsic size. Always specify width and height in styles or use aspectRatio.ScrollView with a plain View or use FlatList ListHeaderComponent/ListFooterComponent.development
Convert Stitch HTML designs to React Native components with StyleSheet
development
Semantic Design System Skill for Google Stitch. Generates agent-friendly DESIGN.md files that enforce premium, anti-generic UI standards — strict typography, calibrated color, asymmetric layouts, perpetual micro-motion, and hardware-accelerated performance.
development
Teaches agents to iteratively build websites using Stitch with an autonomous baton-passing loop pattern
testing
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.