AI Sana MVP
MVP Challenge Hub на Node.js: бизнес вводит черновик задачи, локальный помощник задаёт уточняющие вопросы, из ответов собирается карточка с…
О проекте
Команда: kooper
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
MVP Challenge Hub на Node.js: бизнес вводит черновик задачи, локальный помощник задаёт уточняющие вопросы, из ответов собирается карточка с рейтингом готовности, команды откликаются, бизнес выбирает команду и подтверждает этапы.
Как устроено
Черновик → analyzeDraft (локальная заглушка по PROMPT) выдаёт 3–6 вопросов по недостающим критериям, parseAIResponse валидирует JSON и при ошибке переключается на local-fallback → редактируемая карточка подтверждается → рейтинг 20+20+15+15+10+10+10 → публикация в каталоге. assistant.mjs подбирает задачи по навыкам, есть отклики, сравнение предложений, этапы с баллами и защита от повторного начисления. Данные в SQLite.
Ключевые решения
- rule-based анализ полноты
- взвешенный рейтинг готовности
- валидатор AI-ответа с fallback
- поиск по навыкам
Особенности
Контракт AI-адаптера (вход, выход, валидатор, fallback) описан и покрыт тестами, так что локальную заглушку можно заменить на реальный LLM; приложение без внешних зависимостей, есть сценарий демо на 5 минут.
Стек
Node.js · SQLite · JavaScript · HTML/CSS
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-90090faf-kooper.
README
README.mdAI Sana — MVP каталога задач
Демо для кейса HackAlem AI: сервис превращает короткое описание бизнес-задачи в понятный бриф, показывает рейтинг готовности и публикует задачу в каталоге команд.
Как запустить
Нужен Node.js 24 или новее. Внешние зависимости не нужны. Откройте терминал в папке репозитория:
npm start
Откройте локальный сайт. Для проверки выполните npm test. В Windows также можно запустить start-site.cmd.
Открывать index.html двойным щелчком или через Python http.server больше не нужно: сайт использует API и SQLite. Данные сохраняются в data/sana.sqlite (исключён из Git). PORT и SANA_DB позволяют задать порт и отдельную базу.
Что реализовано
- ввод черновика бизнес-задачи;
- локальные контекстные уточняющие вопросы и ввод ответов;
- рейтинг готовности и рекомендации;
- каталог задач;
- настоящая публикация задач и сохранение откликов на сервере;
- кабинет бизнеса с выбором команды-исполнителя.
- рабочая навигация между экранами;
- понятная форма с живым рейтингом готовности;
- встроенный AI-помощник с подсказками;
- подбор задач по профессии и навыкам прямо в AI-чате;
- регистрация по телефону или электронной почте и личный профиль;
- сохранение профилей, задач, откликов и этапов в SQLite;
- поиск и фильтры по каталогу;
- полноценные отклики: отправка, редактирование, отзыв и статусы;
- сравнение предложений и ручной выбор одной, нескольких или ни одной команды;
- подтверждение бизнесом фактического результата этапа перед начислением баллов;
- серверная проверка владельца, валидация и защита от повторного начисления;
- автоматические тесты сквозного API-сценария с разными аккаунтами и перезапуском сервера.
Соответствие требованиям кейса
- Бизнес вводит короткий черновик задачи.
- Локальный помощник определяет пробелы и задаёт контекстные вопросы; для продолжения обязательны минимум три ответа.
- Из ответов собирается редактируемая карточка, которую бизнес подтверждает отдельным действием.
- Рейтинг начисляется только после подтверждения полей. Веса: контекст 20, материалы 20, результат 15, критерии успеха 15, ограничения 10, пользователи 10, связь с бизнесом 10.
- Подтверждённая карточка публикуется в каталоге и занимает место по рейтингу.
- Специалист или команда находит задачу через каталог либо AI-рекомендации и отправляет предложение.
- Бизнес сравнивает предложения и может выбрать одну, несколько или ни одной команды.
- После выбора фиксируются этапы фактического прогресса и начисляются баллы за каждый подтверждённый результат.
Демонстрация до 5 минут
Откройте «Демо для жюри · бизнес и 5 команд». Это отдельные синтетические аккаунты; настоящие данные туда вводить не нужно. Действия в них сохраняются. Обычная регистрация и профили тоже работают.
- 0:00–1:30. Выберите «Демо-бизнес». В «Мои задачи» продолжите черновик, ответьте минимум на три вопроса, соберите редактируемую карточку, подтвердите и опубликуйте её. Покажите семь слагаемых рейтинга и опубликованную карточку в активных заданиях.
- 1:30–2:15. В каталоге покажите сортировку, поиск и уровни готовности. Низкий рейтинг не скрывает карточку и не блокирует отклик. Через «Дополнить задачу» добавьте сведения: старый рейтинг остаётся до подтверждения; затем карточка пересчитывается без потери откликов.
- 2:15–3:00. Переключитесь на kooper. В помощнике напишите «найди мне работу, я специалист IT». Откройте проект и отправьте идею, план, срок и ссылку.
- 3:00–4:00. Вернитесь в «Демо-бизнес» → «Мои задачи». Сравните предложения и вручную подтвердите одну, несколько или ни одной команды. Для быстрого сравнения уже есть пять предложений к задаче «Помощник службы поддержки студентов».
- 4:00–5:00. Выбранной командой отправьте результат первого этапа. До проверки баллов нет. Бизнесом примите этап: в профиле команды появится 20 баллов. Обновите страницу и покажите сохранённый результат.
Рейтинг и данные
Баллы начисляются за заполненные и подтверждённые поля: 20 + 20 + 15 + 15 + 10 + 10 + 10 = 100. Для связи с бизнесом нужны одновременно контакт, формат консультаций и порядок обратной связи. Заглушки вроде «неизвестно» не считаются заполнением. Критерий успеха должен содержать проверяемое условие; в MVP это локальная текстовая эвристика, а не доказательство содержательной корректности.
Уровни: 0–39 — черновик, 40–69 — рабочая, 70–89 — готовая, 90–100 — приоритетная. Общий каталог доступен при любом рейтинге; рекомендации включают только открытые задачи от 40 баллов. Черновик готовности — опубликованная карточка низкого качества; личный неопубликованный черновик виден только автору.
При первом запуске seed.mjs загружает fixtures/synthetic.json: 5 черновиков, 5 опубликованных карточек, 5 профилей команд и 5 предложений. Есть все четыре уровня (100, 75, 55, 30 и 0 баллов). Загрузка идемпотентна: перезапуск не дублирует примеры и не сбрасывает результаты. Старые пользовательские записи сохраняются. Переменная SANA_DEMO=0 отключает демо-вход и начальную загрузку примеров; существующие данные не удаляются.
AI-функция и контракт
Работает разрешённая кейсом локальная заглушка, без внешнего LLM и API-ключа. server.mjs вызывает analyzeDraft из ai.mjs. Полный промпт находится в экспортируемой константе PROMPT: анализировать только переданный черновик, задавать 3–6 вопросов по пропущенным критериям, не придумывать факты и не выбирать исполнителя.
Вход для адаптера:
{
"draft": {"problem": "Студенты долго ждут ответы поддержки", "category": "Образование"},
"missingCriteria": [{"key": "goal", "label": "Критерии успеха", "points": 15}]
}
Фрагмент формата выхода (в полном ответе 3–6 уникальных вопросов):
{"questions":[{"key":"goal","label":"Какой измеримый результат покажет, что проблема решена?","hint":"Например: сократить время ожидания с 20 до 5 минут."}]}
parseAIResponse проверяет JSON, число вопросов, допустимые и уникальные ключи, типы и длину текста. При ошибке генератора или неверном ответе analyzeDraft возвращает локальные вопросы с mode: "local-fallback" и понятным уведомлением. Входные поля не изменяются; ответы и карточку подтверждает человек. Тесты проверяют некорректный JSON, пустые/неверные/повторные вопросы и сохранность входа.
assistant.mjs использует актуальный каталог: ищет проекты по профессиональным навыкам, сообщает об отсутствии совпадений, открывает нужные разделы и объясняет рейтинг. Персональные чувствительные признаки для подбора не используются. Помощник не назначает команды, не публикует карточки и не выдаёт проекты за гарантированные вакансии.
Ограничения и следующий этап
Это локальный хакатонный прототип команды kooper. SMS/почтовое подтверждение и восстановление пароля не подключены. Вход работает по почте/телефону и паролю. Подбор и уточнения работают локально по правилам, внешний LLM не используется. Система не придумывает ответы за бизнес и не назначает исполнителей.
Не производственная система: нет внешних уведомлений, файлового хранилища и сложной ролевой модели. SQLite и сервер по умолчанию работают только на локальном компьютере. Перед публичным размещением нужны отдельная оценка безопасности, HTTPS и отключение демо-входа. Синтетические ссылки иллюстрируют формат и не доказывают реальную работу команды; результаты проверяет бизнес.
Организационные правила участия (личное присутствие, бейдж, перерывы и личный вклад каждого участника) невозможно проверить или обеспечить кодом сайта. В правилах зачёта участия нет требования коммитить каждый час. История Git должна отражать реальную работу, не подменять личный вклад.
Структура
- index.html, style.css, app.js — интерфейс.
- server.mjs — HTTP API, SQLite, аккаунты и права доступа.
- core.mjs — рейтинг, вопросы, рекомендации и этапы.
- ai.mjs — подключённые анализ полноты, промпт, валидатор и восстановление при ошибке.
- assistant.mjs — помощник по актуальным задачам и навыкам.
- seed.mjs — безопасная начальная загрузка демонстрационных данных.
- fixtures/synthetic.json — синтетические черновики, карточки, команды и предложения.
- tests/workflow.test.mjs — тесты рейтинга, синтетических данных, прав, публикации, дополнений, откликов, этапов и перезапуска.
- tests/search-assistant.test.mjs — тесты поиска, четырёх уровней, помощника и AI-контракта.
- QA-REPORT.md — результаты трёх кругов проверки сайта и кода.
Авторы коммитов
История коммитов
- 2026-09-23 17:25Complete hackathon workflow, demo data and confirmed readiness updatesrashamma872-droid
- 2026-09-23 16:41Fix task publication visibility, live assistant and catalog searchrashamma872-droid
- 2026-09-23 16:25Implement persistent eight-step workflow, readiness scoring and testsrashamma872-droid
- 2026-09-23 15:21Redesign AI Sana interface and add interactive flowsrashamma872-droid
- 2026-09-23 14:46Update AI Sana MVP with team selectionrashamma872-droid
- 2026-09-23 14:10Add files via uploadrashamma872-droid
- 2026-09-23 14:01Add files via uploadrashamma872-droid
Структура репозитория (17 файлов)
.gitignore QA-REPORT.md README.md ai-sana-mvp.zip ai.mjs app.js assistant.mjs core.mjs fixtures/synthetic.json index.html package.json seed.mjs server.mjs start-site.cmd style.css tests/search-assistant.test.mjs tests/workflow.test.mjs
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.