The Problem
People with chronic conditions, fitness goals, or health concerns are often told to "track their symptoms". but paper health journals have poor adherence, and most health apps present raw data without context. What people actually need is a system that collects data passively, asks the right questions, and helps them make sense of patterns they can't see themselves.
This was a portfolio project exploring the intersection of wearable health data, AI analysis, and behaviour change.
What I Built
The app connects to Apple HealthKit (steps, heart rate, sleep, HRV, SpO2) and Fitbit (activity, sleep stages, resting HR) to pull in passive health metrics without manual entry.
Symptom logging uses a conversational AI interface. users don't fill in forms, they describe how they feel in natural language. GPT-4o extracts structured data (symptom type, severity, time, potential triggers) from the free-text entry. This approach was intentional: conversational logging has far higher adherence than form-based logging because it feels natural.
Weekly health review is an AI-generated summary of the past 7 days: sleep quality trends against symptom severity, activity levels against energy ratings, notable correlations ("Your headache frequency this week was 3× higher than average, and your sleep duration was 1.2 hours below your 30-day average on those days.").
Trend detection runs on the server nightly. a Python ML pipeline (scikit-learn) looks for correlations between logged symptoms and biometric data. When a statistically significant pattern emerges (e.g. HRV consistently drops the day before reported fatigue episodes), the AI coach surfaces it.
The app is clear that it is not medical advice and recommends consulting a doctor for any clinical concerns.
Technical Highlights
The backend is a FastAPI application with PostgreSQL. Health data from wearables is normalised into a time-series events table (partitioned by month). The correlation analysis runs as a scheduled task using APScheduler.
HealthKit data is pulled via Expo's expo-health module; Fitbit via OAuth2 + REST API with a background sync every 6 hours. All health data is stored encrypted at rest using column-level encryption in Postgres (pgcrypto).
The AI coach's prompts are structured to always ground responses in the user's own data ("Based on your last 30 days...") rather than general health advice. RAG is implemented over the user's own health history to keep responses personalised.
Outcome
Tested with a group of 40 volunteer users over a 60-day period. Symptom logging adherence at 30 days was 94% (conversational logging) vs 61% (form-based logging in a prior version). Users reported that the weekly AI review was the most valuable feature; "it noticed a pattern I hadn't connected" was a common response.
The project demonstrated the viability of passive data + conversational logging + AI analysis as a health self-management tool. Conversations ongoing with a digital health startup about commercialising the pattern.