diff --git a/messages/de.json b/messages/de.json
index c7a8058ec..216446299 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Periode steht bevor",
"eventCyclePeriodSoonDesc": "Ein paar Tage vor deiner vorhergesagten nächsten Periode.",
"eventCyclePeriodConfirm": "Hat deine Periode begonnen?",
- "eventCyclePeriodConfirmDesc": "Eine sanfte Nachfrage am oder nach dem vorhergesagten Beginn, solange keine Periode erfasst ist."
+ "eventCyclePeriodConfirmDesc": "Eine sanfte Nachfrage am oder nach dem vorhergesagten Beginn, solange keine Periode erfasst ist.",
+ "eventCycleFertileSoon": "Fruchtbares Fenster steht bevor",
+ "eventCycleFertileSoonDesc": "Wird einige Tage vor deinem geschätzten fruchtbaren Fenster gesendet, wenn dein Ziel die Empfängnis ist."
},
"i18n": {
"maintainershipBanner": {
@@ -5138,6 +5140,8 @@
"reminders": "Erinnerungen",
"remindersDescription": "Perioden-Erinnerungen pro Kanal in den Benachrichtigungseinstellungen aktivieren.",
"remindersLink": "Benachrichtigungseinstellungen",
+ "fertileReminder": "Erinnerung an das fruchtbare Fenster",
+ "fertileReminderDescription": "Erhalte einige Tage vor deinem geschätzten fruchtbaren Fenster einen Hinweis. Standardmäßig aus – aktiviere sie pro Kanal in den Benachrichtigungseinstellungen.",
"purgeData": "Zyklusdaten löschen",
"purgeConfirmAction": "Ja, alles löschen",
"purgeDone": "Zyklusdaten gelöscht."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Deine nächste Periode wird in etwa zwei Tagen erwartet.",
"periodConfirmTitle": "Hat deine Periode begonnen?",
"periodConfirmBody": "Deine Periode wurde für etwa jetzt vorhergesagt. Trage sie ein, damit die Vorhersagen genau bleiben.",
+ "fertileSoonTitle": "Fruchtbares Fenster steht bevor",
+ "fertileSoonBody": "Dein geschätztes fruchtbares Fenster beginnt voraussichtlich in etwa zwei Tagen. Dies ist eine Schätzung und keine medizinische oder verhütende Garantie.",
"discreetTitle": "HealthLog-Erinnerung",
"discreetBody": "Du hast eine Erinnerung in HealthLog."
}
diff --git a/messages/en.json b/messages/en.json
index 7fd9b439b..8b07b879a 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Period coming up",
"eventCyclePeriodSoonDesc": "Sent a couple of days before your predicted next period.",
"eventCyclePeriodConfirm": "Did your period start?",
- "eventCyclePeriodConfirmDesc": "A gentle check-in on or after the predicted start while no period is logged."
+ "eventCyclePeriodConfirmDesc": "A gentle check-in on or after the predicted start while no period is logged.",
+ "eventCycleFertileSoon": "Fertile window coming up",
+ "eventCycleFertileSoonDesc": "Sent a few days before your estimated fertile window when your goal is trying to conceive."
},
"i18n": {
"maintainershipBanner": {
@@ -5143,6 +5145,8 @@
"reminders": "Reminders",
"remindersDescription": "Turn period reminders on per channel in notification settings.",
"remindersLink": "Notification settings",
+ "fertileReminder": "Fertile-window reminder",
+ "fertileReminderDescription": "Get a heads-up a few days before your estimated fertile window. Off by default — turn it on per channel in notification settings.",
"purgeData": "Delete cycle data",
"purgeConfirmAction": "Yes, delete everything",
"purgeDone": "Cycle data deleted."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Your next period is predicted in about two days.",
"periodConfirmTitle": "Did your period start?",
"periodConfirmBody": "Your period was predicted around now. Log it to keep predictions accurate.",
+ "fertileSoonTitle": "Fertile window coming up",
+ "fertileSoonBody": "Your estimated fertile window is predicted to start in about two days. This is an estimate, not a medical or contraceptive guarantee.",
"discreetTitle": "HealthLog reminder",
"discreetBody": "You have a reminder in HealthLog."
}
diff --git a/messages/es.json b/messages/es.json
index 66ad23a33..da63e756a 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Período próximo",
"eventCyclePeriodSoonDesc": "Se envía un par de días antes de tu próximo período previsto.",
"eventCyclePeriodConfirm": "¿Empezó tu período?",
- "eventCyclePeriodConfirmDesc": "Un recordatorio suave en o después del inicio previsto mientras no se registre ningún período."
+ "eventCyclePeriodConfirmDesc": "Un recordatorio suave en o después del inicio previsto mientras no se registre ningún período.",
+ "eventCycleFertileSoon": "Ventana fértil próxima",
+ "eventCycleFertileSoonDesc": "Se envía unos días antes de tu ventana fértil estimada cuando tu objetivo es concebir."
},
"i18n": {
"maintainershipBanner": {
@@ -5138,6 +5140,8 @@
"reminders": "Recordatorios",
"remindersDescription": "Activa los recordatorios de período por canal en los ajustes de notificaciones.",
"remindersLink": "Ajustes de notificaciones",
+ "fertileReminder": "Recordatorio de ventana fértil",
+ "fertileReminderDescription": "Recibe un aviso unos días antes de tu ventana fértil estimada. Desactivado por defecto: actívalo por canal en los ajustes de notificaciones.",
"purgeData": "Eliminar datos del ciclo",
"purgeConfirmAction": "Sí, eliminar todo",
"purgeDone": "Datos del ciclo eliminados."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Se prevé tu próximo periodo en unos dos días.",
"periodConfirmTitle": "¿Ha comenzado tu periodo?",
"periodConfirmBody": "Tu periodo estaba previsto para ahora. Regístralo para mantener las predicciones precisas.",
+ "fertileSoonTitle": "Ventana fértil próxima",
+ "fertileSoonBody": "Se prevé que tu ventana fértil estimada comience en unos dos días. Es una estimación, no una garantía médica ni anticonceptiva.",
"discreetTitle": "Recordatorio de HealthLog",
"discreetBody": "Tienes un recordatorio en HealthLog."
}
diff --git a/messages/fr.json b/messages/fr.json
index cb6b6825a..ae6869a5c 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Règles à venir",
"eventCyclePeriodSoonDesc": "Envoyé quelques jours avant vos prochaines règles prévues.",
"eventCyclePeriodConfirm": "Vos règles ont-elles commencé ?",
- "eventCyclePeriodConfirmDesc": "Un rappel discret le jour prévu ou après, tant qu'aucune règle n'est enregistrée."
+ "eventCyclePeriodConfirmDesc": "Un rappel discret le jour prévu ou après, tant qu'aucune règle n'est enregistrée.",
+ "eventCycleFertileSoon": "Fenêtre fertile à venir",
+ "eventCycleFertileSoonDesc": "Envoyé quelques jours avant votre fenêtre fertile estimée lorsque votre objectif est de concevoir."
},
"i18n": {
"maintainershipBanner": {
@@ -5138,6 +5140,8 @@
"reminders": "Rappels",
"remindersDescription": "Activez les rappels de règles par canal dans les paramètres de notification.",
"remindersLink": "Paramètres de notification",
+ "fertileReminder": "Rappel de fenêtre fertile",
+ "fertileReminderDescription": "Recevez un avertissement quelques jours avant votre fenêtre fertile estimée. Désactivé par défaut : activez-le par canal dans les paramètres de notification.",
"purgeData": "Supprimer les données de cycle",
"purgeConfirmAction": "Oui, tout supprimer",
"purgeDone": "Données de cycle supprimées."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Vos prochaines règles sont prévues dans environ deux jours.",
"periodConfirmTitle": "Vos règles ont-elles commencé ?",
"periodConfirmBody": "Vos règles étaient prévues pour maintenant. Enregistrez-les pour garder des prévisions précises.",
+ "fertileSoonTitle": "Fenêtre fertile à venir",
+ "fertileSoonBody": "Votre fenêtre fertile estimée devrait commencer dans environ deux jours. Il s'agit d'une estimation, et non d'une garantie médicale ou contraceptive.",
"discreetTitle": "Rappel HealthLog",
"discreetBody": "Vous avez un rappel dans HealthLog."
}
diff --git a/messages/it.json b/messages/it.json
index 7b560241f..41b5e482e 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Ciclo in arrivo",
"eventCyclePeriodSoonDesc": "Inviato un paio di giorni prima del ciclo previsto.",
"eventCyclePeriodConfirm": "Il ciclo è iniziato?",
- "eventCyclePeriodConfirmDesc": "Un promemoria discreto dal giorno previsto in poi finché non registri il ciclo."
+ "eventCyclePeriodConfirmDesc": "Un promemoria discreto dal giorno previsto in poi finché non registri il ciclo.",
+ "eventCycleFertileSoon": "Finestra fertile in arrivo",
+ "eventCycleFertileSoonDesc": "Inviato alcuni giorni prima della finestra fertile stimata quando il tuo obiettivo è il concepimento."
},
"i18n": {
"maintainershipBanner": {
@@ -5138,6 +5140,8 @@
"reminders": "Promemoria",
"remindersDescription": "Attiva i promemoria del ciclo per canale nelle impostazioni di notifica.",
"remindersLink": "Impostazioni di notifica",
+ "fertileReminder": "Promemoria finestra fertile",
+ "fertileReminderDescription": "Ricevi un avviso alcuni giorni prima della tua finestra fertile stimata. Disattivato per impostazione predefinita: attivalo per canale nelle impostazioni di notifica.",
"purgeData": "Elimina i dati del ciclo",
"purgeConfirmAction": "Sì, elimina tutto",
"purgeDone": "Dati del ciclo eliminati."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Il tuo prossimo ciclo è previsto tra circa due giorni.",
"periodConfirmTitle": "Il ciclo è iniziato?",
"periodConfirmBody": "Il tuo ciclo era previsto per adesso. Registralo per mantenere accurate le previsioni.",
+ "fertileSoonTitle": "Finestra fertile in arrivo",
+ "fertileSoonBody": "La tua finestra fertile stimata dovrebbe iniziare tra circa due giorni. È una stima, non una garanzia medica o contraccettiva.",
"discreetTitle": "Promemoria HealthLog",
"discreetBody": "Hai un promemoria in HealthLog."
}
diff --git a/messages/pl.json b/messages/pl.json
index 27b5b0a66..cc2036172 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -4702,7 +4702,9 @@
"eventCyclePeriodSoon": "Zbliża się okres",
"eventCyclePeriodSoonDesc": "Wysyłane kilka dni przed przewidywanym okresem.",
"eventCyclePeriodConfirm": "Czy okres się zaczął?",
- "eventCyclePeriodConfirmDesc": "Delikatne przypomnienie w dniu przewidywanego początku lub później, gdy nie zarejestrowano okresu."
+ "eventCyclePeriodConfirmDesc": "Delikatne przypomnienie w dniu przewidywanego początku lub później, gdy nie zarejestrowano okresu.",
+ "eventCycleFertileSoon": "Zbliża się okno płodności",
+ "eventCycleFertileSoonDesc": "Wysyłane kilka dni przed szacowanym oknem płodności, gdy Twoim celem jest poczęcie."
},
"i18n": {
"maintainershipBanner": {
@@ -5138,6 +5140,8 @@
"reminders": "Przypomnienia",
"remindersDescription": "Włącz przypomnienia o okresie dla każdego kanału w ustawieniach powiadomień.",
"remindersLink": "Ustawienia powiadomień",
+ "fertileReminder": "Przypomnienie o oknie płodności",
+ "fertileReminderDescription": "Otrzymaj powiadomienie kilka dni przed szacowanym oknem płodności. Domyślnie wyłączone – włącz je dla każdego kanału w ustawieniach powiadomień.",
"purgeData": "Usuń dane cyklu",
"purgeConfirmAction": "Tak, usuń wszystko",
"purgeDone": "Dane cyklu usunięte."
@@ -5174,6 +5178,8 @@
"periodSoonBody": "Twoja następna miesiączka jest przewidywana za około dwa dni.",
"periodConfirmTitle": "Czy miesiączka się zaczęła?",
"periodConfirmBody": "Twoja miesiączka była przewidywana mniej więcej teraz. Zapisz ją, aby prognozy pozostały dokładne.",
+ "fertileSoonTitle": "Zbliża się okno płodności",
+ "fertileSoonBody": "Szacowane okno płodności rozpocznie się prawdopodobnie za około dwa dni. To szacunek, a nie gwarancja medyczna ani antykoncepcyjna.",
"discreetTitle": "Przypomnienie HealthLog",
"discreetBody": "Masz przypomnienie w HealthLog."
}
diff --git a/src/components/cycle/cycle-settings.tsx b/src/components/cycle/cycle-settings.tsx
index e93df3d6f..2197832d4 100644
--- a/src/components/cycle/cycle-settings.tsx
+++ b/src/components/cycle/cycle-settings.tsx
@@ -205,6 +205,29 @@ export function CycleSettings({ profile }: { profile: CycleProfileDTO }) {
+ {/* Fertile-window reminder — surfaced ONLY under the conception goal.
+ The toggle itself is the default-OFF per-channel CYCLE_FERTILE_SOON
+ switch on the notifications page; here we just point a TTC user to
+ it, so the affordance never appears (and fertile language never
+ shows) for the other goals (the inclusive-framing rule). */}
+ {goal === "TRYING_TO_CONCEIVE" ? (
+