Collector
iPhone app
A small iPhone app that preserves what the Apple Watch and the iPhone record, without interpreting any of it.
My watch and phone record a great deal about my days, but the data stays inside Apple's apps. The iPhone app is how it reaches AlanOS: one app with a Health tab and a Location tab.
It is a collector, not a domain. It has no opinions and keeps no knowledge. It makes sure the evidence arrives.
Health and Location
- Health
- Everything the Apple Watch and the iPhone record: workouts, heart, sleep, steps, walking measures and the rest, exactly as HealthKit provides it.
- Location
- Where I stayed and how I moved between places, with the phone's own place labels. My own names for places are kept on my home server.
From the phone to a domain
Collect
Apple Watch and iPhone
what HealthKit and location services record
iPhone app
each batch waits on the phone until the home server confirms it has arrived
Smart scale
weight and body composition, stored in the scale's own app
Scale reader
copies each measurement field by field, without changing it
Home server
everything kept exactly as it was recorded, in separate stores
Interpret
Health
reads health data and, through a narrow view, the scale; works out trends against my own normal
Daily
reads location; works out a day's places
- 01
The phone records
The app reads what HealthKit and location services already collect. It adds nothing and interprets nothing.
- 02
It sends to my home server
New data travels over my private network to a small ingestion service on my home server. When the phone cannot finish in the background, it hands the transfer to iOS to complete later.
- 03
The home server keeps it
Health data and location land in separate stores. Older history is sent bit by bit until it has all arrived.
- 04
Domains read it
Health and Daily read from those stores. Anything meaningful, such as sitting time or a day's places, is worked out there, not on the phone.
The principles
- Preserve, do not interpret
- A collector's only job is to keep what was recorded. Interpretation belongs to the domains, where it can be checked and redone.
- Simple and automatic
- The app is for one person. Each tab shows what matters and whether it is working; technical controls live on a details screen.
- Collect everything once
- Every type the watch provides is kept, so a new view can be built later from data that is already there.
Health data feeds Health, and location feeds Daily. The scale reader is the other collector, for body composition.
The app is written in Swift with SwiftUI, reading HealthKit and location services. On the phone, each batch waits in a small SQLite queue until the home server confirms it has arrived. Batches follow versioned JSON Schema contracts and travel over Tailscale to an ingestion service, also in Swift, that stores them in PostgreSQL.
The iPhone app is deliberately boring. Everything interesting happens in the domains, which is exactly why the app can stay simple.