Skip to content
artemiimillierPublic

About

Hourly spaced-repetition English speaking trainer (A2→B2) with bundled ElevenLabs audio — macOS menu-bar app

Resources

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

ENGLESY

Тренажёр английского по шаблонам (pattern drills) с интервальным повторением, озвучкой ElevenLabs и накопительной отработкой фраз. Сидит в меню-баре macOS (🇬🇧), по расписанию показывает окно поверх всех окон.

Запуск

Проще всего — иконкой ENGLESY.app (двойной клик; можно перетащить в Dock). Приложение написано на Electron (JavaScript + HTML/CSS), работает в фоне как значок в меню-баре. Если иконки нет — собрать её одной командой:

zsh bin/make-app.sh   # создаёт ENGLESY.app с иконкой в корне проекта

Из терминала — то же самое:

npm install
npm start        # фоновое приложение (значок-флаги 🇬🇧🇫🇷)
npm run now      # запустить и сразу показать окно

Меню-бар (🇬🇧🇫🇷): для каждого языка время следующего окна и серия дней, подменю «Практика сейчас → язык», «Сбросить таймеры», «Выход». Двойной запуск не плодит копий (одна копия на систему); повторный клик по иконке просто открывает практику.

Как проходить фразу

  1. Фраза проговаривается 3 раза голосом (Max, US, медленно) — слушаешь.
  2. Накопление по словам: did → did you → did you know → … Двигаешься клавишами:
    • горит L → левая рука: ← / левый Ctrl
    • горит R → правая рука: → / правый Ctrl
    • не та сторона → фраза дёрнется и не пойдёт (держит чередование). Пробел — аварийно «дальше».
  3. Не знаешь слово? Наведи на него мышкой в строке вверху → всплывёт перевод.
  4. В конце — повтори быстро 10×: жми любую клавишу, точки растут и заливаются из 🔴 в 🟢.

Кнопки: 🔊 Ещё раз (R) — переозвучить, ⏭ Пропустить (S) — пропустить фразу. Esc — закрыть.

Интервальное повторение (SRS)

Каждая пройденная фраза возвращается через растущие интервалы: 0 → 1 → 3 → 7 → 16 → 35 → 90 дней (config.json → srs.intervalsDays). Сессия старается всегда набрать sentencesPerRun фраз: сначала повторения и новые фразы из фокусного шаблона, затем близкие шаблоны того же временного блока, затем fallback по текущему уровню. Пропущенные фразы возвращаются в ближайший подходящий слот.

Прогресс хранится в data/progress.json: серия дней (🔥), выучено/всего, сделано/пропущено по дням.

Расписание — config.json → schedule

"schedule": { "days": [1,2,3,4,5], "startHour": 10, "endHour": 17, "everyMinutes": 60 }

Пн–Пт, каждый час с 10:00 до 17:00 (8 окон/день). days: 0=вс … 6=сб.

Тренажёр заточен под разговорный автоматизм: быстрые блоки одного шаблона, чтобы конструкции вроде Did you ...?, Does he ...?, I haven't ... yet, Would you mind ...? ложились в речь без перевода в голове. Основная рабочая цель задаётся config.json → drill.targetLevel и по умолчанию равна B2; B2+ остаётся в базе как запас, но не съедает основные слоты.

Внутри дня фокус времен задаётся config.json → drill.tenseRotation:

["present", "past", "future", "present", "modal", "conditional", "perfect", "present"]

При расписании 10:00–17:00 это даёт: утром present, потом past, future, снова present, modal, would/if, perfect и финальный present. Так текущий уровень не проходится линейной кашей из одних present-конструкций.

Объём базы

173 группы конструкций = 1932 предложения, сгруппированы по уровням A2 → B1 → B2 → B2+ и по шаблонам/временам. Активная цель B2 использует 1212 предложений: A2 и B1-группы дают по 10 фраз на шаблон, B2 даёт более длинные блоки для связной разговорной речи.

Озвучка — config.json → tts

ElevenLabs через прокси (обход геоблокировки РФ). Голос Max (Gfpl8Yo74Is0W6cPUWWT), модель eleven_multilingual_v2, speed 0.85. Аудио кэшируется в data/tts-cache/ — кредиты не тратятся на повторы. Сменить голос/скорость — поля voiceId / speed.

Добавить/изменить фразы

Контент собирается из data/curriculum/*.json через build-data.js → пишет data/sentences.json. Правь группы в data/curriculum/, затем запусти node build-data.js. Формат предложения:

{ "text": "Did you call him", "translation": "Ты звонил ему?",
  "gloss": [ {"w":"Did","t":"(вопрос. прош.)"}, {"w":"you","t":"ты"}, {"w":"call","t":"звонил"}, {"w":"him","t":"ему"} ] }

gloss — пословный перевод (по одному на слово, в том же порядке, что и слова в text). Скрипт проверяет выравнивание.

Автозапуск при входе

Рекомендуемый способ — Login Item (приложение лежит в ~/Documents, а это защищённая папка macOS, поэтому launchd/LaunchAgent к ней доступа не имеет). Добавить в автозапуск:

osascript -e 'tell application "System Events" to make login item at end with properties {path:"/Users/artemiimiller/Documents/ENGLESY/ENGLESY.app", hidden:true, name:"ENGLESY"}'

Убрать из автозапуска:

osascript -e 'tell application "System Events" to delete login item "ENGLESY"'

Либо вручную: Системные настройки → Основные → Объекты входа → + и выбрать ENGLESY.app. (Старый com.englesy.popup.plist оставлен для справки — он работает, только если проект лежит вне ~/Documents.)

About

Hourly spaced-repetition English speaking trainer (A2→B2) with bundled ElevenLabs audio — macOS menu-bar app

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages