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

@@ -0,0 +1,84 @@
export const COLORS = {
primary: '#4f8cff',
primaryDark: '#3a6fd8',
secondary: '#6c5ce7',
accent: '#00cec9',
success: '#00b894',
warning: '#fdcb6e',
danger: '#ff6b6b',
background: '#0a0e1a',
backgroundLight: '#111827',
card: '#1a2035',
cardLight: '#243049',
text: '#e8eaf0',
textSecondary: '#8b95a8',
textMuted: '#5a6577',
border: '#2a3550',
overlay: 'rgba(0, 0, 0, 0.6)',
} as const;
export const SPACING = {
xs: 4,
sm: 8,
md: 16,
lg: 24,
xl: 32,
xxl: 48,
} as const;
export const FONT_SIZES = {
xs: 12,
sm: 14,
md: 16,
lg: 18,
xl: 20,
xxl: 24,
xxxl: 32,
} as const;
export const BORDER_RADIUS = {
sm: 4,
md: 8,
lg: 12,
xl: 16,
round: 999,
} as const;
export const SHADOWS = {
sm: { shadowColor: '#000', shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2 },
md: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, shadowRadius: 4, elevation: 4 },
lg: { shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.2, shadowRadius: 8, elevation: 8 },
} as const;
export const API_URL = process.env.EXPO_PUBLIC_API_URL || 'https://api.shieldai.freno.me/api/v1';
export const TIER_FEATURES = {
free: {
name: 'Free',
maxExposures: 5,
spamProtection: false,
voicePrint: false,
darkWatch: false,
},
basic: {
name: 'Basic',
maxExposures: 50,
spamProtection: true,
voicePrint: false,
darkWatch: true,
},
premium: {
name: 'Premium',
maxExposures: 200,
spamProtection: true,
voicePrint: true,
darkWatch: true,
},
enterprise: {
name: 'Enterprise',
maxExposures: -1,
spamProtection: true,
voicePrint: true,
darkWatch: true,
},
} as const;