feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
name: halkyon_train_flutter
|
|
|
|
|
description: Halkyon Train, the app.
|
|
|
|
|
publish_to: none
|
|
|
|
|
|
|
|
|
|
# <version>+<build>: the build rises with every release, and the instance asks apps below
|
|
|
|
|
# its minimum build to update (halkyon_base's instance basics).
|
|
|
|
|
version: 0.1.0+1
|
|
|
|
|
|
|
|
|
|
environment:
|
|
|
|
|
sdk: '^3.13.0'
|
|
|
|
|
flutter: '^3.44.4'
|
|
|
|
|
|
|
|
|
|
resolution: workspace
|
|
|
|
|
|
|
|
|
|
dependencies:
|
2026-10-28 11:17:26 +01:00
|
|
|
clock: ^1.1.3
|
2026-10-28 11:15:23 +01:00
|
|
|
equatable: ^3.0.0
|
2026-10-28 11:44:40 +01:00
|
|
|
flutter:
|
|
|
|
|
sdk: flutter
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
flutter_bloc: ^9.1.1
|
|
|
|
|
# What every Halkyon app is built around (a shared package): the instances a
|
|
|
|
|
# device keeps accounts on, signing in through halkyon_base, each person's
|
|
|
|
|
# dependencies opened and closed, with texts of its own.
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
# Workouts' tracks over the map (ADR 0030, D11, D23): the map widget, the
|
|
|
|
|
# vector tiles of the instance's source (OpenFreeMap without a setting, D22),
|
|
|
|
|
# and its coordinates.
|
|
|
|
|
flutter_map: ^8.3.2
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
halkyon_app:
|
|
|
|
|
path: ../../../packages/halkyon_app
|
|
|
|
|
# The device's half of signing in with OpenID Connect (ADR 0023): the
|
|
|
|
|
# browser that SimpleLogin's sign-in opens, and on Linux and Windows the
|
|
|
|
|
# loopback it comes back to, which the app builds with its name.
|
feat(train): workouts written to Health Connect (ADR 0030, D31)
A Health Connect row in the account sheet opens its screen: Write my
workouts, off until turned on, Health Connect asking as it is. Then
every workout this phone holds is written there (its session with its
pauses and route, heart rate, speed and the rower's watts as samples,
distance and elevation gained), and written again or deleted as it
changes, here or through a sync, and as the app opens. Client IDs come
from the workout's ID, a version counts up with each change; what was
written is kept in the person's health_connect.json, never synced. A
permission taken back in Health Connect turns writing off and says so;
Health Connect's link to Train's rationale opens a screen of its own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 17:06:31 +01:00
|
|
|
# Running Health Connect's writes and reads one at a time (a shared package,
|
|
|
|
|
# ADR 0030, D31).
|
|
|
|
|
halkyon_core:
|
|
|
|
|
path: ../../../packages/halkyon_core
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
halkyon_oidc_flutter:
|
|
|
|
|
path: ../../../packages/halkyon_oidc_flutter
|
|
|
|
|
halkyon_train_client:
|
|
|
|
|
path: ../halkyon_train_client
|
|
|
|
|
# Halkyon's look, shared by its apps (a shared package): the theme, the bundled
|
|
|
|
|
# Noto Sans and the widgets every screen is built of.
|
|
|
|
|
halkyon_ui:
|
|
|
|
|
path: ../../../packages/halkyon_ui
|
|
|
|
|
# gen-l10n's output imports it.
|
|
|
|
|
intl: ^0.20.3
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
latlong2: ^0.10.1
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
lucide_icons_flutter: ^3.1.20
|
|
|
|
|
material_ui: ^1.5.0
|
2026-10-28 11:44:40 +01:00
|
|
|
package_info_plus: ^10.2.2
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
path: ^1.9.1
|
|
|
|
|
path_provider: ^2.1.6
|
|
|
|
|
serverpod_auth_idp_flutter: 4.0.4
|
|
|
|
|
serverpod_flutter: 4.0.4
|
feat(train): the sync engine and Train's first models (ADR 0030, D14)
Train's server syncs with serverpod_offline_sync as Learn's does, and
holds three synced tables, every payload sealed on the devices:
content_key (the person's data key, sealed to the account), workout (its
type, times, name and totals, changed when edited) and workout_series
(chunks of a workout's samples, written once). A person's space goes
with them, with everything in it.
The migration only adds: the three tables, each indexed on spaceId and
cascading with its space (a series also with its workout), and the sync
engine's own tables.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 11:13:04 +01:00
|
|
|
serverpod_offline_sync_client: 0.0.10
|
feat(train): the workouts listed, and each one's page with its map (ADR 0030, D22-D24)
Home lists the person's workouts newest first under their months, each
with its activity's icon, its name (else the time of day's and the
activity's), when it started, its distance, moving time and pace or
speed; those this device can't open come last, locked. A workout's page
shows its track on the instance's map source (flutter_map with
vector_map_tiles, pinned at 9.0.0-beta.13), in pieces between its
pauses, start and end marked; its totals with the elevation gained;
its splits per kilometre on foot, per 5 km cycling; pace or speed and
elevation over the distance, drawn by the app's own painter; and what
the map's source sees. Its name and notes are edited there; deleting
asks first and can be undone for a moment from home (halkyon_app's
DelayedDeletions, TrainPerson.deletions).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 14:29:39 +01:00
|
|
|
url_launcher: ^6.3.2
|
|
|
|
|
# Pinned: the 9 line is beta, the only one for flutter_map 8 (D23); moves to
|
|
|
|
|
# 9.0.0 once it is released.
|
|
|
|
|
vector_map_tiles: 9.0.0-beta.13
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
|
|
|
|
|
dev_dependencies:
|
|
|
|
|
flutter_driver:
|
|
|
|
|
sdk: flutter
|
|
|
|
|
# Writes the app's icons for every platform from assets/icon/halkyon_train_icon.png,
|
2026-10-28 10:42:47 +01:00
|
|
|
# run through the repository's tool/app_icons.py (see the section below).
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
flutter_launcher_icons: ^0.14.4
|
|
|
|
|
flutter_test:
|
|
|
|
|
sdk: flutter
|
|
|
|
|
|
|
|
|
|
flutter:
|
|
|
|
|
# Generates AppLocalizations from lib/l10n (see l10n.yaml).
|
|
|
|
|
generate: true
|
|
|
|
|
# Material's icon font, which serverpod_auth_idp_flutter's widgets ask for
|
|
|
|
|
# (it sets this itself): without it every build and test run warns, and
|
|
|
|
|
# Material's icons would draw as boxes.
|
|
|
|
|
uses-material-design: true
|
|
|
|
|
|
|
|
|
|
assets:
|
|
|
|
|
# The instance the build names, unless --dart-define=SERVER_URL=… does
|
|
|
|
|
# (serverpod_flutter's getServerUrl).
|
|
|
|
|
- assets/config.json
|
2026-10-28 10:42:47 +01:00
|
|
|
# The app's icon, Lucide's bike (ADR 0031), and Lucide's licence for the
|
|
|
|
|
# licence list (the repository's tool/app_icons.py writes both).
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
- assets/icon/halkyon_train_icon.png
|
|
|
|
|
- assets/icon/LICENSE-lucide.txt
|
|
|
|
|
|
2026-10-28 10:42:47 +01:00
|
|
|
# The app's icons, written by the repository's tool/app_icons.py: it prepares the
|
|
|
|
|
# rounded images in build/icons/ first, then runs `dart run flutter_launcher_icons`.
|
feat(train): Halkyon Train's shell, Todo's copied and renamed (ADR 0030, D12)
apps/train with halkyon_train_server, _client and _flutter, as Todo's:
halkyon_base configured by trainBase(), its own register alone and a
member of the instance's where the operator names one, the app on
halkyon_app's gates with Train's frame, account sheet and About, texts
in British English and German that speak of workouts, app.halkyon.train
on Android, iOS, Linux, macOS and Windows.
Where it differs from Todo: development ports of its own (8180 to 8190),
so it runs beside Learn's server; one initial migration with the schema
Todo's migrations end at (the same tables, compared line by line), not
Todo's seventeen; and Todo's icon as a placeholder until the icon tool
of ADR 0031 draws Train's bike. The workspace, the licences, the READMEs
and AGENTS.md name it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-28 10:26:49 +01:00
|
|
|
# Android: the adaptive icon, on white, for the launcher to cut to its shape, and the
|
|
|
|
|
# square one older Androids show. iOS: without its alpha channel, on white. macOS and
|
|
|
|
|
# Windows: the rounded tile.
|
|
|
|
|
flutter_launcher_icons:
|
|
|
|
|
image_path: "assets/icon/halkyon_train_icon.png"
|
|
|
|
|
android: true
|
|
|
|
|
adaptive_icon_background: "#ffffff"
|
|
|
|
|
adaptive_icon_foreground: "assets/icon/halkyon_train_icon.png"
|
|
|
|
|
ios: true
|
|
|
|
|
remove_alpha_ios: true
|
|
|
|
|
background_color_ios: "#ffffff"
|
|
|
|
|
macos:
|
|
|
|
|
generate: true
|
|
|
|
|
image_path: "build/icons/macos.png"
|
|
|
|
|
windows:
|
|
|
|
|
generate: true
|
|
|
|
|
image_path: "build/icons/rounded.png"
|
|
|
|
|
icon_size: 256
|