[HEALTH]
Health Connections: What Base Reads and Why
[THE SHORT ANSWER]
Base reads from your platform's health store and writes two things back to it. That single design decision is why it works with Garmin, Whoop, Oura, Polar, Fitbit and Apple Watch without a single vendor-specific integration — each of them writes into the same store, and Base reads from there. It also produces one honest limitation this screen has to be upfront about: the operating system will not tell an app whether read access was denied, so a permission checkmark here would be a status the app cannot actually see.
What is read, and what each one does
| Data type | Feeds |
|---|---|
| Sleep analysis | Sleep score, and 20% of recovery score |
| Heart rate variability (SDNN) | 50% of recovery score |
| Resting heart rate | 30% of recovery score, inverted |
| Walking heart rate average | Submaximal fitness proxy on the heart screen |
| Respiratory rate | Early illness signal. No score |
| Active energy | The daily calorie target, as measured |
| Basal energy | The daily calorie target, projected to 24 h |
| Steps | Non-exercise movement signal |
| Bodyweight | Trend weight, and measured maintenance |
| Workouts and distances | Endurance session matching and grading |
What is written back
Bodyweight and the nutrition you log.
Writing back is not a convenience feature. It keeps the platform store as the single accurate copy of your data rather than creating a second private one that no other app can see. If you use another tool that reads nutrition or weight, it should see what you logged here without you entering it twice.
Progress photos are never written anywhere except your own photo library, and never uploaded. The full disclosure.
Why there is no permission checkmark
This is the part that looks like a missing feature and is not.
iOS deliberately does not tell an app whether READ access to a type was denied. This is a privacy design decision on Apple's part and a good one — if apps could detect denial, they could nag, or infer things about you from the pattern of what you withheld.
The consequence is that from inside the app, a type you denied and a type you have no data for are indistinguishable. Both return nothing.
So a green checkmark next to "Sleep" would be a fabricated status. The screen shows when each type last produced data instead, which is the honest signal and is also the one that actually diagnoses a problem: if sleep last synced eleven days ago and you have worn the watch every night, something is wrong regardless of what a permission indicator would have claimed.
Which devices work
All of them, and this is worth being concrete about because it is a common question.
| Device | How it reaches Base |
|---|---|
| Apple Watch | Writes to Apple Health directly |
| Garmin | Garmin Connect writes to Apple Health / Health Connect |
| Whoop | Writes HRV, resting HR and sleep to the health store |
| Oura | Writes to the health store |
| Polar | Polar Flow writes to the health store |
| Fitbit | Writes to the health store |
| Coros | Writes to the health store |
There is no vendor preference and nothing to configure. Base has no hardware, no partnership and no integration to break when a vendor changes an API. Switching from a Whoop to an Oura does not orphan your history — both wrote to the same place.
The one thing to check on any of them is that the source app is actually permitted to write to the health store, which is a setting in that app rather than in this one.
When two sources disagree
More than one app can write the same type. Two devices both reporting resting heart rate, or a phone and a watch both counting steps, produce overlapping data.
Base reads from the store and takes the best available value for each day rather than summing sources, because summing two devices that both counted the same walk would double it. Where the platform has already resolved a conflict, Base uses the platform's answer rather than second-guessing it.
The screen also lists apps writing to your health store that Base has no branded row for — a Polar or a Suunto, say — so you can see that the data is arriving even when there is no logo next to it.
Syncing, and why it is not live
Sync runs on app foreground plus a background delivery observer, pulling a window of recent days and writing one summary row per day into the local database.
Two reasons it works this way rather than querying live on every render:
Speed. Reading from the local database is instant and works with the network off. Querying the health bridge on every render would make every screen wait on a native call.
Consistency. A summary row per day means the number on the dashboard and the number in the weekly check-in came from the same read, rather than two reads that happened to land either side of a sync.
Pull to refresh on the dashboard forces a re-sync.
What happens when a type is missing
The feature that depends on it says so.
No sleep data means "no sleep data for last night", not a zero. No HRV for fourteen days means recovery score reports "building baseline" with a countdown, not a number computed from four days. No active energy for the day means the calorie target falls back to committed maintenance plus your surplus, and says that it has.
A wrong number is worse than a missing one. One fabricated zero teaches you that every other number in the app might also be decorative, and that is not recoverable.
What to do next
If a type is not syncing, check the source app's own permission to write to the health store first — that is where it usually breaks, and it is not something this screen can see or fix. What each signal is used for.
Questions
What health data does Base read?
Sleep analysis, heart rate variability, resting and walking heart rate, respiratory rate, active and basal energy, steps, bodyweight and workout records including distances. It writes back the bodyweight and nutrition you log, so the platform store stays the single accurate copy.
Does Base work with Garmin, Whoop, Oura or Polar?
Yes, all of them, and without any vendor-specific integration. Each writes to your platform's health store and Base reads from there, which means switching devices does not orphan your data and there is nothing to configure.
Why does the screen show last sync times instead of permissions?
Because iOS deliberately does not tell an app whether read access was denied — a denied type looks identical to a type with no data. Showing a permission checkmark the app cannot actually see would be a fabricated status, so it shows when each type last produced data instead.
Does Base write data back to Apple Health?
With your permission, yes: the bodyweight and the nutrition you log. That keeps the platform store as the single accurate copy rather than creating a second private one that other apps cannot see.
Can I revoke access later?
At any time, in your platform's health settings. The features that depend on the revoked type will report no data rather than degrading silently, which is the same rule that governs every missing input in the app.
[KEEP READING]
[SCREENS]
Onboarding: Five Minutes, and Every Answer Is Editable
Six questions asked before you have any reason to trust the app, so each one says why it needs the answer.
[BASE]
Privacy: Exactly What Leaves Your Phone, and What Does Not
One section per destination, because what leaves the phone is the only question this page exists to answer.
[SCREENS]
The Recovery Screen: A Decision, Not a Number
Most apps show you a recovery number and leave you to interpret it. This one converts it into a rep and a verdict.