Builds, optimizes, and debugs cross-platform mobile applications with React Native and Expo. Implements navigation hierarchies (tabs, stacks, drawers), configures native modules, optimizes FlatList rendering with memo and useCallback, and handles platform-specific code for iOS and Android. Use when building a React Native or Expo mobile app, setting up navigation, integrating native modules, improving scroll performance, handling SafeArea or keyboard input, or configuring Expo SDK projects.
95
100%
Does it follow best practices?
Impact
90%
1.26xAverage score across 6 eval scenarios
Passed
No known issues
FlatList performance optimization
FlatList not ScrollView
100%
100%
Item memo
100%
100%
useCallback for renderItem
100%
100%
useCallback for keyExtractor
100%
100%
getItemLayout used
100%
100%
removeClippedSubviews
100%
100%
maxToRenderPerBatch
100%
100%
windowSize prop
100%
100%
initialNumToRender
100%
100%
No inline styles
100%
100%
No hardcoded dimensions
80%
70%
TypeScript types
100%
100%
Platform-specific form handling
SafeAreaView used
100%
100%
KeyboardAvoidingView used
100%
100%
Platform-specific behavior
100%
100%
Platform.select for styles
0%
100%
Android back handler
100%
100%
Back handler cleanup
100%
100%
Platform guard on BackHandler
100%
100%
Reanimated for animation
30%
100%
No inline styles
87%
100%
TypeScript
100%
100%
No hardcoded dimensions
83%
100%
Project setup and configuration
Feature-based dirs
30%
30%
App router structure
100%
100%
Not-found screen
100%
100%
TS path aliases
50%
100%
TS strict mode
100%
100%
Reanimated plugin last
100%
100%
Module resolver in Babel
0%
100%
MMKV for storage
100%
100%
Zustand with persist
100%
100%
Expo Router in app.json
100%
100%
Protected route redirect
100%
100%
No ScrollView for lists
100%
100%
Expo Router navigation and typed routes
Tab route group
100%
100%
Auth route group
62%
100%
Dynamic recipe route
100%
100%
Typed route params
100%
100%
Auth-gated redirect
100%
100%
Auth redirect for logged-in users
100%
100%
Not-found screen
100%
100%
Deep link scheme
100%
100%
Tab icons
0%
100%
Programmatic navigation with params
50%
100%
No inline styles
100%
57%
TypeScript throughout
100%
100%
MMKV storage and Zustand persistence
MMKV not AsyncStorage
100%
100%
useMMKVBoolean for booleans
0%
0%
useMMKVString for strings
0%
0%
useMMKVNumber for numbers
0%
0%
Zustand store created
100%
100%
Zustand persist middleware
0%
100%
createJSONStorage with MMKV
0%
100%
MMKV adapter shape
0%
100%
TypeScript store interface
100%
100%
No inline styles
71%
100%
Storage choice explained
100%
100%
Reanimated animations and subscription cleanup
useSharedValue used
0%
100%
useAnimatedStyle used
0%
100%
withSpring or withTiming
0%
100%
No setTimeout for animation
0%
0%
AppState subscription cleanup
100%
100%
useEffect cleanup function
100%
100%
TypeScript prop types
100%
100%
Animated.View used
0%
100%
No inline styles
57%
57%
No hardcoded screen dimensions
100%
66%
5b76101
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.