# Frontend Framework Research: Mobile-First Approach **Date**: 2026-02-14 **Focus**: Mobile-first health platform with web companion app --- ## Platform Strategy Clarification ### Primary Platform: Mobile Apps (iOS & Android) - **Main interaction**: Quick data entry, sensor integration, daily health tracking - **Health sensors**: Apple HealthKit, Google Health Connect - **Use cases**: - Quick health data entry (weight, steps, mood) - Medication reminders and tracking - QR code scanning (lab results) - Real-time health sensor data (steps, heart rate, sleep) - Push notifications for reminders - Background sync with server - "Nuke option" (instant data deletion) ### Secondary Platform: Web Browser - **Complementary role**: Extensive reporting, visualization, profile management - **Use cases**: - Complex data visualization and charts - Historical trend analysis - Comprehensive profile management - Family structure management - Extensive reporting and data export - Detailed configuration settings - Desktop/laptop user preference --- ## Mobile Development Options ### 1. React Native **Description**: Facebook's cross-platform framework using React/JavaScript **Pros for Normogen**: - **Code sharing**: Share logic with web frontend (React) - **Large ecosystem**: Extensive library ecosystem - **Health integration**: - React Native Health (Apple HealthKit) - Google Health Connect integration - **QR code scanning**: react-native-camera, react-native-qrcode-scanner - **Encryption**: Native crypto libraries available - **Community**: Largest cross-platform mobile community - **Performance**: Good enough for health data apps **Cons**: - Performance overhead compared to native - Larger app bundle size - Potential dependency issues (npm chaos) - JavaScript engine overhead **Health Sensor Integration**: - iOS: [react-native-health](https://github.com/anthonyecamps/react-native-health) - Android: [react-native-google-fit](https://github.com/StasDoskalenko/react-native-google-fit) - Background location/sensors: [react-native-background-job](https://github.com/jamesisaac/react-native-background-job) **Code Sharing Potential**: - Business logic: 70-80% shared with web - State management: 90%+ shared - API client: 100% shared - Encryption: 100% shared - UI components: 0% (separate native UI) --- ### 2. Flutter **Description**: Google's cross-platform framework using Dart **Pros for Normogen**: - **Excellent performance**: Compiled to native ARM64 - **Small app bundle**: Smaller than React Native - **Hot reload**: Fast development iteration - **Health integration**: - health (Apple HealthKit, Google Health Connect) - Provides unified API for both platforms - **Beautiful UI**: Material Design and Cupertino widgets - **Stable**: Mature and production-ready - **Single codebase**: Better platform parity **Cons**: - **No code sharing** with web frontend - Dart learning curve (if team only knows JavaScript) - Smaller ecosystem than React Native - Less flexibility for native modules **Health Sensor Integration**: - [health](https://pub.dev/packages/health) - Apple HealthKit + Google Health Connect - Unified API for both platforms - Background task support - Step counting, heart rate, sleep tracking **Code Sharing Potential**: - Business logic: 0% (Dart vs JavaScript) - API client: 0% (must rewrite) - Encryption: 0% (must rewrite) - UI components: 0% (separate UI framework) --- ### 3. Native (Swift + Kotlin) **Description**: Separate native apps for iOS and Android **Pros for Normogen**: - **Best performance**: Native ARM64 code - **Best sensor integration**: Direct platform APIs - **Best user experience**: Platform-native feel - **Smallest app bundle**: No framework overhead - **Swift**: Native crypto libraries (CryptoKit) - **Kotlin**: Native crypto libraries **Cons**: - **Double development cost**: Separate codebases - **No code sharing**: 0% code sharing between platforms - **Longer time to market**: Two separate implementations - **Higher maintenance**: Two codebases to maintain - **Team skill requirements**: Swift + Kotlin + JavaScript (for web) **Health Sensor Integration**: - iOS: HealthKit (native, best integration) - Android: Google Health Connect (native) - Background tasks: Native support **Code Sharing Potential**: - Business logic: 0% (different languages) - API client: 0% (must implement twice) - Encryption: 0% (different crypto libraries) - UI components: 0% (completely separate) --- ### 4. Progressive Web App (PWA) **Description**: Web app that can be installed on mobile devices **Pros for Normogen**: - **Single codebase**: Works on mobile and desktop - **Health sensors**: Web Bluetooth, Generic Sensor API (limited) - **No app store**: Direct deployment, instant updates - **Small bundle**: Just web assets - **Easy updates**: No app store review process **Cons**: - **Limited sensor access**: Cannot access HealthKit/Health Connect - **Poor offline**: Limited background sync - **Poor push notifications**: Limited support - **iOS limitations**: Safari PWA restrictions - **Poor user experience**: Not native-feeling **Health Sensor Integration**: - Limited to web sensor APIs - No HealthKit integration - No Health Connect integration - Poor for health sensor use case **Code Sharing Potential**: - Business logic: 100% shared - API client: 100% shared - Encryption: 100% shared - UI: 100% shared **Verdict**: Not suitable for Normogen's mobile sensor requirements --- ## Web Companion Framework Options ### Option 1: React (if mobile is React Native) **Description**: Most popular JavaScript UI library **Pros**: - **Code sharing**: 70-80% with React Native - **Ecosystem**: Largest npm ecosystem - **Charts**: Chart.js, Recharts, D3.js - **State management**: Redux, Zustand, Jotai - **Encryption**: Web Crypto API, crypto-js **Cons**: - Large bundle size - Complexity for simple apps --- ### Option 2: Svelte/SvelteKit **Description**: Modern compiler-based framework **Pros**: - **Small bundle**: Compiled, minimal runtime - **Great DX**: Simple, clean syntax - **Charts**: Svelte-chartjs, Plotly - **Performance**: Excellent for charts/visualization - **SSR**: Built-in server-side rendering **Cons**: - **No code sharing** with React Native - Smaller ecosystem - Less mature than React --- ### Option 3: Vue.js **Description**: Progressive JavaScript framework **Pros**: - **Simple learning curve**: Easier than React - **Charts**: Chart.js, ECharts - **Performance**: Good for visualizations - **Ecosystem**: Growing but smaller than React **Cons**: - **No code sharing** with React Native - Smaller ecosystem than React - Less job market demand --- ## Comparison Matrix | Criteria | React Native + React | Flutter + React/Svelte | Native + React | |----------|---------------------|------------------------|----------------| | **Development Cost** | Low (code sharing) | Medium | High (2x platforms) | | **Time to Market** | Fast | Medium | Slow | | **Mobile Performance** | Good | Excellent | Excellent | | **Web Performance** | Good | Good | Good | | **Code Sharing** | 70-80% | 0% | 0% | | **Health Sensors** | ✅ Excellent | ✅ Excellent | ✅ Excellent | | **QR Scanning** | ✅ Excellent | ✅ Excellent | ✅ Excellent | | **Crypto** | ✅ Excellent | ✅ Good | ✅ Excellent | | **Bundle Size** | Medium | Small | Small | | **Maintenance** | Medium | Medium | High | | **Team Skills** | JavaScript only | Dart + JS | Swift + Kotlin + JS | | **Ecosystem** | Largest | Large | Native | --- ## Research Questions ### For Mobile Framework 1. **Health Sensor Integration Quality** - How well does each framework integrate with HealthKit? - How well does each framework integrate with Google Health Connect? - Background sensor data collection? - Step counting, heart rate, sleep tracking support? 2. **QR Code Scanning** - Camera API integration quality - QR scanning library availability - Performance and accuracy 3. **Encryption Capabilities** - Client-side AES-256-GCM encryption - PBKDF2 key derivation - Web Crypto API bridging (for code sharing) - Secure key storage (Keychain/Keystore) 4. **Background Sync** - Background task scheduling - Sync reliability - Battery efficiency - Data transfer optimization 5. **Push Notifications** - Local notifications (reminders) - Push notifications (server-triggered) - Scheduling accuracy ### For Web Framework 1. **Chart Visualization** - Chart library compatibility - Performance with large datasets - Real-time data streaming - Beautiful, interactive charts 2. **Encrypted Data Handling** - Client-side decryption - Large encrypted data handling (10MB+) - Streaming response support - Zero-knowledge architecture support 3. **Complex State Management** - Family structure management - Multi-person profiles - Access control and permissions - Offline data synchronization 4. **Performance** - Bundle size and load time - Rendering performance for complex charts - Memory usage for large datasets --- ## Health Sensor Integration Deep Dive ### Apple HealthKit **Data Types to Integrate**: - Steps (count, distance) - Heart rate (resting, walking, variability) - Sleep analysis (duration, quality, stages) - Weight, height, BMI - Blood pressure - Temperature - Oxygen saturation - Respiratory rate - Menstrual cycle data - Workouts and activity - Nutrition (water, caffeine) **Integration Requirements**: - Authorization request handling - Background delivery (HKHealthStore) - Query historical data - Write data to HealthKit (if needed) - Sample queries (filtered by date, type) ### Google Health Connect **Data Types to Integrate**: - Steps (count, distance) - Heart rate (resting, variability) - Sleep (sessions, stages) - Weight, height - Blood pressure - Temperature - Oxygen saturation - Nutrition - Menstrual cycle - Exercise sessions **Integration Requirements**: - Permission request handling - Background reading (WorkManager) - Historical data queries - Write data to Health Connect (if needed) --- ## Recommended Architecture ### Mobile-First, Web-Complementary #### Recommended Stack: **React Native + React** **Rationale**: 1. **Code Sharing (70-80%)** - Business logic: User management, data sync, encryption - State management: Redux/Zustand store - API client: Axios/Fetch wrapper - Encryption utilities: AES-GCM, PBKDF2, keys - Data validation: Zod schemas - Date handling: date-fns, luxon 2. **Health Sensors** - React Native Health (iOS) - React Native Google Fit (Android) - Background task support - Excellent sensor integration 3. **QR Scanning** - react-native-camera - Fast, accurate scanning 4. **Encryption** - react-native-quick-crypto - Secure key storage (Keychain/Keystore) - Web Crypto API compatible 5. **Web Charts** - Recharts (React) - D3.js (if needed) - Chart.js (simple charts) - Excellent visualization 6. **Team Skills** - Single language: JavaScript/TypeScript - Single ecosystem: npm - Lower hiring cost #### Architecture Diagram ``` ┌─────────────────────────────────────────────────────┐ │ Shared Layer │ │ (Business Logic, State, API, Encryption) │ │ │ │ - Redux/Zustand Store │ │ - API Client (Axios) │ │ - Encryption Utilities (AES-GCM, PBKDF2) │ │ - Data Validation (Zod) │ │ - Date Handling (date-fns) │ └─────────────────────────────────────────────────────┘ │ ┌───────────────┴───────────────┐ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ React Native │ │ React (Web) │ │ (Mobile) │ │ (Companion) │ │ │ │ │ │ - Native UI │ │ - DOM UI │ │ - Camera │ │ - Charts │ │ - HealthKit │ │ - Tables │ │ - Health Conn. │ │ - Forms │ │ - Push Notif. │ │ - Settings UI │ │ - Background │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ iOS App │ │ Browser │ │ (App Store) │ │ (Web) │ └──────────────────┘ └──────────────────┘ ┌──────────────────┐ │ Android App │ │ (Play Store) │ └──────────────────┘ ``` --- ## Proof of Concept Requirements ### Mobile POC 1. **Health Sensor Integration** - Read steps from HealthKit (iOS) - Read steps from Health Connect (Android) - Display last 7 days of step data - Sync with backend API 2. **Encryption Test** - Encrypt health data on device - Send to backend - Decrypt on device - Verify zero-knowledge (backend stores encrypted) 3. **QR Scanning** - Scan QR code - Parse lab result data - Encrypt and sync 4. **Background Sync** - Sync every 5 minutes - Handle offline mode - Conflict resolution ### Web POC 1. **Chart Visualization** - Display 30 days of health data - Line chart (weight trends) - Bar chart (steps per day) - Responsive design 2. **Profile Management** - Create/edit profile - Add family members - Set permissions 3. **Encrypted Data Handling** - Load 10MB encrypted data - Decrypt and display - Stream large datasets --- ## Implementation Timeline ### Phase 1: Mobile MVP (8-12 weeks) - [ ] Setup React Native project - [ ] Integrate HealthKit (iOS) - [ ] Integrate Health Connect (Android) - [ ] Implement encryption utilities - [ ] Build API client - [ ] Implement authentication - [ ] Build core UI (profile, data entry, sync) - [ ] Test QR scanning - [ ] Implement background sync ### Phase 2: Web Companion (4-6 weeks) - [ ] Setup React project - [ ] Share business logic from mobile - [ ] Build chart visualization - [ ] Build profile management UI - [ ] Build family structure UI - [ ] Build reporting interface ### Phase 3: Polish & Launch (4-6 weeks) - [ ] Performance optimization - [ ] Security audit - [ ] App store submission - [ ] Marketing materials - [ ] User testing - [ ] Beta launch --- ## Alternative Considered: Flutter ### Why Flutter is a strong alternative **Pros**: - Excellent performance (compiled to native) - Beautiful UI out of the box - Unified health package (HealthKit + Health Connect) - Small app bundle size - Fast development (hot reload) **Why React Native wins for Normogen**: 1. **Code Sharing (Critical Advantage)** - 70-80% code sharing vs 0% - Faster time to market - Lower development cost - Easier maintenance 2. **Team Skills** - Single language (JavaScript/TypeScript) - Single ecosystem (npm) - Lower hiring cost - Faster onboarding 3. **Ecosystem Maturity** - React Native: More mature, larger community - Better health sensor integration - More third-party libraries - More production experience 4. **Web Companion** - React for web companion (code sharing) - Flutter web: Less mature, not recommended **Flutter would be better if**: - Web companion was not needed - Team had Dart experience - Performance was critical (not the case for health app) - UI polish was the top priority --- ## Final Recommendation ### Primary Recommendation: **React Native + React** **Score**: 9/10 **Justification**: 1. **Code Sharing** (Critical) - 70-80% shared between mobile and web - Single language (JavaScript/TypeScript) - Faster development, easier maintenance 2. **Health Sensors** (Excellent) - React Native Health (iOS HealthKit) - React Native Google Fit (Android Health Connect) - Background sensor data collection - Comprehensive health data support 3. **Encryption** (Excellent) - react-native-quick-crypto - Web Crypto API compatible - Secure key storage (Keychain/Keystore) 4. **QR Scanning** (Excellent) - react-native-camera - Fast, accurate scanning 5. **Web Charts** (Excellent) - Recharts (React) - Beautiful, interactive visualizations - Great for health data 6. **Team & Cost** (Excellent) - Single language (JS/TS) - Single ecosystem (npm) - Lower development cost - Faster time to market ### Risk Assessment **Risk: React Native Performance** - **Severity**: Low - **Mitigation**: Good enough for health data apps - **Mitigation**: Performance optimization techniques - **Mitigation**: Native modules for critical paths **Risk: JavaScript Engine Overhead** - **Severity**: Low - **Mitigation**: Hermes engine (faster, smaller) - **Mitigation**: Modern phones are fast enough **Risk: Dependency Issues** - **Severity**: Medium - **Mitigation**: Careful dependency management - **Mitigation**: Use stable, well-maintained libraries - **Mitigation**: Monorepo for better control --- ## Next Steps 1. ✅ **Mobile Framework Selected**: React Native 2. ⏭️ **Select State Management**: Redux vs Zustand vs Jotai 3. ⏭️ **Select Navigation**: React Navigation vs React Native Navigation 4. ⏭️ **Select Charts**: Recharts vs Chart.js 5. ⏭️ **Design Database Schema**: MongoDB collections 6. ⏭️ **Create POC**: Health sensor integration test 7. ⏭️ **Implement Authentication**: JWT + recovery phrase --- ## Technology Stack Summary ### Mobile - **Framework**: React Native 0.73+ - **Language**: TypeScript - **State Management**: TBD (Redux/Zustand) - **Navigation**: React Navigation - **Health Sensors**: - react-native-health (iOS) - react-native-google-fit (Android) - **QR Scanning**: react-native-camera - **Encryption**: react-native-quick-crypto - **HTTP**: Axios - **Date**: date-fns ### Web - **Framework**: React 18+ - **Language**: TypeScript - **State Management**: TBD (Redux/Zustand) - **Routing**: React Router - **Charts**: Recharts - **HTTP**: Axios - **Date**: date-fns - **UI**: Tailwind CSS / Chakra UI ### Shared - **Language**: TypeScript - **State Management**: Redux/Zustand - **API Client**: Axios - **Encryption**: AES-256-GCM, PBKDF2 - **Validation**: Zod - **Date**: date-fns - **Utilities**: Shared monorepo package --- ## Conclusion **React Native + React** is the optimal choice for Normogen's mobile-first, web-complementary architecture: - **70-80% code sharing** between mobile and web - **Excellent health sensor integration** (HealthKit + Health Connect) - **Single language** (JavaScript/TypeScript) reduces development cost - **Great chart visualization** for web companion - **Proven at scale** in health apps - **Faster time to market** than native or Flutter **Decision**: Use **React Native** for mobile (iOS + Android) and **React** for web companion app. --- ## References - [React Native](https://reactnative.dev/) - [React Native Health](https://github.com/anthonyecamps/react-native-health) - [React Native Google Fit](https://github.com/StasDoskalenko/react-native-google-fit) - [React Native Quick Crypto](https://github.com/margelo/react-native-quick-crypto) - [React Native Camera](https://github.com/react-native-camera/react-native-camera) - [Recharts](https://recharts.org/) - [HealthKit Documentation](https://developer.apple.com/documentation/healthkit) - [Google Health Connect](https://developer.android.com/health-and-fitness/google/health-connect)