Loading…
Calories Goal: {{ settings.kcal_goal }} kcal
{{ Math.round(summary?.intake?.totals?.kcal ?? 0) }} kcal

{{ weekText('kcal') }}{{ weekText('protein') ? ' · ' + weekText('protein') : '' }}

Protein {{ Math.round(summary?.intake?.totals?.protein ?? 0) }}g / {{ settings.protein_goal }}g
Carbs {{ Math.round(summary?.intake?.totals?.carbs ?? 0) }}g
Fat {{ Math.round(summary?.intake?.totals?.fat ?? 0) }}g

{{ extraNutrientsText(summary?.intake?.totals) }}

Alcohol Limit: {{ alcoholWeek()?.week_drinks }} a week, {{ alcoholWeek()?.day_drinks }} a day
{{ alcoholWeek()?.week }} standard drinks in 7 days

{{ alcoholOverText() }}

{{ selectedDate === todayIso() ? 'Today' : 'That day' }} {{ alcoholWeek()?.day }} of {{ alcoholWeek()?.day_drinks }} · heaviest day {{ alcoholWeek()?.max }} · a standard drink is {{ alcoholWeek()?.drink_g }} g of alcohol

Exercise {{ formatDurationHm(summary?.exercise?.total_min) }} {{ Math.round(summary?.exercise?.total_kcal ?? 0) }} kcal · {{ summary?.exercise?.count ?? 0 }} {{ summary?.exercise?.count === 1 ? 'session' : 'sessions' }} {{ strengthText() }} {{ cardioText() }}
Sleep {{ sleepSummaryText() }} {{ sleepStagesText() }} {{ weekText('sleep_min') }}
Steps {{ summary?.steps ? Math.round(summary.steps.value) : '—' }} {{ stepsSourcesText() }} {{ weekText('steps') }}

{{ logSheetTitle() }}

Meal ({{ logBasket.length }} {{ logBasket.length === 1 ? 'item' : 'items' }}) · {{ basketTotalKcal() }} kcal
{{ b.name }}{{ b.grams ? ' (' + Math.round(b.grams) + 'g)' : (b.servings ? ' (' + b.servings + ' serv)' : '') }} · {{ Math.round(b.kcal) }} kcal

Usually around now

Searching catalog…

No foods match "{{ logQuery }}".

{{ pickedItem?.badge }}

{{ pickedItem?.name }}

{{ pickedItem?.brand }}

{{ round(liveMacros.kcal) }}
kcal
{{ round(liveMacros.protein, 1) }}g
Protein
{{ round(liveMacros.carbs, 1) }}g
Carbs
{{ round(liveMacros.fat, 1) }}g
Fat
{{ round(liveMacros.grams) }} g total
Manual figures
Add food

Read the label; figures are stored, never photos.

Leave blank when unknown, 0 is zero.

Log exercise

Log sleep

Log metric or biomarker

Day log

Nothing logged for {{ selectedDate }} yet.

Intake

{{ item.name }}{{ formatMealType(item.meal_type) ? ' (' + formatMealType(item.meal_type) + ')' : '' }} {{ shortTime(item.time) }}

{{ intakeMetaText(item) }}

Exercise

{{ ex.activity }} ({{ ex.duration_min }} min) {{ shortTime(ex.start) }}

{{ ex.kcal ? ex.kcal + ' kcal' : '' }}{{ ex.distance_m ? ' · ' + ex.distance_m + ' m' : '' }}{{ ex.avg_hr ? ' · ' + ex.avg_hr + ' bpm' : '' }}{{ ex.notes ? ' · ' + ex.notes : '' }}

Sleep

{{ sl.nap ? 'Nap · ' : '' }}{{ formatDurationHm(sl.duration_min) }} ({{ shortTime(sl.start) }} → {{ shortTime(sl.end) }})

{{ sl.deep_min ? 'Deep ' + sl.deep_min + 'm ' : '' }}{{ sl.rem_min ? 'REM ' + sl.rem_min + 'm ' : '' }}{{ sl.score ? 'Score ' + sl.score : '' }}

