Статический учебный сайт на русском языке по мотивам карточного метода книги А. П. Мыцика.
- Полный набор из 214 традиционных ключей Канси.
- Шесть тематических групп; поиск по знаку, номеру, значению и пиньиню.
- Позиционные варианты, упрощённые формы и 124 примера.
- Собственные ассоциации для запоминания.
- Тренировка по 10, 20 карточкам или всей выбранной группе.
- Занятие на сегодня: до 10 ключей, сначала повторения по сроку, затем новые.
- Интервалы повторений: 1, 3, 7, 14, 30, 60 дней; ошибка возвращает ключ на завтра.
- История ответов, расписание и восстановление незавершённого занятия.
- Экспорт и импорт резервной копии с сохранением более свежих результатов.
- Адаптивная верстка и управление с клавиатуры.
dist/ — готовый сайт без сборки и внешних зависимостей. Точки входа: #catalog, #practice, #progress, #about, #key-85.
content.tsv содержит оригинальные русские карточки. sources/ — происхождение данных и извлечённые факты Unicode. python build-data.py обновляет модуль dist/data.js.
Данные о прогрессе привязаны к браузеру. Сервис не содержит учётных записей или серверного хранилища прогресса.
dist/progress.js содержит независимую от интерфейса модель. keys214.progress.v2 в localStorage хранит записи по ключам, историю ответов, дневную подборку и текущую сессию. Старые отметки из keys214.known.v1 переносятся автоматически; исходный ключ остаётся нетронутым. Эти отметки не превращаются в вымышленные успешные ответы.
Дата занятия определяется по местному календарю устройства. Подборка фиксируется при старте: сначала просроченные ключи, при одинаковом сроке — забытые, затем новые. Повтор в тот же день и занятие раньше срока не увеличивают интервал. После ошибки можно сразу повторить трудные ключи; следующее плановое повторение — завтра. Интервалы — простое правило планирования, а не оценка вероятности запоминания.
Раздел «Прогресс» выгружает JSON с отметками, расписанием и полной историей. Импорт проверяет весь файл до записи, объединяет историю без дубликатов и сохраняет более свежий результат каждого ключа. Текущая сессия не заменяется сессией из копии. Подборка на тот же день сохраняется; на новом устройстве восстанавливается из копии. Автоматической синхронизации между устройствами нет. При недоступности localStorage или исчерпании места сайт показывает постоянное сообщение и позволяет выгрузить текущие результаты.
Node.js 20+; установка зависимостей не требуется:
node --test tests/*.test.mjsТесты проверяют миграцию, интервалы, ошибки и немедленные повторы, устойчивость дневной подборки, восстановление сессии, объединение копий, повреждённый импорт, переполнение хранилища и календарные границы. В GitHub Actions тесты выполняются также в часовом поясе с переходом на летнее время.
Сведения об источниках, правах и границах учебных пояснений доступны внутри сайта в разделе «О проекте» и в sources/README.md.
Требуется Python 3. В корне репозитория:
python3 -m http.server 8000 --directory distОткройте http://localhost:8000. Запускайте сайт через HTTP: при открытии index.html как локального файла браузер может блокировать JavaScript-модули.
В настройках репозитория откройте Settings → Pages → Build and deployment → Source и выберите GitHub Actions.
Workflow .github/workflows/pages.yml пересоздаёт карточки, проверяет синтаксис JavaScript и запускает тесты в pull request. После успешных проверок обновление main публикует каталог dist/. Также доступен ручной запуск через Actions → Publish GitHub Pages → Run workflow. Внешние пакеты для сборки не нужны.
Относительные пути к ресурсам и навигация через # позволяют размещать сайт в подкаталоге GitHub Pages. Адрес опубликованного сайта отображается в Settings → Pages и в результате workflow.
Для изменения карточек отредактируйте content.tsv или build-data.py, выполните python3 build-data.py и сохраните изменения в GitHub. Для изменения интерфейса редактируйте dist/index.html, dist/style.css и dist/app.js.
Прогресс в localStorage привязан к домену: при переходе с другого хостинга отметки автоматически не переносятся. Перенос через JSON доступен между версиями сайта, в которых есть экспорт и импорт прогресса.