Бизнесмен Ивентс
Next.js-платформа: заказчик описывает задачу, ИИ задаёт уточняющие вопросы, собирает карточку задания и оценивает её готовность от 0 до 100, затем…
О проекте
Команда: Lanren
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Next.js-платформа: заказчик описывает задачу, ИИ задаёт уточняющие вопросы, собирает карточку задания и оценивает её готовность от 0 до 100, затем карточка публикуется в каталог, где студенческие команды оставляют отклики.
Как устроено
Route handlers /api/clarify, /api/improve и /api/evaluate вызывают OpenAI Responses API (gpt-4.1-mini) со Structured Outputs и схемами Zod. Clarify генерирует до 7 вопросов, improve объединяет описание и ответы в карточку, evaluate определяет полноту по 8 критериям. Итоговый балл сервер считает по фиксированным весам: 0, половина или полный балл за критерий. Задачи и отклики хранятся в Supabase (PostgreSQL, Anonymous Auth, RLS), черновики в localStorage.
Ключевые решения
- Structured Outputs
- Zod
- clarifying questions
- rubric-based readiness scoring
- Row Level Security
Особенности
LLM только оценивает полноту каждого критерия, а итоговый балл готовности считает сервер по фиксированным весам. Так результат остаётся прозрачным.
Стек
TypeScript · Next.js 16 · React 19 · Tailwind CSS 4 · Supabase · PostgreSQL
Модели
OpenAI gpt-4.1-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-465d0595-lanren.
README
README.mdБизнесмен Ивентс Описание проекта Бизнесмен Ивентс — платформа, которая помогает бизнесу превращать короткие идеи мероприятий в понятные задания для студенческих команд. Заказчики часто описывают задачу слишком кратко. Студентам непонятно, что нужно сделать, какие ресурсы доступны, сколько времени займёт работа и как будет оцениваться результат. Наша платформа помогает уточнить эти условия до начала сотрудничества. Решение предназначено для бизнеса, учебных центров и организаторов мероприятий, которым нужна помощь студентов, а также для студенческих команд, желающих получить практический опыт. Проект разработан командой Lanren в рамках хакатона по кейсу МНВО — AI Sana. Что реализовано В приложении можно описать идею мероприятия и получить от искусственного интеллекта до семи уточняющих вопросов. На основе описания и ответов ИИ формирует название и структурированную карточку задачи. Заказчик может вручную отредактировать текст перед публикацией. Система оценивает готовность описания по восьми критериям и показывает результат от 0 до 100 баллов с объяснениями. Черновик автоматически сохраняется в текущем браузере. Кнопка «Новая задача» позволяет очистить редактор и начать подготовку другого мероприятия. Подготовленную карточку можно опубликовать в открытом каталоге. Студенческие команды могут ознакомиться с условиями и отправить отклик, указав название команды, предложение и контакт. Карточки и отклики сохраняются в Supabase. Интерфейс адаптирован для компьютеров и мобильных устройств. Как работает решение Заказчик вводит первоначальную идею мероприятия. Например: «Хотим провести открытый урок по искусственному интеллекту для студентов. Нужна помощь с регистрацией и координацией». ИИ анализирует описание и задаёт вопросы по недостающим условиям: аудитории, срокам, площадке, ресурсам, бюджету, оплате и обязанностям команды. Заказчик отвечает на вопросы. Если какое-то условие пока неизвестно, его можно оставить без ответа. После нажатия «Улучшить описание» ИИ объединяет исходный текст и ответы в карточку. Нерешённые вопросы отмечаются отдельно. Заказчик проверяет карточку, при необходимости исправляет текст и запускает оценку готовности. После публикации задача появляется в каталоге. Команда студентов выбирает интересное мероприятие и отправляет предложение о сотрудничестве. Система не назначает исполнителя автоматически. В целевом сценарии окончательный выбор делает заказчик. Интерфейс выбора команды пока не реализован. Оценка готовности Рейтинг отражает полноту и ясность описания задачи. Цель мероприятия — до 10 баллов. Аудитория и число участников — до 10 баллов. Дата, формат и площадка — до 10 баллов. Бюджет и оплата команды — до 10 баллов. Ресурсы бизнеса — до 10 баллов. Обязанности команды — до 20 баллов. Результат работы — до 10 баллов. Критерии приёмки — до 20 баллов. Если информация отсутствует, начисляется 0 баллов по критерию. Если она частичная — половина максимального значения. Если условия достаточно конкретны — полный балл. ИИ определяет полноту информации, а сервер рассчитывает итог по фиксированным весам. Оценка не гарантирует успешность мероприятия и не подтверждает достоверность сведений заказчика. Технологии Основной язык разработки — TypeScript. Приложение построено на Next.js 16 и React 19. Используется App Router. Интерфейс оформлен с помощью Tailwind CSS 4 и CSS. Серверные обработчики работают на Node.js через Next.js Route Handlers. Для генерации вопросов, подготовки карточек и анализа полноты используется OpenAI Responses API. Модель по умолчанию — gpt-4.1-mini. Её можно изменить через переменную окружения OPENAI_MODEL. Структурированные ответы ИИ обрабатываются с помощью Structured Outputs и Zod. Для хранения данных используется PostgreSQL в Supabase. Пользовательские сессии создаются через Supabase Auth. В демонстрационной версии используется анонимный вход. Доступ к данным ограничивается политиками Row Level Security. Черновики сохраняются в localStorage браузера. Для контроля версий используются Git и GitHub. Архитектура проекта Приложение состоит из интерфейса, серверных AI-обработчиков и базы данных. Главная страница содержит редактор задачи, уточняющие вопросы, карточку, оценку готовности и публикацию. Страница каталога загружает опубликованные задачи из Supabase и позволяет отправлять отклики. Компонент SiteHeader отвечает за навигацию. Компонент ReadinessScore показывает рейтинг и пояснения. Компонент PublishTask сохраняет карточку в базе. Компонент ApplyToTask обрабатывает отклик студенческой команды. Серверный маршрут /api/clarify формирует уточняющие вопросы. Маршрут /api/improve объединяет описание и ответы в карточку. Маршрут /api/evaluate оценивает полноту карточки и рассчитывает баллы. Маршрут /api/db-check проверяет возможность чтения таблицы задач. Запросы к OpenAI выполняются на сервере. Секретный ключ OpenAI не передаётся в браузер. Браузер взаимодействует с Supabase через публичный publishable key и пользовательскую сессию. Ограничения доступа обеспечиваются политиками базы данных. Установка и запуск Для запуска нужны Node.js 24, npm, ключ OpenAI API с доступным балансом и настроенный проект Supabase. Сначала клонируйте репозиторий. Вместо URL_РЕПОЗИТОРИЯ укажите адрес этого проекта на GitHub. git clone URL_РЕПОЗИТОРИЯ Перейдите в папку приложения. cd hack-465d0595-lanren/web Установите зависимости. npm ci В папке web рядом с package.json создайте файл .env.local и добавьте следующие переменные, заменив значения на свои. OPENAI_API_KEY=ваш_ключ_OpenAI OPENAI_MODEL=gpt-4.1-mini NEXT_PUBLIC_SUPABASE_URL=адрес_проекта_Supabase NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=публичный_ключ_Supabase Не добавляйте секретные ключи в GitHub. Для браузерного клиента Supabase используйте publishable key, а не service_role. В Supabase необходимо включить Anonymous Sign-Ins и создать таблицы tasks и applications с соответствующими ограничениями доступа. В подготовленном демонстрационном проекте база настраивалась вручную. Одного создания переменных окружения недостаточно для запуска с новым пустым проектом Supabase. Таблица tasks хранит идентификатор задачи, автора, название, описание, статус, поле рейтинга и дату создания. Таблица applications хранит идентификатор отклика, задачу, автора отклика, название команды, предложение, контакт, статус и дату создания. Для обеих таблиц необходимо включить RLS. Опубликованные задачи доступны для чтения в каталоге. Отклики должны быть доступны только их авторам и владельцам соответствующих задач. Запустите приложение. npm run dev Откройте в браузере http://localhost:3000 Каталог доступен по адресу http://localhost:3000/catalog Если PowerShell блокирует команду npm, используйте npm.cmd, например: npm.cmd run dev После изменения .env.local перезапустите сервер. Для проверки типов выполните: npx tsc --noEmit --incremental false Для проверки ESLint: npm run lint Для production-сборки: npm run build Для запуска собранного приложения: npm run start Как проверить решение Откройте главную страницу. Если восстановился предыдущий черновик, нажмите «Новая задача». Введите следующий пример: Хотим провести открытый урок по искусственному интеллекту для 30 студентов в Астане. Нужна студенческая команда для регистрации гостей и координации мероприятия. Нажмите «Уточнить задачу» и ответьте на вопросы ИИ. Для демонстрации можно использовать следующие вымышленные условия. Мероприятие состоится 10 октября 2026 года с 15:00 до 17:00 в учебном центре «Демо» в Астане. Заказчик предоставляет аудиторию, спикера, проектор, интернет и список участников. Студенческая команда подготавливает порядок регистрации, распределяет роли, встречает гостей и помогает соблюдать расписание. Поиск спикера, продвижение, охрана и бронирование площадки остаются за заказчиком. Бюджет на материалы составляет 20 000 тенге. Оплата всей команды составляет 40 000 тенге в течение трёх рабочих дней после приёмки. План координации необходимо подготовить до 8 октября. Стойка регистрации должна быть готова к 14:30 в день мероприятия. Отчёт с числом участников и замечаниями необходимо передать до 11 октября. Нажмите «Улучшить описание». Проверьте, что введённые условия появились в карточке. Запустите оценку готовности и ознакомьтесь с объяснениями. Балл может различаться между запросами, поскольку интерпретацию текста выполняет ИИ. Опубликуйте задачу и перейдите в каталог. Для проверки роли студентов откройте каталог в другом браузере или отдельном профиле на том же компьютере. Другая вкладка того же профиля обычно использует сессию заказчика. Нажмите «Откликнуться» и заполните форму. Название команды: Campus Team. Предложение: В нашей команде три студента. Подготовим схему регистрации, распределим роли и обеспечим координацию участников по согласованному расписанию. Демонстрационный контакт: [email protected]. Отправьте отклик и проверьте сообщение об успешном сохранении. Участник проекта с доступом к Supabase может показать созданную запись в таблице applications. Данные и интеграции Основной источник данных — описания заказчиков, ответы на уточняющие вопросы и предложения студенческих команд. Внешние каталоги мероприятий и парсинг сайтов не используются. OpenAI получает текст задачи для подготовки вопросов, формирования карточки и оценки полноты. Перед отправкой следует учитывать, что эти сведения обрабатываются внешним сервисом. Supabase хранит опубликованные задачи и отклики. Контакт команды не выводится в публичном каталоге. Черновики сохраняются локально в браузере и не синхронизируются между устройствами. Ограничения Кабинет заказчика для просмотра откликов и выбора команды пока не реализован. Рассчитанный рейтинг показывается в редакторе, но пока не сохраняется при публикации. Поэтому в каталоге у новой карточки может отображаться сообщение об отсутствии рейтинга. Полноценная регистрация и восстановление доступа не реализованы. Анонимная сессия привязана к данным браузера. После перезагрузки повторная публикация того же текста может создать дубликат. Ручные изменения карточки не обновляют уже опубликованную запись. Список нерешённых вопросов автоматически не пересчитывается после ручного редактирования. Каталог загружает до 50 задач. Поиск, фильтры и постраничная навигация пока отсутствуют. Работа ИИ зависит от интернета, доступности OpenAI, баланса и лимитов API. Сгенерированные формулировки требуют проверки заказчиком. Перед открытым запуском необходимо добавить защиту от спама, ограничения частоты AI-запросов и модерацию. Платформа не проводит оплату, не бронирует площадки и не гарантирует выполнение работ. Развёрнутая версия Публичная deployed-версия на момент подготовки README не указана. Демонстрация проводится локально по адресу http://localhost:3000 Этот адрес работает на компьютере с запущенным приложением и не является публичной ссылкой.
Авторы коммитов
История коммитов
- 2026-09-23 17:45Merge branch 'main' of https://github.com/BAITC-Hacks/hack-465d0595-lanrentemirlan-fr
- 2026-09-23 17:45jsontemirlan-fr
- 2026-09-23 17:43README.mdtemirlan-fr
- 2026-09-23 17:40README.mdtemirlan-fr
- 2026-09-23 17:35Добавление кнопки для новой задачиtemirlan-fr
- 2026-09-23 17:32Часть фронтенда дизайнtemirlan-fr
- 2026-09-23 17:21Страница со стороны студентаtemirlan-fr
- 2026-09-23 17:14Соединение базы данныхtemirlan-fr
Все коммиты (12)
- 2026-09-23 17:03Создание базы данных на Супабейсtemirlan-fr
- 2026-09-23 17:03Улучшение ии агента и добавление вопросов, добавление оценкиtemirlan-fr
- 2026-09-23 16:14Добавление OpenAI и улучшение ииtemirlan-fr
- 2026-09-23 15:29Co-authored-by: DaurenTilek <[email скрыт]>temirlan-fr
Структура репозитория (30 файлов)
README.md web/.gitignore web/AGENTS.md web/CLAUDE.md web/README.md web/eslint.config.mjs web/next.config.ts web/package-lock.json web/package.json web/postcss.config.mjs web/public/file.svg web/public/globe.svg web/public/next.svg web/public/vercel.svg web/public/window.svg web/src/app/api/clarify/route.ts web/src/app/api/db-check/route.ts web/src/app/api/evaluate/route.ts web/src/app/api/improve/route.ts web/src/app/catalog/page.tsx web/src/app/favicon.ico web/src/app/globals.css web/src/app/layout.tsx web/src/app/page.tsx web/src/components/ApplyToTask.tsx web/src/components/PublishTask.tsx web/src/components/ReadinessScore.tsx web/src/components/SiteHeader.tsx web/src/lib/supabase.ts web/tsconfig.json
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.