AAYMA
RU
Войти

AI Sana Challenge Hub

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

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

О проекте

Команда: Prompt Raiders
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Веб-приложение, где бизнес описывает задачу, отвечает на уточняющие AI-вопросы и получает карточку задания для студентов; команды откликаются, бизнес принимает или отклоняет предложения.

Как устроено

Описание задачи + отрасль → OpenAI (Responses API со строгими JSON-схемами, gpt-5-mini) генерирует 3–5 уточняющих вопросов → из ответов собирается карточка с проверкой источников сведений → серверный рейтинг готовности (9 критериев, 100 баллов, уровни draft/in_progress/ready/priority; баллы выставляет AI, сумму считает сервер). Без ключа работают локальные шаблоны. Хранение в JSON-файлах, Node.js сервер без npm-зависимостей.

Ключевые решения

  • OpenAI Responses API
  • strict JSON schema
  • clarifying questions generation
  • weighted readiness scoring
  • template fallback

Особенности

Полный цикл двух ролей (бизнес ↔ студенческие команды) с отбором откликов. Прозрачная формула рейтинга карточки: AI ставит баллы по критериям, итог и уровень готовности вычисляет сервер.

Стек

Node.js · JavaScript · HTML · CSS · JSON storage

Модели

gpt-5-mini


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-57ce7a11-prompt-raiders.

README

README.md

AI Sana Challenge Hub

Веб-приложение помогает бизнесу описать задачу, собрать уточнения, подготовить и опубликовать карточку. Студенческие команды могут просматривать опубликованные задачи и отправлять предложения. Бизнес затем рассматривает предложения и меняет их статус.

Приложение состоит из веб-интерфейса, Node.js-сервера, локального JSON-хранилища и необязательной интеграции с OpenAI. Без ключа OpenAI основные сценарии доступны в демонстрационном режиме.

Что умеет программа

Для бизнеса

  • Создать черновик: описать задачу и отрасль, получить уточняющие вопросы и заполнить ответы.
  • Сформировать редактируемую карточку задачи. Система использует исходное описание и ответы, а для AI-карточки проверяет источники сведений.
  • Редактировать карточку, пересчитать предварительную оценку, сохранить черновик, подтвердить версию или опубликовать задачу.
  • Смотреть созданные задачи и отклики команд.
  • Принять отклик, отклонить его или вернуть на рассмотрение.

Для команды

  • Смотреть опубликованные задачи в каталоге и фильтровать их.
  • Открывать подробности задачи.
  • Отправить бизнесу предложение с идеей, планом, сроком и ссылкой на прототип.
  • Проверить статус своего предложения.

Данные и рейтинг

  • Задачи, уточняющие вопросы, команды, предложения и рейтинги хранятся в отдельных JSON-файлах в data/.
  • Интерфейс также сохраняет рабочие данные в localStorage браузера и синхронизирует серверные записи при доступности API.
  • Предварительная оценка в редакторе показывает полноту карточки по правилам интерфейса. Кнопка сохранения рейтинга запрашивает серверную оценку: с настроенным ключом баллы по критериям выставляет AI, итоговую сумму и уровень готовности вычисляет сервер.
  • Если OpenAI не настроен или недоступен, генерация вопросов и карточки переключается на локальные шаблоны, а рейтинг — на оценку заполненности. Ответ содержит режим demo или fallback.

В демо нет регистрации и разграничения доступа: переключение роли меняет интерфейс, но не создаёт отдельный аккаунт. Не размещайте в демонстрационной версии конфиденциальные данные.

Веса серверной формулы дают максимум 100 баллов:

Поле карточкиМаксимум
Контекст10
Потребность10
Данные и материалы20
Ожидаемый результат15
Критерии успеха15
Ограничения10
Пользователи10
Контакт5
Формат взаимодействия5
Всего100

Уровни рейтинга: draft (0–39), in_progress (40–69), ready (70–89), priority (90–100). В интерфейсе они показываются как «Черновик», «Рабочая», «Готовая» и «Приоритетная».

Как запустить

Требуется Node.js версии 20 или новее. Дополнительные npm-пакеты проекту не нужны.

  1. Откройте терминал в папке проекта.

  2. Запустите сервер:

    npm start
    
  3. Откройте в браузере http://localhost:3000.

Не открывайте index.html напрямую: интерфейс обращается к API сервера.

Для автоматического перезапуска сервера при изменении файлов используйте:

npm run dev

Подключить OpenAI

Ключ необязателен. Без него приложение запускается в локальном демо-режиме. Чтобы использовать AI, задайте переменную окружения в том же терминале, где запускаете сервер.

PowerShell:

$env:OPENAI_API_KEY="ваш-ключ"
$env:OPENAI_MODEL="gpt-5-mini"
npm start

