Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
9cef089
fix(nav): even out the profile menu row spacing
MBombeck Jun 27, 2026
3f19b13
fix(nav): keep the More-menu tile labels fully visible on narrow screens
MBombeck Jun 27, 2026
fa161f7
fix(insights): drop the duplicate average-per-night header in sleep
MBombeck Jun 27, 2026
ba497f4
fix(insights): keep charts from crushing the layout in landscape
MBombeck Jun 27, 2026
89b8c0e
refactor(admin): rename the availability section to Modules
MBombeck Jun 27, 2026
611de0f
fix(settings): stop the mobile section selector animating a scroll fr…
MBombeck Jun 27, 2026
e5ee8f3
fix(settings): keep the section nav fixed while only the content pane…
MBombeck Jun 27, 2026
3caf951
feat(labs): describe each biomarker under its heading
MBombeck Jun 27, 2026
37339cf
fix(coach): keep the composer placeholder on one line
MBombeck Jun 27, 2026
bd1a5e2
fix(coach): widen the conversation search field
MBombeck Jun 27, 2026
7f2ed0c
feat(coach): select a natural speech voice for read-aloud
MBombeck Jun 27, 2026
66e3742
feat(coach): add a per-message hover action row (copy, feedback, rege…
MBombeck Jun 27, 2026
11fd081
Merge branch 'wave/v1221-e' into release/v1.22.1
MBombeck Jun 27, 2026
1561fc6
Merge branch 'wave/v1221-a' into release/v1.22.1
MBombeck Jun 27, 2026
acf4941
Merge branch 'wave/v1221-d' into release/v1.22.1
MBombeck Jun 27, 2026
802ea1c
Merge branch 'wave/v1221-c' into release/v1.22.1
MBombeck Jun 27, 2026
6e2bf34
fix(coach): keep the message actions usable on touch and HTTP hosts
MBombeck Jun 27, 2026
6ec0ee0
chore(v1.22.1): tidy labs subtitle scale and drop dead sleep keys
MBombeck Jun 27, 2026
eb97701
chore(release): v1.22.1
MBombeck Jun 27, 2026
0f79daa
chore(labs): drop the now-unused catalog-slug resolver
MBombeck Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,30 @@

## [Unreleased]

## [1.22.1] — 2026-06-27 — Mobile and Coach polish

A reliability and quality-of-life patch focused on the mobile interface and the Coach.

### Added

- Each lab biomarker shows a short description under its heading, the way Insights describes its metrics.
- Hover a Coach message for an action row: copy it, read it aloud, rate the reply, regenerate it, and see the time it was sent.

### Changed

- Read-aloud now selects a natural device voice instead of the default robotic one.
- The Coach prompt stays on one line and the conversation search field spans the full width.
- The settings and admin section navigation stays fixed while only the content scrolls, on both desktop and mobile.
- The admin "Module availability" section is now simply "Modules".

### Fixed

- The settings and admin side navigation no longer drifts while scrolling.
- Selecting a settings section on mobile no longer animates a scroll from the top of the page.
- The profile menu rows are evenly spaced, and the "More" menu labels are no longer clipped on narrow screens.
- Charts no longer crush the layout in landscape on small screens.
- Sleep insights no longer repeats the nightly average above its tiles.

## [1.22.0] — 2026-06-27 — A Coach that speaks, remembers, and charts; richer narratives across the app

A feature release. The Coach reads its replies aloud, can draw the metric it is discussing, remembers what you ask it to and resurfaces those reminders, and proposes checkups or measurement reminders you confirm inline. Insights and Coach assessments are rewritten for connected, motivating narratives instead of restated figures, and the daily read now folds in labs, preventive care, workouts, and glucose. Four additive migrations (`0195` hidden biomarkers, `0196` coach reminders, `0197` coach plan outcomes, `0198` AI settings); applied automatically on start — no operator action required.
Expand Down
2 changes: 1 addition & 1 deletion docs/api/openapi.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: HealthLog API
version: 1.22.0
version: 1.22.1
description: >-
Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest.

Expand Down
37 changes: 33 additions & 4 deletions messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -2094,12 +2094,15 @@
"send": "Senden",
"stop": "Stopp",
"thinking": "Denke nach…",
"composerPlaceholder": "Frag mich etwas zu deinen Daten…",
"composerPlaceholder": "Frag mich etwas …",
"nudgeBubbleLabel": "Neue Nachricht vom Coach — Chat öffnen",
"fabLabel": "Coach öffnen",
"readAloud": "Vorlesen",
"readAloudStop": "Vorlesen beenden",
"messageTimeLabel": "Nachricht gesendet {time}",
"copyMessage": "Kopieren",
"copyMessageError": "Kopieren fehlgeschlagen",
"regenerate": "Erneut versuchen",
"selfContextAdopt": {
"offer": "Antwort in deine Selbstauskunft übernehmen?",
"confirm": "Übernehmen",
Expand Down Expand Up @@ -2614,8 +2617,6 @@
"title": "Schlaf",
"description": "Phasen-Aufschlüsselung und nächtliche Dauer – gezogen aus Apple Health.",
"headlineTitle": "Durchschnitt pro Nacht",
"headlineCaption": "Gemittelt über {count} Nächte – {suffix}",
"headlineCaptionSuffix": "pro Nacht",
"compositionTitle": "Phasen-Verteilung",
"compositionSubtitle": "Letzte {nights} Nächte",
"compositionAriaLabel": "Schlafphasen-Verteilung über {nights} Nächte",
Expand Down Expand Up @@ -5518,7 +5519,7 @@
"subtitle": "Version, Lizenz und Update-Status."
},
"module-availability": {
"title": "Modulverfügbarkeit",
"title": "Module",
"subtitle": "Module für jedes Konto auf diesem Server aktivieren oder deaktivieren."
}
},
Expand Down Expand Up @@ -6842,6 +6843,34 @@
"liver": "Leber",
"electrolytes": "Elektrolyte",
"bloodCount": "Blutbild"
},
"desc": {
"total-cholesterol": "Gesamtmenge des im Blut transportierten Cholesterins, Summe aus LDL-, HDL- und weiteren Lipoproteinfraktionen.",
"ldl": "Cholesterin in Lipoproteinen geringer Dichte, der Anteil, der sich in den Arterienwänden ablagert.",
"hdl": "Cholesterin in Lipoproteinen hoher Dichte, die Cholesterin zurück zur Leber transportieren.",
"triglycerides": "Das wichtigste Blutfett, aus der Nahrung aufgenommen und in der Leber gebildet.",
"fasting-glucose": "Nüchtern gemessener Blutzucker, der die grundlegende Glukoseregulation widerspiegelt.",
"hba1c": "Anteil des an Glukose gebundenen Hämoglobins, Spiegel des Blutzuckers der letzten zwei bis drei Monate.",
"tsh": "Hypophysenhormon, das die Schilddrüse steuert; der wichtigste Suchtest der Schilddrüsenfunktion.",
"ft3": "Die freie, aktive Form des Trijodthyronins, des stärker wirksamen Schilddrüsenhormons.",
"ft4": "Die freie Form des Thyroxins, des Haupthormons, das die Schilddrüse ins Blut abgibt.",
"ferritin": "Das wichtigste Eisenspeicherprotein des Körpers, Maß für die Eisenreserven.",
"transferrin-saturation": "Anteil des Eisentransportproteins Transferrin, der aktuell Eisen trägt.",
"vitamin-d": "Zirkulierendes 25-Hydroxy-Vitamin-D, der Standardmarker für den Vitamin-D-Status.",
"vitamin-b12": "Vitamin, das für die Bildung roter Blutkörperchen und die Nervenfunktion notwendig ist.",
"folate": "B-Vitamin, das für die Bildung roter Blutkörperchen und die DNA-Synthese benötigt wird.",
"hs-crp": "Ein Leberprotein, das bei Entzündungen ansteigt, hochempfindlich gemessen.",
"creatinine": "Abbauprodukt der Muskulatur, das über die Nieren ausgeschieden wird; Maß der Nierenfunktion.",
"egfr": "Geschätzte Filtrationsrate der Nieren, aus dem Kreatinin berechnet.",
"alt": "Leberenzym, das bei Schädigung der Leberzellen ins Blut freigesetzt wird.",
"ast": "Enzym aus Leber und Muskulatur, das bei Schädigung dieser Gewebe ansteigt.",
"ggt": "Enzym aus Leber und Gallenwegen, das bei Gallenstau oder Alkoholbelastung ansteigt.",
"sodium": "Wichtigster Elektrolyt für den Flüssigkeitshaushalt und das Blutvolumen.",
"potassium": "Elektrolyt, der für die Nervenleitung und die Herzmuskelfunktion unentbehrlich ist.",
"hemoglobin": "Das sauerstofftransportierende Protein in den roten Blutkörperchen.",
"hematocrit": "Der Anteil der roten Blutkörperchen am Blutvolumen.",
"wbc": "Gesamtzahl der weißen Blutkörperchen, der zirkulierenden Abwehr des Immunsystems.",
"platelets": "Zellfragmente, die sich zusammenlagern und die Blutgerinnung bewirken."
}
},
"noteLoadFailed": "Notiz konnte nicht geladen werden; sie bleibt beim Speichern unverändert.",
Expand Down
37 changes: 33 additions & 4 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2094,12 +2094,15 @@
"send": "Send",
"stop": "Stop",
"thinking": "Thinking…",
"composerPlaceholder": "Ask anything about your data…",
"composerPlaceholder": "Ask me anything …",
"nudgeBubbleLabel": "New message from the Coach — open chat",
"fabLabel": "Open the Coach",
"readAloud": "Read aloud",
"readAloudStop": "Stop reading",
"messageTimeLabel": "Message sent {time}",
"copyMessage": "Copy",
"copyMessageError": "Could not copy",
"regenerate": "Try again",
"selfContextAdopt": {
"offer": "Add this answer to your self-context?",
"confirm": "Add",
Expand Down Expand Up @@ -2614,8 +2617,6 @@
"title": "Sleep",
"description": "Stage breakdown and nightly duration, drawn from Apple Health.",
"headlineTitle": "Average per night",
"headlineCaption": "Averaged across {count} nights — {suffix}",
"headlineCaptionSuffix": "per night",
"compositionTitle": "Stage composition",
"compositionSubtitle": "Last {nights} nights",
"compositionAriaLabel": "Sleep stage composition over {nights} nights",
Expand Down Expand Up @@ -5518,7 +5519,7 @@
"subtitle": "Version, license, and update status."
},
"module-availability": {
"title": "Module availability",
"title": "Modules",
"subtitle": "Turn modules on or off for every account on this server."
}
},
Expand Down Expand Up @@ -6842,6 +6843,34 @@
"liver": "Liver",
"electrolytes": "Electrolytes",
"bloodCount": "Blood count"
},
"desc": {
"total-cholesterol": "Total amount of cholesterol carried in the blood, summing the LDL, HDL, and other lipoprotein fractions.",
"ldl": "Cholesterol carried by low-density lipoproteins, the fraction that deposits in artery walls.",
"hdl": "Cholesterol carried by high-density lipoproteins, which transport cholesterol back to the liver.",
"triglycerides": "The main fat circulating in the blood, drawn from diet and produced by the liver.",
"fasting-glucose": "Blood sugar measured after an overnight fast, reflecting baseline glucose regulation.",
"hba1c": "The share of haemoglobin bound to glucose, reflecting average blood sugar over the past two to three months.",
"tsh": "Pituitary hormone that signals the thyroid; the primary screen of thyroid function.",
"ft3": "The unbound, active form of triiodothyronine, the more potent thyroid hormone.",
"ft4": "The unbound form of thyroxine, the main hormone the thyroid releases into the blood.",
"ferritin": "The body's main iron-storage protein, reflecting total iron reserves.",
"transferrin-saturation": "Share of the iron-transport protein transferrin that is currently carrying iron.",
"vitamin-d": "Circulating 25-hydroxyvitamin D, the standard marker of vitamin D status.",
"vitamin-b12": "Vitamin essential for red blood cell formation and nerve function.",
"folate": "B-vitamin needed for red blood cell formation and DNA synthesis.",
"hs-crp": "A liver protein that rises with inflammation, measured at high sensitivity.",
"creatinine": "Muscle waste product cleared by the kidneys, used to gauge kidney function.",
"egfr": "Estimated rate at which the kidneys filter blood, derived from creatinine.",
"alt": "Liver enzyme released into the blood when liver cells are damaged.",
"ast": "Enzyme found in liver and muscle that rises when those tissues are injured.",
"ggt": "Liver and bile-duct enzyme that rises with bile-flow obstruction or alcohol exposure.",
"sodium": "Principal electrolyte governing the body's fluid balance and blood volume.",
"potassium": "Electrolyte essential for nerve signalling and heart-muscle function.",
"hemoglobin": "The oxygen-carrying protein in red blood cells.",
"hematocrit": "The fraction of blood volume made up of red blood cells.",
"wbc": "Total count of white blood cells, the immune system's circulating defence.",
"platelets": "Cell fragments that clump together to form blood clots."
}
},
"noteLoadFailed": "Note could not be loaded; it will be kept unchanged when you save.",
Expand Down
37 changes: 33 additions & 4 deletions messages/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -2094,12 +2094,15 @@
"send": "Enviar",
"stop": "Detener",
"thinking": "Pensando…",
"composerPlaceholder": "Pregúntame sobre tus datos…",
"composerPlaceholder": "Pregúntame algo …",
"nudgeBubbleLabel": "Nuevo mensaje del coach — abrir el chat",
"fabLabel": "Abrir el coach",
"readAloud": "Leer en voz alta",
"readAloudStop": "Detener lectura",
"messageTimeLabel": "Mensaje enviado {time}",
"copyMessage": "Copiar",
"copyMessageError": "No se pudo copiar",
"regenerate": "Reintentar",
"selfContextAdopt": {
"offer": "¿Añadir esta respuesta a tu información personal?",
"confirm": "Añadir",
Expand Down Expand Up @@ -2614,8 +2617,6 @@
"title": "Sueño",
"description": "Desglose por fases y duración nocturna, tomados de Apple Health.",
"headlineTitle": "Media por noche",
"headlineCaption": "Promediado sobre {count} noches — {suffix}",
"headlineCaptionSuffix": "por noche",
"compositionTitle": "Distribución de fases",
"compositionSubtitle": "Últimas {nights} noches",
"compositionAriaLabel": "Distribución de fases del sueño en {nights} noches",
Expand Down Expand Up @@ -5518,7 +5519,7 @@
"subtitle": "Versión, licencia y estado de actualizaciones."
},
"module-availability": {
"title": "Disponibilidad de módulos",
"title": "Módulos",
"subtitle": "Activa o desactiva módulos para todas las cuentas de este servidor."
}
},
Expand Down Expand Up @@ -6842,6 +6843,34 @@
"liver": "Hígado",
"electrolytes": "Electrolitos",
"bloodCount": "Hemograma"
},
"desc": {
"total-cholesterol": "Cantidad total de colesterol transportado en la sangre, suma de las fracciones LDL, HDL y otras lipoproteínas.",
"ldl": "Colesterol transportado por lipoproteínas de baja densidad, la fracción que se deposita en las paredes arteriales.",
"hdl": "Colesterol transportado por lipoproteínas de alta densidad, que lo devuelven al hígado.",
"triglycerides": "La principal grasa que circula en la sangre, procedente de la dieta y producida por el hígado.",
"fasting-glucose": "Azúcar en sangre medido en ayunas, refleja la regulación basal de la glucosa.",
"hba1c": "Proporción de hemoglobina unida a glucosa, refleja el azúcar en sangre de los últimos dos o tres meses.",
"tsh": "Hormona hipofisaria que regula la tiroides; la prueba principal de la función tiroidea.",
"ft3": "La forma libre y activa de la triyodotironina, la hormona tiroidea más potente.",
"ft4": "La forma libre de la tiroxina, la principal hormona que la tiroides libera a la sangre.",
"ferritin": "La principal proteína de almacenamiento de hierro del cuerpo, refleja las reservas de hierro.",
"transferrin-saturation": "Proporción de la proteína transportadora transferrina que lleva hierro en ese momento.",
"vitamin-d": "25-hidroxivitamina D circulante, el marcador estándar del estado de vitamina D.",
"vitamin-b12": "Vitamina esencial para la formación de glóbulos rojos y la función nerviosa.",
"folate": "Vitamina B necesaria para la formación de glóbulos rojos y la síntesis de ADN.",
"hs-crp": "Una proteína hepática que aumenta con la inflamación, medida con alta sensibilidad.",
"creatinine": "Producto de desecho muscular eliminado por los riñones, usado para evaluar la función renal.",
"egfr": "Tasa estimada de filtración de los riñones, calculada a partir de la creatinina.",
"alt": "Enzima hepática liberada a la sangre cuando se dañan las células del hígado.",
"ast": "Enzima del hígado y el músculo que aumenta cuando esos tejidos se lesionan.",
"ggt": "Enzima del hígado y las vías biliares que aumenta con la obstrucción biliar o el alcohol.",
"sodium": "Principal electrolito que regula el equilibrio de líquidos y el volumen sanguíneo.",
"potassium": "Electrolito esencial para la transmisión nerviosa y la función del músculo cardíaco.",
"hemoglobin": "La proteína de los glóbulos rojos que transporta el oxígeno.",
"hematocrit": "La fracción del volumen sanguíneo formada por glóbulos rojos.",
"wbc": "Recuento total de glóbulos blancos, la defensa circulante del sistema inmunitario.",
"platelets": "Fragmentos celulares que se agregan para formar coágulos sanguíneos."
}
},
"noteLoadFailed": "No se pudo cargar la nota; se mantendrá sin cambios al guardar.",
Expand Down
Loading
Loading