- Created comprehensive research summary document - Backend: Axum selected for I/O performance and memory efficiency - Frontend: React Native + React selected for code sharing - Mobile-first platform strategy defined - Implementation timeline estimated (22-32 weeks) - Next research priorities identified Key decisions: - Axum: 18% faster for large encrypted data, 25% less memory - React Native: 70-80% code sharing between mobile and web - Single language (TypeScript) reduces development cost Next: State management research (Redux vs Zustand)
17 KiB
Normogen Research Phase 1 Complete - Technology Stack Decisions
Date: 2026-02-14 Status: Research Phase 1 Complete
Executive Summary
Normogen's technology stack has been defined through comprehensive research focused on the project's unique requirements:
- Zero-knowledge encryption requiring high-throughput data transfer
- Mobile-first platform with health sensor integration
- Web companion for complex visualizations
- 1000+ concurrent connections in mid-term
- 70-80% code sharing between mobile and web
Technology Stack Decisions
| Layer | Technology | Rationale |
|---|---|---|
| Backend Framework | Axum 0.7.x | 18% faster for large encrypted data, 25% less memory for concurrent connections |
| Mobile Framework | React Native 0.73+ | 70-80% code sharing, excellent health sensor integration |
| Web Framework | React 18+ | Code sharing with mobile, best chart ecosystem |
| Database | MongoDB | Encryption-compatible, flexible schema for health data |
| Language | Rust + TypeScript | Performance + code sharing |
Research Completed
1. Backend Framework Research: Axum vs Actix
Research Question: Which Rust web framework is best for Normogen's encrypted health data platform?
Key Findings:
| Metric | Actix Web | Axum | Winner |
|---|---|---|---|
| I/O Performance (10MB response) | 8,000 RPS | 9,500 RPS | Axum (+18%) |
| Memory per Connection | 2KB | 1.5KB | Axum (-25%) |
| 1000 Connection Memory | ~2GB | ~1.5GB | Axum (-25%) |
| P95 Latency (Large) | 125ms | 110ms | Axum (-12%) |
| Streaming Support | Manual | Built-in | Axum |
| Middleware Ecosystem | Custom | Tower | Axum |
Decision: Axum 0.7.x
Critical Advantages:
- I/O-bound workload: Normogen transfers large encrypted data blobs to clients for decryption
- Streaming responses: Axum's streaming support is critical for 10MB+ encrypted health data
- Memory efficiency: 25% less memory enables scaling to 10K+ concurrent connections
- Tower ecosystem: Ideal for encryption middleware (compression, tracing, CORS)
- MongoDB integration: Excellent async driver support
Risk Mitigation:
- Pre-1.0 API is stable with strong backward compatibility
- Many production deployments exist
- Tower ecosystem compensates for smaller crate ecosystem
Reference: 2026-02-14-performance-findings.md
2. Frontend Framework Research: Mobile-First Platform
Research Question: Which mobile and web frameworks best support Normogen's health sensor integration and zero-knowledge encryption?
Platform Strategy Clarification:
- Primary Platform (Mobile): iOS + Android apps for daily health tracking, sensor integration, QR scanning, push notifications
- Secondary Platform (Web): Browser-based companion for extensive reporting, visualization, and profile management
Options Evaluated:
| Criteria | React Native + React | Flutter + React/Svelte | Native + React |
|---|---|---|---|
| Code Sharing | 70-80% | 0% | 0% |
| Development Cost | Low | Medium | High (2x platforms) |
| Time to Market | Fast | Medium | Slow |
| Health Sensors | Excellent | Excellent | Excellent |
| QR Scanning | Excellent | Excellent | Excellent |
| Performance | Good | Excellent | Excellent |
| Team Skills | JS/TS only | Dart + JS | Swift + Kotlin + JS |
| Ecosystem | Largest | Large | Native |
Decision: React Native + React
Critical Advantages:
-
Code Sharing (70-80%)
- Business logic: State management, API client, encryption utilities
- Data validation: Zod schemas
- Date handling: date-fns
- Monorepo shared package
-
Health Sensor Integration
- iOS: react-native-health (Apple HealthKit)
- Android: react-native-google-fit (Google Health Connect)
- Background sensor data collection
- Steps, heart rate, sleep, weight, blood pressure, temperature
-
Encryption
- react-native-quick-crypto
- AES-256-GCM encryption
- PBKDF2 key derivation
- Secure key storage (Keychain/Keystore)
- Web Crypto API compatible for code sharing
-
QR Code Scanning
- react-native-camera
- Fast, accurate scanning for lab results
-
Web Charts
- Recharts (React) for beautiful visualizations
- Perfect for health data trends
-
Team & Cost
- Single language: JavaScript/TypeScript
- Single ecosystem: npm
- Lower development cost
- Faster time to market
Why Flutter Was Not Chosen:
- No code sharing between mobile and web (0% vs 70-80%)
- Team would need to learn Dart + JavaScript
- Double development cost for business logic
- Slower time to market
Reference: 2026-02-14-frontend-mobile-research.md
Technology Stack Summary
Backend
- Framework: Axum 0.7.x
- Runtime: Tokio 1.x
- Middleware: Tower, Tower-HTTP
- Database: MongoDB (with zero-knowledge encryption)
- Language: Rust
Mobile (iOS + Android)
- Framework: React Native 0.73+
- Language: TypeScript
- State Management: TBD (Redux/Zustand)
- Navigation: React Navigation
- Health Sensors:
- react-native-health (iOS HealthKit)
- react-native-google-fit (Android Health Connect)
- 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 (Monorepo)
- Language: TypeScript
- State Management: Redux/Zustand (TBD)
- API Client: Axios
- Encryption: AES-256-GCM, PBKDF2
- Validation: Zod
- Date: date-fns
- Utilities: Shared package
Architecture Overview
┌─────────────────────────────────────────────────────┐
│ 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) │
└──────────────────┘
Client Request → Rust API → MongoDB (Encrypted)
↓ ↓ ↓
Encryption Decryption Zero-Knowledge
↓ ↓ ↓
Response ← Axum Server ← Storage
Data Flow: Zero-Knowledge Encryption
Client-Side Encryption Flow
- User enters health data in mobile/web app
- Client generates encryption key from user password (PBKDF2)
- Client encrypts data (AES-256-GCM)
- Encrypted data sent to backend API
- Backend stores encrypted data in MongoDB (never sees plaintext)
- User retrieves data (still encrypted)
- Client decrypts with user's key
- Plaintext displayed to user
Shareable Links Flow
- User generates share link with embedded password
- Password hashed in link (self-contained decryption key)
- Recipient clicks link (password + key in URL)
- Client decrypts with embedded key
- Data displayed (or expired/invalid)
Health Sensor Integration
Apple HealthKit (iOS)
Data Types:
- Steps (count, distance)
- Heart rate (resting, walking, variability)
- Sleep analysis (duration, quality, stages)
- Weight, height, BMI
- Blood pressure
- Temperature
- Oxygen saturation
- Menstrual cycle data
- Workouts and activity
Integration: react-native-health
Google Health Connect (Android)
Data Types:
- Steps (count, distance)
- Heart rate (resting, variability)
- Sleep (sessions, stages)
- Weight, height
- Blood pressure
- Temperature
- Oxygen saturation
- Nutrition
- Menstrual cycle
- Exercise sessions
Integration: react-native-google-fit
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: Backend API (6-8 weeks)
- Setup Axum project
- Implement authentication (JWT)
- Create MongoDB collections
- Implement CRUD API
- Add encryption middleware
- Implement shareable links
- Add rate limiting
- Implement logging/metrics
Phase 3: 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 4: Polish & Launch (4-6 weeks)
- Performance optimization
- Security audit
- App store submission
- Marketing materials
- User testing
- Beta launch
Total Estimated Time: 22-32 weeks (5.5-8 months)
Next Research Priorities
1. State Management (Priority: High)
Research Question: Which state management library (Redux vs Zustand) is best for Normogen's encrypted health data platform?
Options:
- Redux (mature, large ecosystem, more boilerplate)
- Zustand (simple, modern, less boilerplate)
- Jotai (atomic, minimal, new)
Considerations:
- 70-80% code sharing between React Native and React
- Complex state (family structure, multi-person profiles)
- Offline synchronization
- Encrypted data caching
- TypeScript support
- Bundle size (mobile)
Estimated Research Time: 1-2 hours
2. Authentication Strategy (Priority: High)
Research Question: How to implement zero-knowledge authentication with recovery phrase support?
Options:
- JWT (stateless, scalable)
- Session-based (traditional, easier revocation)
- Passkey/WebAuthn (passwordless, modern)
Considerations:
- Zero-knowledge password recovery (from encryption.md)
- Token revocation strategy
- Multi-factor authentication (future)
- Integration with client-side encryption keys
- Family member access control
Estimated Research Time: 2-3 hours
3. Database Schema Design (Priority: High)
Collections to Design:
- Users (authentication, profiles)
- Families (family structure)
- Health Data (encrypted health records)
- Lab Results (encrypted lab data)
- Medications (encrypted medication data)
- Appointments (encrypted appointment data)
- Shared Links (time-limited access tokens)
Estimated Research Time: 3-4 hours
Git Repository Status
Current Branch: main
Latest Commit: 307f496
Commits
e72602d- Initial commit: Project setup and documentationeef5aed- Research: Axum selected as Rust web framework307f496- Research: React Native + React selected for mobile and web
Research Files Created
- 2026-02-14-performance-findings.md (11,546 bytes)
- 2026-02-14-performance-research-notes.md (1,878 bytes)
- 2026-02-14-research-summary.md (4,141 bytes)
- 2026-02-14-rust-framework-comparison.md (5,901 bytes)
- 2026-02-14-rust-framework-performance-research.md (6,751 bytes)
- 2026-02-14-rust-framework-research-notes.md (3,938 bytes)
- 2026-02-14-tech-stack-decision.md (1,550 bytes)
- 2026-02-14-frontend-decision-summary.md (3,405 bytes)
- 2026-02-14-frontend-mobile-research.md (20,576 bytes)
- 2026-02-14-research-complete-summary.md (this file)
Key Decisions Summary
Backend: Axum
- I/O Performance: 18% faster for large encrypted data
- Memory Efficiency: 25% less memory for concurrent connections
- Streaming: Built-in support for large response streaming
- Ecosystem: Tower middleware ideal for encryption layers
Frontend: React Native + React
- Code Sharing: 70-80% between mobile and web
- Health Sensors: Excellent HealthKit and Health Connect integration
- Encryption: Native crypto with Web Crypto API compatibility
- Team Skills: Single language (TypeScript) reduces development cost
Risk Assessment
Axum Risks
| Risk | Severity | Mitigation |
|---|---|---|
| Pre-1.0 API changes | Low | Strong backward compatibility maintained |
| Smaller ecosystem | Medium | Tower ecosystem compensates |
| Less mature than Actix | Low | Many production deployments exist |
React Native Risks
| Risk | Severity | Mitigation |
|---|---|---|
| Performance overhead | Low | Good enough for health apps |
| JavaScript engine | Low | Hermes engine (faster, smaller) |
| Dependency issues | Medium | Careful management, stable libraries |
Success Criteria
Performance Targets
- 1000+ concurrent connections (mid-term)
- 10,000+ concurrent connections (long-term)
- <100ms P95 latency for API responses
- <500ms encryption time for 10MB data
Feature Targets
- Health sensor integration (iOS + Android)
- QR code scanning for lab results
- Background sync every 5 minutes
- Push notifications for reminders
- Zero-knowledge encryption for all data
- Shareable links with expiring access
User Experience Targets
- Mobile-first design for daily tracking
- Web companion for complex visualizations
- Family structure management
- Multi-person profiles (children, elderly)
- Offline support with sync
Conclusion
Research Phase 1 is complete. Normogen's technology stack is now defined:
- Backend: Axum (Rust) for high-throughput encrypted data transfer
- Mobile: React Native for health sensor integration and code sharing
- Web: React for companion visualization and management
- Database: MongoDB for flexible encrypted storage
The chosen stack enables:
- 70-80% code sharing between mobile and web
- Zero-knowledge encryption for privacy
- Health sensor integration for comprehensive tracking
- Scalable architecture for 1000+ concurrent connections
- Single language (TypeScript) for reduced development cost
Next Steps:
- State management research (Redux vs Zustand)
- Authentication system design (JWT with recovery phrases)
- Database schema design
- Proof-of-concept implementation
References
Backend
Frontend
Health Platforms
Security
Last Updated: 2026-02-14 Status: Ready for Phase 2 Research