macOS или Linux:

OPENAI_API_KEY="ваш-ключ" OPENAI_MODEL="gpt-5-mini" npm start

Можно также задать PORT, чтобы изменить порт сервера. Значение по умолчанию — 3000. Файл .env.example показывает имена переменных, но сервер автоматически не загружает .env.

Основной сценарий

  1. На главной выберите роль бизнеса и откройте кабинет.
  2. Нажмите создание задачи, введите описание и отрасль.
  3. Запросите уточняющие вопросы или выберите стандартные вопросы, если AI недоступен.
  4. Ответьте минимум на три вопроса и сформируйте карточку.
  5. Проверьте и отредактируйте поля, изучите рейтинг и недостающие сведения.
  6. Сохраните черновик, подтвердите карточку или опубликуйте её в каталоге.
  7. В режиме команды откройте задачу, заполните идею, план, предполагаемый срок и ссылку на прототип, затем отправьте предложение.
  8. Вернитесь в кабинет бизнеса и примите решение по предложению.

В кабинете бизнеса доступна кнопка добавления демо-задач. Это тестовые примеры; они не являются реальными предложениями бизнеса.

API сервера

Все запросы и ответы API используют JSON. Ошибки возвращаются объектом с полем error.

Метод и путьНазначение
POST /api/questionsПолучить 3–5 вопросов по описанию и известным полям
GET /api/questions/demoПосмотреть пример входа и локальных вопросов
POST /api/cardsСобрать одну карточку из описания, вопросов и ответов
GET /api/cards/demoПосмотреть пример локальной карточки
GET /api/tasksПолучить список задач
POST /api/tasksСоздать задачу
PATCH /api/tasks/:idИзменить разрешённые поля задачи
GET /api/clarifying-questionsПолучить сохранённые вопросы и ответы
POST /api/clarifying-questionsСохранить вопрос, ответ и связь с задачей
GET /api/teamsПолучить команды
POST /api/teamsСоздать команду
GET /api/proposalsПолучить предложения команд
POST /api/proposalsОтправить предложение по задаче от команды
PATCH /api/proposals/:idИзменить статус предложения и комментарий бизнеса
GET /api/ratingsПолучить сохранённые рейтинги
POST /api/ratings/evaluateРассчитать и сохранить рейтинг задачи по taskId

Пример запроса на уточняющие вопросы

{
  "description": "В магазинах покупатели долго ждут помощи консультанта.",
  "industry": "Розничная торговля",
  "knownFields": {
    "context": "В часы пик свободного консультанта сложно найти."
  },
  "fieldsToCheck": ["context", "need", "users", "data", "constraints"]
}

Пример запроса на серверный рейтинг

{
  "taskId": "идентификатор-задачи"
}

Создание задачи через API требует businessId и title. Уточняющий вопрос должен ссылаться на существующую задачу. Предложение должно ссылаться на существующие задачу и команду.

Примеры создания записей

Создать черновик можно так:

{
  "businessId": "hackathon-demo-business",
  "status": "draft",
  "title": "Сократить время ожидания консультации",
  "topic": "Розничная торговля",
  "originalDescription": "Покупатели долго ждут помощи консультанта.",
  "context": "В часы пик свободного консультанта сложно найти.",
  "need": "Сделать получение консультации быстрее.",
  "users": "Покупатели магазина",
  "data": "Примеры обращений покупателей",
  "constraints": "Демонстрация через веб-браузер",
  "expectedResult": "Рабочий прототип записи на консультацию",
  "successCriteria": "Проверить прототип на пяти покупателях",
  "contact": "[email protected]",
  "interactionFormat": "Еженедельная встреча и ответы в чате"
}

Запрос POST /api/cards принимает description, industry, knownFields, массив questions и минимум три ответа answers. Каждый ответ содержит questionId и answer; questionId должен совпадать с ID одного из переданных вопросов.

Команда создаётся с полями name, interests, skills, technologies, description. Для POST /api/proposals укажите taskId, teamId, idea, plan; срок estimatedTerm, ссылка prototypeUrl и businessComment могут быть пустыми. Статусы предложений: pending, accepted, rejected.

При расчёте рейтинга API возвращает total, level, оценки по критериям в scores, список missingFields, рекомендации recommendations и источник оценки source (ai или local_stub). Сервер сохраняет рейтинг в истории и обновляет score, readinessLevel, missingFields задачи.

Где лежат данные

При первой записи сервер создаёт папку data/ и соответствующий файл:

  • data/tasks.json — карточки задач;
  • data/clarifying-questions.json — уточняющие вопросы и ответы;
  • data/teams.json — команды;
  • data/proposals.json — предложения команд и их статусы;
  • data/ratings.json — история оценок карточек.

