Свой тренажёр английского — PWA для телефона, от A1 до IELTS.
Уроки грамматики · слова с интервальным повторением · чтение с картинками · книги-картинки · аудирование · AI-разбор письма и речи · произношение · ежедневные занятия. Без подписок и рекламы, все данные — на вашем сервере.
Сделано для двух учеников (и их кота). Лицензия MIT — разверни свой.
Четыре навыка в одном приложении:
- 📖 Грамматика — 45+ структурированных уроков (A1→B2): теория, примеры, видео и упражнения с автопроверкой и подсказками. Плюс справочник: шпаргалка всех 12 времён, исключения, повседневные слова, части тела.
- 📚 Чтение — 50+ адаптированных рассказов и сказок (A1–B1), каждый с иллюстрацией, переводом по тапу, озвучкой, словарём (→ в колоду) и вопросами на понимание. Плюс листаемые книги-картинки (постраничный ридер).
- 🎧 Аудирование — диктанты на TTS (A1–B1): слушай фразу, печатай, что услышал.
- ✍️ Письмо и 🗣️ говорение — отвечай текстом или голосом и получай AI-разбор под свой уровень (ошибки с объяснением по-русски, оценка band). IELTS Task 1/2 и Speaking Part 1/2/3.
- 🔊 Произношение — минимальные пары (ship/sheep) и тренировка на слух.
Движок, который держит ритм:
- 🗓️ Дневная сессия — одна кнопка собирает план на сегодня: разминка → слова к повтору → следующий урок → аудирование/чтение.
- 🧠 Интервальное повторение (SM-2) для 3000+ слов (49 тематических наборов) + слова, сохранённые из любого текста.
- 🗺️ План A1→IELTS со статистикой темпа, 🔥 стриками, XP, уровнями и бейджами.
- 🐛 Журнал ошибок, ✅ трекер прогресса, 🔁 разминки, 🌐 контекстный переводчик.
- 🔔 Push-напоминания (включая «давно не заходил»), 👤 админка со статистикой по каждому ученику.
Детали, которые замечают единицы:
- 🎙️ ElevenLabs TTS — естественный размеренный голос, кэш на сервере: каждая фраза генерится один раз.
- 🖼️ Все картинки в WebP, ленивая загрузка; скелетон-лоадеры и плавные переходы (без дёрганья).
- 📴 Устанавливается как PWA, работает офлайн, вечный логин (переживает деплои).
| Главная | Грамматика | Упражнение | Словарь | Повторение |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Возможности · Архитектура · Как добавлять контент · Развёртывание · Дорожная карта — также в Wiki.
- Фронтенд: Vite + React 19 + TypeScript + Tailwind v4, PWA (
vite-plugin-pwa, injectManifest). - Бэкенд: Fastify 5 на Node 24 со встроенным
node:sqlite(без внешней БД). - Контент: Markdown-уроки (gray-matter) + JSON для словаря и книг — правишь файлы, без кода.
- AI (всё опционально): любой OpenAI-совместимый chat API для перевода и разбора письма/речи; ElevenLabs для озвучки; Gemini («Nano Banana») для генерации иллюстраций.
content/ # весь учебный контент (код не нужен)
lessons/*.md # уроки грамматики, тексты для чтения (kind: reading), диктанты
books/*.json # книги-картинки (+ AGENT_PROMPT.md для генерации новых)
grammar/*.md # карточки-справочник
vocab/*.json # тематические наборы слов
server/src/ # Fastify API, SQLite, SRS (SM-2), планировщик push, прокси TTS
web/src/ # React PWA (экраны, компоненты, lib)
public/reading/ # обложки рассказов (webp)
public/books/ # страницы книг (webp)
Требования: Node 24+ (для node:sqlite).
git clone https://github.com/dripips/english-trainer.git
cd english-trainer
npm install # ставит web + server воркспейсы
cp .env.example server/.env # заполни (см. ниже); chmod 600 server/.env
npm run build:web # сборка PWA
npm start # старт Fastify (отдаёт API + собранную PWA)Режим разработки: npm run dev (Vite dev-сервер + API с прокси).
Всё через переменные окружения — см. .env.example. Приложение работает, если задать только AUTH_SECRET, COOKIE_SECRET и SEED_USERS: перевод откатится на бесплатный API, а озвучка — на голос браузера. Добавь LLM_TRANSLATE_* для контекстного перевода и AI-разбора, ELEVENLABS_* для естественной озвучки, VAPID_* для push-напоминаний.
Подойдёт любой хост с Node 24. Эталонная схема: git pull → npm run build:web → systemctl restart за обратным прокси с HTTPS. Файл SQLite и кэш TTS лежат в server/data/ — бэкапь его, он переживает деплои. Подробнее — Развёртывание.
Для контента сборка не нужна — положи файл в content/ и перезапусти сервер:
- Урок / текст для чтения / диктант: Markdown-файл в
content/lessons/с YAML-фронтматтером (id,level,exercises, опциональноreading,kind: reading). Бери любой урок как шаблон. - Набор слов: JSON-файл в
content/vocab/. - Книга-картинка: JSON в
content/books/+ картинки страниц. Готовый промпт для агента пишет историю и сам генерирует иллюстрации — см.content/books/AGENT_PROMPT.md.
MIT.