Metrics

{{ formatMetricType(m.type) }}: {{ m.value }} {{ m.unit }}

{{ formatSource(m.source) }}

Food

Trends

{{ trendCaption }}

Latest metrics and biomarkers

No metrics recorded yet.

{{ formatMetricType(m.type) }} {{ m.value }} {{ m.unit }} {{ m.time.slice(0, 10) }}

History

No records in range.

{{ day.date }}

{{ dayTotalsText(day) }}

{{ item.name }}{{ formatMealType(item.meal_type) ? ' (' + formatMealType(item.meal_type) + ')' : '' }} {{ shortTime(item.time) }}

{{ intakeMetaText(item) }}

{{ ex.activity }} ({{ ex.duration_min }} min) {{ shortTime(ex.start) }}

{{ ex.kcal ? ex.kcal + ' kcal' : '' }}{{ ex.distance_m ? ' · ' + ex.distance_m + ' m' : '' }}{{ ex.avg_hr ? ' · ' + ex.avg_hr + ' bpm' : '' }}{{ ex.notes ? ' · ' + ex.notes : '' }}

{{ sl.nap ? 'Nap' : 'Sleep' }} · {{ formatDurationHm(sl.duration_min) }} {{ shortTime(sl.start) }} → {{ shortTime(sl.end) }}

{{ sl.deep_min ? 'Deep ' + sl.deep_min + 'm ' : '' }}{{ sl.rem_min ? 'REM ' + sl.rem_min + 'm ' : '' }}{{ sl.score ? 'Score ' + sl.score : '' }}

{{ formatMetricType(m.type) }}: {{ m.value }} {{ m.unit }}

{{ formatSource(m.source) }}

Settings

Account

Signed in as {{ userEmail || userUid }}

Units and goals

Cardio counts heart-rate minutes at 64% of max heart rate or more; minutes at 77% or more count double. Food search ranks catalog results from this region first.

{{ savedMsg }}

Today cards

Health report

Summary of facts and data gaps for GP checkups; print-friendly one-page summary.

MCP connector

{{ googleLoginEnabled ? 'Add this URL to Claude, ChatGPT, or any MCP client; it asks you to sign in with Google.' : 'Paste this URL into Claude, ChatGPT, or any MCP client on mobile or desktop.' }}

API key for devices and scripts

For clients that can't sign in: send Authorization: Bearer with the key, or add ?key= to the MCP URL. It grants full access to your data.

Data and backups

{{ importMsg }}
How to export your data
  • Health Connect (Android): Settings → Health Connect → Manage data → Backup and restore → Scheduled export. Choose daily and a cloud drive; it saves "Health Connect.zip" there. There's no manual trigger, so the first file arrives after the first scheduled run. Import that zip here.
  • Apple Health (iPhone): Health app → your profile picture → Export All Health Data. Save export.zip, then import it here.
  • Google Health app: Profile icon → Your data in Google Health → Export your data, and choose a zip file. It arrives in Google Drive as takeout-….zip; import that zip here. Food logs are skipped because the export leaves out their calories, and data Google Health got from Health Connect comes from the Health Connect export instead.

Most Android wearables write to Health Connect.

Loading health report…

Health Report

{{ healthReport?.header?.userName }}

Period: {{ healthReport?.header?.period?.start }} to {{ healthReport?.header?.period?.end }} ({{ healthReport?.header?.period?.days }} days)

Generated: {{ healthReport?.header?.generatedDate }}

{{ healthReport?.header?.disclaimer }}

Sources: {{ healthReport?.header?.sources?.join(', ') || 'None recorded' }}

Data coverage and gaps

Scope Days with data Coverage Longest gap
{{ s.scope }} {{ s.daysWithData }} / {{ s.totalDays }} {{ s.coveragePct }}% {{ s.longestGapDays }} days

Notable gaps

  • {{ g.metric }}: {{ g.detail }}

Body

