Personal Project
My Health Copilot
Node.js · Claude API · Whoop API · Supabase · Telegram
My Health Copilot
A personal AI health intelligence system that turns raw biometric data, food photos, and blood results into daily personalized recommendations, delivered via Telegram every morning
Personal Project · Archived 2026
6
Data Layers
Biometrics, food, photos, exercise, weight, blood results
90 Days
Rolling History
Minimum window for pattern detection
3
Output Types
Daily briefing, on-demand analysis, blood test report
1
Command
/brief triggers full AI health analysis on demand
The Problem
The Problem
Most people who invest in wearable health technology receive raw biometric data they cannot meaningfully interpret or act on. A device tells you your recovery score. It does not tell you why it is low, what you ate the day before that may have contributed, or what to do differently today.
Three gaps exist with consumer health tracking as it stands today. First, fragmented inputs: biometric data, food intake, exercise logs, and blood results live in separate apps with no connection between them. Second, no contextual analysis: devices score your recovery but do not correlate it with nutrition, sleep timing, or cardiovascular health context. Third, no personalization: generic health apps give generic recommendations that do not account for your medical history, your health profile, or your baseline.
The result: people wear expensive devices, look at the numbers, and change nothing.
What It Does
What It Does
One morning trigger. Six data layers. A health briefing that knows your full picture.
Automated Biometric Collection
A scheduled cron job pulls the previous day’s Whoop data every night: recovery score, HRV, resting heart rate, sleep stages, strain, SpO2, skin temperature, and respiratory rate. No manual input required. Data lands in Supabase automatically.
Food Logging via Photo or Text
The user logs meals in two ways. A photo of the meal is sent to the Telegram bot and analyzed by Claude vision, estimating calories, macros, and meal composition from the image. Alternatively the user types a free-text description and Claude estimates nutritional content from that. All entries are timestamped and stored, with daily and weekly calorie and macro totals available on demand.
Exercise and Weight Logging
Whoop-tracked workouts are pulled automatically via API. Non-Whoop activities are logged by typing a description into the bot: exercise type, duration, and intensity. Weight is logged with a single command. All inputs feed the same database so Claude sees the complete physical picture when generating recommendations.
Blood Test Ingestion
The user uploads a blood test PDF or image directly to the Telegram bot. Claude extracts all measured values, flags out-of-range markers, cross-references against the user’s cardiovascular health profile for clinically relevant signals, and stores the structured results in Supabase. Each new upload triggers a delta comparison against prior results to surface improving or worsening trends.
Claude Analysis
When a briefing is triggered, the system compiles the last 7 days of biometrics, food logs with calorie totals, exercise entries, weight trend, and blood results into a structured context payload and sends it to Claude. The system prompt is built around the user’s personal health profile, ensuring every output is grounded in individual data, not generic population averages.
Telegram Delivery
Claude returns a structured briefing every morning: recovery and HRV trend, sleep quality breakdown, calorie and macro summary, pattern observations linking yesterday’s inputs to today’s score, and 3 specific recommendations for the day. Weekly summaries, on-demand analysis, and blood test reports are available at any time via bot commands.
Data Architecture
Data Architecture
Six input types. One structured context payload. Every Claude output grounded in personal data.
System Architecture
System Architecture
Whoop API
OAuth 2.0
Nightly cron pull
Food Photo
Claude vision
Calorie + macro estimate
Food + Exercise
Telegram command
Text log, manual entry
Blood Test
PDF or image
Upload via bot
Supabase
PostgreSQL
90-day rolling history
Supabase Storage
File storage
Blood test PDFs and images
Claude API
Sonnet model
Context-aware health analysis
Prompt Engine
Personalized context
Health profile + 7-day data window
Morning Briefing
Daily automated
Recovery, sleep, calories, recommendations
On-Demand Analysis
/analyze command
7-day pattern deep dive
Blood Test Report
On upload
Extraction, flags, delta comparison
Whoop API
OAuth 2.0
Nightly cron pull
Food Photo
Claude vision
Calorie + macro estimate
Food + Exercise
Telegram command
Text log, manual entry
Blood Test
PDF or image
Upload via bot
Supabase
PostgreSQL
90-day rolling history
Supabase Storage
File storage
Blood test PDFs and images
Claude API
Sonnet model
Context-aware health analysis
Prompt Engine
Personalized context
Health profile + 7-day data window
Morning Briefing
Daily automated
Recovery, sleep, calories, recommendations
On-Demand Analysis
/analyze command
7-day pattern deep dive
Blood Test Report
On upload
Extraction, flags, delta comparison
Six data layers. One Claude context payload. Delivered to Telegram in seconds.
What Claude Receives
What Claude Receives
Every briefing is grounded in a structured context payload compiled from Supabase. This is what the AI sees before generating a recommendation.
Technical Depth
Technical Depth
Key engineering decisions behind the system.
OAuth 2.0 with Whoop Developer API
A registered Whoop developer application handles the full OAuth 2.0 authorization code flow: Client ID, Client Secret, token exchange, and automatic refresh token renewal. The user authorizes once and the system maintains access indefinitely without re-authorization.
Claude Vision for Food Photo Recognition
When a user sends a food photo to the Telegram bot, the image is encoded as base64 and sent to Claude with a structured prompt requesting calorie estimation, macro breakdown, and meal composition. The output is parsed and stored in Supabase alongside the timestamp. Daily and weekly totals are computed from stored records and included in every briefing payload.
Structured Context Design for LLM Input
The Claude prompt is not a single question. It is a structured data payload compiled from six Supabase tables: biometrics, food logs with calorie totals, exercise entries, weight, blood results, and health profile. The payload is assembled fresh on each briefing request, ensuring Claude always reasons over current data with a 7-day rolling window.
Cardiovascular-Aware Prompt Engineering
The system prompt explicitly configures Claude around the user’s cardiovascular health context, instructing the AI to flag clinically relevant blood markers, avoid recommendations with known interaction risks, and recommend GP review for out-of-range values. Every output is personalized to the individual’s health reality, not generic population averages.
Blood Test PDF Analysis with Delta Comparison
Blood test PDFs and images are encoded as base64 and sent to Claude with a structured extraction prompt. Claude identifies all measured values, reference ranges, and out-of-range flags, then compares against prior uploads stored in Supabase to surface improving or worsening trends across tests.
Zero-Friction Telegram Interface
The Telegram bot is the only interface the user needs. Food logging is one photo or one message. Exercise logging is one text entry. Weight is one command. The morning briefing arrives automatically. No separate app, no dashboard login, no friction.
What I Built
What I Built
Designed and built end to end as a personal project. Every system component below was architected, coded, and integrated by me.
Registered and configured the Whoop Developer API application with full OAuth 2.0 authorization flow
Designed the Supabase schema for six data types with 90-day rolling time-series storage
Built the nightly cron job pipeline pulling five Whoop API endpoints into structured database records
Engineered Claude vision integration for food photo calorie and macro estimation with Supabase storage
Built the structured context payload design feeding Claude with personalized multi-source health data
Engineered the cardiovascular-aware prompt system with health profile context and GP referral guardrails
Integrated Claude vision for blood test PDF and image extraction with delta comparison logic
Built the Telegram bot interface with seven command types, photo handling, and automated morning delivery
Designed the longitudinal blood test tracking system with marker trend analysis across uploads
Built weekly and daily calorie and macro summary outputs compiled from food log history
Wearables generate the data. Most people never act on it. This system closes the gap between raw biometric output and daily personalized decisions, automatically.