Guides building an Airbnb DLS-aligned design system for Expo/React Native with Unistyles, Reanimated, and Skia. Covers tokens, theming, variant-driven APIs, and web/iOS parity.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pproenca-dot-skills-1:expo-design-systemThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Opinionated, strict design system engineering for Expo / React Native apps on the New Architecture, targeting both web and native iOS. Contains 63 rules across 11 categories, prioritized by impact. Derived from Airbnb's Design Language System (DLS), the Unistyles v3 documentation, and the React Native ecosystem (Reanimated, Gesture Handler, Skia, FlashList, Expo SDK). The styling engine is Unis...
Opinionated, strict design system engineering for Expo / React Native apps on the New Architecture, targeting both web and native iOS. Contains 63 rules across 11 categories, prioritized by impact. Derived from Airbnb's Design Language System (DLS), the Unistyles v3 documentation, and the React Native ecosystem (Reanimated, Gesture Handler, Skia, FlashList, Expo SDK). The styling engine is Unistyles v3; the component API follows the Airbnb DLS pattern of variant props over style escape hatches.
This skill is the infrastructure layer — it teaches how to BUILD the design system itself, the React Native counterpart to ios-design-system. All code examples follow the same non-negotiable constraints:
@clinic/design-system + domain; never another feature's internalsstyle escape hatch_web pseudo-states and Platform splits, never a forked web stylesheet| Sibling Skill | Its Focus | This Skill's Focus |
|---|---|---|
ios-design-system | The SwiftUI design system for the same clinic app | The Expo / React Native counterpart |
expo-react-native-coder | Feature development (screens, navigation, data fetching) | Design system infrastructure (tokens, components, theming) |
expo-react-native-performance | App-wide performance optimization | Native-feel performance inside the design system |
react | General React patterns | Expo / React Native design system specifics |
expo-ios-hig | iOS native-feel decisions (navigation, system controls, Liquid Glass) | Cross-platform token/component architecture + web/iOS parity |
All guidance in this skill assumes the clinic modular architecture:
@clinic/design-system + domain only; the app target wires navigation (Expo Router) and dependency injectionReference these guidelines when:
style props, or feature-local tokensPlatform splits, and safe-area/haptics divergences@expo/ui control instead of reimplementing one| Priority | Category | Impact | Prefix | Rules |
|---|---|---|---|---|
| 1 | Token Architecture | CRITICAL | token- | 6 |
| 2 | Theming & Adaptivity | CRITICAL | theme- | 5 |
| 3 | Component API Contracts | CRITICAL | api- | 8 |
| 4 | Cross-Platform Parity | CRITICAL | platform- | 5 |
| 5 | Reuse & System Fit | HIGH | reuse- | 4 |
| 6 | Styling Engine (Unistyles) | HIGH | style- | 6 |
| 7 | Typography & Iconography | HIGH | type- | 5 |
| 8 | Spacing, Layout & Safe Areas | HIGH | space- | 5 |
| 9 | Native-Feel & Performance | HIGH | perf- | 7 |
| 10 | Complex Domain Components | MEDIUM-HIGH | domain- | 6 |
| 11 | Governance & Consistency | MEDIUM | govern- | 6 |
token-three-layer-scale - Layer tokens as raw, semantic, and component scalestoken-define-in-unistyles-theme - Keep the Unistyles theme as the single token sourcetoken-no-raw-values-in-components - Route every color and size through tokenstoken-semantic-naming - Name tokens by role, not by valuetoken-elevation-pairs - Tokenize elevation as surface and shadow pairstoken-avoid-over-abstraction - Stop at three token layerstheme-runtime-not-rerender - Switch themes via the runtime, no re-rendertheme-stylesheet-theme-arg - Read theme from the StyleSheet argumenttheme-adaptive-system - Follow the system color scheme by defaulttheme-breakpoints-responsive - Use breakpoints, not Dimensions checkstheme-config-single-module - One typed config module for themes and breakpointsapi-variants-over-style-prop - Express visual options as variant propsapi-no-style-escape-hatch - No raw style prop on componentsapi-compound-variants - Compound variants over per-combination componentsapi-slots-for-composition - Slot props over a prop per elementapi-controlled-uncontrolled - Support controlled and uncontrolled stateapi-forward-ref - Forward refs from leaf componentsapi-accessibility-in-contract - Require accessibility props in the contractapi-aschild-polymorphism - Offer asChild instead of wrapper nestingplatform-web-pseudo-states - Add web hover, focus, and cursor to interactive componentsplatform-guard-native-only - Guard native-only APIs behind Platform checks with web fallbacksplatform-divergence-split - Isolate platform differences behind one component APIplatform-input-model - Design for pointer and touch, never hover-onlyplatform-shared-theme-parity - One theme for web and native, with a known divergence mapreuse-inventory-first - Read the design system index before writing any stylereuse-extend-not-fork - Extend a shared component with a variant, don't fork a local onereuse-promote-on-second-use - Promote a pattern to the system on its second usereuse-platform-component-first - Reach for a native control before reimplementing onestyle-stylesheet-create - StyleSheet.create over inline objectsstyle-variants-api - Variants over ternary style arraysstyle-dynamic-functions - Dynamic functions for prop-driven valuesstyle-no-inline-array-merge - No inline array merges in listsstyle-withunistyles-third-party - Theme third-party components with withUnistylesstyle-press-states-from-variants - Press and disabled states as variantstype-scale-tokens - Define a named typography scaletype-respect-font-scaling - Respect OS font scalingtype-text-component-wrapper - Route text through one typed componenttype-font-loading-expo-font - Load fonts before first painttype-icon-registry - Centralize icons in a typed registryspace-spacing-scale - Use a spacing scale on a 4pt gridspace-safe-area-insets - Apply safe-area insets at screen edgesspace-touch-targets - Size touch targets to at least 44 pointsspace-gap-over-margins - Use gap over per-child marginsspace-radius-tokens - Tokenize corner radius by roleperf-flashlist-for-lists - FlashList over ScrollView listsperf-reanimated-ui-thread - Animate on the UI threadperf-gesture-handler - Gesture Handler over PanResponderperf-expo-image - Load images with expo-image and cachingperf-memoize-list-items - Memoize rows and callbacksperf-haptics-key-actions - Add haptics on confirmations and togglesperf-defer-offscreen-work - Defer work past transitionsdomain-calendar-virtualization - Virtualize the appointment calendar by daydomain-note-editor-autosave - Offline-first debounced note autosavedomain-bodychart-skia-canvas - Draw body charts on a Skia canvasdomain-bodychart-gesture-paths - Capture strokes via gestures and shared valuesdomain-compose-from-primitives - Build domain components from primitivesdomain-optimistic-writes - Render optimistic UI for writesgovern-design-system-package - Package the design system with one entrygovern-lint-no-raw-values - Lint against raw colors and inline stylesgovern-prevent-local-tokens - Prevent feature-local tokensgovern-storybook-catalog - Catalog component variants in Storybookgovern-naming-conventions - Enforce one naming conventiongovern-incremental-migration - Migrate to tokens incrementallyRead individual reference files for detailed explanations and code examples:
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
npx claudepluginhub joshuarweaver/cascade-code-general-misc-1 --plugin pproenca-dot-skills-1Generates Expo / React Native design system components that follow expo-design-system rules by construction: variant-driven pressables, slot-based cards, typed text, form fields, FlashList screens, theme tokens, and Storybook catalogs using Unistyles v3.
Builds beautiful native-feeling Expo screens with Apple HIG styling, semantic colors, native controls, SF Symbols, animations, visual effects, gradients, media, and storage.
Builds React Native and Expo UIs: Expo Router navigation, Flexbox layouts, animations, native controls, modals, gestures, and StyleSheet styling.