Alem Practice
Платформа, где бизнес с помощью AI-конструктора превращает проблему в карточку задачи для студенческих команд; студенты откликаются, бизнес выбирает…
О проекте
Команда: RDM code
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа, где бизнес с помощью AI-конструктора превращает проблему в карточку задачи для студенческих команд; студенты откликаются, бизнес выбирает команду и подтверждает этап с начислением баллов.
Как устроено
Бизнес описывает проблему → AI-помощник задаёт уточняющие вопросы и предлагает поля карточки → владелец подтверждает и публикует. Рейтинг 0–100 по весам подтверждённых полей (данные 20, результат 15, критерии 15 и т.д.) с уровнями Черновик/Рабочая/Готовая/Приоритетная. Каталог с фильтрами, отклики, этап «Первый прототип» и 50 баллов. По умолчанию демо-режим без ключей, есть серверные адаптеры OpenAI/совместимого API.
Ключевые решения
- взвешенный рейтинг полноты карточки
- scrypt-хеширование паролей
- HttpOnly-сессии
- Zod-валидация
- fallback на демо-режим
Особенности
Проработанная модель рейтинга, где баллы дают только подтверждённые поля, а ответы вроде «не знаю» не засчитываются; 5 учебных датасетов (продажи кафе, магазина, кампус) для примеров задач; LAN-режим показа с телефона.
Стек
Next.js · React · TypeScript · Prisma · SQLite · Zod · Radix · Lucide
Модели
OpenAI (адаптер)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-8e42af59-rdm-code.
README
README.mdAlem Practice
Знания — в дело. Идеи — в проекты.
Alem Practice — платформа, на которой студенты учатся через практические задачи бизнеса. Компания описывает проблему, команда предлагает решение, выполняет работу и получает подтверждённый результат для портфолио.
Проект команды RDM code для HackAlem, трек «Образование».
Запуск и настройки · Сценарий презентации · Публикация сайта · Проверки
Какую проблему решает продукт
Студентам нужны понятные задачи, чтобы применить знания и получить опыт. Бизнесу бывает трудно превратить пожелание «хотим что-то улучшить» в задание: объяснить проблему, подготовить данные и определить, какой результат нужен.
Alem Practice соединяет эти две стороны. Бизнес оформляет задачу с помощью конструктора и AI-подсказок, а студент видит, чему научится, что нужно знать заранее и какой проект сможет добавить в портфолио.
Где здесь образование
В каждой задаче есть учебная часть: навыки, необходимые знания, сложность и результат для портфолио. Студент проходит путь от анализа проблемы до работающего решения, а заказчик проверяет результат по описанным критериям. Геймификация поддерживает этот процесс: платформа показывает прогресс и начисляет баллы за подтверждённый этап.
Простой пример: кафе хочет лучше планировать закупки. Студенты берут учебную таблицу продаж, анализируют спрос и создают прототип рекомендаций. Они практикуются в очистке данных, прогнозировании и проверке гипотез. Заказчик проверяет результат, после чего у команды появляются подтверждённый этап, баллы и материал для портфолио.
Как всё работает
flowchart LR
A[Бизнес описывает проблему] --> B[Уточнение и карточка задачи]
B --> C[Подтверждение и публикация]
C --> D[Студент отправляет отклик]
D --> E[Бизнес выбирает команду]
E --> F[Команда отправляет результат]
F --> G[Бизнес подтверждает этап]
G --> H[Опыт для портфолио и 50 баллов]
1. Регистрация и профиль
Пользователь выбирает роль — студент или бизнес, указывает имя, логин и пароль. Телефон и SMS не нужны.
- Логин: 3–24 символа, латинские буквы, цифры и
_; начинается с буквы. Регистр букв не важен. - Пароль: 12–128 символов с повторным вводом при регистрации.
- В профиле можно указать город, место обучения, описание, навыки, интересы, портфолио и название команды или организации.
- Публикацию личного профиля в сообществе включает сам пользователь.
Без регистрации можно смотреть опубликованные задачи и публичные профили. Чтобы создавать задачи, отправлять отклики и сохранять свои данные, нужен аккаунт.
2. Бизнес создаёт задачу
В конструкторе бизнес описывает свою проблему. AI-помощник предлагает уточняющие вопросы и помогает подготовить карточку. Владелец проверяет и редактирует содержание, подтверждает сведения и публикует задачу.
Карточка содержит контекст, потребность, данные, ожидаемый результат, критерии успеха, ограничения, целевых пользователей, контакт и формат взаимодействия. Отдельно указываются учебные навыки и результат для портфолио.
Черновик виден владельцу. После изменения опубликованной карточки её нужно заново подтвердить и опубликовать.
3. Студент выбирает практику
В каталоге доступны поиск по задаче, компании или навыку, фильтры направления и готовности. Есть пять исходных направлений: анализ данных, веб-разработка, поиск и UX, бизнес-аналитика, образовательные технологии.
Диаграмма показывает распределение опубликованных задач по направлениям. Нажатие на сегмент включает соответствующий фильтр. Счётчики рассчитываются по данным сайта.
4. Команда отправляет отклик
В отклике студент описывает идею решения, план, срок и ссылку на прототип, при необходимости добавляет предположения. Бизнес просматривает предложения в своём кабинете и вручную выбирает команды. Для одной задачи можно выбрать несколько команд.
Одинаковый повторный отклик не создаёт дубликат. Рабочие отклики видят отправившая их команда и владелец задачи; публично доступны только учебные примеры откликов.
5. Результат подтверждается
После выбора команды появляется этап «Первый прототип». Команда отправляет описание результата и ссылку на работу. Бизнес проверяет их и подтверждает этап.
За подтверждённый этап команда получает 50 баллов практики один раз. Повторное подтверждение не увеличивает награду. В разделе «Моя практика» отображаются отклики, выбранные проекты, отправленные результаты и подтверждённые этапы.
Что означают рейтинг и баллы
Рейтинг задачи от 0 до 100 показывает полноту подтверждённого описания. Вес полей:
- Контекст — 10; потребность — 10.
- Данные и материалы — 20.
- Ожидаемый результат — 15; критерии успеха — 15.
- Ограничения — 10; целевые пользователи — 10.
- Контакт — 5; формат взаимодействия — 5.
Поле приносит баллы после заполнения и подтверждения. Пустые значения и ответы вроде «не знаю» баллов не дают. Уровни: 0–39 — «Черновик», 40–69 — «Рабочая», 70–89 — «Готовая», 90–100 — «Приоритетная».
Этот показатель оценивает полноту сведений, а не качество будущего решения или престиж компании. Статус публикации учитывается отдельно: даже задача с уровнем «Черновик» может быть опубликована, если потребность заполнена и подтверждена. Низкий рейтинг не запрещает откликаться.
Баллы команды начисляются за подтверждённую практику. Это отдельный показатель, который не меняет рейтинг задачи.
Что делает AI
AI помогает структурировать исходное описание, задавать уточняющие вопросы и предлагать содержание карточки. Решение о публикации задачи, выборе команды и подтверждении результата принимает человек.
По умолчанию используется демонстрационный режим: он работает без ключей и платных запросов. В backend также подготовлены серверные адаптеры OpenAI и совместимого API. Если внешний сервис недоступен или ответ не проходит проверку, приложение возвращает явно отмеченный демонстрационный результат.
Инструкция подключения и ограничения описаны в техническом README. Ключи хранятся только на сервере в .env или окружении хостинга.
Интерфейс и визуализации
В дизайне используются тёмно-синий фон навигации, фиолетовые акценты, зелёные кнопки и цветные направления задач. Главный экран содержит объёмную образовательную иллюстрацию; карточки реагируют на указатель, переходы и элементы плавно анимируются.
Диаграмма направлений помогает выбирать задачи, круговой индикатор объясняет готовность карточки, а кабинет показывает прогресс практики. Интерфейс адаптирован к мобильной ширине. Эффекты можно отключить; системная настройка сокращения движения также учитывается.
Технологии и хранение данных
- Frontend: React, TypeScript, Next.js App Router.
- Backend: серверные API-маршруты Next.js; отдельный backend-сервис для запуска не требуется.
- База данных: SQLite; доступ и миграции через Prisma.
- Проверка данных: Zod.
- UI: CSS/SVG, Radix Dialog и Lucide. Объёмные эффекты сделаны без тяжёлого WebGL-движка.
Браузер отправляет запросы серверу. Сервер определяет пользователя по сессии, проверяет права, выполняет действие и сохраняет данные в базе. Профили и проекты сохраняются между перезапусками, пока сохраняется файл базы.
Пароли хранятся в виде хешей scrypt с индивидуальной солью. Сессии используют HttpOnly/SameSite cookies; при HTTPS включается Secure. Есть ограничения попыток входа и проверка разрешённых адресов запросов. Каждое устройство получает собственную сессию на семь дней. В профиле можно завершить все сессии.
Быстрый запуск
Нужны Git, Node.js 22.14+ и npm. Команды ниже — для PowerShell на Windows. Если репозиторий уже скачан, перейдите в его папку alem-practice и пропустите клонирование.
git clone https://github.com/BAITC-Hacks/hack-8e42af59-rdm-code.git
cd hack-8e42af59-rdm-code/alem-practice
npm ci
Copy-Item .env.example .env
npm run setup
npm run dev
Откройте http://127.0.0.1:3000. Для закрытого репозитория потребуется доступ вашего GitHub-аккаунта.
npm run setup генерирует Prisma Client, применяет миграции и добавляет учебные примеры. .env копируется при первой настройке; существующий файл при обновлении заменять не нужно. По умолчанию база находится в alem-practice/prisma/dev.db.
Для последующих запусков достаточно npm run dev. Для выступления с готовой сборкой:
npm run build
npm start
Вход с другого устройства в общей сети
npm run build
npm run start:lan
Команда покажет IP-адреса компьютера. Подключите телефон или второй компьютер к той же сети и откройте подходящий адрес, например http://192.168.1.25:3000. Используйте адрес из своего терминала. Затем войдите с тем же логином и паролем — профиль и проекты будут общими.
На телефоне localhost означает сам телефон. Чтобы обратиться к компьютеру с сервером, нужен его IP. Компьютер должен оставаться включённым, а сервер — запущенным. Гостевой Wi-Fi может запрещать связь между устройствами; подробности есть в инструкции запуска.
Если порт 3000 занят:
$env:PORT='3002'
npm run start:lan
Для доступа через интернет нужен опубликованный сервер с HTTPS и постоянным диском для базы. GitHub хранит код, но сам по себе не запускает этот сайт. Порядок размещения описан в DEPLOYMENT.md.
Учебные задачи и датасеты
Начальное наполнение: 25 задач, 5 организаций, 5 команд и 5 откликов. Все исходные организации, команды и данные вымышлены и обозначены как учебные. Новые пользователи создают собственные профили и задачи; число записей после этого может увеличиваться.
Пять стартовых наборов данных:
- Продажи кафе — для анализа спроса и планирования закупок.
- Продажи магазина — для анализа ассортимента и экономики товаров.
- Данные кампуса — для визуализации потребления энергии и поиска аномалий.
- Онлайн-курсы — для изучения прохождения и оттока студентов.
- Библиотека — для поиска книг, анализа интересов и учебных сервисов.
Файлы и их описание находятся в public/datasets. Они синтетические и предназначены для обучения и демонстрации.
Структура репозитория
README.md ← описание продукта
alem-practice/ ← приложение; команды npm выполняются здесь
app/ ← страницы и API-маршруты
components/ ← формы, карточки, кабинеты, визуализации
lib/ ← авторизация, права, AI и бизнес-правила
prisma/ ← схема, миграции и наполнение базы
data/ ← исходные учебные кейсы
public/datasets/ ← скачиваемые CSV и JSON
scripts/ ← запуск в сети и проверки
tests/ ← автоматические тесты
docs/BACKEND_CONTRACT.md ← контракт API
README.md ← подробные настройки
DEMO.md ← сценарий выступления
DEPLOYMENT.md ← инструкция публикации
VERIFICATION.md ← результаты проверки
Проверка проекта
В папке alem-practice:
npm run typecheck
npm run lint
npm test
npm run build
npm run test:http
npm run test:auth-http
На момент последней проверки прошли 20 автоматических тестов, сборка и оба HTTP-сценария. Проверяются вход и независимые сессии, права доступа, работа с задачами и откликами, однократное начисление награды и сохранение после перезапуска. Тесты используют временные базы; AI проверяется с подменой ответов без платных запросов. Подробности — в VERIFICATION.md.
Границы текущего MVP
Реализованы полный путь от регистрации до подтверждения этапа, личные профили, каталог, отклики и прогресс. При этом:
- Восстановление и смена пароля через интерфейс пока не подключены.
- Профилем команды управляет один аккаунт; приглашений и совместного редактирования ещё нет.
- В текущем процессе у выбранного отклика один этап — «Первый прототип».
- Учебные данные не подтверждают качество решения на реальном бизнесе; это проверяется отдельно.
- Публичный хостинг не развёрнут. SQLite рассчитана на текущую схему с одним сервером и постоянным диском.
Как показать продукт за 3–4 минуты
Начните с каталога и учебных навыков в задаче. Покажите новый профиль, затем из аккаунта бизнеса создайте и опубликуйте задачу. Из аккаунта студента отправьте отклик; бизнес выберет команду и подтвердит присланный результат. Завершите показ обновившимся прогрессом и начислением 50 баллов.
Для демонстрации двух ролей используйте разные браузеры или устройства. Пошаговый сценарий — в DEMO.md.
Alem Practice помогает пройти путь от изученного навыка к выполненной задаче и подтверждённому опыту.
Авторы коммитов
История коммитов
- 2026-09-23 17:46docs: explain Alem Practice product, learning workflow and setupRasuul255
- 2026-09-23 17:41Merge pull request #4 from BAITC-Hacks/codex/password-login-uiRasuul255
- 2026-09-23 17:39Add password accounts, learning visualizations and LAN presentation modeRasuul255
- 2026-09-23 17:31Delete Frontend directoryDiasIsenov06
- 2026-09-23 16:28Polish student sign-in wordingRasuul255
- 2026-09-23 16:26Add phone-code accounts, private profiles, educational cases and 3D UIRasuul255
- 2026-09-23 17:16Merge pull request #3 from BAITC-Hacks/fix/yesqat-backend-aiYeskat
- 2026-09-23 17:12Add OpenAI adapter and transactional backend reliabilityyesqat
Все коммиты (20)
- 2026-09-23 16:44Merge pull request #2 from BAITC-Hacks/codex/alem-practice-accounts-and-designRasuul255
- 2026-09-23 15:50feat: add frontend projectDiasIsenov06
- 2026-09-23 15:43feat: update FrontendDiasIsenov06
- 2026-09-23 15:39Add alem-practice projectRasuul255
- 2026-09-23 15:39Update team planRasuul255
- 2026-09-23 15:07Merge pull request #1 from BAITC-Hacks/test/yesqat-connectionYeskat
- 2026-09-23 15:05Test Yesqat GitHub accessyesqat
- 2026-09-23 15:04feat: update frontendDiasIsenov06
- 2026-09-23 14:42Create team planRasuul255
- 2026-09-23 14:38Create Testing fileDiasIsenov06
- 2026-09-23 10:41Delete TestDiasIsenov06
- 2026-09-23 10:38Create TestDiasIsenov06
Структура репозитория (114 файлов)
README.md Testing file alem-practice/.env.example alem-practice/.gitignore alem-practice/AGENTS.md alem-practice/CLAUDE.md alem-practice/DEMO.md alem-practice/DEPLOYMENT.md alem-practice/README.md alem-practice/VERIFICATION.md alem-practice/app/api/action/route.ts alem-practice/app/api/ai/route.ts alem-practice/app/api/auth/credentials/route.ts alem-practice/app/api/auth/login/route.ts alem-practice/app/api/auth/logout-all/route.ts alem-practice/app/api/auth/logout/route.ts alem-practice/app/api/auth/register/route.ts alem-practice/app/api/data/route.ts alem-practice/app/api/drafts/route.ts alem-practice/app/api/profile/route.ts alem-practice/app/business/edit/[id]/page.tsx alem-practice/app/business/new/page.tsx alem-practice/app/business/page.tsx alem-practice/app/catalog/page.tsx alem-practice/app/community/page.tsx alem-practice/app/demo/prototypes/[id]/page.tsx alem-practice/app/experience.css alem-practice/app/flows.css alem-practice/app/globals.css alem-practice/app/guide/page.tsx alem-practice/app/layout.tsx alem-practice/app/not-found.tsx alem-practice/app/page.tsx alem-practice/app/polish.css alem-practice/app/profile/page.tsx alem-practice/app/studio.css alem-practice/app/tasks/[id]/page.tsx alem-practice/app/team/page.tsx alem-practice/components.json alem-practice/components/account-security.tsx alem-practice/components/auth-dialog.tsx alem-practice/components/cabinets.tsx alem-practice/components/catalog.tsx alem-practice/components/effects-toggle.tsx alem-practice/components/learning-visuals.tsx alem-practice/components/practice-hero.tsx alem-practice/components/profiles.tsx alem-practice/components/provider.tsx alem-practice/components/score-panel.tsx alem-practice/components/shell.tsx alem-practice/components/task-builder.tsx alem-practice/components/task-detail.tsx alem-practice/components/tilt-card.tsx alem-practice/components/ui/button.tsx alem-practice/components/ui/dialog.tsx alem-practice/data/businesses.json alem-practice/data/demo-flow.json alem-practice/data/drafts.json alem-practice/data/extra-tasks.json alem-practice/data/proposals.json alem-practice/data/seed.json alem-practice/data/tasks.json alem-practice/data/teams.json alem-practice/docs/BACKEND_CONTRACT.md alem-practice/eslint.config.mjs alem-practice/lib/actions.ts alem-practice/lib/ai/config.ts alem-practice/lib/ai/index.ts alem-practice/lib/ai/prompts.ts alem-practice/lib/auth-response.ts alem-practice/lib/auth.ts alem-practice/lib/data.ts alem-practice/lib/db.ts alem-practice/lib/domain.ts alem-practice/lib/drafts.ts alem-practice/lib/http.ts alem-practice/lib/profile.ts alem-practice/lib/transaction.ts alem-practice/lib/utils.ts alem-practice/next-env.d.ts alem-practice/next.config.ts alem-practice/package-lock.json alem-practice/package.json alem-practice/postcss.config.mjs alem-practice/prisma/migrations/20260923093400_init/migration.sql alem-practice/prisma/migrations/20260923140000_accounts/migration.sql alem-practice/prisma/migrations/20260923150000_password_accounts/migration.sql alem-practice/prisma/migrations/20260923170000_backend_reliability/migration.sql alem-practice/prisma/migrations/migration_lock.toml alem-practice/prisma/schema.prisma alem-practice/prisma/seed.ts alem-practice/public/datasets/README.md alem-practice/public/datasets/cafe-sales.csv alem-practice/public/datasets/campus.csv alem-practice/public/datasets/courses.json alem-practice/public/datasets/library.json alem-practice/public/datasets/shop-sales.csv alem-practice/public/favicon.svg alem-practice/scripts/check-ai.ts alem-practice/scripts/generate-datasets.mjs alem-practice/scripts/prepare-db.mjs alem-practice/scripts/serve-lan.mjs alem-practice/scripts/smoke-http.mjs alem-practice/scripts/test-auth-http.mjs alem-practice/scripts/test-http.mjs alem-practice/scripts/test.mjs alem-practice/tests/ai.test.ts alem-practice/tests/auth.test.ts alem-practice/tests/domain.test.ts alem-practice/tests/workflow.test.ts alem-practice/tsconfig.json connection-test-yesqat.txt frontend plans team plan
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.