mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 21:32:18 +00:00
feat(daily): milestones — the calm reward layer
Add the durable-states Milestone primitive and a milestone card to the daily digest. A milestone marks a state REACHED, never days maintained: a metric settled back inside its own range, a run of weeks in range, or a fresh personal best. It is deliberately not a streak — the type carries a reached-date and no running counter, so nothing here can be tuned into a flame, and a lapse is invisible rather than mourned. The primitive is a thin wrapper over engines that already exist: the pure detectStreak band engine (return-to-range + sustained-in-range) and the PersonalRecord detection output (new bests). Reached-once needs no new storage — a milestone's reached-date is a stable fact, so it surfaces only on the day it was reached and never resurfaces the next day. The digest emits one calm success card per day when a milestone is freshly reached, below an overdue dose and above ambient items, with a single action into the metric's insight. Module- and data-gated: a disabled insights account or a day with nothing reached shows nothing. Copy carries no streak, loss, or failure vocabulary, in all six locales.
This commit is contained in:
1 parent
1427125b7e
commit
8b7bb7914e
11 files changed
+908
-6
No files matched your search
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "Vorsorge ansehen",
|
||||
"checkinKeep": "Behalten",
|
||||
"checkinAdjust": "Anpassen",
|
||||
"checkinLetGo": "Loslassen"
|
||||
"checkinLetGo": "Loslassen",
|
||||
"viewMilestone": "Ansehen"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Gesundheitsscore",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Vollständiges Briefing lesen",
|
||||
"worthALook": "Einen Blick wert",
|
||||
"allClear": "Heute braucht nichts deine Aufmerksamkeit."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "Ruhepuls",
|
||||
"heartRateVariability": "Herzfrequenzvariabilität",
|
||||
"respiratoryRate": "Atemfrequenz",
|
||||
"weight": "Gewicht",
|
||||
"generic": "dieser Wert"
|
||||
},
|
||||
"record": {
|
||||
"title": "Neue Bestmarke: {metric}",
|
||||
"body": "Heute ein persönlicher Bestwert für {metric} — ganz ruhig festgehalten, du musst nichts tun."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "Wieder im Bereich: {metric}",
|
||||
"body": "{metric} liegt wieder in deinem gewohnten Bereich. Was auch immer es war — es ist vorbei."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "Eine Woche im Bereich",
|
||||
"body": "{metric} liegt seit einer Woche in deinem gewohnten Bereich. Schön gleichmäßig."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Zwei Wochen im Bereich",
|
||||
"body": "{metric} bleibt seit zwei Wochen in deinem gewohnten Bereich. Ruhig und stetig."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Drei Wochen im Bereich",
|
||||
"body": "Drei Wochen, in denen {metric} in deinem gewohnten Bereich liegt. Eine echte ruhige Strecke."
|
||||
},
|
||||
"week4": {
|
||||
"title": "Ein Monat im Bereich",
|
||||
"body": "Ein ganzer Monat mit {metric} in deinem gewohnten Bereich. Wunderbar gleichmäßig."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "View check-ups",
|
||||
"checkinKeep": "Keep it",
|
||||
"checkinAdjust": "Adjust",
|
||||
"checkinLetGo": "Let it go"
|
||||
"checkinLetGo": "Let it go",
|
||||
"viewMilestone": "View"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Health score",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Read the full briefing",
|
||||
"worthALook": "Worth a look",
|
||||
"allClear": "Nothing needs your attention today."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "resting heart rate",
|
||||
"heartRateVariability": "heart-rate variability",
|
||||
"respiratoryRate": "respiratory rate",
|
||||
"weight": "weight",
|
||||
"generic": "this metric"
|
||||
},
|
||||
"record": {
|
||||
"title": "A new {metric} best",
|
||||
"body": "A personal best for your {metric} today — quietly noted, nothing to do."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "Back in range: {metric}",
|
||||
"body": "Your {metric} has settled back inside your usual range. Whatever that was, it has passed."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "A week in range",
|
||||
"body": "Your {metric} has held inside your usual range for a week now. Nice and steady."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Two weeks in range",
|
||||
"body": "Your {metric} has stayed in your usual range for two weeks. Calm and steady."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Three weeks in range",
|
||||
"body": "Three weeks of your {metric} sitting in your usual range. A real stretch of steadiness."
|
||||
},
|
||||
"week4": {
|
||||
"title": "A month in range",
|
||||
"body": "A full month with your {metric} in your usual range. Beautifully steady."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "Ver revisiones",
|
||||
"checkinKeep": "Conservar",
|
||||
"checkinAdjust": "Ajustar",
|
||||
"checkinLetGo": "Dejarlo ir"
|
||||
"checkinLetGo": "Dejarlo ir",
|
||||
"viewMilestone": "Ver"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Puntuación de salud",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Leer el informe completo",
|
||||
"worthALook": "Merece un vistazo",
|
||||
"allClear": "Hoy nada necesita tu atención."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "frecuencia cardíaca en reposo",
|
||||
"heartRateVariability": "variabilidad de la frecuencia cardíaca",
|
||||
"respiratoryRate": "frecuencia respiratoria",
|
||||
"weight": "peso",
|
||||
"generic": "este valor"
|
||||
},
|
||||
"record": {
|
||||
"title": "Nuevo récord: {metric}",
|
||||
"body": "Hoy has alcanzado tu mejor marca de {metric}. Anotado con calma, sin nada que hacer."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "De nuevo en tu rango: {metric}",
|
||||
"body": "Tu {metric} ha vuelto a tu rango habitual. Fuera lo que fuera, ya pasó."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "Una semana en rango",
|
||||
"body": "Tu {metric} lleva una semana dentro de tu rango habitual. Con buena estabilidad."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Dos semanas en rango",
|
||||
"body": "Tu {metric} lleva dos semanas dentro de tu rango habitual. Tranquilo y constante."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Tres semanas en rango",
|
||||
"body": "Tres semanas con tu {metric} dentro de tu rango habitual. Un buen tramo de calma."
|
||||
},
|
||||
"week4": {
|
||||
"title": "Un mes en rango",
|
||||
"body": "Un mes entero con tu {metric} dentro de tu rango habitual. Maravillosamente estable."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "Voir les examens",
|
||||
"checkinKeep": "Garder",
|
||||
"checkinAdjust": "Ajuster",
|
||||
"checkinLetGo": "Laisser tomber"
|
||||
"checkinLetGo": "Laisser tomber",
|
||||
"viewMilestone": "Voir"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Score de santé",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Lire le briefing complet",
|
||||
"worthALook": "À regarder",
|
||||
"allClear": "Rien ne requiert ton attention aujourd'hui."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "fréquence cardiaque au repos",
|
||||
"heartRateVariability": "variabilité de la fréquence cardiaque",
|
||||
"respiratoryRate": "fréquence respiratoire",
|
||||
"weight": "poids",
|
||||
"generic": "cette valeur"
|
||||
},
|
||||
"record": {
|
||||
"title": "Nouveau record : {metric}",
|
||||
"body": "Vous avez atteint un record personnel de {metric} aujourd'hui. Noté en toute tranquillité, rien à faire."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "De retour dans votre plage : {metric}",
|
||||
"body": "Votre {metric} est revenue dans votre plage habituelle. Quoi que ce fût, c'est passé."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "Une semaine dans la plage",
|
||||
"body": "Votre {metric} reste dans votre plage habituelle depuis une semaine. Bien régulier."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Deux semaines dans la plage",
|
||||
"body": "Votre {metric} reste dans votre plage habituelle depuis deux semaines. Calme et régulier."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Trois semaines dans la plage",
|
||||
"body": "Trois semaines avec votre {metric} dans votre plage habituelle. Une vraie période de stabilité."
|
||||
},
|
||||
"week4": {
|
||||
"title": "Un mois dans la plage",
|
||||
"body": "Un mois entier avec votre {metric} dans votre plage habituelle. Merveilleusement stable."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "Vedi controlli",
|
||||
"checkinKeep": "Mantieni",
|
||||
"checkinAdjust": "Modifica",
|
||||
"checkinLetGo": "Lascia andare"
|
||||
"checkinLetGo": "Lascia andare",
|
||||
"viewMilestone": "Vedi"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Punteggio di salute",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Leggi il briefing completo",
|
||||
"worthALook": "Da tenere d'occhio",
|
||||
"allClear": "Oggi nulla richiede la tua attenzione."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "frequenza cardiaca a riposo",
|
||||
"heartRateVariability": "variabilità della frequenza cardiaca",
|
||||
"respiratoryRate": "frequenza respiratoria",
|
||||
"weight": "peso",
|
||||
"generic": "questo valore"
|
||||
},
|
||||
"record": {
|
||||
"title": "Nuovo record: {metric}",
|
||||
"body": "Oggi hai raggiunto il tuo record personale di {metric}. Annotato con calma, senza nulla da fare."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "Di nuovo nel tuo intervallo: {metric}",
|
||||
"body": "La tua {metric} è tornata nel tuo intervallo abituale. Qualunque cosa fosse, è passata."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "Una settimana nell'intervallo",
|
||||
"body": "La tua {metric} resta nel tuo intervallo abituale da una settimana. Bella costante."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Due settimane nell'intervallo",
|
||||
"body": "La tua {metric} resta nel tuo intervallo abituale da due settimane. Calma e costante."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Tre settimane nell'intervallo",
|
||||
"body": "Tre settimane con la tua {metric} nel tuo intervallo abituale. Un bel tratto di stabilità."
|
||||
},
|
||||
"week4": {
|
||||
"title": "Un mese nell'intervallo",
|
||||
"body": "Un mese intero con la tua {metric} nel tuo intervallo abituale. Meravigliosamente costante."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-1
@@ -8557,7 +8557,8 @@
|
||||
"viewCheckups": "Zobacz badania",
|
||||
"checkinKeep": "Zachowaj",
|
||||
"checkinAdjust": "Dostosuj",
|
||||
"checkinLetGo": "Odpuść"
|
||||
"checkinLetGo": "Odpuść",
|
||||
"viewMilestone": "Zobacz"
|
||||
},
|
||||
"today": {
|
||||
"scoreLabel": "Wynik zdrowia",
|
||||
@@ -8567,6 +8568,41 @@
|
||||
"readFullBriefing": "Przeczytaj pełny briefing",
|
||||
"worthALook": "Warto sprawdzić",
|
||||
"allClear": "Dziś nic nie wymaga Twojej uwagi."
|
||||
},
|
||||
"milestone": {
|
||||
"metric": {
|
||||
"restingHeartRate": "tętno spoczynkowe",
|
||||
"heartRateVariability": "zmienność rytmu serca",
|
||||
"respiratoryRate": "częstość oddechów",
|
||||
"weight": "waga",
|
||||
"generic": "ta wartość"
|
||||
},
|
||||
"record": {
|
||||
"title": "Nowy rekord: {metric}",
|
||||
"body": "Dziś osiągnięto Twój najlepszy wynik dla {metric}. Spokojnie odnotowane, nic nie musisz robić."
|
||||
},
|
||||
"returnToBaseline": {
|
||||
"title": "Znów w Twoim zakresie: {metric}",
|
||||
"body": "Twoja {metric} wróciła do zwykłego zakresu. Cokolwiek to było, minęło."
|
||||
},
|
||||
"sustainedInRange": {
|
||||
"week1": {
|
||||
"title": "Tydzień w zakresie",
|
||||
"body": "Twoja {metric} od tygodnia mieści się w zwykłym zakresie. Ładnie i spokojnie."
|
||||
},
|
||||
"week2": {
|
||||
"title": "Dwa tygodnie w zakresie",
|
||||
"body": "Twoja {metric} od dwóch tygodni mieści się w zwykłym zakresie. Spokojnie i stabilnie."
|
||||
},
|
||||
"week3": {
|
||||
"title": "Trzy tygodnie w zakresie",
|
||||
"body": "Trzy tygodnie z {metric} w zwykłym zakresie. Naprawdę spokojny odcinek."
|
||||
},
|
||||
"week4": {
|
||||
"title": "Miesiąc w zakresie",
|
||||
"body": "Cały miesiąc z {metric} w zwykłym zakresie. Wspaniale stabilnie."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user