docs(adr): ADR 0030 (Halkyon Train) and ADR 0031 (the apps' icons)

ADR 0030 records what Train does and where its data comes from: running,
cycling and rowing, in the order recording, intervals, routes, music; the
Polar Loop taken over through Polar's BLE SDK; music from Jellyfin;
devices on phones through flutter_reactive_ble; Health Connect both ways
through the health package; every row sealed; the WP 5000 an FTMS rower,
as scanned; no WaterRower USB driver for now; the Loop's firmware from
Polar directly or through the instance; flutter_map, the instance's map
source, BRouter as a sidecar, offline use and working with CoMaps; and
Train's shell after Todo's.

ADR 0031 gives the apps' icons one family: Lucide glyphs fading from
cobalt through a colour between into each app's own, Learn's graduation
cap, Todo's list, Train's bike, Meditate's circle-dot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-28 00:43:21 +01:00
commit 2fd39352fc
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -0,0 +1,57 @@
# ADR 0031: The apps' icons, one family
- **Status:** decided 28 Oct 2026, by the developer (D1–D4 below). Not built yet: Train's
icon comes with its shell (ADR 0030, D12), Learn's and Todo's follow, Meditate's with
Meditate.
- **Builds on:** ADR 0030, D12 (Train's icon is Lucide's `bike`).
## Context
Halkyon's apps had no family. Learn's icon is the kingfisher, Halkyon's emblem (a
picture, `halkyon_learn_flutter/assets/icon/halkyon_icon.png`); Todo's is Lucide's
`list-checks`, its strokes drawn with Pillow in cobalt fading into sky
(`apps/todo/tool/app_icons.py`). On 28 Oct, choosing Train's, the developer asked for
"a fading of the colors, like in the icons of Proton's services", whose blog post
(proton.me/blog/new-visual-universe) says: "Every icon starts with the Proton purple
and then fades into the service color", so that the icons read as one family.
Drawn and compared on 28 Oct (the previews in the session's scratchpad): fading from
cobalt straight into one other colour looks, in the developer's words, "bland and odd",
cobalt into sky "like everything is completely blue", and cobalt straight into an orange
turns grey-brown halfway, as blue and orange are opposite colours. A gradient passing
through a colour between them (violet or sky) stays bright.
## Decisions (28 Oct 2026, the developer's)
- **D1 Every app's icon is a Lucide glyph on white, fading from cobalt through a colour
between into the app's own**, top left to bottom right across Lucide's 24-unit box, at
Lucide's stroke width (2), the white tile's corners rounded by the platforms as today.
Cobalt is what the family shares, as Proton's purple; the end colours lie apart on the
colour wheel, so the icons are told apart small, the shapes doing the rest (Learn's and
Train's are related, as are Todo's and Meditate's; the developer kept them so).
- **D2 The four**:
| App | Glyph | Gradient |
|---|---|---|
| Learn | `graduation-cap` | cobalt `#3C57E5` → violet `#8E4FD6` → strawberry `#EC3E7C` |
| Todo | `list-todo` | cobalt `#3C57E5` → pacific `#179FD9` → fern `#3CBB3A` |
| Train | `bike` | cobalt `#3C57E5` → violet `#8E4FD6` → strawberry `#EC3E7C` → carrot `#F78400` |
| Meditate | `circle-dot` | cobalt `#3C57E5` → pacific `#179FD9` → reef `#1DA583` |
The stops are evenly spaced. Cobalt is the icon's brighter cobalt Todo's icon uses, not
the palette's (`#273EB2`); violet is no palette colour (between cobalt and strawberry);
the others are halkyon_ui's palette's.
- **D3 Learn's icon becomes the graduation cap; the kingfisher stays Halkyon's emblem**,
in the logo and the wordmark. Installed Learn apps change their icon once, when the new
one is built, as do F-Droid's listing and the snap's.
- **D4 Meditate's glyph is `circle-dot`** (the developer's, over `flower-2`, recommended,
`wind`, `sprout`, `leaf` and `flower`): a point to rest the eyes on.
## What follows (the agent's proposals, to be put to the developer when built)
- One icon tool for every app at the repository's root, each app naming its glyph and
stops, instead of a script per app: Lucide's glyphs have arcs and curves (`bike`'s
wheels, `graduation-cap`), which Todo's tool, drawing straight strokes with Pillow,
can't draw. librsvg through PyGObject and pycairo (Ubuntu's `python3-gi`,
`gir1.2-rsvg-2.0`, `python3-cairo`) renders them exactly; the previews were drawn so.
- Lucide's licence (ISC) beside each icon and in each app's licence list, as Todo's is.