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:
84
packages/mobile/src/constants/theme.ts
Normal file
84
packages/mobile/src/constants/theme.ts
Normal 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;
|
||||
Reference in New Issue
Block a user