AAYMA
RU
Войти

Däneker

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

Доведённый продукт
Команда «Aliskander» 22💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Aliskander
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт

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

Суть

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

Как устроено

Сервер на чистом Node.js (node:http, без npm-зависимостей) хранит данные в JSON-файле. AI-интервью задаёт 3–5 уточняющих вопросов и генерирует карточку через OpenAI Responses API со Structured Outputs (JSON Schema); публикует её только человек. Рейтинг полноты 0–100 и Match команды с задачей считаются детерминированными движками (CommonJS), общими для браузера и сервера, а LLM даёт только текстовые пояснения. Этапы с распределением 100 баллов, приёмка и возврат на доработку, роли и сессии на scrypt.

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

  • Structured Outputs JSON Schema
  • AI-интервью
  • детерминированный readiness score
  • детерминированный Match профиля и задачи

Особенности

Ноль внешних npm-зависимостей. Одни и те же движки рейтинга и Match работают на сервере и в браузере. Автономный demo.html и повторяемый сценарий защиты case.html без API-ключа.

Стек

Node.js · Vanilla JavaScript · HTML/CSS · node:test

Модели

gpt-4o-mini


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

README

README.md

Däneker — задачи бизнеса и решения студенческих команд

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

О проекте

Бизнес-задачи часто приходят к студентам в виде короткого сообщения без контекста, критериев приёмки, доступных данных и ограничений. Из-за этого команде сложно оценить задачу и понять, какой результат нужен заказчику. В то же время бизнесу неудобно собирать и сравнивать предложения, а затем фиксировать прогресс проекта.

Däneker связывает две аудитории:

  • бизнес — помогает превратить исходное описание в структурированную карточку, опубликовать её, сравнить предложения и принять результаты;
  • студенческие команды — даёт каталог задач, профиль компетенций, объяснимую оценку соответствия и рабочий процесс по этапам.

Текущая версия является локальным MVP и учебной демонстрацией. Репозиторий не содержит подтверждений реального внедрения, реальных бронирований или измеренного бизнес-эффекта.

Что реализовано

Для бизнеса

  • регистрация и вход с ролью бизнеса;
  • создание черновика задачи и автосохранение изменений;
  • AI-интервью из 3–5 уточнений и генерация структурированной карточки через OpenAI;
  • явно обозначенный шаблонный режим уточнений в автономной демонстрации без API-ключа;
  • ручное редактирование и подтверждение карточки перед публикацией;
  • единый рейтинг полноты 0–100 с расшифровкой недостающих сведений;
  • отдельная AI-проверка качества текста, не изменяющая детерминированный рейтинг;
  • настройка 2–3 этапов проекта, критериев приёмки и распределения 100 баллов;
  • просмотр и сравнение откликов, ручной выбор одной, нескольких или ни одной команды;
  • приёмка результатов этапов либо возврат на доработку с комментарием.

Для студенческой команды

  • регистрация и вход с ролью команды;
  • профиль участников: роли, навыки, уровень, доступность, проекты и интересы;
  • каталог опубликованных задач с поиском, фильтрами, сортировкой, пагинацией и закладками;
  • детерминированная оценка соответствия профиля задаче и, при доступном OpenAI, текстовое пояснение;
  • неограниченное число предложений с идеей, планом, сроком и необязательной ссылкой на прототип;
  • снимок профиля и оценки соответствия на момент отклика;
  • согласование плана, последовательная отправка этапов и просмотр обратной связи;
  • добавление проекта в подтверждённый опыт после приёмки всех его этапов.

Безопасность и целостность данных

  • серверная проверка ролей, владельца задачи и назначенной команды;
  • пароли в виде salted scrypt-хешей;
  • сессии в HttpOnly, SameSite=Strict cookie на 12 часов;
  • ограничение попыток входа и запрет изменяющих запросов с другого origin;
  • проверка входного JSON, размера запроса, ссылок и переходов между состояниями проекта.

Как работает решение

