name: mobile-expo
category: mobile
public: true
database: optional
hosting_hints:
- app-store
- play-store
- expo-go
- eas-build
audit_stack:
- analyze
- code-clean
- design-review
- perf
- cso
- a11y
- doc
plugins:
context7: yes
ui-ux-pro-max: yes
gstack: no
---
Mobile Expo / React Native
Application mobile React Native gérée par Expo (managed workflow) ou bare React Native. Distribution iOS + Android via App Store / Play Store, ou Expo Go en dev.
Detection signals
Strong signals (×3)
- FILE:
app.json OR app.config.js OR app.config.ts contenant "expo"
- DEP:
package.json contient "expo"
- FILE:
metro.config.js OR metro.config.ts
- DEP: "react-native"
Medium signals (×2)
- DEP: "expo-router", "@expo/vector-icons", "expo-font"
- DIR:
app/ (Expo Router file-system routing) avec .tsx
- DIR:
assets/ avec icon.png, splash.png
- FILE:
eas.json (EAS Build)
- FILE:
babel.config.js avec preset "babel-preset-expo"
Weak signals (×1)
Counter-signals
- DEP: "next" ET .tsx au root → c'est Next.js (web), pas Expo
- FILE:
astro.config.* → Astro
Implications
- Distribution : App Store (iOS), Play Store (Android), Expo Go (dev), internal distribution (TestFlight/Play Console Internal)
- Base de données : locale (AsyncStorage / SQLite / MMKV / WatermelonDB) + backend (Supabase / Firebase / API custom)
- SEO/GEO : N/A (app native)
- Surface sécurité : GRANDE — AsyncStorage non chiffré par défaut, secrets côté app, deep links exploitables
- UI/UX : CRITIQUE — mobile = exigences spécifiques (gestures, haptics, safe area)
Typical pain points
- Secrets / API keys dans
app.json → exposés dans le bundle
- AsyncStorage utilisé pour tokens → JWT en clair sur l'appareil
- Pas d'expo-secure-store ou react-native-keychain pour secrets
- Permissions iOS/Android demandées mal justifiées (rejet review)
- Performances : listes longues sans FlatList/FlashList (re-render entier)
- Images non optimisées / pas de
expo-image (cache + formats)
- Pas de splash screen configuré → écran blanc au démarrage
- Icône app basse résolution
- Deep links non configurés / configurés sans validation
- Pas de crash reporting (Sentry / Bugsnag absents)
- Expo SDK obsolète (upgrade annuel obligatoire)
- Bare workflow sans CI/CD (builds manuels en local)
- Tests E2E absents (Detox / Maestro non configurés)
- i18n absent ou hardcodé
- Accessibilité :
accessibilityLabel absent, focus order cassé, contrast insuffisant
- Dark mode pas supporté (useColorScheme non utilisé)
- Safe area non respectée (contenu sous notch / home indicator)
- Gestures conflits (swipe drawer vs swipe back iOS)
- Over-the-air updates (expo-updates) non utilisées
- app.json "version" / "buildNumber" non incrémentés
Interview questions (adaptive)
En plus du set minimum business :
- Workflow : Expo managed / Expo bare / pur React Native ?
- SDK Expo version ?
- Navigation : Expo Router / React Navigation / autre ?
- State : Redux / Zustand / Jotai / Context / React Query seul ?
- Backend : Supabase / Firebase / API custom / BaaS autre ?
- Auth : provider + storage (SecureStore / Keychain / AsyncStorage) ?
- Database locale : AsyncStorage / MMKV / SQLite / WatermelonDB / Realm ?
- Push notifications : Expo Push / FCM / OneSignal / aucun ?
- Crash reporting : Sentry / Bugsnag / aucun ?
- Analytics : Amplitude / Mixpanel / PostHog / Firebase / aucun ?
- Tests : unit (Jest) + E2E (Detox / Maestro) ?
- Build + distribution : EAS Build + EAS Submit / Xcode/Gradle manuels / CI custom ?
- Over-the-air updates activées ?
- Cible OS : iOS min version / Android min API level ?
- Dark mode supporté ?
- i18n : librairie + langues ?
- Accessibilité : audit VoiceOver / TalkBack effectué ?
- App Store Review : première soumission faite / rejetée / en cours ?
Plugin recommendations
- context7 : ON — Expo SDK évolue vite (breaking chaque SDK)
- ui-ux-pro-max : ON — mobile UX spécifique
- gstack : OFF (pas de browser QA)
Example project layout (Expo Router)
app.json OR app.config.ts
package.json
metro.config.js
babel.config.js
eas.json
app/
_layout.tsx (root layout)
index.tsx (home)
(tabs)/
_layout.tsx
home.tsx
profile.tsx
auth/
login.tsx
components/
Button.tsx
Card.tsx
hooks/
lib/
supabase.ts
assets/
icon.png
splash.png
adaptive-icon.png
fonts/
.env.example