Initial commit: Project setup and documentation

- Initialize Normogen health tracking platform
- Add comprehensive project documentation
- Add zero-knowledge encryption implementation guide
- Set up .gitignore for Rust/Node.js/mobile development
- Create README with project overview and roadmap

Project is currently in planning phase with no implementation code yet.
This commit is contained in:
goose 2026-02-14 11:11:06 -03:00
commit e72602d784
10 changed files with 3407 additions and 0 deletions

View file

@ -0,0 +1,154 @@
---
date: 2026-01-04T17:39:07-03:00
git_commit: N/A (not a git repository)
branch: N/A
repository: normogen
topic: "Normogen Codebase Documentation - Initial State"
tags: [research, codebase, project-status, documentation]
status: complete
---
# Research: Normogen Codebase Documentation
## Research Question
Document the current state of the Normogen project codebase based on introduction.md to understand what exists, where components are located, and how the architecture is planned.
## Summary
**Critical Finding:** The Normogen project is currently in the **conceptual/planning phase** only. The codebase contains **no implementation code** whatsoever. The entire project exists as a single design document (`introduction.md`) outlining the planned architecture and features.
**Status:** Pre-implementation - Planning Stage
## Detailed Findings
### Current Project State
#### What Exists
- **Single File Only:** `/home/asoliver/desarrollo/normogen/introduction.md` (2,642 bytes)
- **No Git Repository:** Project is not under version control
- **No Source Code:** Zero lines of implementation code
- **No Configuration:** No Cargo.toml, package.json, docker-compose, or other config files
- **No Directory Structure:** Flat directory with only the design document
#### What Does NOT Exist (Yet)
Based on the plans in introduction.md, the following components are **not yet implemented**:
1. **Backend (Rust)**
- No Rust server code
- No Cargo.toml or workspace configuration
- No database schema or migrations
- No encryption implementation
- No API endpoints
2. **Web Server (Node.js)**
- No package.json
- No web server code
- No frontend code
3. **Mobile Applications**
- No iOS/Swift code
- No Android/Kotlin code
- No React Native or cross-platform framework setup
4. **Infrastructure**
- No Docker configuration
- No database setup (PostgreSQL, MongoDB, etc.)
- No CI/CD pipelines
- No deployment configuration
5. **Plugin System**
- No plugin architecture
- No import/export implementations
- No lab result converters
## Project Vision (From introduction.md)
### Planned Architecture
- **Client-Server Model:** Linux Docker server, web and mobile clients
- **Tech Stack:**
- Backend: Rust
- Web Server: Node.js
- Mobile: Platform-native or cross-platform
- **Security:** End-to-end encryption, data accessible only to user
- **Business Model:** Subscription-based, open-source
- **Privacy:** No corporate data usage, instant data deletion ("nuke option")
### Planned Features
#### User Management
- User authentication system
- Person records (distinct from logged-in users)
- Family structure (parent-child, caregiving relationships)
#### Health Data Tracking
- Lab results storage
- Medication management (shape, schedule, composition)
- Health statistics (weight, height, age over time)
- Medical appointments
- Regular checkups
- Period tracking
- Pregnancy tracking
- Dental records
- Illness records
#### Phone App Features
- Medication reminders
- QR code scanner for lab results
- Health sensor integration (steps, activity, breathing, sleep, blood pressure, temperature)
- Periodic server sync
- Instant data deletion
#### Plugin System
- Import/export functionality
- Lab result format converters
- Sensor data adapters
#### Data Sharing
- Selective data sharing with external users
- Expiring link-based access
- Granular encryption to support partial access
## Code References
**No code references available - project has not been implemented yet.**
Only reference:
- `/home/asoliver/desarrollo/normogen/introduction.md:1-82` - Complete project design document
## Open Questions
### Immediate Next Steps for Implementation
1. **Version Control:** Initialize Git repository
2. **Project Structure:** Create directory layout for Rust backend, Node.js web server, mobile apps
3. **Technology Choices:**
- Which Rust web framework? (Actix, Axum, Rocket?)
- Which database? (PostgreSQL, MongoDB, SQLite?)
- Encryption libraries and key management approach
- Mobile app framework choice
4. **MVP Definition:** What is the minimal viable product to start with?
### Architectural Decisions Needed
1. **Encryption Architecture:** How to implement "limited password" access for shared data while maintaining encryption
2. **Plugin System Design:** Define plugin interface and loading mechanism
3. **Data Models:** Design schema for health records, medications, lab results
4. **API Design:** REST vs GraphQL, authentication approach
5. **Mobile Sync Strategy:** Offline-first vs always-online, conflict resolution
### Development Priority
What should be built first?
- Backend authentication and data models?
- Basic web interface?
- Mobile app with sensor integration?
- Plugin system foundation?
## Recommendation
This is a **greenfield project** in the planning phase. Before writing code, the following should be established:
1. **Set up version control** (Git)
2. **Create project structure** with placeholder directories
3. **Choose specific technologies** (Rust framework, database, encryption libraries)
4. **Define MVP scope** - what features are essential for the first version
5. **Create initial README** with setup instructions and contribution guidelines
6. **Consider starting with backend API** before building clients
The project vision is clear and well-documented. The next step is to begin implementation.

View file

