ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Interaktīvi matemātikas un ģeometrijas uzdevumi ar dzīves piemēriem un AI palīgu Cipariņu skolēniem Latvijā.
Translation pending
EducationTypeScript · CSSGitHub @MaksimsKlimanovicsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Интерактивное веб-приложение для школьников Латвии (1–9 класс, по стандарту Skola2030 — MK noteikumi Nr. 747, 6. pielikums): математика и геометрия на реальных жизненных примерах, с объяснением зачем это нужно, интерактивными моделями и AI-помощником Cipariņš на базе Claude.
Интерфейс и весь контент — на латышском и русском (переключатель LV/RU).
| Раздел | Описание |
|---|---|
| 9 классов, 46 тем | От «Сложение до 20» до «Тригонометрии» и «Объёма». Каждая тема привязана к результатам стандарта Skola2030. lib/curriculum.ts |
| Каждая тема | «Зачем это нужно?» → случай из жизни в Латвии → теория + формула → интерактивная модель → тренировка → вопросы к AI |
| 18 интерактивных моделей | Числовая ось, монеты, часы, таблица умножения, площадь/периметр, пицца-дроби, транспортир, скидки %, окружность, весы-уравнения, треугольник, график y = kx + b, Пифагор, парабола, тригонометрия, столбчатая диаграмма, координатная плоскость. Модели учитывают этап стандарта (например, π — только с 7 класса). components/widgets/ |
| 100 задач в каждой теме | 47 генераторов с историями из жизни (евро, рижский трамвай, Даугавпилсская зима, памятник Свободы…), подсказкой и пошаговым решением. В каждой теме — пронумерованный набор из 100 разных задач («Uzdevums 37/100»), одинаковый на всех устройствах (problemSet), с сеткой «Visi uzdevumi» и прогрессом решённых (localStorage). Ответы принимаются с запятой (3,5). lib/exercises.ts |
| Несколько примеров из жизни | В каждой теме минимум 3 жизненных примера (lib/real-life.ts). Кнопка «Uzzināt vairāk» открывает чат с помощником, который сразу подробнее рассказывает именно об этом применении. Сервер берёт текст примера по номеру, клиент не может подставить свой текст. components/chat/CaseTutor.tsx |
| AI-чат «Cipariņš» | Claude в роли репетитора: не даёт готовый ответ, а ведёт вопросами; знает класс и тему, из которой открыт чат; отвечает на языке интерфейса. app/api/chat/route.ts, lib/tutor.ts |
| Cipariņš внутри задачи | Кнопка «Спросить Ципариньша» открывает чат прямо в карточке задачи. Помощник видит именно эту задачу, правильный ответ, эталонное решение, неверные попытки ребёнка и статус (решено / нет / решение открыто). Быстрые кнопки: «С чего начать?», «Объясни ход решения по шагам», «Где я ошибся?», «Почему так правильно?». components/chat/ExerciseTutor.tsx |
| Прогресс | Звёзды за решённые задачи хранятся в браузере (localStorage) |
Персонаж Cipariņš — оригинальный маленький робот-инженер «который живёт внутри вещей и знает, как в них работает математика» (по духу как Фиксики, но собственный персонаж — без чужих торговых марок).
Ar katru klasi tēls kļūst vecāks — mainās vārds, izskats, sveiciens un AI runas veids (lib/persona.ts):
| Klase | Vārds | Izskats |
|---|---|---|
| 1. | Cipariņš | mazs, apaļš, lielas acis, nekā rokās |
| 2.–3. | Cipariņš | zīmulis, 3. klasē arī mugursoma |
| 4.–5. | Cipars | lineāls un mugursoma |
| 6. | Cipars | cirkulis un brilles |
| 7.–8. | Cipara jaunskungs | brilles un cirkulis, 8. klasē arī tauriņš |
| 9. | Cipara kungs | cilindrs, monoklis, ūsas, tauriņš un spieķis |
Ķermenis ar katru gadu kļūst garāks, acis un vaigi mazāk bērnišķīgi, uz vēdera ir klases cipars. Katrai klasei ir savs AI runas stils (VOICES): no īsiem, rotaļīgiem teikumiem 1. klasē līdz pieklājīgam, precīzam „kolēģim“, kas 9. klasē gatavo eksāmenam. Bez izvēlētas klases (sākumlapā, vispārējā čatā) palīgs ir mazais Cipariņš.
Pamatā ir saistošais dokuments — MK 27.11.2018. noteikumi Nr. 747, 6. pielikums “Sasniedzamie rezultāti matemātikas mācību jomā, beidzot 3., 6. un 9. klasi” (likumi.lv).
skola2030: ["3.2.4", …] failā lib/curriculum.ts), un tēmas lapā tie redzami burtiski blokā “Skola2030”.lib/skola2030.ts — rezultātu citāti un sešas “lielās idejas”. docs/skola2030/ — no PDF izvilktais pielikuma teksts, sadalīts pa posmu kolonnām (scripts/skola2030-columns.py).tests/skola2030.test.ts pārbauda, ka:
rem vienībās (Safari seko iOS Dynamic Type ar -apple-system-body), SF Pro Rounded (ui-rounded) Apple ierīcēs ar Nunito kā rezerves fontu, caurspīdīgas navigācijas un cilņu joslas, Large Title, kas ritinot pāriet joslā, iOS grupēti saraksti, segmentētā vadīkla, iOS stila slīdnis, „sheet“ panelis Cipariņam, 44 pt pieskāriena laukumi, safe-area atkāpes.cubic-bezier(0.23, 1, 0.32, 1) / zīmēšanas līkne cubic-bezier(0.32, 0.72, 0, 1), nospiešana scale(0.97) 160 ms, UI kustība < 300 ms, tikai transform/opacity, ienākšana ar @starting-style, panelis aizveras ar ātru pavilkšanu (> 0,11 px/ms), hover tikai (hover: hover) and (pointer: fine), bieži lietotas darbības netiek animētas, samazinātas kustības režīmā paliek tikai izgaišana.color-mix), lai sasniegtu kontrastu; teksts uz klases krāsas tiek izvēlēts automātiski (lib/color.ts).app/globals.css sākumā (tokeni) — komponentēs nav cietu krāsu, izņemot zīmējumus uz „papīra“ fona.Divi bērni no dažādām ierīcēm risina vienus un tos pašus izvēlētās klases uzdevumus uz laiku (1, 2, 3 vai 5 min).
/sacensibas?kods=…).Как устроено: lib/duel.ts — судья (сервер хранит ключи ответов, часы и решает, кто победил; браузер получает вопрос без ответа). У каждого игрока своя запись в Redis, поэтому одновременные ответы не перезаписывают друг друга; второе место занимается атомарно (SET NX). Браузер опрашивает состояние раз в 1,5 с — WebSocket на Vercel не нужен. Данные матча (только ники и ответы) удаляются через 2 часа. Секрет игрока хранится в localStorage и передаётся в заголовке x-duel-token.
Vecāks vai skolotājs sadaļā Sacensības → „Esi vecāks vai skolotājs? Izveido grupu“ izveido grupu un saņem 6 zīmju grupas kodu (piem., L84N4P). Bērni ievada kodu, segvārdu un klasi un redz, kurš no grupas šobrīd ir lietotnē un ko dara („Mācās: Daļu saskaitīšana“, „Sarunājas ar palīgu“, „Sacensībās“). Uzspiežot uz bērna, var izvēlēties klasi un laiku un nosūtīt izaicinājumu. Draugam jebkurā ekrānā parādās „Anna tevi izaicina! [Ne tagad] [Pieņemt]“.
Drošība bērniem:
Как устроено: lib/groups.ts. Присутствие — heartbeat раз в 10 с, пока вкладка видима; кто молчит 30 с — офлайн. Данные в Redis-хешах (HSET/HGETALL), у каждого ребёнка своё поле, поэтому одновременные запросы не мешают друг другу. Расход Upstash: ~6 команд на heartbeat, т. е. ≈ 36 команд в минуту на ребёнка (урок 45 мин с 25 детьми ≈ 40 000 команд). Для класса, который пользуется регулярно, бесплатного плана может не хватить — проверьте лимиты Upstash.
/api/chatapp/globals.css, SVG-иллюстрации в кодеnpm install
cp .env.example .env.local # впишите ANTHROPIC_API_KEY
npm run dev # http://localhost:3000
npm test # тесты генераторов и валидации чата
Без ключа приложение полностью работает, кроме чата — он вежливо сообщит, что AI не включён.
ANTHROPIC_API_KEY — ключ из console.anthropic.com (обязательно)CLAUDE_MODEL — модель (необязательно, по умолчанию claude-opus-5-5)KV_REST_API_URL и KV_REST_API_TOKEN
(подходят и UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN). Без Redis на Vercel
раздел «Sacensības» честно сообщит, что режим не включён; остальное приложение работает.claude-opus-5-5 с effort: "low" (быстрые короткие ответы репетитора).
Для экономии можно задать CLAUDE_MODEL=claude-haiku-5-5.fallbacks: "default"): если фильтр безопасности модели отклонит
безобидный запрос, Anthropic автоматически повторит его на резервной модели.generator + seed + попытки. Сервер сам заново
генерирует задачу (генераторы детерминированы по seed) и подставляет условие, ответ и решение
в системный промпт. Подменить ответ или условие с клиента нельзя. Пока задача не решена,
Cipariņš ведёт по шагам, но последний шаг оставляет ребёнку. После решения объясняет всё до конца.
Для разбора задачи используется effort: "medium", для обычного чата — "low".app/
page.tsx главная: онбординг + выбор класса
klase/[grade]/page.tsx список тем класса
klase/[grade]/[topic]/page.tsx страница темы
chat/page.tsx AI-чат (?grade=&topic=&q= для контекста)
api/chat/route.ts потоковый прокси к Claude
components/
HomeView, GradeView, TopicView, ChatView, ExerciseCard
Mascot.tsx персонаж Cipariņš … Cipara kungs (SVG, по классу)
Scenes.tsx иллюстрации в стиле референсов
widgets/ 16 интерактивных моделей
lib/
curriculum.ts классы, темы, тексты LV/RU
exercises.ts генераторы задач и проверка ответов
tutor.ts системный промпт и валидация истории чата
i18n.ts строки интерфейса LV/RU
tests/ node:test (npm test)
lib/exercises.ts (вопрос/подсказка/решение на lv и ru).lib/curriculum.ts, укажите generator, skola2030 (коды результатов этапа этого класса) и при желании widget.lib/skola2030.ts.npm test проверит генератор, переводы, дословность цитаты и что код относится к этапу класса.