Skip to content

Decisions ​

Architecture decision records: each one says what was decided and why, in a paragraph or two. They live in docs/adr/, and a new one is added in the same PR as the change it explains. Agents read the ones touching their area before working there. Brand decisions (logo, colours, moods, poses) are traced on their own page, Brand decisions.

#DecisionStatusDate
0001Local-first: the phone is the source of truthaccepted2026-10-24
0002One Kotlin Multiplatform core for every platformaccepted2026-10-24
0003Sessions are stored as append-only event logsaccepted2026-10-24
0004Workout types are modules over one enginesuperseded by 00132026-10-24
0005Ids are UUIDv7 made on the deviceaccepted2026-10-24
0006Sync keeps both conflicting editsaccepted2026-10-24
0007Postgres: columns for structure, JSONB for contentaccepted2026-10-24
0008A curated catalog with stable slugs, updated without an accountaccepted, amended by 00152026-10-24
0009Shared plans are saved synced or as a copy; enrollments pin a versionaccepted2026-10-24
0010Treadmills are read-only metric sources in v1accepted2026-10-24
0011A .FIT file export instead of Garmin and Strava APIsaccepted2026-10-24
0012Design tokens are generated from one fileaccepted2026-10-24
0013Workouts have a format, not a typeaccepted2026-10-26
0014Text lives in one JSON file per language and namespaceaccepted2026-10-26
0015Catalog text lives in translation filesaccepted2026-10-26
0016Mockups are plain HTML in the repoaccepted2026-10-26
0017Body measurements are stored metric and shown in the person's unitsaccepted2026-11-01
0018Live plays a mixed workout with the workout player's stepsaccepted2026-11-03
0019The server runs with Docker Compose on one serveraccepted2026-11-05