@ -0,0 +1,361 @@
---
date: 2026-01-04T18:40:30-03:00
git_commit: N/A (not a git repository)
branch: N/A
repository: normogen
topic: "Normogen MVP Definition - Auth + Basic Health Tracking"
tags: [research, mvp, planning, requirements, open-questions]
status: complete
---
# Research: Normogen MVP Definition
## Research Question
Define the MVP (Minimum Viable Product) scope for Normogen based on stakeholder decision: basic health tracking + authentication.
## Summary
**MVP Scope:** Authentication system + Basic health tracking features
**Critical Decisions Made:**
- MVP will include user authentication and basic health tracking
- All other technical choices remain as open research questions
---
## MVP Requirements
### 1. Authentication System
#### Core Features
- User registration and login
- Secure password storage (hashing + salting)
- Session management
- Password reset flow
- Basic API authentication (JWT tokens)
#### User Model
```
User
- id: UUID
- email: string (unique)
- password_hash: string
- created_at: timestamp
- updated_at: timestamp
```
#### Security Requirements
- HTTPS only for production
- Password requirements enforcement
- Rate limiting on auth endpoints
- Secure session management
---
### 2. Basic Health Tracking
#### Core Health Metrics
Based on introduction.md and mobile health framework research (see `2026-01-05-mobile-health-frameworks-data.md`):
**Phase 1 - Manual Entry (MVP):**
**Tracked Metrics:**
- Weight (with timestamp)
- Height (with timestamp)
- Age (calculated from birthdate)
**Phase 2 - Mobile Integration (Post-MVP):**
Additional metrics available from Apple HealthKit and Google Health Connect:
- **Vitals:** Heart rate, blood pressure, body temperature, respiratory rate, SpO2
- **Activity:** Steps, distance, active energy/calories
- **Sleep:** Sleep duration and basic stages
- **Body Composition:** Body fat percentage, BMI
See research document for complete list of 50+ available data types.
**Data Model (MVP - Phase 1):**
```
Person
- id: UUID
- user_id: UUID (foreign key to User)
- name: string
- birthdate: date
- created_at: timestamp
HealthMetric
- id: UUID
- person_id: UUID (foreign key to Person)
- metric_type: enum (weight, height)
- value: decimal
- unit: string (kg, cm, etc.)
- recorded_at: timestamp
- created_at: timestamp
```
**Data Model (Phase 2 - Mobile Integration):**
```
-- Additional columns for mobile health framework integration
HealthMetric
- metric_source: enum (manual, healthkit, healthconnect, device)
- source_device_id: string (e.g., "com.apple.health.Health")
- accuracy: decimal (sensor accuracy 0.0-1.0)
- metadata: JSONB (platform-specific data)
-- New tables for sync tracking
health_metric_sources (platform, device_name, sync timestamps)
sync_history (import records, conflicts, errors)
```
#### Features (Phase 1 - MVP)
- Manual entry of weight and height
- View health metric history
- Basic chart/visualization of metrics over time
- Multiple person profiles (e.g., tracking children's data)
#### Features (Phase 2 - Mobile Integration)
- Automatic sync from Apple HealthKit (iOS)
- Automatic sync from Google Health Connect (Android)
- Background sync every 15-30 minutes
- Historical data import (last 30 days)
- Support for 50+ health data types
- Conflict resolution when same metric from multiple sources
---
## Out of Scope for MVP
Features from introduction.md that are **NOT** in MVP:
### Not Included (Future Phases)
- Lab results storage
- Medication tracking and reminders
- Medical appointments
- Period tracking
- Pregnancy tracking
- Dental information
- Illness records
- Phone app features (pill reminders, QR scanner, sensors)
- Plugin system
- Data sharing with external users
- Advanced encryption for partial access
- Mobile apps (MVP will be web-only)
---
## Technical Architecture for MVP
### Backend (Rust)
**Still needs research:**
- Web framework choice (Actix, Axum, Rocket)
- Database selection (PostgreSQL, MongoDB, SQLite)
- ORM/database library choice
- Authentication library selection
### Frontend (Node.js Web)
**Still needs research:**
- Frontend framework (React, Vue, Svelte, plain JS)
- UI component library
- State management approach
- Build tool choice
### Database Schema (MVP)
```sql
-- Users table
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Persons table (for multi-person tracking)
CREATE TABLE persons (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
birthdate DATE,
created_at TIMESTAMP DEFAULT NOW()
);
-- Health metrics table
CREATE TABLE health_metrics (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
person_id UUID NOT NULL REFERENCES persons(id) ON DELETE CASCADE,
metric_type VARCHAR(50) NOT NULL, -- 'weight', 'height'
value DECIMAL(10, 2) NOT NULL,
unit VARCHAR(20) NOT NULL, -- 'kg', 'cm', 'lbs', 'in'
recorded_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Indexes for performance
CREATE INDEX idx_health_metrics_person ON health_metrics(person_id);
CREATE INDEX idx_health_metrics_type ON health_metrics(metric_type);
CREATE INDEX idx_health_metrics_recorded ON health_metrics(recorded_at DESC);
```
---
## API Endpoints (MVP)
### Authentication
```
POST /api/auth/register - Register new user
POST /api/auth/login - Login user
POST /api/auth/logout - Logout user
POST /api/auth/refresh - Refresh JWT token
POST /api/auth/forgot-password - Initiate password reset
POST /api/auth/reset-password - Complete password reset
```
### Persons
```
GET /api/persons - List all persons for current user
POST /api/persons - Create new person profile
GET /api/persons/:id - Get person details
PUT /api/persons/:id - Update person details
DELETE /api/persons/:id - Delete person profile
```
### Health Metrics
```
GET /api/persons/:id/metrics - Get all metrics for a person
POST /api/persons/:id/metrics - Add new metric
GET /api/persons/:id/metrics/:type - Get metrics by type (weight/height)
DELETE /api/persons/:id/metrics/:metricId - Delete a metric entry
```
---
## User Stories (MVP)
### Authentication
1. As a new user, I can register with email and password
2. As a registered user, I can login with my credentials
3. As a logged-in user, I can logout securely
4. As a user who forgot their password, I can reset it via email
### Health Tracking
5. As a user, I can create profiles for myself and family members
6. As a user, I can record weight for any person in my account
7. As a user, I can record height for any person in my account
8. As a user, I can view a history of weight/height changes over time
9. As a user, I can see a simple chart showing weight trends
---
## MVP Success Criteria
### Functional Requirements
- [ ] User can register and login
- [ ] User can create multiple person profiles
- [ ] User can add weight and height measurements
- [ ] User can view historical data in a list
- [ ] User can see basic trend visualization
- [ ] Data persists across sessions
- [ ] User can delete their own data
### Non-Functional Requirements
- [ ] All passwords are hashed (never stored plaintext)
- [ ] API is secured with authentication on all endpoints
- [ ] Responsive web interface works on mobile browsers
- [ ] Application can handle 1000+ users
- [ ] Database queries complete in <100ms
- [ ] API response time <200ms for 95% of requests
### Security Requirements
- [ ] HTTPS in production
- [ ] SQL injection prevention
- [ ] XSS protection
- [ ] CSRF protection
- [ ] Input validation on all endpoints
- [ ] Rate limiting on auth endpoints
---
## Open Questions Requiring Further Research
### Priority 1 (Blocking for MVP)
1. **Rust Web Framework**
- Options: Actix, Axum, Rocket
- Criteria: Performance, ecosystem, learning curve, async support
- Research needed: Benchmark comparison, community adoption
2. **Database Selection**
- Options: PostgreSQL, MongoDB, SQLite
- Criteria: Query complexity, scaling needs, deployment simplicity
- Research needed: Data modeling comparison, hosting costs
3. **Authentication Library**
- Options: Custom JWT implementation, existing auth crates
- Criteria: Security audit history, maintenance status
- Research needed: Available crate reviews
4. **Frontend Framework**
- Options: React, Vue, Svelte, plain JavaScript
- Criteria: Bundle size, learning curve, ecosystem
- Research needed: Performance comparison for simple apps
### Priority 2 (Important but Not Blocking)
5. **ORM vs Raw SQL**
- Options: Diesel, SeaORM, sqlx, raw SQL
- Research needed: Type safety vs flexibility tradeoff
6. **Testing Framework**
- Unit tests, integration tests, E2E tests
- Research needed: Best practices for Rust + web testing
7. **Deployment Strategy**
- Docker setup, hosting provider (AWS, DigitalOcean, Railway?)
- Research needed: Cost comparison, ease of deployment
8. **UI Component Library**
- Material UI, Tailwind, Chakra UI, custom CSS
- Research needed: Speed of development for MVP
### Priority 3 (Nice to Have)
9. **Monitoring & Logging**
- Application performance monitoring
- Error tracking (Sentry, etc.)
10. **CI/CD Pipeline**
- GitHub Actions, GitLab CI, etc.
- Automated testing, deployment automation
---
## Next Steps
1. **Research Priority 1 questions** (Rust framework, database, auth library, frontend)
2. **Initialize Git repository**
3. **Create project structure** with chosen tech stack
4. **Implement authentication system** (register, login, JWT)
5. **Design and implement database schema** for users, persons, health metrics
6. **Build basic CRUD API** for persons and metrics
7. **Create simple web frontend** for auth and health tracking
8. **Add basic chart visualization** for trends
9. **Test end-to-end user flows**
10. **Deploy MVP**
---
## File References
**Design Document:**
- `/home/asoliver/desarrollo/normogen/introduction.md:1-82` - Complete project vision
**Research Document:**
- `/home/asoliver/desarrollo/normogen/thoughts/research/2026-01-04-1739-normogen-codebase-documentation.md` - Initial codebase assessment
**This Document:**
- `/home/asoliver/desarrollo/normogen/thoughts/research/2026-01-04-1840-normogen-mvp-definition.md`
---
## Notes
- MVP is intentionally simple to validate core concepts
- Future phases will add features from introduction.md
- Plugin system and advanced encryption deferred to post-MVP
- Mobile apps deferred to post-MVP (web-only for now)
- Focus on getting working code into users' hands quickly

View file

@ -0,0 +1,258 @@
# Normogen Research Summary
**Date:** 2026-01-05
**Status:** Research Complete, Ready for Implementation Planning
---
## Executive Summary
The Normogen project has been researched and scoped. The project is currently in the **conceptual phase** with only a design document (`introduction.md`). The MVP has been defined and technical research has been completed for mobile health framework integration.
**Key Decisions:**
1. **MVP Scope:** Authentication + Basic Health Tracking (weight, height, manual entry)
2. **Phase 2:** Mobile app with Apple HealthKit & Google Health Connect integration
3. **Available Health Data:** 50+ data types from both mobile platforms
---
## Research Documents Created
### 1. Initial Codebase Assessment
**File:** `thoughts/research/2026-01-04-1739-normogen-codebase-documentation.md`
**Key Findings:**
- Project is pre-implementation (only design document exists)
- No source code, configuration, or project structure
- Comprehensive vision in `introduction.md`
**Recommendation:**
- Initialize Git repository
- Create project structure
- Begin MVP implementation
---
### 2. MVP Definition
**File:** `thoughts/research/2026-01-04-1840-normogen-mvp-definition.md`
**MVP Scope (Phase 1):**
- **Authentication:** Register, login, password reset, JWT tokens
- **Health Tracking:** Manual entry for weight and height
- **Multi-person:** Support for family members (children, elderly care)
- **Visualization:** Basic charts for trends
- **Platform:** Web-only (responsive)
**MVP Success Criteria:**
- Users can register and login
- Create person profiles
- Add weight/height measurements
- View historical data with charts
- Data persists securely
**Out of Scope (Future Phases):**
- Lab results, medications, appointments
- Period/pregnancy tracking
- Mobile apps
- Plugin system
- Advanced encryption for data sharing
---
### 3. Mobile Health Frameworks Research
**File:** `thoughts/research/2026-01-05-mobile-health-frameworks-data.md`
**Comprehensive Data Available (50+ types):**
**Apple HealthKit (iOS):**
- Body: Weight, height, BMI, body fat, lean mass
- Vitals: Heart rate, blood pressure, temperature, SpO2, glucose, respiratory rate
- Activity: Steps, distance, active energy, workouts
- Sleep: Duration, stages (REM, light, deep)
- Nutrition: Calories, macros, vitamins, hydration
- Reproductive: Menstrual flow, ovulation, basal temp
- Medical: Lab results, medications, allergies, conditions
- Apple Watch: ECG, AFib, fall detection
**Google Health Connect (Android):**
- Body: Weight, height, body fat, BMR, bone mass
- Vitals: Heart rate, HRV, blood pressure, SpO2, temperature
- Activity: Steps, distance, exercise sessions, swimming
- Sleep: Sessions, stages, latency
- Nutrition: Hydration, calories, macros
- Cycle tracking: Menstruation, ovulation, cervical mucus
**Common to Both (15 core types):**
Weight, height, steps, distance, heart rate, blood pressure, sleep, active energy, temperature, glucose, SpO2, respiratory rate, nutrition, exercise, body fat
**Integration Complexity:**
- iOS (HealthKit): ⭐⭐⭐ Medium
- Android (Health Connect): ⭐⭐⭐⭐ Medium-High
**Timeline:**
- Phase 1 (Manual Entry): 4 weeks
- Phase 2 (Mobile Foundation): 4 weeks
- Phase 3 (Health Framework Integration): 4 weeks
- Phase 4 (Expanded Data Types): 4 weeks
**Total to Full Mobile Integration:** ~16 weeks
---
## Updated MVP Definition
### Phase 1: Manual Entry (MVP) - 4 weeks
- Web-based authentication
- Manual weight/height entry
- Basic visualization
- Multi-person profiles
### Phase 2: Mobile Foundation - 4 weeks
- iOS and Android apps
- Mobile authentication
- Manual data entry on mobile
- Server sync
### Phase 3: Health Framework Integration - 4 weeks
- Apple HealthKit integration
- Google Health Connect integration
- Top 5 data types: weight, heart rate, blood pressure, sleep, steps
- Background sync (15-30 min intervals)
- Historical data import (30 days)
### Phase 4: Expanded Data Types - 4 weeks
- All 50+ data types
- Exercise tracking
- Nutrition tracking
- Advanced sleep analysis
- Menstrual cycle tracking
---
## Data Model
### MVP (Phase 1)
```sql
users (id, email, password_hash, timestamps)
persons (id, user_id, name, birthdate)
health_metrics (id, person_id, metric_type, value, unit, recorded_at)
```
### Phase 2 (Mobile Integration)
```sql
-- Enhanced health_metrics
ALTER TABLE health_metrics ADD COLUMN metric_source;
ALTER TABLE health_metrics ADD COLUMN source_device_id;
ALTER TABLE health_metrics ADD COLUMN accuracy;
ALTER TABLE health_metrics ADD COLUMN metadata JSONB;
-- New tables
health_metric_sources (platform, device_name, sync timestamps)
sync_history (import records, conflicts, errors)
```
---
## Open Technical Questions (Priority 1)
### Blocking for MVP Start:
1. **Rust Web Framework**
- Actix vs Axum vs Rocket
- Need: Performance comparison, ecosystem maturity
2. **Database Selection**
- PostgreSQL vs MongoDB vs SQLite
- Need: Data modeling approach, hosting costs
3. **Authentication Library**
- Custom JWT vs existing crates
- Need: Security audit status
4. **Frontend Framework**
- React vs Vue vs Svelte vs plain JS
- Need: Bundle size, learning curve
---
## Security & Privacy Requirements
### Data Protection:
- **Encryption at rest** (database level)
- **Encryption in transit** (TLS 1.3)
- **No plaintext passwords** (bcrypt/scrypt/Argon2)
- **Per-user encryption keys**
### User Privacy:
- **Granular permissions** (user chooses what to share)
- **Easy data deletion** ("nuke option")
- **No third-party data sharing**
- **Transparent data usage**
### Compliance:
- GDPR (Europe)
- HIPAA (if handling PHI in US)
- CCPA (California)
- App Store & Play Store policies
---
## Recommended Next Steps
### Immediate (This Week):
1. **Research Priority 1 questions** above
2. **Initialize Git repository**
3. **Choose tech stack** based on research
### Short-term (Month 1):
4. **Create project structure**
5. **Implement authentication** (register, login, JWT)
6. **Design database schema**
7. **Build basic CRUD API** for persons and metrics
### Medium-term (Month 2):
8. **Create web frontend** (auth + health tracking)
9. **Add chart visualization**
10. **Test end-to-end flows**
11. **Deploy MVP**
### Long-term (Months 3-4):
12. **Build mobile apps** (iOS + Android)
13. **Integrate HealthKit & Health Connect**
14. **Implement background sync**
---
## File Structure
```
normogen/
├── introduction.md # Project vision
└── thoughts/
└── research/
├── 2026-01-04-1739-normogen-codebase-documentation.md
├── 2026-01-04-1840-normogen-mvp-definition.md
└── 2026-01-05-mobile-health-frameworks-data.md
```
---
## Key Takeaways
**MVP is clearly defined** - Manual health tracking with authentication
**Mobile path is clear** - HealthKit & Health Connect with 50+ data types
**Timeline is realistic** - 4 weeks MVP, 16 weeks to full mobile
**Technical questions are identified** - Ready for research/decision
⚠️ **Action needed:** Choose Rust framework, database, and frontend stack before starting implementation
🚀 **Ready to proceed:** All research complete, can begin implementation planning
---
## Contact & Questions
All research documents are available in `thoughts/research/`.
Review the three main research documents for detailed findings.
**Ready to start implementation?** Begin by researching the Priority 1 technical questions above, then proceed with Git initialization and project structure.

View file

@ -0,0 +1,60 @@
# Research Plan: Health Data from Phone Frameworks
## Objective
Research what health data can be accessed from mobile health frameworks with proper permissions:
- **Apple HealthKit** (iOS)
- **Google Health Connect** (Android)
- **Samsung Health SDK** (optional - additional coverage)
## Research Areas
### 1. Apple HealthKit (iOS)
Research questions:
- What health data types are available?
- What permissions are required for each data type?
- What are the user privacy requirements?
- How to read historical vs real-time data?
- What metadata is available (timestamps, device info, units)?
- Any special requirements for medical data vs fitness data?
### 2. Google Health Connect (Android)
Research questions:
- What health data types are supported?
- What permissions model does Health Connect use?
- How does it differ from the old Google Fit API?
- What are the integration requirements?
- Can it read data from third-party apps (Fitbit, Strava, etc.)?
- What metadata is available?
### 3. Data Type Comparison
Compare both frameworks:
- Which data types are available on both platforms?
- Which are platform-specific?
- Unit differences and conversions needed
- Timestamp precision differences
- Data granularity differences
### 4. Technical Implementation Requirements
Research:
- SDK/library requirements for both platforms
- Background data sync capabilities
- Battery usage considerations
- Data storage strategies (local cache vs direct sync)
- Error handling for missing permissions
## Expected Deliverables
1. Complete list of available health data types for each platform
2. Permission requirements mapping
3. Comparison matrix (iOS vs Android)
4. Recommended data model additions for MVP
5. Integration complexity assessment
6. Privacy and security considerations
## Search Strategy
Will research:
- Official Apple HealthKit documentation
- Official Google Health Connect documentation
- Developer guides and best practices
- Data type reference documentation
- Permission and privacy requirements
- Code examples and integration patterns

View file

@ -0,0 +1,635 @@
---
date: 2026-01-05T20:27:17-03:00
git_commit: N/A (not a git repository)
branch: N/A
repository: normogen
topic: "Mobile Health Frameworks - Available Data Types"
tags: [research, healthkit, health-connect, mobile-integration, data-types]
status: complete
---
# Research: Mobile Health Frameworks Data Availability
## Research Question
What health data can be accessed from mobile phone health frameworks (Apple HealthKit and Google Health Connect) with proper application permissions?
## Summary
**Key Finding:** Both iOS and Android provide comprehensive access to health data through their respective frameworks (HealthKit and Health Connect). With proper permissions, applications can access **50+ different health data types** including body measurements, vitals, activity, sleep, nutrition, and reproductive health.
**Platform Coverage:**
- **Apple HealthKit (iOS):** 9 major categories, 50+ data types
- **Google Health Connect (Android):** 8 major categories, 45+ data types
- **Common to Both:** ~15 core data types with overlap
**User Control:** Both platforms require explicit user permission for each data category, with granular controls and easy revocation.
---
## Apple HealthKit (iOS)
### Data Categories Available
#### 1. Body Measurements
With basic permissions:
- **Weight** - kg, lbs
- **Height** - cm, in, ft
- **Body Mass Index (BMI)** - calculated
- **Body Fat Percentage** - %age
- **Lean Body Mass** - kg, lbs
#### 2. Vitals (Requires Special Permissions)
- **Heart Rate** - beats per minute (BPM)
- **Resting Heart Rate** - BPM
- **Blood Pressure** - systolic/diastolic (mmHg)
- **Body Temperature** - °C, °F
- **Respiratory Rate** - breaths per minute
- **Oxygen Saturation (SpO2)** - percentage
- **Blood Glucose** - mg/dL, mmol/L
#### 3. Fitness & Activity
- **Step Count** - daily/total steps
- **Distance Walking/Running** - km, mi
- **Flights Climbed** - count
- **Active Energy Burned** - kcal
- **Basal Energy Burned** - kcal/day
- **Exercise Duration** - minutes/hours
- **Workouts** - type, duration, calories, route
#### 4. Sleep Analysis
- **Sleep Duration** - total time asleep
- **Time in Bed** - total time in bed
- **Sleep Stages** - in bed, asleep, awake
- **Sleep Quality** - REM, light, deep sleep
#### 5. Mobility
- **Walking Speed** - m/s
- **Walking Asymmetry** - percentage
- **Walking Steadiness** - score
- **Step Length** - cm, in
#### 6. Nutrition
- **Dietary Energy** - calories
- **Macronutrients** - carbs, protein, fat (total, saturated, unsaturated)
- **Fiber** - grams
- **Sugar** - grams
- **Sodium** - milligrams
- **Water Intake** - liters, cups, ounces
- **Vitamins & Minerals** - various (A, C, D, iron, calcium, etc.)
#### 7. Reproductive Health
- **Menstrual Flow** - light, medium, heavy
- **Basal Body Temperature** - °C, °F
- **Cervical Mucus Quality** - type and amount
- **Ovulation Test Result** - positive/negative
- **Sexual Activity** - protected/unprotected
- **Spotting** - yes/no
#### 8. Medical Records & Labs (Clinical Data)
- **Allergy Records** - allergen, severity, reaction
- **Condition Records** - diagnosis, status
- **Immunization Records** - vaccine, date
- **Lab Result Records** - test name, result, unit, reference range
- **Medication Records** - name, dosage, frequency
- **Procedure Records** - procedure, date, outcome
- **Vital Signs Records** - clinical measurements
#### 9. Apple Watch Specific Data
- **ECG Results** - ECG readings and classifications
- **AFib Detection** - atrial fibrillation notifications
- **Fall Detection** - fall events
- **Noise Levels** - environmental sound exposure
- **Headphone Audio Levels** - audio exposure
### Permission Requirements
**Info.plist Required Entries:**
```xml
<key>NSHealthShareUsageDescription</key>
<string>We need access to your health data to track and analyze your wellness metrics.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>We need permission to save health data to your Health app.</string>
```
**Entitlements Required:**
- HealthKit capability in Xcode project settings
- Special entitlements for clinical data access
**User Permissions:**
- User must explicitly grant permission for each data category
- Prompts shown at first access to each category
- User can revoke permissions in Settings > Health > Data Access & Devices
- Clinical data requires additional user consent
**Metadata Available:**
- **Timestamp:** Start and end time (millisecond precision)
- **Device:** Source device (iPhone, Apple Watch, third-party app)
- **Units:** Always included with proper conversions
- **Provenance:** Which app/device provided the data
- **Accuracy:** For sensor-based measurements
- **User Notes:** Optional user-created annotations
---
## Google Health Connect (Android)
### Data Types Available
#### 1. Activity & Exercise
- **Steps** - count
- **Distance** - meters, kilometers, miles
- **Floors** - count
- **Elevation** - meters, feet
- **Exercise Sessions** - type (running, walking, cycling, etc.), duration, calories
- **Swimming** - strokes, laps, distance
- **Wheelchair Pushes** - count
- **Golf Swings** - count (for supported apps)
#### 2. Body Measurements
- **Weight** - kg, lbs
- **Height** - meters, centimeters, feet, inches
- **Body Fat** - percentage
- **Basal Metabolic Rate** - kcal/day
- **Body Water Mass** - kg
- **Bone Mass** - kg
- **Lean Body Mass** - kg
#### 3. Vitals
- **Heart Rate** - BPM
- **Resting Heart Rate** - BPM
- **Heart Rate Variability** - milliseconds
- **Blood Pressure** - systolic/diastolic in mmHg
- **Oxygen Saturation (SpO2)** - percentage
- **Body Temperature** - °C, °F
- **Respiratory Rate** - breaths/minute
#### 4. Sleep
- **Sleep Sessions** - start time, end time, total duration
- **Sleep Stages** - awake, REM, light, deep sleep with durations
- **Sleep Latency** - time to fall asleep
#### 5. Nutrition
- **Hydration** - volume in mL, oz, cups
- **Nutrition** - calories, macronutrients, micronutrients
- **Meal Information** - meal type (breakfast, lunch, dinner, snack)
#### 6. Cycle Tracking
- **Menstruation Flow** - flow amount and type
- **Menstruation Period** - start and end dates
- **Ovulation** - positive, negative, test result
- **Cervical Mucus** - type and quantity
- **Sexual Activity** - protection status
- **Spotting** - yes/no
#### 7. Clinical Data
- **Blood Glucose** - mg/dL, mmol/L
- **Lab Test Results** - similar to Apple HealthKit
#### 8. Physical Activity Details
- **Exercise Type** - running, walking, cycling, swimming, etc.
- **Exercise Duration** - time in minutes/hours
- **Exercise Calories** - kcal burned
- **Exercise Route** - GPS data path (if available)
### Permission Requirements
**AndroidManifest.xml:**
```xml
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA" />
<uses-permission android:name="android.permission.health.WRITE_HEALTH_DATA" />
```
**Runtime Permissions:**
- Granular permission requests per data type
- User approves each category individually
- Health Connect app must be installed on device
- User can manage permissions in Health Connect app
**Requirements:**
- Android API level 34+ (Android 14) recommended
- Health Connect Jetpack library
- Google Play Services (on Play Store devices)
- User consent for each data type read
**Metadata Available:**
- **Timestamps:** Start and end time (millisecond precision)
- **Device/Source:** Which app or device provided data
- **Accuracy:** Measurement precision
- **Units:** Always included
- **Entry Method:** Manual vs automatic/sensor
---
## Cross-Platform Comparison
### Common Data Types (Both Platforms)
These data types are available on both iOS and Android with consistent structure:
| Data Type | Apple HealthKit | Google Health Connect | Notes |
|-----------|----------------|----------------------|-------|
| **Weight** | ✓ | ✓ | Both support kg/lbs |
| **Height** | ✓ | ✓ | Both support metric/imperial |
| **Steps** | ✓ | ✓ | Daily count and historical |
| **Distance** | ✓ | ✓ | Walking/running distance |
| **Heart Rate** | ✓ | ✓ | BPM, resting HR, HRV |
| **Blood Pressure** | ✓ | ✓ | Systolic/diastolic |
| **Sleep** | ✓ | ✓ | Duration, stages |
| **Active Energy** | ✓ | ✓ | Calories burned |
| **Body Temperature** | ✓ | ✓ | °C/°F |
| **Blood Glucose** | ✓ | ✓ | mg/dL, mmol/L |
| **Respiratory Rate** | ✓ | ✓ | Breaths per minute |
| **SpO2** | ✓ | ✓ | Oxygen saturation |
| **Nutrition** | ✓ | ✓ | Calories, macros, hydration |
| **Exercise** | ✓ | ✓ | Type, duration, calories |
| **Body Fat %** | ✓ | ✓ | Percentage |
### Platform-Specific Features
**Apple-Only:**
- ECG measurements (Apple Watch)
- Atrial fibrillation detection
- Walking steadiness/asymmetry metrics
- Environmental sound levels
- More detailed mobility analysis
- Integration with Apple ecosystem (Watch, iPad, Mac)
**Android-Only:**
- More granular exercise types
- Broader device ecosystem (Samsung, Fitbit, Garmin, etc.)
- More flexible third-party app integrations
- Earlier API access for some features
### Unit Conversions
Both platforms handle units automatically:
| Measurement | iOS Units | Android Units | Notes |
|------------|-----------|---------------|-------|
| Weight | kg, lbs | kg, lbs | 1 kg = 2.20462 lbs |
| Height | cm, in | cm, in, ft+in | 1 in = 2.54 cm |
| Temperature | °C, °F | °C, °F | °F = (°C × 9/5) + 32 |
| Glucose | mg/dL, mmol/L | mg/dL, mmol/L | mg/dL = mmol/L × 18.02 |
| Distance | km, mi | km, mi | 1 mi = 1.60934 km |
### Time Precision
- **Apple:** Millisecond precision (Unix timestamp)
- **Android:** Millisecond precision (Unix timestamp)
- **Both:** Support historical queries with date ranges
- **Best Practice:** Store all timestamps in UTC on server
---
## Integration Complexity Assessment
### Apple HealthKit
**Complexity:** ⭐⭐⭐ (Medium - 3/5)
**Advantages:**
- Mature, stable framework (since iOS 8)
- Excellent documentation (with Apple Developer account)
- Strong type safety with Swift
- Consistent API across iOS versions
- Good debugging tools in Xcode
- Deep integration with Apple Watch
**Challenges:**
- Requires Mac for development
- Requires Xcode
- Simulator has limited HealthKit support
- Testing on physical device required
- Some features require Apple Developer Program ($99/year)
**Development Requirements:**
- macOS with Xcode
- iOS deployment target: iOS 13+ (for full features)
- Swift or Objective-C
- HealthKit framework entitlement
### Google Health Connect
**Complexity:** ⭐⭐⭐⭐ (Medium-High - 4/5)
**Advantages:**
- Modern, actively developed framework
- Centralizes data from all health apps
- Cross-app data sharing
- User privacy controls
- Works on wide range of devices
**Challenges:**
- Newer framework (introduced 2023, replacing Google Fit)
- Documentation still evolving
- Android version compatibility (API 34+ recommended)
- Device fragmentation (different OEM implementations)
- Health Connect app must be installed separately
- More complex testing matrix (device/OS combinations)
**Development Requirements:**
- Android Studio
- Minimum SDK: API 26 (Android 8) with compatibility layer
- Recommended SDK: API 34 (Android 14) for full features
- Kotlin or Java
- Health Connect Jetpack library
- Google Play Services (optional but recommended)
---
## Recommended MVP Integration Strategy
### Phase 1: Manual Entry (Current MVP Scope)
**Timeline:** Week 1-4
**Features:**
- Manual entry of weight, height
- Manual entry of basic vitals (heart rate, blood pressure, temperature)
- Web-based interface only
- No mobile integration yet
### Phase 2: Mobile Foundation
**Timeline:** Week 5-8
**Features:**
- Build basic iOS and Android apps
- Implement authentication
- Manual data entry on mobile
- Sync with server
### Phase 3: Health Framework Integration
**Timeline:** Week 9-12
**Features:**
- Implement HealthKit on iOS
- Implement Health Connect on Android
- Support top 5 most important data types:
1. Weight
2. Heart Rate
3. Blood Pressure
4. Sleep (duration)
5. Steps (count)
- Background sync every 15-30 minutes
- Historical data import (last 30 days)
### Phase 4: Expanded Data Types
**Timeline:** Week 13-16
**Features:**
- Add all common data types
- Support for exercise tracking
- Nutrition tracking
- Advanced sleep analysis
- Menstrual cycle tracking
---
## Data Model Recommendations
### Enhanced health_metrics Table
```sql
ALTER TABLE health_metrics ADD COLUMN metric_source VARCHAR(50)
CHECK (metric_source IN ('manual', 'healthkit', 'healthconnect', 'third_party_device', 'unknown'));
ALTER TABLE health_metrics ADD COLUMN source_device_id VARCHAR(255);
-- Stores identifier for source device/app (e.g., "com.apple.health.Health", "com.fitbit.FitbitMobile")
ALTER TABLE health_metrics ADD COLUMN accuracy DECIMAL(5,2);
-- Sensor accuracy for automatic measurements (0.0-1.0, where 1.0 = perfect)
ALTER TABLE health_metrics ADD COLUMN metadata JSONB;
-- Flexible storage for platform-specific data:
-- iOS: {"HKDevice": "iPhone14,2", "HKSource": "com.apple.Health"}
-- Android: {"device": "Samsung Galaxy S21", "package": "com.sec.android.app.health"}
```
### New Table: health_metric_sources
```sql
CREATE TABLE health_metric_sources (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
platform VARCHAR(20) NOT NULL, -- 'ios' or 'android'
device_name VARCHAR(255),
source_bundle_id VARCHAR(255), -- App/package ID
first_sync TIMESTAMP DEFAULT NOW(),
last_sync TIMESTAMP DEFAULT NOW(),
is_active BOOLEAN DEFAULT TRUE,
UNIQUE(user_id, platform, source_bundle_id)
);
CREATE INDEX idx_metric_sources_user ON health_metric_sources(user_id);
```
### New Table: sync_history
```sql
CREATE TABLE sync_history (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
platform VARCHAR(20) NOT NULL,
sync_type VARCHAR(50) NOT NULL, -- 'initial', 'incremental', 'manual'
records_imported INTEGER DEFAULT 0,
records_failed INTEGER DEFAULT 0,
sync_duration_seconds INTEGER,
error_message TEXT,
synced_from TIMESTAMP,
synced_to TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_sync_history_user ON sync_history(user_id, created_at DESC);
```
---
## Sync Strategy
### Initial Sync (First Connection)
When user first connects health framework:
1. Request last 30 days of data (common window)
2. Import in batches to avoid overwhelming server
3. Show progress to user
4. Handle errors gracefully
5. Store sync timestamp for incremental updates
### Incremental Sync (Background)
Every 15-30 minutes:
1. Query for new data since last sync
2. Send new records to server
3. Handle conflicts (same metric, multiple sources)
4. Update last sync timestamp
### Conflict Resolution Strategy
When same metric type exists from multiple sources:
1. **Automatic Entry** (sensor/device) > **Manual Entry**
2. **More Recent** > **Older** (for time-series data)
3. **More Accurate** > **Less Accurate** (based on metadata)
4. **User Preference** (if user sets preferred source)
### Battery Optimization
- Limit sync frequency when battery < 20%
- Use WorkManager (Android) and Background Tasks (iOS)
- Batch requests to minimize wake-ups
- Sync only when on Wi-Fi (user preference)
- Respect battery saver mode
---
## Security & Privacy Considerations
### Data Transmission
- **Always use HTTPS** (TLS 1.3)
- **Encrypt sensitive data** at REST on server
- **Never store credentials** on device (use tokens)
- **Certificate pinning** for API calls
### Data Storage
- **Encrypt at rest** using database encryption
- **Separate encryption keys** per user
- **No plaintext passwords** (bcrypt/scrypt/Argon2)
- **Secure key derivation** for data access
### User Privacy
- **Clear permission requests** explaining why data is needed
- **Granular controls** - user chooses what to share
- **Easy data deletion** - "nuke option" from intro.md
- **No data sharing** with third parties without explicit consent
- **Transparent data usage** - show user what's stored
### Compliance
- **GDPR** (Europe)
- **HIPAA** (if handling protected health information in US)
- **CCPA** (California)
- **App Store Review Guidelines** (Apple)
- **Google Play Policy** (Android)
---
## Open Questions & Further Research
### Priority 1 (MVP Blocking)
1. **Conflict Resolution Algorithm**
- What if user manually enters weight but scale also sent data?
- Need comprehensive conflict resolution policy
2. **Background Sync Optimization**
- Optimal sync interval for battery vs data freshness
- How to handle offline scenarios
3. **Data Retention Policy**
- How long to keep historical data?
- Should old data be archived or deleted?
### Priority 2 (Post-MVP)
4. **Third-Party Device Integration**
- Fitbit, Garmin, Oura Ring, Whoop, etc.
- Each requires separate API integration
5. **Data Export Format**
- What format for user downloads?
- JSON, CSV, FHIR (HL7), or custom?
6. **Advanced Analytics**
- Trends, correlations, predictions
- Privacy-preserving computations?
7. **Cross-Platform Sync**
- What if user has both iOS and Android devices?
- How to merge data from both?
### Priority 3 (Future)
8. **Real-Time Monitoring**
- Live heart rate, blood glucose alerts?
- Push notification strategy
9. **Data Visualization**
- Charts, graphs, heatmaps
- What library to use?
10. **International Units**
- Automatic unit conversion based on user location?
- Support for medical vs customary units?
---
## Implementation Checklist
### Pre-Development
- [ ] Finalize data model with source tracking
- [ ] Design conflict resolution algorithm
- [ ] Create API endpoints for bulk data import
- [ ] Set up database encryption
### iOS Development
- [ ] Add HealthKit capability in Xcode
- [ ] Write permission request code
- [ ] Implement HealthKit queries for top 5 data types
- [ ] Implement background sync with BGTaskScheduler
- [ ] Test on physical device (simulator has limited support)
### Android Development
- [ ] Add Health Connect dependencies
- [ ] Add permissions to AndroidManifest
- [ ] Write permission request code
- [ ] Implement Health Connect queries for top 5 data types
- [ ] Implement background sync with WorkManager
- [ ] Test on multiple Android versions/devices
### Backend Development
- [ ] Create bulk import API endpoints
- [ ] Implement conflict resolution logic
- [ ] Add sync history tracking
- [ ] Optimize database indexes for time-series queries
- [ ] Implement data deletion endpoint ("nuke")
### Testing
- [ ] Unit tests for data parsing
- [ ] Integration tests for sync logic
- [ ] Manual testing on physical devices
- [ ] Battery usage profiling
- [ ] Security audit
- [ ] Load testing with thousands of records
---
## Conclusion
**Feasibility:** ✅ **Highly Feasible**
Both mobile platforms provide robust, well-documented frameworks for health data access. The integration is straightforward for common data types (weight, height, heart rate, blood pressure, sleep, steps).
**Recommendation for MVP:**
- Start with **Phase 1** (manual entry) to validate core architecture
- Move to **Phase 2** (mobile apps) for basic platform functionality
- Implement **Phase 3** (health frameworks) with top 5 data types
- Expand in **Phase 4** based on user feedback
**Timeline Estimate:**
- Phase 1: 4 weeks (manual entry web app)
- Phase 2: 4 weeks (mobile app foundation)
- Phase 3: 4 weeks (health framework integration)
- Phase 4: 4 weeks (expanded data types)
**Total to Full Mobile Integration:** ~16 weeks (4 months)
---
## References
### Official Documentation
- [Apple HealthKit Documentation](https://developer.apple.com/documentation/healthkit)
- [Google Health Connect Documentation](https://developer.android.com/health-connect)
- [Apple Human Interface Guidelines - Health](https://developer.apple.com/design/human-interface-guidelines/health)
- [Google Play - Health Apps Policy](https://play.google.com/console/about/health/)
### Data Type References
- [HealthKit HKObjectType Constants](https://developer.apple.com/documentation/healthkit/hkobjecttype)
- [Health Connect Data Types](https://developer.android.com/reference/kotlin/androidx/health/data/class)
- [Common Data Elements - FHIR](https://hl7.org/fhir/observation.html)
### Code Examples
- Apple Sample Code: HKWorkoutSession, HKHealthStore
- Android Sample Code: Health Connect Samples on GitHub
---
**Next Steps:**
1. Review this research with stakeholders
2. Prioritize which data types for MVP
3. Choose mobile development framework (React Native vs native)
4. Begin implementation with Phase 1 (manual entry)

View file

@ -0,0 +1,431 @@
# Android Health Connect - Available Data Types Research
**Date**: 2026-01-12
**Platform**: Android Health Connect API
**Source**: https://developer.android.com/health-and-fitness/guides/health-connect/plan/data-types
---
## Overview
Android Health Connect is a unified API that allows apps to read and write health and fitness data from a central on-device store. It's compatible with Android SDK 28 (Pie) and higher.
**Key Points**:
- Requires explicit user permissions for each data type
- All data is stored locally on the device
- Apps can read/write data with user consent
- Supports medical records and health data
- Privacy-focused design
---
## Complete Data Types Catalog (41 Types)
### 🏃 Physical Activity & Movement
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **StepsRecord** | Step count over time | Daily activity tracking |
| **DistanceRecord** | Distance traveled | Walking/running/cycling distances |
| **FloorsClimbedRecord** | Number of floors climbed | Stair climbing activity |
| **ElevationGainedRecord** | Elevation gained | Hiking/mountain activities |
| **SpeedRecord** | Speed measurement | Running/cycling pace |
| **StepsCadenceRecord** | Steps per minute | Running/cycling cadence |
| **CyclingPedalingCadenceRecord** | Pedal cadence | Cycling performance |
| **WheelchairPushesRecord** | Wheelchair pushes | Accessibility tracking |
| **ExerciseSessionRecord** | Complete workout sessions | Gym/fitness activities |
| **PlannedExerciseSessionRecord** | Scheduled workouts | Workout planning |
| **ActivityIntensityRecord** | Activity intensity levels | Exercise intensity zones |
---
### 💪 Body Composition & Measurements
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **WeightRecord** | Body weight | Weight tracking |
| **HeightRecord** | Height | BMI calculations |
| **BodyFatRecord** | Body fat percentage | Body composition |
| **BodyWaterMassRecord** | Body water mass | Hydration tracking |
| **BoneMassRecord** | Bone mass | Bone health |
| **LeanBodyMassRecord** | Lean muscle mass | Fitness progress |
---
### ❤️ Heart & Cardiovascular
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **HeartRateRecord** | Real-time heart rate | Heart rate monitoring |
| **RestingHeartRateRecord** | Resting heart rate | Cardiovascular health |
| **HeartRateVariabilityRmssdRecord** | HRV (RMSSD) | Stress/recovery tracking |
| **BloodPressureRecord** | Systolic/diastolic pressure | Hypertension monitoring |
| **RespiratoryRateRecord** | Breaths per minute | Respiratory health |
| **Vo2MaxRecord** | Maximum oxygen uptake | Cardiovascular fitness |
| **OxygenSaturationRecord** | Blood oxygen levels (SpO2) | Oxygen monitoring |
---
### 🌡️ Temperature & Metabolism
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **BodyTemperatureRecord** | Body temperature | Fever/health monitoring |
| **BasalBodyTemperatureRecord** | Basal body temperature | Fertility tracking |
| **SkinTemperatureRecord** | Skin temperature | Sleep/stress monitoring |
| **BasalMetabolicRateRecord** | BMR | Metabolism tracking |
---
### 🔥 Calories & Energy
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **ActiveCaloriesBurnedRecord** | Calories from activity | Exercise calorie burn |
| **TotalCaloriesBurnedRecord** | Total daily calories | Complete energy expenditure |
---
### 💧 Hydration & Nutrition
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **HydrationRecord** | Water intake | Hydration tracking |
| **NutritionRecord** | Detailed nutrition data | Diet/macronutrient tracking |
---
### 💤 Sleep & Mindfulness
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **SleepSessionRecord** | Complete sleep sessions | Sleep analysis |
| **MindfulnessSessionRecord** | Meditation/mindfulness | Mental wellness |
---
### 🩸 Women's Health
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **MenstruationPeriodRecord** | Menstrual cycle | Period tracking |
| **MenstruationFlowRecord** | Flow intensity | Cycle details |
| **IntermenstrualBleedingRecord** | Spotting between periods | Cycle health |
| **CervicalMucusRecord** | Cervical mucus | Fertility tracking |
| **OvulationTestRecord** | Ovulation test results | Fertility planning |
| **SexualActivityRecord** | Sexual activity logs | Health tracking |
---
### 🩺 Blood & Medical
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **BloodGlucoseRecord** | Blood glucose levels | Diabetes management |
---
### ⚡ Power & Performance
| Data Type | Description | Use Case |
|-----------|-------------|----------|
| **PowerRecord** | Power output | Cycling/rowing performance |
| **ForceRecord** | Force measurement | Strength training |
---
## Permissions Model
Each data type requires specific health permissions:
### Examples of Permission Strings
- `android.permission.health.READ_STEPS`
- `android.permission.health.WRITE_STEPS`
- `android.permission.health.READ_HEART_RATE`
- `android.permission.health.WRITE_HEART_RATE`
- `android.permission.health.READ_BLOOD_PRESSURE`
- `android.permission.health.WRITE_BLOOD_PRESSURE`
**Important**: Users must grant each permission individually through the Health Connect interface.
---
## Data Structure Format
Most records follow this structure:
```kotlin
Record(
startTime: Instant,
startZoneOffset: ZoneOffset,
endTime: Instant,
endZoneOffset: ZoneOffset,
metadata: Metadata {
id: String,
dataOrigin: DataOrigin,
lastModifiedTime: Instant,
clientRecordId: String?,
device: Device?,
recordingMethod: RecordingMethod?
}
)
```
Example: **BloodPressureRecord**
```kotlin
BloodPressureRecord(
systolic = Pressure.millimetersOfMercury(120.0),
diastolic = Pressure.millimetersOfMercury(80.0),
time = Instant.now(),
zoneOffset = ZoneOffset.UTC,
metadata = Metadata(...)
)
```
---
## Medical Records (New Feature)
Health Connect now supports medical records:
- **Medical resource format**: FHIR-based structure
- **Reading medical data**: Requires additional permissions
- **Writing medical data**: Vaccination records, lab results, etc.
- **Data format**: Structured medical records with standardized fields
### Medical Record Types
- Immunizations
- Lab results
- Vital signs
- Medications
- Allergies
- Conditions
- Procedures
---
## Integration Approaches for Normogen
### 1. Direct Health Connect Integration (Recommended)
**Pros**:
- Native Android integration
- No third-party dependencies
- Unified API for all data types
- Privacy-preserving (local storage)
**Cons**:
- Android-only
- Requires Android 9+ (API 28+)
- Need to handle user permissions
- Not available on older Android versions
**Implementation**:
```kotlin
// Dependency
implementation("androidx.health:health-connect-client:1.1.0-alpha07")
// Check availability
val healthConnectManager = HealthConnectManager.getOrCreate(context)
if (healthConnectManager.isAvailable) {
// Use Health Connect
}
```
### 2. Cross-Platform Wrapper Libraries
**Example**: Flutter Health Package (`health` package on pub.dev)
**Supported Data Types** (limited subset):
- Steps
- Heart rate
- Sleep
- Blood oxygen
- Blood pressure
- Weight
- Height
- Active energy burned
- Total energy burned
- Distance
- Water intake
- Nutrition
**Pros**:
- Cross-platform (iOS & Android)
- Simple API
- Active community
**Cons**:
- Limited data types
- May not support all Health Connect features
- Dependency on third-party maintenance
### 3. Hybrid Approach (Recommended for Normogen)
**Android**: Use native Health Connect API
- Access all 41 data types
- Full permission control
- Medical records support
**iOS**: Use HealthKit
- Equivalent data types
- Similar permission model
**Web/PWA**: Web Bluetooth API (limited)
- Connect to BLE devices directly
- Very limited device support
---
## Data Type Mapping to Normogen Features
| Normogen Feature | Health Connect Data Types |
|-----------------|---------------------------|
| **General Health Stats** | WeightRecord, HeightRecord, BodyFatRecord |
| **Physical Activity** | StepsRecord, DistanceRecord, ExerciseSessionRecord |
| **Heart Monitoring** | HeartRateRecord, RestingHeartRateRecord, HeartRateVariabilityRmssdRecord |
| **Blood Pressure** | BloodPressureRecord |
| **Sleep Tracking** | SleepSessionRecord |
| **Temperature** | BodyTemperatureRecord, BasalBodyTemperatureRecord, SkinTemperatureRecord |
| **Respiration** | RespiratoryRateRecord, OxygenSaturationRecord |
| **Period Tracking** | MenstruationPeriodRecord, MenstruationFlowRecord, CervicalMucusRecord, OvulationTestRecord |
| **Hydration** | HydrationRecord |
| **Nutrition** | NutritionRecord |
| **Blood Glucose** | BloodGlucoseRecord (diabetes) |
| **Lab Results** | Medical records API |
| **Medication** | Medical records API |
---
## Limitations & Considerations
### ⚠️ Missing Data Types
- **Pill identification**: No API for identifying pills by shape/appearance
- **Medication reminders**: Not built into Health Connect (app-level feature)
- **Dental information**: Not covered
- **Medical appointments**: Not covered (calendar events)
### 🔒 Privacy Requirements
- User must grant each permission explicitly
- Cannot force permissions
- Some data types require additional health permissions
- Medical records require special handling
### 📱 Device Compatibility
- **Minimum**: Android 9 (API 28)
- **Optimal**: Android 14 (API 34) for full feature set
- **Health Connect module**: Must be installed from Play Store (on Android 13) or pre-installed (Android 14+)
### 📊 Data Granularity
- **Real-time**: Available (heart rate, steps during exercise)
- **Daily summaries**: Available (most data types)
- **Historical queries**: Supported with time ranges
---
## Implementation Example
### Reading Steps Data
```kotlin
suspend fun readSteps(
healthConnectManager: HealthConnectManager,
startTime: Instant,
endTime: Instant
): List<StepsRecord> {
val response = healthConnectManager.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
return response.records
}
```
### Writing Blood Pressure Data
```kotlin
suspend fun writeBloodPressure(
healthConnectManager: HealthConnectManager,
systolic: Double,
diastolic: Double,
timestamp: Instant
) {
val record = BloodPressureRecord(
systolic = Pressure.millimetersOfMercury(systolic),
diastolic = Pressure.millimetersOfMercury(diastolic),
time = timestamp,
zoneOffset = ZoneOffset.systemDefault(),
metadata = Metadata(
dataOrigin = DataOrigin("com.normogen.app"),
lastModifiedTime = Instant.now()
)
)
healthConnectManager.insertRecords(listOf(record))
}
```
### Reading Sleep Sessions
```kotlin
suspend fun readSleepSessions(
healthConnectManager: HealthConnectManager,
startTime: Instant,
endTime: Instant
): List<SleepSessionRecord> {
val response = healthConnectManager.readRecords(
ReadRecordsRequest(
recordType = SleepSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
return response.records
}
```
---
## Recommendations for Normogen
### ✅ Use Health Connect For:
1. **All sensor data collection** (steps, heart rate, sleep, etc.)
2. **Physical activity tracking** (exercise sessions, distance, calories)
3. **Women's health features** (period tracking, ovulation, etc.)
4. **Vital signs** (blood pressure, blood glucose, temperature)
5. **Body measurements** (weight, height, body composition)
### ❌ Don't Use Health Connect For:
1. **Medication reminders** - Use app-level scheduling
2. **Pill identification** - Not available in API
3. **Medical appointments** - Use calendar integration
4. **Lab results storage** - Store encrypted on server (as planned)
5. **Dental records** - Custom data model needed
### 🎯 Integration Strategy:
1. **Primary data source**: Health Connect for automatic sensor data
2. **Manual entry**: Allow users to manually input data not available via sensors
3. **Background sync**: Periodic sync with Health Connect to update records
4. **Privacy**: All data synced to server should be encrypted client-side (zero-knowledge)
---
## Next Steps
1. ✅ **Research complete** - All 41 data types documented
2. ⏳ **Create data mapping** - Map Normogen features to Health Connect types
3. ⏳ **Design integration** - Plan permission flow and UI
4. ⏳ **Implement PoC** - Build prototype with key data types
5. ⏳ **iOS equivalent** - Research HealthKit for comparison
---
## Resources
- [Official Documentation](https://developer.android.com/health-and-fitness/guides/health-connect/plan/data-types)
- [GitHub Samples](https://github.com/android/health-samples)
- [Health Connect on Play Store](https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata)
- [Privacy Policy](https://developer.android.com/health-and-fitness/health-connect/privacy)
---
**Generated by**: goose AI assistant
**Last Updated**: 2026-01-12