Weight: {{ healthReport?.body?.weight?.first?.date }}: {{ healthReport?.body?.weight?.first?.value }} {{ healthReport?.body?.weight?.unit }} → {{ healthReport?.body?.weight?.last?.date }}: {{ healthReport?.body?.weight?.last?.value }} {{ healthReport?.body?.weight?.unit }} (change: {{ (healthReport?.body?.weight?.change ?? 0) > 0 ? '+' : '' }}{{ healthReport?.body?.weight?.change }} {{ healthReport?.body?.weight?.unit }}) · min: {{ healthReport?.body?.weight?.min }} {{ healthReport?.body?.weight?.unit }}, max: {{ healthReport?.body?.weight?.max }} {{ healthReport?.body?.weight?.unit }} (n = {{ healthReport?.body?.weight?.count }} readings)

Weight: {{ healthReport?.body?.weightGap }}

Body fat (same device): {{ healthReport?.body?.bodyFat?.first?.date }}: {{ healthReport?.body?.bodyFat?.first?.value }}% → {{ healthReport?.body?.bodyFat?.last?.date }}: {{ healthReport?.body?.bodyFat?.last?.value }}% (change: {{ (healthReport?.body?.bodyFat?.change ?? 0) > 0 ? '+' : '' }}{{ healthReport?.body?.bodyFat?.change }}%) · min: {{ healthReport?.body?.bodyFat?.min }}%, max: {{ healthReport?.body?.bodyFat?.max }}% (n = {{ healthReport?.body?.bodyFat?.count }} readings)

Resting HR: {{ healthReport?.body?.restingHr?.gap }}

{{ m.monthLabel }}: {{ m.median }} bpm (n = {{ m.count }})

Activity

Cardio: {{ healthReport?.activity?.cardio?.gap }} Median {{ healthReport?.activity?.cardio?.weeklyMedian }} min/week against {{ healthReport?.activity?.cardio?.guidelineMin }} min guideline (n = {{ healthReport?.activity?.cardio?.weeksCount }} weeks)

Strength: {{ healthReport?.activity?.strength?.gap }} Median {{ healthReport?.activity?.strength?.weeklyMedian }} sessions/week (n = {{ healthReport?.activity?.strength?.weeksCount }} weeks)

Steps: {{ healthReport?.activity?.steps?.gap }} Median {{ healthReport?.activity?.steps?.dailyMedian }} steps/day (n = {{ healthReport?.activity?.steps?.daysCount }} days)

Sleep

{{ healthReport?.sleep?.gap }}

Median duration: {{ healthReport?.sleep?.medianDurationFormatted }} (n = {{ healthReport?.sleep?.nightsCount }} nights)

Nights < 6 h: {{ healthReport?.sleep?.pctUnder6h }}% ({{ healthReport?.sleep?.countUnder6h }} of {{ healthReport?.sleep?.nightsCount }} nights)

Nights > 9 h: {{ healthReport?.sleep?.pctOver9h }}% ({{ healthReport?.sleep?.countOver9h }} of {{ healthReport?.sleep?.nightsCount }} nights)

Alcohol

Standard drinks / week: {{ healthReport?.alcohol?.standardDrinksPerWeek }} (guideline ≤ {{ healthReport?.alcohol?.guidelineWeekDrinks }})

Heaviest day: {{ healthReport?.alcohol?.maxDayDrinks }} drinks (guideline ≤ {{ healthReport?.alcohol?.guidelineDayDrinks }})

Coverage: {{ healthReport?.alcohol?.loggedDays }} of {{ healthReport?.alcohol?.totalDays }} days logged · standard drink = {{ healthReport?.alcohol?.drinkGram }} g alcohol

Labs (markers with ≥ 2 readings)

{{ healthReport?.labs?.emptyMessage }}

{{ lm.marker }}
{{ lm.first.date }}: {{ lm.first.value }} {{ lm.unit }} → {{ lm.last.date }}: {{ lm.last.value }} {{ lm.unit }} ({{ lm.change > 0 ? '+' : '' }}{{ lm.change }} {{ lm.unit }})

Couldn't load your account.