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

Health dataLocationScale

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

How evidence reaches the domains. Collectors keep what was recorded, and the meaning is worked out in Health and Daily.
  1. 01

    The phone records

    The app reads what HealthKit and location services already collect. It adds nothing and interprets nothing.

  2. 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.

  3. 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.

  4. 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.