Основной пользовательский сценарий выглядит так:

  1. Представитель бизнеса регистрируется и вводит исходное описание проблемы.
  2. AI-интервью задаёт минимум три уточняющих вопроса. После ответов формируется черновик карточки; AI не публикует её автоматически.
  3. Пользователь проверяет и редактирует название, контекст, цель, ожидаемый результат, критерии успеха, данные, ограничения, аудиторию, контакт и формат взаимодействия. Рейтинг полноты пересчитывается общим детерминированным алгоритмом.
  4. Бизнес задаёт этапы и публикует карточку в каталоге.
  5. Команда заполняет профиль, находит задачу через поиск или фильтры, изучает оценку соответствия и отправляет предложение.
  6. Бизнес сравнивает предложения и подтверждает выбор. Для каждой выбранной команды создаётся отдельный набор этапов.
  7. Команда согласует план и по очереди прикладывает описание и ссылку на результат. Бизнес принимает этап или возвращает его на доработку.
  8. Баллы этапа считаются начисленными только после подтверждения бизнеса; следующий этап открывается после приёмки предыдущего.

Технологии

ОбластьИспользуется в проекте
BackendJavaScript, Node.js >=22.9, встроенные модули node:http, node:fs, node:crypto
FrontendHTML5, CSS, Vanilla JavaScript, hash-навигация без frontend-фреймворка
ХранилищеJSON-файл data/db.json с атомарной заменой через временный файл
AIOpenAI Responses API, Structured Outputs с JSON Schema; модель задаётся через OPENAI_MODEL, по умолчанию gpt-4o-mini
АвторизацияСобственная cookie-сессия, scrypt, randomUUID / randomBytes
ТестированиеВстроенный node:test, node:assert, интеграционные HTTP-тесты
ЗависимостиВнешних npm-пакетов нет

OpenAI используется только сервером: ключ не передаётся в браузер. Запросы к модели нужны для интервью, проверки качества карточки и пояснения оценки соответствия. Сам рейтинг полноты и числовой Match рассчитываются локальными детерминированными алгоритмами и не требуют AI.

Архитектура проекта

Браузер (public/)
  ├─ интерфейс каталога, карточек, профиля, откликов и этапов
  ├─ API-клиент основного приложения
  └─ автономный demo.html с локальными учебными данными
                    │ HTTP / JSON
                    ▼
Node.js HTTP-сервер (src/server.js)
  ├─ маршрутизация и раздача статических файлов
  ├─ авторизация и проверка прав (src/auth.js)
  ├─ бизнес-правила и персистентность (src/store.js)
  ├─ рейтинг полноты (src/rating.js + public/readiness-engine.cjs)
  ├─ Match команды и задачи (src/match.js + public/match-engine.cjs)
  └─ AI-адаптер (src/ai.js) ───────────────► OpenAI Responses API
                    │
                    ▼
             data/db.json

Основные каталоги и файлы:

ПутьНазначение
src/server.jsHTTP-сервер, API-маршруты, статические файлы и проверки доступа
src/store.jsоперации с задачами, профилями, откликами, этапами и JSON-хранилищем
src/auth.jsаккаунты, хеширование паролей и сессии
src/ai.jsвалидация AI-ввода/вывода и интеграция с OpenAI
src/rating.js, src/presentation.jsрасчёт и представление полноты карточки
src/match.jsсерверный адаптер алгоритма соответствия
public/интерфейс, стили и переиспользуемые браузерные движки
test/модульные и интеграционные тесты
docs/контракт API и подробности отдельных подсистем

Одни и те же CommonJS-совместимые движки из public/ переиспользуются сервером и браузером, поэтому рейтинг, этапы, каталог и Match следуют одинаковым правилам в интерфейсе и API.

Установка и запуск

Требования

  • Node.js 22.9 или новее;
  • современный браузер;
  • опционально — ключ OpenAI API для живого AI-интервью и AI-подсказок.

