AAYMA
RU
Войти

Alem Practice

Платформа, где бизнес с помощью AI-конструктора превращает проблему в карточку задачи для студенческих команд; студенты откликаются, бизнес выбирает…

Рабочий MVP
Команда «RDM code» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

Alem 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 помогает пройти путь от изученного навыка к выполненной задаче и подтверждённому опыту.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
20
Авторы
4
Файлы
114
Ветки
5

Авторы коммитов

Rasuul255 9DiasIsenov06 7Yeskat 2yesqat 2

История коммитов

  • 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
Ветки (5)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.