BLITZ
Учебная платформа: пользователь задаёт тему и цель и получает персональную карту обучения с генерируемыми уроками, тестами, карточками с…
О проекте
Команда: Ctrl + C
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Учебная платформа: пользователь задаёт тему и цель и получает персональную карту обучения с генерируемыми уроками, тестами, карточками с интервальным повторением и XP. Прямо к кейсу AI Sana (каталог бизнес-задач) это не относится, что README и признаёт.
Как устроено
Приложение на Vinext/Vite и Cloudflare Workers с SQLite/D1 и Drizzle. OpenAI Responses API генерирует карту из 1–12 этапов, теорию, визуализации, тесты из 10 вопросов и наборы из 12–20 карточек; для каждого типа свой промпт и валидация структуры. Карточки повторяются через 3/7/14/30/60/90 дней, ответы сверяются с сохранёнными формулировками и семантически проверяются ИИ. Журнал XP идемпотентен за счёт уникального ключа (owner, event_key) и транзакций.
Ключевые решения
- интервальное повторение
- генерация учебного контента LLM
- семантическая проверка ответа
- идемпотентный журнал XP
Особенности
XP защищён от повторного начисления, в том числе при действиях из двух вкладок. Команда честно оговаривает, что продукт не соответствует кейсу. Судя по коммитам, прототип бизнес-задач сделали, а затем откатили в пользу учебной платформы.
Стек
React 19 · TypeScript · Vite · Vinext · Cloudflare Workers · SQLite · D1 · Drizzle · Radix UI · Tailwind
Модели
gpt-6-astra
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-3263a402-ctrl-c.
README
README.mdBLITZ — знания превращаются в навыки
Учебная платформа команды Ctrl + C. Пользователь выбирает любую тему и цель, отвечает на уточняющие вопросы и получает персональную карту обучения. Уроки создаются по мере открытия: теория, наглядные схемы, проверка, карточки и объяснения наставника.
Сайт: https://blitz-learning-tahir.taarvihma-z.chatgpt.site
Быстрый запуск
Нужны Node.js 22.13+, npm и Git. Не требуется облачная база, Cloudflare-аккаунт или Docker: локальная SQLite/D1 создаётся автоматически.
git clone https://github.com/BAITC-Hacks/hack-3263a402-ctrl-c.git
cd hack-3263a402-ctrl-c
npm run install:ci
npm run setup
npm run dev
Открыть http://localhost:5173. setup создаёт .env.local из примера и применяет локальную схему; повторный запуск сохраняет данные. Зарегистрируйте собственный логин и пароль (пароль от 15 символов). Вход через ChatGPT в локальном режиме — явно тестовая учётная запись [email protected]; используйте регистрацию для проверки разных пользователей.
Для генерации заполните .env.local и перезапустите сервер:
OPENAI_API_KEY=ваш_ключ
OPENAI_MODEL=gpt-6-astra
Нужны API-кредиты и доступ к указанной модели; можно задать другую совместимую с Responses API модель. Без ключа работают интерфейс, аккаунты и сохранённые материалы; новые курсы и карточки не генерируются. Ключ используется только сервером. .env.local, пароли, локальная база, сессии и пользовательские ответы не входят в репозиторий. Генерация отправляет введённые учебные данные в OpenAI.
Реализованные функции
- Личный кабинет с логином/паролем либо входом через ChatGPT; данные разделены по владельцу.
- Пустая библиотека для нового пользователя; блицы плитками с процентом освоения.
- Три уточняющих вопроса с готовыми вариантами и собственным ответом.
- Гибкая карта: 1–12 тематических этапов, до 10 тем на этап, до 60 тем всего. Число определяется целью, а не шаблоном 3 × 3. Проекты необязательны.
- Урок по запросу: связная теория от основ, структурированные визуализации, подробное объяснение выбранного фрагмента.
- Новые тесты: 10 вопросов с одним правильным ответом; разбор выбранного варианта, ссылки на разделы теории. Сохранённые старые уроки совместимы.
- Самостоятельный ответ, работа над ошибками, отдельное закрепление. Навык подтверждается правильными основными ответами и устранением ошибок, а не открытием страницы.
- Карточки: 12–20 вопросов по теории, ответ по памяти, семантическая проверка пересказа, просмотр объяснения, повторение через 3/7/14/30/60/90 дней. После ошибки или просмотра ответа — через сутки. Дополнительная тренировка до срока не приносит XP.
- Серверный журнал опыта, 30 рангов и отдельные уровни по направлениям. Повтор обычного действия не выдаёт награду снова; общий XP растёт и после уровня 30.
- «Мой прогресс»: плитки блицев, темы раскрываются внутри; ранги, навыки и последние награды. Профиль показывает текущий ранг и шкалу.
- Проекты с критериями, сохранением работы и обратной связью ИИ. Пользовательский код не исполняется.
Опыт и прогресс
| Действие | XP |
|---|---|
| Завершить теорию кнопкой перехода к практике | 20 |
| Верный самостоятельный ответ | 30 |
| Верный ответ теста с первой попытки / после ошибки | 10 / 5 |
| Ответить на все вопросы теста | 30 |
| Первые ответы: 80–99% / 100% | дополнительно 30 / 50 |
| Вспомнить карточку впервые / повторить по расписанию | 3 / 5 |
| Исправить первоначальную ошибку отдельным закреплением | 10 |
| Подтвердить все навыки этапа | 100 |
| Малый / крупный проект | 150–300 / 300–600 |
Бонусы 80% и 100% не складываются. Качество теста для бонуса фиксируется по первым ответам. Размер проектной награды определяется сложностью заранее и показан в задании. Намеренная ошибка после первого правильного ответа не даёт награды за исправление. Уникальность (owner,event_key) и транзакционная запись защищают от повторного получения XP, в том числе из двух вкладок.
Пороги рангов и титулы: lib/experience.ts. Процент: (XP − начало уровня) / (следующий порог − начало уровня). Например, 9884 XP → уровень 17, 68%, следующий порог 10300. Уровни показывают учебный опыт, а не независимую сертификацию знаний. Подтверждённые навыки отображаются отдельно.
Проверка для жюри
npm run typecheck
npm test
npm run build
Короткий сценарий:
- Зарегистрировать пользователя A. Убедиться, что «Мои блицы» пусты.
- Создать блиц, например «Публичные выступления: объяснять идеи коллегам». Ответить на вопросы о начальном опыте, результате и времени.
- Открыть карту, затем первый урок. Посмотреть теорию, визуализацию и запросить подробное объяснение фрагмента.
- Завершить теорию и пройти несколько вопросов. Ошибиться, открыть объяснение и закрепление; проверить изменение прогресса и XP.
- Во вкладке «Карточки» создать набор, ответить по памяти. Повторить ту же карточку: дополнительный XP до срока не начисляется.
- Открыть профиль и «Мой прогресс». Обновить страницу: данные сохраняются. Войти пользователем B: данные A недоступны.
Генерация обращается к реальному API и может занять несколько минут; она не является локальной заглушкой. Для пятиминутного показа подготовьте один урок в своём демонстрационном аккаунте заранее. Сохранённые курсы не подменяют персональную генерацию для нового пользователя.
HTTP-проверки без платных AI-вызовов: python3 tests/accounts.py (при запущенном dev-сервере); tests/smoke.py предназначен для старой тестовой Python-учётной записи и создаёт локальные тестовые данные. Для UI/серверного тестирования используйте отдельную локальную базу, не production.
Технологии и архитектура
React 19, TypeScript, Vinext/Vite, Cloudflare Workers, SQLite/D1, Drizzle, Radix UI, Tailwind, OpenAI Responses API.
app/blitz-app.tsx,components/blitz/— интерфейс, библиотека, урок, карточки, прогресс и профиль.app/api/learn/route.ts— учебные операции, проверка владельца и валидация входных данных.app/api/auth/route.ts,lib/identity.ts— аккаунты, хеши паролей и серверные сессии.lib/theory-prompt.ts,lib/assessment-prompt.ts,lib/cards-prompt.ts— промпты автора теории, тестов и карточек.lib/course.ts,lib/assessment.ts,lib/cards.ts— проверка структуры генерации и отделение ответов от публичных заданий.lib/experience.ts,lib/experience-store.ts— правила XP и идемпотентный журнал наград.lib/card-service.ts— карточки и расписание повторений с защитой от одновременных обновлений.db/schema.ts,drizzle/— схема и миграции. Схема изменяется миграциями, не при пользовательском запросе.
Локальные данные: .wrangler/state/. Публикация: Sites, манифест .openai/hosting.json. Облачные секреты задаются отдельно. npm run setup — только локальный bootstrap текущих добавляющих миграций; production получает исходные миграции через Sites. После будущих изменений с ALTER/переносом данных bootstrap специально останавливается, чтобы не применить их повторно.
Ограничения и внешние зависимости
До 20 блицев и 60 AI-запросов в сутки на владельца. Создание урока использует несколько запросов. Доступность и стоимость зависят от OpenAI. Нет восстановления забытого пароля, отправки писем, внешнего поиска источников или безопасной среды исполнения кода. ИИ может ошибаться в фактах и оценках; проектная проверка — учебная обратная связь. Короткие самостоятельные ответы проверяются по сохранённым допустимым формулировкам; карточки дополнительно допускают семантическую проверку ИИ. Прогресс ранее сохранённых курсов не сбрасывается, структура старого маршрута автоматически не перестраивается.
Подготовка к сдаче
Ориентир для документации — чат «Исследование проверки работ»: воспроизводимый запуск, описание реализованных функций, архитектуры, данных, ограничений и повторяемая демонстрация. Ссылка на личный чат может быть недоступна другим участникам; все необходимые инструкции приведены здесь.
Это учебная платформа BLITZ. Исследованная в том чате шкала конкретного бизнес-кейса про каталог задач и выбор студенческих команд не является шкалой учебного XP и не заявляется выполненной этим проектом. Соответствие выбранному треку следует проверять отдельно. Загрузка кода в GitHub не нажимает «Сдать решение» на платформе хакатона — этот шаг команда выполняет отдельно.
Авторы коммитов
История коммитов
- 2026-09-23 17:58Add public blitz sharing, learner profiles, onboarding and free lesson navigationtaarvihmaz
- 2026-09-23 17:30Update BLITZ: personal learning maps, accounts, recall cards and persistent XPtaarvihmaz
- 2026-09-23 15:54Restore educational track with light learning homepagetaarvihmaz
- 2026-09-23 15:48Add light business task prototype and separate learning sectiontaarvihmaz
- 2026-09-23 15:36Add BLITZ educational platform with light UI, lessons and gamificationtaarvihmaz
Структура репозитория (163 файлов)
.env.example .gitignore .npmrc .openai/hosting.json PROJECT_CONTEXT.md README.md TRANSFER.md app/api/auth/route.ts app/api/community/route.ts app/api/learn/route.ts app/blitz-app.tsx app/blitz/[id]/page.tsx app/chatgpt-auth.ts app/globals.css app/layout.tsx app/learn/page.tsx app/page.tsx app/profile/[id]/page.tsx cloudflare-env.d.ts components.json components/blitz/account.tsx components/blitz/cards-panel.tsx components/blitz/clarification-field.tsx components/blitz/community.tsx components/blitz/experience.tsx components/blitz/generation-wait.tsx components/blitz/lesson-theory.tsx components/blitz/library.tsx components/blitz/onboarding.tsx components/blitz/subject-visual.tsx components/blitz/theory-markdown.tsx components/blitz/topic-suggestions.tsx components/ui/accordion.tsx components/ui/alert-dialog.tsx components/ui/alert.tsx components/ui/aspect-ratio.tsx components/ui/attachment.tsx components/ui/avatar.tsx components/ui/badge.tsx components/ui/breadcrumb.tsx components/ui/bubble.tsx components/ui/button-group.tsx components/ui/button.tsx components/ui/calendar.tsx components/ui/card.tsx components/ui/carousel.tsx components/ui/chart.tsx components/ui/checkbox.tsx components/ui/collapsible.tsx components/ui/combobox.tsx components/ui/command.tsx components/ui/context-menu.tsx components/ui/dialog.tsx components/ui/direction.tsx components/ui/drawer.tsx components/ui/dropdown-menu.tsx components/ui/empty.tsx components/ui/field.tsx components/ui/form.tsx components/ui/hover-card.tsx components/ui/input-group.tsx components/ui/input-otp.tsx components/ui/input.tsx components/ui/item.tsx components/ui/kbd.tsx components/ui/label.tsx components/ui/marker.tsx components/ui/menubar.tsx components/ui/message-scroller.tsx components/ui/message.tsx components/ui/native-select.tsx components/ui/navigation-menu.tsx components/ui/pagination.tsx components/ui/popover.tsx components/ui/progress.tsx components/ui/radio-group.tsx components/ui/resizable.tsx components/ui/scroll-area.tsx components/ui/select.tsx components/ui/separator.tsx components/ui/sheet.tsx components/ui/sidebar.tsx components/ui/skeleton.tsx components/ui/slider.tsx components/ui/sonner.tsx components/ui/spinner.tsx components/ui/switch.tsx components/ui/table.tsx components/ui/tabs.tsx components/ui/textarea.tsx components/ui/toggle-group.tsx components/ui/toggle.tsx components/ui/tooltip.tsx data/python.json db/index.ts db/schema.ts drizzle.config.ts drizzle/0000_lethal_masked_marvel.sql drizzle/0001_freezing_imperial_guard.sql drizzle/0002_omniscient_grey_gargoyle.sql drizzle/0003_confused_felicia_hardy.sql drizzle/meta/0000_snapshot.json drizzle/meta/0001_snapshot.json drizzle/meta/0002_snapshot.json drizzle/meta/0003_snapshot.json drizzle/meta/_journal.json eslint.config.mjs examples/d1/app/api/notes/route.ts examples/d1/db/schema.ts hooks/use-mobile.ts lib/assessment-prompt.ts lib/assessment.ts lib/card-service.ts lib/cards-prompt.ts lib/cards.ts lib/check-answer.ts lib/community-snapshot.ts lib/community-types.ts lib/course.ts lib/database.ts lib/experience-store.ts lib/experience.ts lib/identity.ts lib/lesson-visuals.ts lib/openai.ts lib/password.ts lib/request-security.ts lib/server.ts lib/teaching.ts lib/theory-format.ts lib/theory-input.ts lib/theory-prompt.ts lib/theory-sections.ts lib/types.ts lib/utils.ts next.config.ts package-lock.json package.json postcss.config.mjs public/favicon.svg public/file.svg public/globe.svg public/window.svg scripts/build-verified.sh scripts/execution-profile.mjs scripts/install-ci.mjs scripts/install-ci.sh scripts/install-pnpm.sh scripts/pnpm-install.mjs scripts/run-framework.mjs scripts/setup-local.mjs scripts/sites-env.mjs scripts/sites-env.sh scripts/test.mjs tests/accounts.py tests/assessment.tsx tests/experience.tsx tests/openai.test.mjs tests/smoke.py tests/textbook.tsx tests/theory-v3.tsx tsconfig.json vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.