EvoMind
Платформа-каталог, где бизнес превращает расплывчатый бриф в структурированную задачу для студенческих команд: AI задаёт уточняющие вопросы…
О проекте
Команда: EvoMind
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа-каталог, где бизнес превращает расплывчатый бриф в структурированную задачу для студенческих команд: AI задаёт уточняющие вопросы, считается рейтинг готовности 0–100, задача публикуется, команды откликаются, бизнес вручную принимает решения.
Как устроено
Черновик брифа анализируется через OpenAI Chat Completions (или детерминированный fallback), генерируется минимум 3 уточняющих вопроса, затем редактируемая карточка с обязательными полями. Backend на NestJS детерминированно считает рейтинг по 7 взвешенным критериям (контекст, данные, результат, критерии успеха и т.д.) с уровнями draft/workable/ready/priority. Каталог с сортировкой и фильтрами, отклики команд и ручное принятие/отклонение, общие Zod-контракты между фронтом и бэком.
Ключевые решения
- clarifying question generation
- weighted readiness scoring
- deterministic fallback
- Zod shared contracts
Особенности
Геймификация направлена на бизнес, а не на студентов: чем полнее описана задача, тем выше её рейтинг и позиция в каталоге; рейтинг считается без ИИ и прозрачен по критериям.
Стек
TypeScript · NestJS · Next.js · React · Tailwind CSS · Drizzle ORM · SQLite · Zod · TanStack Query · Vitest · pnpm
Модели
gpt-4o-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7e4788ab-evomind.
README
README.mdEvoMind
Problem
Бизнес часто описывает свою задачу для студенческих команд слишком коротко и расплывчато ("нужно понять, почему клиенты уходят") — студентам сложно понять, за что браться, а хорошие задачи теряются среди непонятных.
Solution
EvoMind — платформа-каталог, которая помогает бизнесу превратить черновое описание в полноценную, оценённую задачу, и открыто связывает её со студенческими командами. Ключевая идея: геймификация направлена на бизнес, а не на студентов — чем подробнее описана задача, тем выше её рейтинг готовности (0-100) и заметнее позиция в общем каталоге.
Сквозной сценарий: черновик → AI задаёт минимум 3 уточняющих вопроса → редактируемая карточка → расчёт рейтинга по 7 критериям → публикация в каталог → отклик студенческой команды → бизнес вручную принимает/отклоняет предложение. Автоматического назначения команд нет.
Что реализовано
- Конструктор задачи: свободный ввод, AI/fallback-анализ полноты, минимум 3 уточняющих вопроса, редактируемая карточка, ручное подтверждение перед публикацией.
- Карточка задачи со всеми обязательными полями (название, контекст, потребность, пользователи, данные, ограничения, ожидаемый результат, критерии успеха, контакт, формат взаимодействия).
- Формула рейтинга 0-100 (см. ниже) с расшифровкой по критериям, списком недостающих полей и пересчётом после каждого сохранения.
- Открытый каталог: все опубликованные задачи, сортировка по рейтингу, фильтры по теме и уровню готовности.
- Отклики команд: неограниченное число предложений (идея, план, срок, ссылка на прототип) на задачу.
- Ручной выбор бизнеса: принять/отклонить любое количество предложений; автоматического назначения команды нет.
- AI-функция: анализ брифа и генерация вопросов через OpenAI Chat Completions с безопасным детерминированным fallback при отсутствии/сбое внешнего сервиса.
Формула рейтинга задачи
Рейтинг 0-100 считается на backend (детерминированно, без ИИ) по 7 критериям — балл начисляется только если соответствующее поле заполнено и подтверждено:
| Критерий | Вес | Условие начисления |
|---|---|---|
| Контекст и потребность | 20 | заполнены context и need |
| Данные | 20 | заполнено поле data |
| Ожидаемый результат | 15 | заполнено expectedResult |
| Критерии успеха | 15 | заполнено successCriteria |
| Ограничения | 10 | заполнено constraints |
| Пользователи | 10 | заполнено users |
| Связь с бизнесом | 10 | заполнены contact и interactionFormat |
Уровни готовности: 0-39 — draft (черновик), 40-69 — workable (рабочая),
70-89 — ready (готовая), 90-100 — priority (приоритетная). Низкий
рейтинг не скрывает задачу и не блокирует отклики — он лишь сигнализирует
студентам, насколько задача готова к работе. Рейтинг автоматически
пересчитывается при каждом сохранении карточки.
Правила каталога
GET /api/tasks — возвращает все опубликованные задачи. Поддерживает:
?sort=score_desc|score_asc— сортировка по рейтингу;?readiness=draft|workable|ready|priority— фильтр по уровню готовности;?topic=...— фильтр по теме.
Задачи с низким рейтингом остаются в каталоге (не скрываются), но занимают позицию согласно рейтингу.
Architecture
Монорепозиторий (pnpm workspaces):
apps/api — NestJS REST API (бизнес-логика, рейтинг, AI-адаптер)
apps/web — Next.js фронтенд (весь пользовательский сценарий)
packages/contracts — общие Zod-схемы и TypeScript-типы (единый источник правды
для API-контрактов между backend и frontend)
packages/db — Drizzle ORM схема, миграции, seed-данные, SQLite
Frontend обращается к backend через типобезопасный HTTP-клиент, все запросы
и ответы валидируются общими Zod-схемами из packages/contracts.
Technologies
- Backend: NestJS, TypeScript, Zod (валидация), Drizzle ORM, better-sqlite3
- Frontend: Next.js (App Router), React, TypeScript, Tailwind CSS, React Hook Form + Zod, TanStack Query
- Тесты: Vitest, Supertest (backend), Vitest + Testing Library (frontend)
- Пакетный менеджер: pnpm workspaces
Installation
Требуется Node.js 20+ и pnpm.
pnpm install
pnpm db:migrate
pnpm db:seed
Environment variables
| Переменная | Назначение | Обязательна |
|---|---|---|
PORT | Порт backend API (по умолчанию 3001) | нет |
OPENAI_API_KEY | Ключ OpenAI API для генерации уточняющих вопросов через Chat Completions | нет — без него используется детерминированный fallback |
OPENAI_MODEL | Модель Chat Completions (по умолчанию gpt-4o-mini) | нет |
API_BASE_URL | URL backend API для Next.js proxy (frontend) | нет, по умолчанию http://127.0.0.1:3001 |
Важно: AI-функция полностью опциональна для проверки. Без
OPENAI_API_KEY система автоматически и безопасно использует
детерминированный fallback — генерирует минимум 3 релевантных уточняющих
вопроса без обращения к внешним сервисам. Эксперты могут проверить полный
сценарий без каких-либо личных аккаунтов или API-ключей участников.
Run
Backend и frontend запускаются отдельно (два терминала):
pnpm dev:api # NestJS API на http://localhost:3001
pnpm dev:web # Next.js на http://localhost:3000
Либо production-сборка:
pnpm build
pnpm start:api # backend
pnpm --filter @evomind/web start # frontend
Demo / Test credentials
Аутентификация не требуется (вне рамок MVP по ТЗ). Используются готовые
синтетические данные из seed: 5 задач, 5 команд (team-1...team-5), 5
предложений. Все данные полностью синтетические, контакты используют
зарезервированный домен example.test.
How to verify main scenario
- Открыть http://localhost:3000, ввести короткое описание проблемы на экране "Описание" (например "Хотим понять, почему клиенты уходят").
- Ответить на 3 уточняющих вопроса.
- Проверить/отредактировать карточку, сохранить — увидеть расчитанный рейтинг и его разбивку по критериям.
- Опубликовать задачу — она появится в общем каталоге, с сортировкой и фильтрами по теме/готовности.
- Открыть задачу из каталога → отправить отклик (поле "Команда":
используйте
team-1...team-5— демо-ID из seed). - Перейти на экран решений бизнеса → принять или отклонить предложение вручную.
Тот же сценарий можно проверить напрямую через API — см. примеры запросов
в Swagger UI: http://localhost:3001/api/docs (после pnpm dev:api).
Tests
pnpm test # backend + frontend, все тесты
pnpm typecheck # проверка типов по всему монорепозиторию
pnpm build # production build всех пакетов
Third-party components/models/datasets
- NestJS, Next.js, React, Zod, Drizzle ORM, better-sqlite3, Vitest,
Supertest, Testing Library, TanStack Query, React Hook Form, Tailwind CSS
— все open-source, использованы согласно их лицензиям (см.
package.jsonкаждого пакета). - Внешние датасеты не использованы. Все демонстрационные данные (задачи, команды, предложения) — синтетические, созданы специально для этого проекта в рамках соревновательной части.
- AI-функция опционально использует OpenAI Chat Completions через
OPENAI_API_KEY; без ключа используется собственный детерминированный алгоритм fallback. Ключ участника не требуется для воспроизводимого запуска.
Deployed version
Развёрнутой публичной версии нет — проект запускается локально по
инструкции выше (Installation + Run).
Known limitations
- Регистрация, роли пользователей, реальная аутентификация — вне рамок MVP (явно исключены ТЗ).
- AI-функция по умолчанию работает в режиме fallback; интеграция с внешним LLM опциональна и не обязательна для прохождения сценария.
- Выбор команды в форме отклика — свободный текст с demo-ID (
team-1...team-5), не выпадающий список (нет отдельногоGET /api/teamsэндпоинта — не входит в обязательный функционал ТЗ). - Нет адаптации под мобильные устройства и production-инфраструктуры — явно вне рамок пяти часов по ТЗ.
Авторы коммитов
История коммитов
- 2026-09-23 17:32README: add rating formula, catalog rules, implemented features list per submission checklistRollan
- 2026-09-23 17:25Minor visual cleanup: remove decorative blur decoration for a cleaner minimal lookRollan
- 2026-09-23 17:23Fix mode badge always showing 'Fallback-режим' even when real AI answeredRollan
- 2026-09-23 17:21Polish live demo UX and startup flow (#16)Rollan
- 2026-09-23 16:49Integrate OpenAI Chat Completions (#15)Adil78124
- 2026-09-23 16:48Reject empty task drafts (#14)Adil78124
- 2026-09-23 16:14Write project README: architecture, setup, env vars, verification stepsRollan
- 2026-09-23 16:11Fix demo-breaking bug: proposal form defaulted to non-existent team (#9)Rollan
Все коммиты (15)
- 2026-09-23 16:08Implement domain API for Issue 2 (#8)Adil78124
- 2026-09-23 16:01Frontend: подключить сквозной flow к HTTP API (#7)H1karu08
- 2026-09-23 15:33Build frontend demo flow on contract fixtures (#6)H1karu08
- 2026-09-23 15:25Build backend foundation for Issue 1 (#5)Adil78124
- 2026-09-23 14:51Align agent stack on Next Nest and DrizzleRollan
- 2026-09-23 14:25Define MVP architecture and agent responsibilitiesRollan
- 2026-09-23 14:13Add/update AGENTS.md compliance rulesRollan
Структура репозитория (68 файлов)
.gitignore AGENTS.md README.md TEAM_PLAN.md apps/api/.env.example apps/api/nest-cli.json apps/api/package.json apps/api/src/ai.service.ts apps/api/src/api-exception.filter.ts apps/api/src/app.module.ts apps/api/src/bootstrap.ts apps/api/src/database.service.ts apps/api/src/health.controller.ts apps/api/src/main.ts apps/api/src/proposals.controller.ts apps/api/src/proposals.service.ts apps/api/src/scoring.ts apps/api/src/tasks.controller.ts apps/api/src/tasks.service.ts apps/api/src/zod-validation.pipe.ts apps/api/test/ai.service.spec.ts apps/api/test/api.spec.ts apps/api/test/scoring.spec.ts apps/api/tsconfig.build.json apps/api/tsconfig.json apps/api/vitest.config.ts apps/web/next-env.d.ts apps/web/next.config.ts apps/web/package.json apps/web/postcss.config.mjs apps/web/src/app/globals.css apps/web/src/app/layout.tsx apps/web/src/app/page.tsx apps/web/src/app/providers.tsx apps/web/src/components/demo-flow.test.tsx apps/web/src/components/demo-flow.tsx apps/web/src/components/ui/button.tsx apps/web/src/components/ui/card.tsx apps/web/src/components/ui/input.tsx apps/web/src/components/ui/label.tsx apps/web/src/components/ui/textarea.tsx apps/web/src/lib/api-client.test.ts apps/web/src/lib/api-client.ts apps/web/src/lib/api.ts apps/web/src/lib/fixtures.ts apps/web/src/lib/mock-api.ts apps/web/src/lib/utils.ts apps/web/src/test/setup.ts apps/web/tailwind.config.ts apps/web/tsconfig.json apps/web/vitest.config.ts package.json packages/contracts/package.json packages/contracts/src/index.ts packages/contracts/tsconfig.json packages/db/drizzle.config.ts packages/db/drizzle/0000_backend_foundation.sql packages/db/drizzle/meta/_journal.json packages/db/package.json packages/db/src/client.ts packages/db/src/index.ts packages/db/src/migrate.ts packages/db/src/schema.ts packages/db/src/seed.ts packages/db/tsconfig.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.base.json
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.