as-app/cline_docs/techContext.md

134 lines
4.1 KiB
Markdown

# Technical Context
## Technology Stack
- React Native
- GraphQL with Hasura
- Apollo Client for frontend
- Federated remote schemas
- Firebase (FCM only for push notifications)
- Sentry for error tracking
## Development Environment
- Node.js (specified in .node-version)
- Yarn package manager (evidenced by .yarnrc.yml)
- ESLint for code linting (.eslintrc.js)
- TypeScript configuration (tsconfig.json)
## Backend Architecture
- Hasura GraphQL server
- Federation of remote schemas
- Real-time subscriptions support
- Custom business logic through remote schemas
## Frontend Architecture
- React Native mobile app
- Apollo Client for GraphQL state management
- Real-time updates via GraphQL subscriptions
- Push notifications via Firebase Cloud Messaging
### Authentication System
1. SMS Authentication:
- Two distinct SMS types: "R" (Registration) and "C" (Connect)
- Type-specific loading states
- 3-minute timeout mechanism
- Login request monitoring via GraphQL subscription
2. Account Management:
- Modal-based interface
- Support for both SMS and email authentication
- Loading state coordination based on action type
- Login request handling through GraphQL mutations
### Loading State Management
1. Component-Level Loading:
- Button built-in loading prop
- LittleLoader component with theme support
- Loading state timeouts
- Login request-based clearing
2. Theme Integration:
- Dark/light theme support
- Dynamic color filters for Lottie animations
- Theme-aware component styling
### Navigation & Deep Linking System
- Parameter-based state management
- Modal coordination
- Action-specific navigation flows
- Deep Linking Integration:
1. Required Configurations:
- iOS Universal Links setup
- Associated Domains capability
- apple-app-site-association file
- URL scheme configurations in Info.plist
- Custom Expo plugin to preserve URL schemes during prebuild
2. Technical Requirements:
- HTTPS server for apple-app-site-association file
- Proper MIME type (application/json)
- No redirects for /.well-known/apple-app-site-association
- Valid app ID format (TeamID.BundleID)
- CFBundleURLName format (following Expo's convention):
* Production scheme: com.alertesecours.alertesecours (matches bundle ID)
* Development scheme: com.alertesecours.alertesecours.expo (bundle ID + .expo)
* Format defined in Expo's source code for consistency
3. Implementation Components:
- Expo Linking module integration
- Initial URL handling
- URL event listeners
- Custom deep link parsing logic
- withCustomScheme plugin for URL scheme preservation
## Build & Deployment Tools
- Fastlane for deployment
- Custom build scripts
- Environment configurations (.env.default, .env.staging, .env.prod)
## Platform-Specific
### iOS
- Xcode project configuration
- CocoaPods for dependency management
- Custom entitlements and capabilities
- FCM push notification setup
### Android
- Gradle build system
- Custom Gradle plugins
- FCM integration for push notifications
## Development Setup Requirements
*To be completed with setup instructions*
## Technical Constraints
- Loading states must be tied to specific actions
- Loading timeouts required for all async operations
- Theme compatibility required for all UI components
- Proper hook usage and dependency management
## Pending Implementations
- Multilingual support (i18n infrastructure exists but not implemented)
## Recent Technical Improvements
1. Loading State Management:
- Action-specific loading indicators
- Automatic timeout mechanism
- Login request-based clearing
- Theme-aware loading animations
2. Component Architecture:
- Proper hook dependency management
- Consistent prop patterns
- Clear separation of concerns
- Theme integration
3. Navigation Flow:
- Type-specific parameter passing
- Modal state coordination
- Loading state synchronization
*Note: This document needs to be updated with:
- Complete dependency list
- Development setup instructions
- Known technical limitations
- Performance constraints