Open to senior marketing leadership opportunities across MENA and Europe

Personal Project

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

AI & Health TechNode.jsClaude APIWhoop APITelegram BotPersonal Build

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.

1

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.

2

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.

3

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.

4

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.

5

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.

6

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.

Data Source: Whoop API
What It Provides: HRV, Recovery, RHR, Sleep Stages, Strain, SpO2
How It Enters: Automated nightly cron job
Stored In: Supabase PostgreSQL
Data Source: Food Photo
What It Provides: Calorie and macro estimate via Claude vision
How It Enters: Image upload via Telegram
Stored In: Supabase PostgreSQL
Data Source: Food Text Log
What It Provides: Meal description, estimated calories and macros
How It Enters: Free-text Telegram command
Stored In: Supabase PostgreSQL
Data Source: Exercise Log
What It Provides: Activity type, duration, intensity
How It Enters: Text command via Telegram
Stored In: Supabase PostgreSQL
Data Source: Blood Test Upload
What It Provides: Full panel: lipids, liver, kidney, glucose, CBC
How It Enters: PDF or image via Telegram
Stored In: Supabase Storage + PostgreSQL
Data Source: User Health Profile
What It Provides: Cardiovascular context, goals, baseline
How It Enters: One-time setup
Stored In: Supabase PostgreSQL

System Architecture

System Architecture

Inputs

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

Storage

Supabase

PostgreSQL

90-day rolling history

Supabase Storage

File storage

Blood test PDFs and images

Intelligence

Claude API

Sonnet model

Context-aware health analysis

Prompt Engine

Personalized context

Health profile + 7-day data window

Output

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.

─────────────────────────────────────
CONTEXT PAYLOAD · DAILY BRIEFING
─────────────────────────────────────
BIOMETRICS (last 7 days)
Recovery score avg: 71 / 100
HRV trend: 42ms → 38ms → 45ms → 41ms
Resting HR: 54 bpm (baseline: 52)
Sleep efficiency avg: 83%
Respiratory rate: 15.2 / min
NUTRITION (last 7 days)
Yesterday calories: 2,140 kcal (estimated via Claude vision)
Weekly avg calories: 2,280 kcal/day
Macro split (avg): P 32% / C 41% / F 27%
Avg meal timing: 08:00 / 13:30 / 20:45
Hydration flag: Below target 3 of 7 days
EXERCISE LOG
Whoop tracked: 4 sessions (Mon, Wed, Fri, Sat)
Manual entries: 1 (Sunday, 45min yoga, low intensity)
Weekly avg strain: 12.4 / 21
Highest strain day: Saturday, 16.8
WEIGHT
Current: 82.4 kg
7-day trend: -0.3 kg
BLOOD RESULTS (last upload 14 days ago)
LDL Cholesterol: 3.2 mmol/L [ref: <3.0] borderline
Total Cholesterol: 4.8 mmol/L [ref: <5.0] normal
HbA1c: 35 mmol/mol [ref: <42] normal
CRP (inflammation): 1.8 mg/L [ref: <3.0] normal
HEALTH PROFILE
Cardiovascular context: Active, flagged for relevant marker checks
Health goal: Recovery optimization, cardiovascular health
─────────────────────────────────────

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.

Back to AI Systems