Core rule
A strong React Native prompt gives the AI four anchors: screens with their jobs, data shape, stack keywords, and visual tone. Skip any one and output drifts toward generic defaults.
The 5 ingredients of a strong React Native prompt
- One-sentence app definition. Audience + job in under 15 words. Gives the AI a North Star.
- Screen list with primary job per screen. Not a vision deck — a one-liner per screen.
- Data shape. Name the tables and the relationships. “Users, posts, comments; RLS by user_id.”
- Stack keywords. “Expo Router, Supabase, NativeWind, react-native-reanimated.”
- Visual tone. Theme, accent color, density, navigation type. Precise enough to decide, loose enough to let the AI create.
Stack keywords that actually steer output
These are the words that flip the AI into proper React Native mode rather than web patterns:
- Navigation: “Expo Router,” “native stack,” “bottom tabs,” “modal presentation”
- Styling: “NativeWind” or “StyleSheet” (pick one and commit — mixing confuses the AI)
- Data: “Supabase with row-level security,” “AsyncStorage for local state”
- Auth: “Clerk,” “Supabase Auth,” “Apple Sign In”
- Native features: “expo-notifications,” “expo-secure-store,” “react-native-maps”
- Animations: “Reanimated,” “Layout animations,” “gesture handler”
- Monetization: “RevenueCat,” “react-native-purchases,” “paywall after 7 days”
Before and after: the same idea, two prompts
Bad prompt:
I want to build a revolutionary habit tracker that helps people change their lives. It should be beautiful and modern. Include everything users would expect.
Good prompt:
Habit tracker for creative professionals. Screens (Expo Router, bottom tabs): - Home: habit list + streak, one-tap check-in - Add habit: form with name, emoji, reminder time - Stats: 30-day heatmap per habit - Settings: theme, paywall entry Data: AsyncStorage for local, Supabase for sync when signed in. Tables: habits, check_ins. Use NativeWind. Dark theme default, orange accent (#fb923c). No emojis in UI except the habit emojis themselves. Notifications via expo-notifications, daily at user-chosen time.
The first produces a generic mobile-web hybrid. The second produces a working Expo app on the first try in ShipNative or any competent AI app builder.
Anti-patterns that break AI output
- Vibe words. “Revolutionary,” “elegant,” “world-class” tell the AI nothing. Drop them.
- Too many screens. 8+ screens in one prompt almost always produces thin implementations. Ship 4, then iterate.
- Mixing platforms. “iOS + Android + Watch + web + CarPlay” in one prompt splits the model’s attention. Pick mobile first.
- Conflicting styling libs. Asking for NativeWind and StyleSheet and Tamagui simultaneously. Pick one.
- Leaving data undefined. Without a data shape, the AI generates mock arrays and fake users. Production-useless.
Iteration tactics that keep output clean
- Name the screen in every follow-up. “On Home, replace the list with a card grid.” Don’t say “the main page.”
- One change per message. Batched changes introduce more regressions.
- Re-state constraints when drifting. “Keep NativeWind, Expo Router,” if you notice the output reverting.
- Ask for diffs, not rewrites. “Only modify the Home screen” keeps other screens stable.
- Reset when stuck. If iteration is compounding damage, take the best output so far, write a new prompt from scratch with the learnings.
Common LLM failure modes in React Native
- Web patterns sneaking in.
divinstead ofView,onClickinstead ofonPress. Fix: name “React Native” in the prompt. - Missing SafeAreaView. Content hidden under notches. Fix: “respect safe areas” in the visual tone line.
- Inconsistent styling. Half the screens use StyleSheet, half NativeWind. Fix: pick one, name it explicitly.
- Navigation param typos. AI forgets a param on the receiving screen. Fix: include the full Expo Router route shape in the prompt.
- Placeholder text everywhere. “Lorem ipsum” in user profiles. Fix: give specific example data in the prompt.
The shortcut
Apps generated in ShipNative already run with mobile-native defaults, Expo Router, and proper state conventions baked in — so your prompts can focus on what the app does, not which library to use. For a structured starter, paste from The Best Prompts for Generating iOS Apps with AI.