halkyon/apps/train
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tizian 「ティツィアーン」 5250f32329
feat(train): Days, the Loop's days and nights kept sealed (ADR 0030, D37, D38)
What the band read brings, from the bridge or the background job's
file (`LoopLines`), is kept by `DayRepository`: one sealed `day` and
`night` a date and the day's heart rate in chunks of three hours, every
ID made from the person and the date, a later read replacing what it
brought and keeping the rest, nothing rewritten unchanged; versioned,
gzipped JSON (`day_payload.dart`). `PolarLoop` reads the band as each
connection is ready (every half hour at most, or when asked), takes in
the background file as the app opens, and remembers up to which day
the days are sealed, which the next read then deletes on the band;
it keeps the background job on the band and from the right day, and
`Let the band go` stops it.

Home gains a Days tab, each day with its steps, active time, sleep and
Nightly Recharge, pulled to read the band; a day's page shows its
figures, its time in each class, its heart rate, the night's phases
and rating, Nightly Recharge and skin temperature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-30 15:52:57 +01:00
..
halkyon_train_client feat(train): the Loop's days read on the phone (ADR 0030, D37, D38) 2026-10-30 15:52:57 +01:00
halkyon_train_flutter feat(train): Days, the Loop's days and nights kept sealed (ADR 0030, D37, D38) 2026-10-30 15:52:57 +01:00
halkyon_train_server feat(train): the Loop's days read on the phone (ADR 0030, D37, D38) 2026-10-30 15:52:57 +01:00
.gitignore feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12) 2026-10-30 15:52:45 +01:00
AGENTS.md feat(train): Days, the Loop's days and nights kept sealed (ADR 0030, D37, D38) 2026-10-30 15:52:57 +01:00
CLAUDE.md feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12) 2026-10-30 15:52:45 +01:00
README.md feat(train): setting up and keeping the Polar Loop (ADR 0030, D34–D36) 2026-10-30 15:52:55 +01:00

Halkyon Train

Running, cycling and rowing, as a Halkyon app (what it is to do: ADR 0030). For now a shell on the shared packages: people choose an instance, sign in (with SimpleLogin or a password), switch between the accounts on their devices, sign out and delete their account; the home is empty until Train's first model.

Package What it is
halkyon_train_server The server: Serverpod with the halkyon_base module
halkyon_train_client Its client, generated by Serverpod
halkyon_train_flutter The app, on halkyon_app and halkyon_ui (Android, iOS, Linux, macOS, Windows)

Run it with serverpod start in halkyon_train_server, which starts the server (and its embedded PostgreSQL) on ports of its own, 8180 to 8190, and the app; or the app alone against an instance with flutter run --dart-define=SERVER_URL=https://…/ in halkyon_train_flutter. Tests: dart run melos run test:dart --scope=halkyon_train_server and dart run melos run test:flutter --scope=halkyon_train_flutter at the repository's root, or dart run tool/check.dart for everything.

The app's icon is Lucide's bike (ISC licence, ADR 0031), drawn by the repository's tool/app_icons.py. Licences: the server under the SSPL, the client and the app under the AGPL, the app's with a permission for linking Polar's BLE SDK, which isn't free software, for the Polar Loop (ADR 0030, D36; LICENSE.md).