{ICON_CHOICES.map((name) => (
diff --git a/src/renderer/src/i18n/dict.ts b/src/renderer/src/i18n/dict.ts
index adb5079..77bde07 100644
--- a/src/renderer/src/i18n/dict.ts
+++ b/src/renderer/src/i18n/dict.ts
@@ -258,6 +258,9 @@ export const ru: Dict = {
'editor.field.daily_goal.clear': 'Снять',
'editor.field.daily_goal.hint':
'Когда наберёшь столько повторений за день, напоминания этого упражнения умолкнут до завтра.',
+ 'editor.field.adaptive.label': 'Адаптивное расписание',
+ 'editor.field.adaptive.hint':
+ 'Шедулер изучает, в какие часы ты чаще делаешь упражнение, и сдвигает напоминания на удобное тебе время. Заработает после 10 событий в истории.',
// Reminder window
'reminder.kicker': 'Время тренировки',
@@ -563,6 +566,9 @@ export const en: Dict = {
'editor.field.daily_goal.clear': 'Clear',
'editor.field.daily_goal.hint':
'Once you hit this many reps in a day, this reminder goes quiet until tomorrow.',
+ 'editor.field.adaptive.label': 'Adaptive scheduling',
+ 'editor.field.adaptive.hint':
+ 'Scheduler learns which hours you reliably do this exercise and shifts reminders into your good windows. Kicks in after 10 history events.',
// Reminder window
'reminder.kicker': 'Workout time',
diff --git a/src/renderer/src/pages/Dashboard.tsx b/src/renderer/src/pages/Dashboard.tsx
index b981e8a..80c1ae7 100644
--- a/src/renderer/src/pages/Dashboard.tsx
+++ b/src/renderer/src/pages/Dashboard.tsx
@@ -75,6 +75,7 @@ export default function Dashboard(): JSX.Element {
enabled: boolean
category: import('@shared/types').ReminderCategory
dailyGoal?: number
+ adaptive?: boolean
}): Promise {
if (editing) await window.api.updateExercise(editing.id, draft)
else await window.api.addExercise(draft)
diff --git a/src/shared/types.ts b/src/shared/types.ts
index d700f43..f91b2e8 100644
--- a/src/shared/types.ts
+++ b/src/shared/types.ts
@@ -34,6 +34,12 @@ export type Exercise = {
* fires когда цель закрыта. Завтра счётчик обнуляется (по local day).
*/
dailyGoal?: number
+ /**
+ * Адаптивный режим: scheduler анализирует исторические success/skip
+ * паттерны по часам и сдвигает fire'ы на «хорошие» часы. Не меняет
+ * базовый интервал — корректирует только timestamps.
+ */
+ adaptive?: boolean
}
export type NotificationMode = 'toast' | 'modal' | 'both'