Локальный запуск

  1. Клонируйте репозиторий и перейдите в него:

    git clone <URL-РЕПОЗИТОРИЯ>
    cd hack-ba77eedd-aliskander
    
  2. Проверьте версию Node.js:

    node --version
    
  3. Если нужен живой OpenAI, создайте локальный файл настроек:

    cp .env.example .env
    

    Затем заполните OPENAI_API_KEY в .env. При необходимости измените OPENAI_MODEL и PORT. Файл .env исключён из Git. Не добавляйте API-ключ в клиентский код или коммиты.

  4. Запустите приложение:

    npm start
    

    Установка пакетов не требуется: в проекте нет внешних npm-зависимостей.

  5. Откройте http://localhost:3000. Сервер слушает loopback-интерфейс 127.0.0.1; порт по умолчанию — 3000.

При первом запуске data/db.json создаётся автоматически и получает две учебные задачи и три предложения. Можно указать другой путь переменной DATA_FILE. После изменения .env перезапустите сервер.

Полезные страницы

URLНазначение
http://localhost:3000/основное приложение с реальными серверными аккаунтами и данными
http://localhost:3000/demo.htmlавтономная демонстрация с переключением ролей и локальными данными
http://localhost:3000/case.htmlповторяемый сценарий защиты на учебном кейсе
http://localhost:3000/prototype.html?variant=gridучебный прототип записи, вариант «сетка»
http://localhost:3000/prototype.html?variant=listтот же прототип, вариант «список»

Как проверить решение

Быстрый сценарий для жюри

Этот сценарий не требует API-ключа и не изменяет серверное хранилище:

  1. Запустите npm start.
  2. Откройте http://localhost:3000/case.html и ознакомьтесь с учебным кейсом студии «Форма».
  3. Нажмите «Открыть кейс»: откроется отдельная демонстрация полного потока с локальными данными.
  4. Переключайтесь между ролями бизнеса и команды и пройдите цепочку: карточка задачи → предложения → выбор команды → этапы → отправка и приёмка результата.
  5. На странице кейса откройте учебный прототип и проверьте запись на свободный сеанс, недоступность занятого сеанса, отмену и сохранение состояния после обновления страницы. Прототип использует только localStorage и не бронирует реальные услуги.

Проверка основного защищённого потока

  1. Откройте / и зарегистрируйте аккаунт с ролью «Бизнес».
  2. Создайте задачу, ответьте минимум на три уточнения, проверьте карточку и опубликуйте её. Без ключа OpenAI для гарантированного показа интервью используйте /demo.html; основной AI endpoint сообщит, что провайдер не настроен.
  3. Выйдите и зарегистрируйте второй аккаунт с ролью студенческой команды.
  4. Заполните профиль, найдите опубликованную задачу, добавьте её в закладки и отправьте предложение.
  5. Вернитесь в аккаунт бизнеса, выберите предложение.
  6. В аккаунте команды согласуйте этапы и отправьте первый результат с корректной ссылкой http:// или https://.
  7. В аккаунте бизнеса примите этап либо верните его на доработку и убедитесь, что следующий этап нельзя сдать раньше предыдущего.

Автоматические проверки

npm test
npm run lint

Тесты OpenAI используют подменённые ответы и не расходуют API. Проверить настоящий ключ и доступность выбранной модели можно отдельно:

npm run verify:openai

Команда verify:openai требует заполненного .env и выполняет реальный запрос к OpenAI.

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

Локальные данные

  • Основные аккаунты, задачи, профили, закладки, предложения и этапы сохраняются в data/db.json или в файле из DATA_FILE.
  • Каталог при первом запуске получает учебные данные из src/sample-data.js.
  • demo.html работает отдельно от защищённого API и хранит демонстрационное состояние в браузере.
  • Учебный прототип записи хранит записи в localStorage; персональные данные ему не нужны.

Внешние сервисы