Эти JSON-файлы исключены из Git через .gitignore, поэтому локальные данные не попадают в коммиты автоматически. JSON-хранилище предназначено для прототипа и локальной демонстрации, а не для параллельной работы большого числа пользователей.

Основные поля моделей:

  • Задача: id, businessId, status, title, topic, originalDescription, context, need, users, data, constraints, expectedResult, successCriteria, contact, interactionFormat, score, readinessLevel, missingFields, createdAt, updatedAt.
  • Уточняющий вопрос: id, taskId, targetField, question, answer, source, createdAt.
  • Команда: id, name, interests, skills, technologies, description.
  • Предложение: id, taskId, teamId, idea, plan, estimatedTerm, prototypeUrl, status, businessComment, createdAt, updatedAt.
  • Рейтинг: id, taskId, total, level, scores, missingFields, recommendations, source, createdAt.

Структура проекта

  • index.html, styles.css, app.js — основной интерфейс: кабинет бизнеса, мастер задачи, каталог, карточка задачи, кабинет команды и отклики.
  • server.mjs — HTTP-сервер, API и раздача разрешённых файлов интерфейса.
  • src/models.mjs — создание и нормализация моделей задачи, вопроса, команды, предложения и рейтинга.
  • src/database.mjs — чтение и запись JSON-коллекций.
  • src/question-generator.mjs — подготовка входа, шаблонные вопросы и проверка ответа AI.
  • src/card-generator.mjs — подготовка входа, локальная карточка и проверка источников сведений.
  • src/scoring.mjs — веса серверного рейтинга, ограничение баллов, расчёт суммы и уровня готовности.
  • src/openai.mjs — запросы к OpenAI Responses API и строгие JSON-схемы.
  • src/demo-data.mjs — примеры для демонстрационных API-маршрутов.
  • previous-prototype/ — предыдущая версия интерфейса; текущий сервер её не запускает.
  • business_questions.py — отдельный небольшой консольный пример на Python, не используемый веб-приложением.

Проверка проекта

Проверить синтаксис интерфейса и сервера:

npm run check

Запустить автоматические проверки:

npm test
Звёзды
⭐ 0
Форки
0
Язык
JavaScript
Последний push
в прошлом месяце
Коммиты
28
Авторы
3
Файлы
24
Ветки
4

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

aruka161107-source 10unknown 9dinaintech 9

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

  • 2026-09-23 17:45Added README.mdaruka161107-source
  • 2026-09-23 17:35Integrate frontend AI workflows and data storageunknown
  • 2026-09-23 17:11ratingaruka161107-source
  • 2026-09-23 17:10added the accept and cancel buttonsdinaintech
  • 2026-09-23 17:02Fixing bugsdinaintech
  • 2026-09-23 16:54Merge pull request #2 from BAITC-Hacks/feature/ai-questionsAdik205
  • 2026-09-23 16:46Merge database scoring and AI operationsunknown
  • 2026-09-23 16:34Merge pull request #1 from BAITC-Hacks/feature/database-nextaruka16
Все коммиты (28)
  • 2026-09-23 16:31editing the proposal submission and sending pagedinaintech
  • 2026-09-23 16:27Added second AI-functionunknown
  • 2026-09-23 16:17improve the general catalogdinaintech
  • 2026-09-23 16:06scoring.mjsaruka161107-source
  • 2026-09-23 16:01new commitdinaintech
  • 2026-09-23 15:58Fixed AI functionunknown
  • 2026-09-23 15:33databasearuka161107-source
  • 2026-09-23 15:32databasearuka161107-source
  • 2026-09-23 15:32Added create_task pagedinaintech
  • 2026-09-23 15:25Taskunknown
  • 2026-09-23 15:12Testunknown
  • 2026-09-23 15:06models1aruka161107-source
  • 2026-09-23 15:04models1aruka161107-source
  • 2026-09-23 14:58added selecting roledinaintech
  • 2026-09-23 14:41improvementdinaintech
  • 2026-09-23 14:04First attemptaruka161107-source
  • 2026-09-23 14:02First attemptaruka161107-source
  • 2026-09-23 14:01First attemptunknown
  • 2026-09-23 13:59First attemptunknown
  • 2026-09-23 13:58First attemptdinaintech
Структура репозитория (24 файлов)
.env.example
.gitignore
README.md
app.js
business_questions.py
index.html
package.json
previous-prototype/README.md
previous-prototype/app.js
previous-prototype/index.html
previous-prototype/styles.css
server.js
server.mjs
src/card-generator.mjs
src/database.mjs
src/demo-data.mjs
src/generator.mjs
src/models.mjs
src/openai.mjs
src/question-generator.mjs
src/scoring.mjs
styles.css
test/card-generator.test.mjs
test/question-generator.test.mjs
Ветки (4)

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

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

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