feat: scaffold ShieldAI React Native mobile app MVP (FRE-4572)

Build complete Expo/React Native mobile app with:
- Auth flow: email/password login, registration, biometric auth
- Dashboard: exposure summary, spam stats, voice protection status
- DarkWatch: watch list management, exposure feed, alert toggles
- SpamShield: call/text history, whitelist/blacklist management
- VoicePrint: family member enrollment, voice analysis
- Settings: tier management, notification preferences, security
- Push notification integration via FCM/APNs
- Offline-first state management with Zustand + AsyncStorage
- Integration with @shieldai/mobile-api-client for API services
- React Navigation with auth-aware routing (stack + bottom tabs)
- Dark theme with consistent design system (colors, spacing, typography)
- Network status monitoring and offline request queuing

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-17 10:12:46 -04:00
parent 7fb8b83810
commit a071aa736e
50 changed files with 3026 additions and 13 deletions

View File

@@ -1,22 +1,61 @@
{
"name": "mobile",
"version": "0.1.0",
"name": "@shieldai/mobile",
"version": "1.0.0",
"private": true,
"type": "module",
"main": "expo-router/entry",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint src/"
"dev": "expo start",
"dev:ios": "expo run:ios",
"dev:android": "expo run:android",
"build": "expo build",
"build:ios": "expo build:ios",
"build:android": "expo build:android",
"lint": "eslint src/",
"typecheck": "tsc --noEmit",
"test": "jest",
"clean": "rm -rf node_modules .expo .expo-shared"
},
"dependencies": {
"solid-js": "^1.8.14",
"@shieldsai/shared-auth": "workspace:*",
"@shieldsai/shared-ui": "workspace:*",
"@shieldsai/shared-utils": "workspace:*"
"@shieldai/mobile-api-client": "workspace:*",
"@expo/vector-icons": "^14.0.0",
"@react-native-async-storage/async-storage": "1.23.1",
"@react-native-community/netinfo": "11.4.1",
"@react-navigation/bottom-tabs": "^6.5.0",
"@react-navigation/native": "^6.1.0",
"@react-navigation/stack": "^6.3.0",
"expo": "~51.0.0",
"expo-av": "~14.0.0",
"expo-constants": "~16.0.0",
"expo-crypto": "~13.0.0",
"expo-device": "~6.0.0",
"expo-file-system": "~17.0.0",
"expo-image-picker": "~15.0.0",
"expo-linking": "~6.3.0",
"expo-local-authentication": "~14.0.0",
"expo-notifications": "~0.28.0",
"expo-secure-store": "~13.0.0",
"expo-status-bar": "~1.12.0",
"expo-updates": "~0.18.0",
"react": "18.2.0",
"react-native": "0.74.5",
"react-native-gesture-handler": "~2.16.0",
"react-native-reanimated": "~3.10.0",
"react-native-safe-area-context": "4.10.5",
"react-native-screens": "3.31.0",
"react-native-svg": "15.2.0",
"zustand": "^4.4.0"
},
"devDependencies": {
"typescript": "^5.3.3",
"vite": "^5.1.4",
"@types/node": "^25.6.0"
"@babel/core": "^7.24.0",
"@types/react": "^18.2.0",
"@types/react-test-renderer": "^18.0.0",
"babel-preset-expo": "^11.0.0",
"eslint": "^8.57.0",
"eslint-plugin-react": "^7.34.0",
"eslint-plugin-react-native": "^4.1.0",
"jest": "^29.7.0",
"react-test-renderer": "18.2.0",
"typescript": "^5.3.0"
}
}