ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Parvoz Edu — математика, логика и шахматы Веб-платформа для долгосрочного развития математического, логического, алгоритмического и научного мышления ребёнка. При первом запуске Лаборатория спрашивает имя ребёнка и дальше обращается к нему по имени: имя подставляется и в задачи, где ребёнок — герой. Она построена по мастер-промпту программы: ежедневные занятия на 20–30 минут, 6–10 разных задач, лестница подсказок, ответы для родителя отдельно, еженедельное наблюдение без ярлыков.README 전문 보기 ↗
Веб-платформа для долгосрочного развития математического, логического, алгоритмического и научного мышления ребёнка. При первом запуске Лаборатория спрашивает имя ребёнка и дальше обращается к нему по имени: имя подставляется и в задачи, где ребёнок — герой. Она построена по мастер-промпту программы: ежедневные занятия на 20–30 минут, 6–10 разных задач, лестница подсказок, ответы для родителя отдельно, еженедельное наблюдение без ярлыков.
Qisqacha (oʻzbekcha). Bu — bolalar uchun matematika, mantiq va algoritmik fikrlashni rivojlantiruvchi veb-platforma. Birinchi kirishda bolaning ismi soʻraladi va masalalar qahramoni shu bola boʻladi. Platforma ikki tilda: rus va oʻzbek tillarida (tilni yuqoridagi RU / UZ tugmasi bilan almashtirish mumkin). Oʻzbekcha matnlar soʻzma-soʻz tarjima emas — bolaga tushunarli, jonli tilda qayta yozilgan. Har kuni 20–30 daqiqalik mashgʻulot: 5 bosqichli maslahat, javobni tekshirish va interaktiv robot. Har bir kunni chop etish mumkin. 6 darajali shaxmat maktabi (piyoda, ot, fil, rux, farzin, shoh), endshpil maktabi, tahlil taxtasi, shaxmat sirlari va afsonalari — ularning bir qismini diktor oʻqib beradi. Ota-ona boʻlimi PIN-kod bilan yopilgan. Natijalar shu brauzerda saqlanadi; xohlasangiz, Google yoki Telegram orqali kirib, natijalarni barcha qurilmalarda sinxronlash mumkin.
Для ребёнка
Три недели по 7 дней, в каждой — 55 задач и мини-исследование. Разминка, логика, закономерности, алгоритмы, пространство, математика вокруг нас, задача со звёздочкой.
Пять уровней сложности (🟢 🟡 🟠 🔴 ⭐), и сложность растёт к концу недели.
Подсказки открываются по одной, с паузой на размышление: перечитай условие → что известно → нарисуй или запиши → реши задачу поменьше → идея. Готовый ответ ребёнок не видит.
Проверка ответа без слова «неправильно»: «Давай проверим твою идею», «Какая часть точно верная?».
Интерактивные инструменты:
Шахматная школа — шесть уровней-званий: Пешка → Конь → Слон → Ладья → Ферзь → Король (по-узбекски piyoda, ot, fil, rux, farzin, shoh). На каждом уровне — урок с интерактивной доской, правила, словарик, интересные факты и упражнения: найти клетку, отметить все ходы фигуры, собрать звёздочки за наименьшее число ходов, найти вилку и мат в один ход, расставить ферзей. Все упражнения решены — звание получено, и открывается следующий уровень. Каждый уровень ведёт дальше: к игре, задачам, дебютам и знаменитым партиям своей сложности.
Задание дня, опыт и серия — на главной и в шахматной школе: три дела на сегодня (задачи тренажёра, задача по математике, партия или упражнение) и «звезда дня», когда всё сделано; уровень по опыту (опыт считается из уже решённого, поэтому одинаков на всех устройствах; он не зависит от подсказок). Детям до 10 лет вместо номера уровня и XP показываем имя уровня (Росточек, Фонарик, Компас… Корона), с 10 лет — число и «+10 XP ⭐»; серия дней подряд, где один пропуск в неделю прощается, и цель недели — 5 дней с занятиями.
После решения — вопросы «А ещё подумай» и отметки «объяснил», «нашёл другой способ», «понравилась», «было трудно».
Итоги дня: самая интересная задача, самая трудная задача, настроение, новая «привычка мыслителя».
«Мои задачи» — задачник, куда ребёнок записывает задачи, которые придумал сам.
Возраст ребёнка — при первом запуске ребёнок выбирает возраст (6–15), изменить его можно в настройках родителя. Младшим (6–8) всё по порядку; средним (9–10) открыты три уровня шахмат, робот «Конь», задача дня от двух звёзд, лёгкие задания дня помечены как разминка; старшим (11+) открыты все уровни, робот «Слон», задача дня от трёх звёзд, разделы «для тех, кто постарше» раскрыты сразу.
Тайны шахмат — 32 истории с вопросом-крючком: учёные Хорезма и Бухары (аль-Хорезми, Беруни, Ибн Сина), «Шахнаме», халифы Багдада, задача Дилярам, «Турок», путешествие коня, «бешеная королева» — с играми внутри (зёрна на доске, загадка посла, тур коня) и загадками про фигуры.
docs/chess-stories-sources.md).Живая птица Парвоз и награды. Птица реагирует на ответы (верно — радуется, «подумаем ещё» — мягко наклоняет голову, без тряски и грусти), «+N XP ⭐» взлетает, за новый уровень и хороший итог дня или «Быстрых примеров» — салют. Пока нет файлов Rive/Lottie, рисуется запасной вариант из логотипа и CSS; когда файлы появятся, их включает один флаг (src/lib/anim/assets.ts, правила — docs/animations.md). Уважает «уменьшить движение» в системе и настройку родителя «Анимации»; WASM-движки отдаются с нашего домена, не с CDN.
Тактика (/chess/tactics): восемь тем — вилка, связка, сквозной удар, открытый шах, мат разными фигурами (слон, пешка, ферзь с опорой, превращение) быстрые маты в дебюте (детский мат, мат дурака), защита от шаха (взять, закрыться, уйти) и особые правила (взятие на проходе, пат, ничьи). В каждой короткий урок (3–4 шага с доской и стрелками), упражнения «найди ход» на настоящей доске и вопросы с выбором ответа; RU и UZ. Позиции придуманы для школы и проверены движком: src/lib/tactics.ts независимо находит все ходы, подходящие под приём, а tests/tactics.test.ts сверяет с ними ответы упражнений.
Контрольные тесты (/chess/tests): три теста по двенадцать вопросов без подсказок — фигуры и ходы, шах/мат/пат, тактика. Балл даётся за ответ с первой попытки (ошибаться можно, правильный ответ всё равно нужно найти), итог — баллы и до трёх звёзд (10+ из 12 — три). Позиции тестов 2 и 3 — зеркальные отражения позиций из школы и тактики, все ответы проверены движком (tests/chess.test.ts).
Два языка: русский и узбекский. Переключатель RU / UZ — в шапке сайта и в приветственном окне; выбор хранится на устройстве. Узбекский текст — не подстрочник: задачи, уроки, истории и подсказки написаны заново живым языком (правила — docs/uzbek-style.md). Задачи, завязанные на русский алфавит (шифры, «буква — номер», карты с буквами), пересобраны на узбекском алфавите с теми же числовыми ответами. Шахматные ходы по-узбекски записываются фигурками: ♘f3, ♕xf7#.
Несколько детей на одном устройстве — родитель в настройках («Дети на этом устройстве») заводит профили: у каждого своё имя, возраст, аватарка (🐣🦊🐼…), прогресс, медали и серия. Когда профилей больше одного, в шапке появляется кнопка с картинкой — ребёнок выбирает себя сам. У первого профиля запись прежняя (davlatjon-lab:v1), у остальных — davlatjon-lab:v1:<id>; список — davlatjon-lab:profiles (src/lib/profiles.ts). При входе в аккаунт прогресс каждого профиля сохраняется отдельно (/api/progress?profile=<id>, запись «аккаунт#профиль»); итоги недели в Telegram приходят по каждому профилю с его аватаркой. Список профилей на другом устройстве нужно завести заново.
Птичка Парвоз и вводный тест. Талисман (птичка с логотипа) встречает в приветствии, хвалит в итогах дня и зовёт отдохнуть. Кнопка «Показать родителям» открывает системное окно «Поделиться» (без имени ребёнка). Ребёнку от 8 лет, который ещё ничего не решал, на главной предлагается короткий вводный тест из шести задач (src/lib/placement.ts): начать стоит с недели, где что-то оказалось новым. Все недели остаются открытыми.
Быстрые примеры (/quick) — десять вопросов подряд, ответ нажатием на крупный вариант; вопросы собираются на лету (src/lib/quick.ts, чистый генератор с seed, проверяется тестами). Две колоды: «числа» (сложение, вычитание, пропущенное число, знаки сравнения, ряды, таблица умножения и деление; три уровня по возрасту) и «картинки» для 4–5 лет (сосчитай, где больше, продолжи узор, найди лишнее) — вопросы без слов. Серия с 7 верными из 10 даёт 5 XP, раз в день на колоду; дни серий идут в календарь занятий и в серию дней. Возраст в настройках теперь от 4 лет; для 4–5 лет вместо занятий по неделям на главной — «Играть». Озвучки для малышей пока нет (записи диктора нужно заказать отдельно).
Коллекция героев (/chess/collection) — 23 карточки: мудрецы Востока и 18 чемпионов мира с портретами и подписями; открываются сами, по одной за каждые 30 XP (src/lib/collection.ts); новая карточка — плашка со ссылкой.
Рейтинг (/leaderboard) — общая таблица для вошедших в аккаунт: очки за неделю (с понедельника по Ташкенту) и за всё время, по направлениям (всего, математика, шахматы, шахматные задачи, быстрый счёт) и возрастным группам (4–6, 7–9, 10+), плюс «кто в чём силён» — тройка лучших в каждом направлении. Участие — только с разрешения родителя (выключатель в «Для взрослых» → Настройки, для каждого ребёнка отдельно; нужны вход и имя в игре). Видны лишь имя в игре, аватарка, уровень и очки: настоящего имени и возраста нет. Очки считает сервер по сохранённому прогрессу (xpBreakdown в src/lib/xp.ts), а не по числам от клиента; таблица lab_scores, API GET /api/play/leaderboard. Выключили участие или удалили аккаунт — запись исчезает сразу.
Шахматы по сети с друзьями (/chess/online) — после входа в аккаунт ребёнок выбирает придуманное имя в игре (не настоящее), ищет друзей по имени, дружит и играет партии на расстоянии: часы (без часов, 5, 10, 15+10 минут), сдача, ничья, отмена в начале, «сыграть ещё»; рядом — переписка с другом; в списке друзей видна серия дней с занятиями 🔥 (одно число, POST /api/play/streak). Каждый ход проверяет сервер (src/lib/online.ts, chess.js), время у ушедшего игрока выходит само. Безопасность: играть и писать можно только с друзьями; в сообщениях нет ссылок, телефонов, почты и грубых слов; у родителя в настройках три выключателя — игра по сети, переписка и «меня можно найти по имени»; можно заблокировать. Нужны вход (Google или Telegram) и база Neon — см. docs/online-play.md.
Вид доски и звук ходов — ребёнок (в «🎨 Моя доска и звук» на странице «Играть») или родитель (настройки) выбирает цвета доски (дерево, зелёная, морская, фиалка, ягодная; src/lib/boardLook.ts) и набор звуков: «Деревянные» — записанные звуки хода, взятия, рокировки, превращения, шаха и неверного хода (public/audio/sfx, сделаны ElevenLabs Sound Effects, играют через Web Audio с лёгкой вариацией высоты) или «Мягкие» — синтезированные. Выбор хранится на устройстве и не синхронизируется.
Озвучка — только записи диктора ElevenLabs (все записи — модель Eleven v4, язык задаётся явно): условия всех задач по математике, карточки уроков шахматной школы, вопросы и ответы «Знаешь ли ты?», приветствие, легенды шести уровней, 32 истории «Тайн и легенд» и похвала — на обоих языках (по-русски — один голос «Anna Zub – Warm Multilingual Voice» во всех записях, public/audio; по-узбекски — голос «Uzbekcha», public/audio/uz). Кнопка «🔊 Прочитать» есть только там, где есть запись на языке интерфейса; голос браузера не используется. Оглавление записей src/content/voice-clips.json хранит отпечаток озвученного текста: изменился текст задачи или урока — тест voice.test.ts напомнит перезаписать клип; после записи оглавление обновляется командой WRITE_VOICE_MANIFEST=1 npx vitest run tests/voice.test.ts. Озвучку можно выключить в настройках родителя.
Голос после ответа зависит от ситуации (src/lib/voice.ts — CUES, src/lib/feedback.ts — retryCue/praiseCue): в задачах по математике и логике после неверной проверки диктор говорит ту же мысль, что написана на экране («проверь на маленьком примере», «перечитай условие», «часть ответа сходится», «почти — проверь вычисления» для числа рядом с верным), на третьей, шестой… попытке предлагает подсказку или взрослого; похвала — за усилие, а не «ты умный» («с первого раза — внимательность», «получилось — упорство», «помогла подсказка — тоже сила»). Шахматные реплики («посмотри, кто кого атакует», «поищи шах, взятие или угрозу», «король под шахом», «фигура связана») звучат только в шахматах, в том числе при невозможном ходе. Звонкие реплики записаны моделью v4 (ru — Anna Zub, uz — «Uzbekcha»). Короткие записи есть и для вопросов «быстрых примеров» (малышам 4–5 лет вопрос читается сам), шагов знакомства, итога дня и «передохнём?»; условия всех шахматных упражнений озвучены кнопкой «Послушать» (public/audio/exercises, отпечатки текстов в voice-clips.json).
Звуки доски — ход, взятие, рокировка, превращение, шах и «так нельзя» синтезируются прямо в браузере (Web Audio, без файлов), работают без интернета и выключаются отдельно от озвучки.
Школа эндшпиля (/chess/endgames): король и пешка против короля — правило квадрата, оппозиция, ключевые поля, задачи на единственный ход и игра с роботом, который знает эти позиции наизусть (точная таблица всех 200 тысяч позиций строится в браузере за доли секунды).
Доска анализа (/chess/analysis): ходи за обе стороны, возвращайся и пробуй другие ходы, вставь FEN или PGN; робот-подсказчик показывает оценку, шкалу преимущества и стрелку лучшего хода. Из разбора партии любую позицию можно открыть на доске анализа.
Аккаунт (по желанию): вход через Google или Telegram, чтобы прогресс был на всех устройствах. Без входа всё работает, как раньше. Прогресс двух устройств сливается без потерь: решённое остаётся решённым, рекорды — наибольшие.
Без интернета — открытые хотя бы раз страницы, картинки и файлы сборки сохраняются, и платформа работает офлайн (service worker public/sw.js).
Печать
Для родителя (раздел закрыт PIN-кодом)
/parent/report): дни с занятиями, активные минуты по дням (считаются по тому, что ребёнок реально делает на сайте, а не по открытой вкладке), решённое по математике и шахматам, медиана времени на задачу, подсказки как хорошая привычка. Без процентов и рейтингов; тихая неделя описана спокойно. Отчёт можно распечатать.CRON_SECRET (docs/login-setup.md).localStorage браузера. Перенести его на другое устройство можно через «Настройки → Сохранить в файл».lab_progress в базе Postgres на Neon; строка подключения есть только у сервера сайта, таблицу он создаёт сам. Как подключить вход — docs/login-setup.md. Пока переменные окружения не заданы, кнопок входа нет.robots.txt, X-Robots-Tag: noindex), кроме двух страниц для родителей: /about («О платформе») и /privacy (какие данные где хранятся). Контакт для вопросов о данных — переменная NEXT_PUBLIC_CONTACT (необязательно), адрес сайта — APP_URL.DELETE /api/account.tests/ru-gender.test.ts), а младшему возрасту уровни и опыт показываются без чисел. Разбор интерфейса и план улучшений — docs/ui-ux-audit.md.Стек: Next.js 16 (App Router, статическая генерация), React 19, TypeScript, Tailwind CSS 4, Vitest, Playwright. Шахматы: chess.js (правила на доске, BSD-2-Clause), react-chessboard (доска, MIT) и собственный движок в src/lib/engine (генератор ходов 0x88, альфа-бета с перебором взятий, решатель «мат в N ходов») — он играет за робота и проверяет задачи.
npm install
npm run dev # http://localhost:3000
npm run check # ESLint + TypeScript + тесты + Prettier
npm run test # проверка контента и ответов
npm run test:e2e # сквозные тесты в браузере (собирает и запускает сайт)
npm run build # production-сборка
Для test:e2e без установленных браузеров Playwright укажите свой Chromium: PLAYWRIGHT_CHROMIUM_PATH=/путь/к/chrome. Чтобы проверить уже запущенный сайт, задайте E2E_BASE_URL=http://localhost:3000.
src/
content/ контент программы (данные, без кода отображения)
types.ts схема: день, задача, иллюстрации, способы ответа
meta.ts разделы дня, уровни, лестница подсказок
week1/ … week3/ задачи недель 1–3 (day1..7.ts и index.ts)
chess/ шахматная школа: 6 уровней (pawn.ts … king.ts), задачи (puzzles.ts), дебюты
(openings.ts), знаменитые партии (games.ts), энциклопедия (encyclopedia.ts),
картинки: подписи (images.ts) и манифест с авторами и лицензиями (images.json)
review.ts 10 вопросов недельного обзора
guide.ts методичка для родителя
program.ts список недель и вспомогательные функции
*.uz.ts, chess/uz/ узбекская версия: накладки на русский контент (только тексты; ответы, позиции
и id берутся из оригинала — см. localize.ts и docs/uzbek-style.md)
uz.ts сборка узбекских дней и недель на сервере
chess/endgames.ts школа эндшпиля: уроки и задания (позиции проверяет таблица KPK)
lib/ логика: робот (BFS), фигуры, развёртки куба, кратчайший путь,
калькулятор, волшебный треугольник, исполнитель, ханойская башня,
переправа, переливания, судоку, числовая стенка, круги Эйлера, весы,
игра с камешками, шифр Цезаря, гири, росчерк, шахматы (chess.ts, play.ts),
шахматный движок (engine/), проверка ответов, прогресс
lib/lang.ts, i18n.ts языки: пары t("…", "…"), запись ходов фигурками, выбор языка
lib/engine/kpk.ts точная таблица «король и пешка против короля» (ретроградный анализ)
lib/sync.ts, server/ аккаунт: слияние прогресса двух устройств, вход через Google и Telegram, хранилище
lib/leaderboard.ts рейтинг: недели, возрастные группы, направления (чистая логика)
lib/online.ts, server/playStore.ts игра по сети: правила партии и часов, имена, друзья, переписка
components/ интерфейс: занятие, иллюстрации, задачи-инструменты, шахматы, печать, раздел родителя
app/ страницы (Next.js App Router); app/api — вход в аккаунт, прогресс, игра по сети (/api/play)
docs/ uzbek-style.md — как писать по-узбекски; login-setup.md — как подключить вход; online-play.md — игра по сети
public/images/chess/ уменьшенные картинки энциклопедии (webp) — см. «Картинки и лицензии»
scripts/ fetch-chess-images.mjs — загрузка картинок с Wikimedia Commons;
build-puzzles.mjs — банк задач из базы Lichess (public/puzzles, src/content/chess/puzzle-bank.json)
tests/ Vitest: структура контента, правила инструментов и перебором — правильность
каждого ответа (answers.test.ts — неделя 1, answers-week2.test.ts, answers-week3.test.ts,
chess.test.ts — шахматная школа, chess-content.test.ts — задачи, дебюты, партии,
engine.test.ts — движок: perft и сверка с chess.js,
analysis.test.ts — разбор партии, фора, часы, тренажёр координат,
bundle2.test.ts — повторение, шторм, награды, календарь, PGN, voice.test.ts — озвучка,
chess-images.test.ts — картинки: файлы, лицензии, подписи, ссылки из контента,
puzzle-bank.test.ts — банк задач Lichess: законность каждой задачи, маты — своим движком,
скрытый рейтинг, подбор задач, «Дятел»; gamification.test.ts — опыт, задание дня, мягкая серия,
сертификат, короны, тренажёры; activity.test.ts, report.test.ts, weekly-reports.test.ts — активное время и ограничение, итоги недели, рассылка в Telegram)
e2e/ Playwright: главные сценарии на компьютере и телефоне; puzzles.spec.ts — задачи из базы,
уровень и сложность, «Дятел»; uzbek.spec.ts — все страницы
на узбекском без единой русской буквы, переключение языка, эндшпиль, доска анализа;
gamification.spec.ts — задание дня, сертификат, короны, тренажёры;
parent-time.spec.ts — итоги недели, дневное ограничение и карточка отдыха, приглашение на неделю;
ux.spec.ts — замок родителя, выход из партии, режим «Сам», мягкая проверка;
no-hscroll.spec.ts — на телефоне нет горизонтальной прокрутки
src/content/week4/day1.ts … day7.ts по образцу недель 1–3 (типы подскажет TypeScript).src/content/week4/index.ts и добавьте её в массив WEEKS в src/content/program.ts.tests/answers-week4.test.ts и запустите npm run check.Страницы, печать и раздел родителя для новой недели появятся автоматически.
Все фотографии и картины шахматной энциклопедии берутся с Wikimedia Commons и только с лицензиями, которые не требуют разрешения: общественное достояние, CC0, CC BY, CC BY-SA. Под каждой картинкой и в разделе «Откуда картинки» показаны автор, лицензия и ссылка на источник — так требуют лицензии CC BY и CC BY-SA.
scripts/fetch-chess-images.mjs — список нужных статей Википедии (или конкретных файлов Commons). Скрипт запрашивает свободную заглавную картинку каждой статьи, у Commons — лицензию и автора файла, отбрасывает всё несвободное, скачивает, уменьшает (sharp, не больше 960 px, плюс квадратная миниатюра 240 px) и записывает src/content/chess/images.json. Исходники кэшируются в node_modules/.cache/chess-images.src/content/chess/images.ts — подписи и описания по-русски для каждой картинки; контент ссылается на картинки по id (pictures у партий, image у событий, чемпионов, рекордов и дебютов).ENTRIES скрипта, запустите node scripts/fetch-chess-images.mjs --only id, добавьте подпись в images.ts и ссылку из контента. tests/chess-images.test.ts проверит, что файл на месте, лицензия свободная, подпись есть, а каждая картинка где-то используется.Банк задач собирается из открытой базы Lichess (https://database.lichess.org/#puzzles, лицензия CC0) и лежит в репозитории: public/puzzles/<тема>.json (задачи одной темы по возрастанию рейтинга), public/puzzles/mix.json (понемногу из каждой темы и ступеньки сложности — для «Задач по силам», «Шторма», «Серии» и «Дятла») и src/content/chess/puzzle-bank.json (оглавление и версия для кэша). Страница загружает только нужную тему; офлайн-кэш подгружает остальные, пока есть интернет.
Пересобрать банк (например, раз в полгода, когда база пополнится):
curl -O https://database.lichess.org/lichess_db_puzzle.csv.zst # ~300 МБ
node scripts/build-puzzles.mjs lichess_db_puzzle.csv.zst # Node 22.15+, ~30 секунд
Скрипт берёт популярные задачи (popularity ≥ 85, решали ≥ 500 раз, рейтинг устоялся) с рейтингом 400–1900 и решением не длиннее трёх своих ходов, раскладывает их по нашим темам (порядок и соответствие меткам Lichess — в THEMES скрипта), поровну по ступенькам сложности, и проверяет каждую через chess.js. tests/puzzle-bank.test.ts ещё раз проверяет каждую задачу: ходы законны, мат — это мат, а часть матов перепроверяет своим движком.
Тесты tests/answers*.test.ts независимо пересчитывают каждый ответ:
tests/uz-content.test.ts проверяет узбекскую версию: в ней не осталось ни одной кириллической буквы, накладки не ссылаются на несуществующие id и не трогают позиции и ходы, переведено всё, клетки карт и шифры согласованы с ответами (шифр пересчитывается заново), в загадках ответ — один из вариантов. tests/endgame.test.ts сверяет задания эндшпиля с точной таблицей: правильные ответы, единственный верный ход, робот честно защищается и выигрывает. tests/account.test.ts — подпись сессии, проверка подписи Telegram, разбор id_token Google, слияние прогресса.
tests/content.test.ts следит за правилами программы в каждой неделе: 6–10 задач в дне, 5 подсказок, баланс разделов, не больше 4 задач уровня 🔴 и ⭐, сложность растёт к концу недели и от недели к неделе, привычки и названия не повторяются, ключ ответа согласован с вариантами. Он же проверяет качество текста: нет латинских букв в русских словах, в формулах стоит настоящий минус «−», нет слова «неправильно».
Проект разворачивается на Vercel как обычное Next.js-приложение (npm run build). Переменные окружения нужны только для необязательного входа в аккаунт — см. docs/login-setup.md; без них сайт работает как раньше, с прогрессом в браузере.
/chess/certificate/<уровень>): когда звание получено, открывается лист A4 (альбомный) с именем ребёнка, званием, датой и местом для подписи родителей — его можно распечатать. Ссылки — на странице уровня и в наградах./chess/drills): «Кто в опасности?» — в позиции из настоящей партии найти свои фигуры, которые можно забрать (нет защиты или нападает фигура дешевле); «Запомни» — несколько секунд смотреть на доску и показать, где стояла фигура; «Путь коня» — довести коня до звезды за наименьшее число ходов, потом — в обход клеток, которые бьют пешки. Рекорды сохраняются./chess/awards): 25 наград за задачи, партии, дебюты, звания и привычку заниматься, календарь занятий за 14 недель и серия дней подряд.