Единственная внешняя интеграция в репозитории — OpenAI Responses API (https://api.openai.com/v1/responses). Она опциональна: каталог, аккаунты, публикация, отклики, этапы, рейтинг полноты и числовой Match работают без неё. Репозиторий не содержит интеграций с CRM, мессенджерами, OAuth, платёжными системами или внешними базами данных.

Подробные контракты находятся в документации:

Ограничения текущей версии

  • Сервер и файловое хранилище рассчитаны на один процесс; конкурентный многопроцессный доступ к JSON-файлу не поддерживается.
  • Сессии находятся в памяти: после перезапуска сервера нужно войти снова, хотя аккаунты и проектные данные сохраняются.
  • Нет восстановления пароля, подтверждения email, OAuth и приглашений отдельных участников команды.
  • Нет push/email/мессенджер-уведомлений и интеграций с внешними бизнес-системами.
  • Рейтинг 0–100 оценивает заполненность карточки по фиксированным правилам, а не достоверность или бизнес-ценность текста.
  • Match является рекомендательным: он использует заявленные в профиле сведения, не проверяет владение навыками и не выбирает команду вместо бизнеса.
  • OpenAI-функции требуют серверного OPENAI_API_KEY, доступа в интернет и доступности указанной модели. Ошибка провайдера не подменяется успешным AI-ответом.
  • Старые задачи без владельца сохраняются, но не назначаются новому аккаунту; для управляемого показа следует создать новую задачу или использовать автономное демо.
  • Учебный прототип записи не является production-сервисом и не выполняет реальные бронирования.

Deployed-версия

Ссылка на развёрнутую публичную версию не указана в репозитории. Проект подтверждённо запускается локально по адресу http://localhost:3000.

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

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

k771en 26AliKenzh 15khNurda 12

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

  • 2026-09-23 17:51Merge pull request #17 from BAITC-Hacks/y79yd1-codex/-readme.mdk771en
  • 2026-09-23 17:50docs: expand Russian project READMEk771en
  • 2026-09-23 17:43Merge pull request #16 from BAITC-Hacks/fy4z5j-codex/-danekerk771en
  • 2026-09-23 17:43Rename platform to Dänekerk771en
  • 2026-09-23 17:43Delete ForCodek771en
  • 2026-09-23 17:43Delete Инструкция по кибербезопасности.pdfk771en
  • 2026-09-23 17:42Delete Снимок экрана 2026-09-23 в 13.47.29.pngk771en
  • 2026-09-23 17:30Merge pull request #15 from BAITC-Hacks/fix/readiness-filler-validationk771en
Все коммиты (53)
  • 2026-09-23 17:29Reject readiness filler and explain unearned pointsAliKenzh
  • 2026-09-23 17:22Merge pull request #14 from BAITC-Hacks/feat/edit-published-taskk771en
  • 2026-09-23 17:21Allow owners to edit published tasks before team selectionAliKenzh
  • 2026-09-23 17:20Merge pull request #13 from BAITC-Hacks/codex-zkqcuik771en
  • 2026-09-23 17:20Harden readiness scoring and AI fact groundingk771en
  • 2026-09-23 17:01Merge pull request #12 from BAITC-Hacks/fix/jury-review-flowk771en
  • 2026-09-23 17:01Clarify team profile migration in match documentationAliKenzh
  • 2026-09-23 16:59Align account form and integration documentationAliKenzh
  • 2026-09-23 16:58Merge latest team interview fix and verify demo caseAliKenzh
  • 2026-09-23 16:56Unify readiness and complete accountable team workflowAliKenzh
  • 2026-09-23 16:31Merge pull request #11 from BAITC-Hacks/cz6pzt-codexk771en
  • 2026-09-23 16:30Не отклонять третий ответ AI-интервьюk771en
  • 2026-09-23 16:30Merge pull request #10 from BAITC-Hacks/feature/explore-task-catalogk771en
  • 2026-09-23 16:09Merge remote-tracking branch 'origin/main' into feature/explore-task-catalogAliKenzh
  • 2026-09-23 16:09Add Explore Tasks catalog with filters, saved tasks and paginationAliKenzh
  • 2026-09-23 16:02Add API client integrationkhNurda
  • 2026-09-23 16:00Merge pull request #9 from BAITC-Hacks/codex-4h6erzk771en
  • 2026-09-23 15:59Оценивать готовность задачи с помощью ИИk771en
  • 2026-09-23 15:44Merge pull request #7 from BAITC-Hacks/feature/student-ai-matchk771en
  • 2026-09-23 15:41Подключить ИИ-оценку готовности задачk771en
  • 2026-09-23 15:34Add deterministic student Match scoring and profile comparisonAliKenzh
  • 2026-09-23 15:14Merge pull request #6 from BAITC-Hacks/feature/ai-task-interviewk771en
  • 2026-09-23 15:07Merge latest main and preserve startup sample dataAliKenzh
  • 2026-09-23 15:06Add OpenAI task interview and editable AI task generatorAliKenzh
  • 2026-09-23 15:00Delete HackAlem AI_ кейс по геймификации практических заданий.docxkhNurda
  • 2026-09-23 15:00Merge branch 'main' of github.com:BAITC-Hacks/hack-ba77eedd-aliskanderkhNurda
  • 2026-09-23 14:53Merge pull request #4 from BAITC-Hacks/codexk771en
  • 2026-09-23 14:51Добавить примеры задач и решенийk771en
  • 2026-09-23 14:37Merge pull request #3 from BAITC-Hacks/frontend/requirements-checklistk771en
  • 2026-09-23 14:35Create HackAlem AI_ кейс по геймификации практических заданий.docxkhNurda
  • 2026-09-23 14:34Delete HackAlem AI_ кейс по геймификации практических заданий.docxkhNurda
  • 2026-09-23 14:34Complete task fields, readiness filters and per-proposal decisionsAliKenzh
  • 2026-09-23 14:23Merge pull request #2 from BAITC-Hacks/frontend/most-api-integrationk771en
  • 2026-09-23 14:23Create ~$ckAlem AI_ кейс по геймификации практических заданий.docxkhNurda
  • 2026-09-23 14:23Create HackAlem AI_ кейс по геймификации практических заданий.docxkhNurda
  • 2026-09-23 14:15Integrate Most interface with team API and persistent progressAliKenzh
  • 2026-09-23 14:15Merge remote-tracking branch 'origin/main'AliKenzh
  • 2026-09-23 14:09Add files via uploadNurdaulet362
  • 2026-09-23 14:04Build Most frontend prototype and live editorAliKenzh
  • 2026-09-23 13:54Create ForCodeNurdaulet362
  • 2026-09-23 13:52Merge branch 'main' of https://github.com/BAITC-Hacks/hack-ba77eedd-aliskanderkhNurda
  • 2026-09-23 13:50Merge pull request #1 from BAITC-Hacks/k771en-patch-1k771en
  • 2026-09-23 13:49Add files via uploadk771en
  • 2026-09-23 13:40Update README.mdkhNurda
  • 2026-09-23 12:59Update README.mdkhNurda
Структура репозитория (52 файлов)
.env.example
.gitignore
README.md
docs/ai-match.md
docs/ai-task-generator.md
docs/api-contract.md
docs/frontend-scope.md
docs/jury-review.md
docs/task-catalog.md
package.json
public/ai-components.js
public/ai-flow.js
public/api-client.js
public/app.js
public/auth-ui.js
public/case-data.js
public/case.html
public/catalog-components.js
public/catalog-demo.cjs
public/catalog-engine.cjs
public/catalog-page.js
public/demo-ai.js
public/demo-api.js
public/demo.html
public/draft-autosave.js
public/index.html
public/interview-rules.cjs
public/match-demo.cjs
public/match-engine.cjs
public/match-ui.js
public/milestones.cjs
public/prototype.html
public/readiness-engine.cjs
public/review-editor.js
public/styles.css
public/team-session.js
scripts/check-syntax.mjs
scripts/verify-openai.mjs
src/ai.js
src/auth.js
src/match.js
src/presentation.js
src/rating.js
src/sample-data.js
src/server.js
src/store.js
test/ai.test.js
test/catalog.test.js
test/integration.test.js
test/match.test.js
test/mvp.test.js
test/review.test.js
Ветки (19)

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

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

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