AAYMA
RU
Войти

AI Sana — каталог практических бизнес-задач

Next.js MVP: бизнес описывает задачу, получает уточняющие AI-вопросы, редактирует карточку с живым рейтингом и публикует её в каталог; студенты…

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

О проекте

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

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

Суть

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

Как устроено

POST /api/clarify отправляет описание в OpenAI Responses (gpt-4.1-mini) и получает по JSON Schema ≥3 вопроса и предложенные поля карточки, при ошибке — демо-fallback, лимит 12 запросов/10 мин на IP. Рейтинг считается одной формулой на клиенте и сервере (7 критериев, 0–100), фразы вроде «нет данных» не засчитываются. Задачи, команды и отклики хранятся в SQLite через better-sqlite3.

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

  • structured output по JSON Schema
  • формула рейтинга готовности
  • rate limiting
  • rule-based fallback

Стек

Next.js · React · TypeScript · SQLite (better-sqlite3) · Playwright

Модели

gpt-4.1-mini


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

README

README.md

AI Sana — каталог практических бизнес-задач

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

Что работает

  • Черновик задачи, уточняющие вопросы и редактируемая карточка с подтверждением публикации; ИИ помогает разобрать описание и предложить поля карточки.
  • Предпросмотр рейтинга и подсказок при редактировании; сохранённую карточку можно изменить после публикации.
  • Общий каталог с сортировкой по рейтингу и фильтрами по отрасли и уровню готовности.
  • Форма отклика, статус предложения, экран бизнес-решений; бизнес вручную выбирает или отклоняет отклики.
  • Пять синтетических описаний для демонстрации, пять карточек задач, пять профилей команд и пять примеров откликов.
  • Обмен бизнес-данными через SQLite на сервере. Старые записи из localStorage автоматически переносятся при открытии приложения.

Стек и хранение

  • Next.js App Router, React и TypeScript.
  • SQLite через better-sqlite3. Бизнес-данные и таблицы авторизации находятся в data/ai-sana.db; файл создаётся автоматически и исключён из Git.
  • Браузер получает задачи, команды и отклики через API. Браузеры, обращающиеся к одному серверу с постоянным диском, видят общие данные.
  • Для MVP используется один Node.js-сервер с постоянным локальным диском. Эфемерная файловая система serverless-хостинга и несколько независимых инстансов не подходят для такого SQLite-хранилища без отдельной общей базы.

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

Требуется Node.js 20.9 или новее.

npm ci

Скопируйте .env.example в .env.local. В PowerShell:

Copy-Item .env.example .env.local

Для настоящего AI-уточнения добавьте OPENAI_API_KEY только в .env.local. Если ключ не задан или API недоступен, используются демонстрационные вопросы. Не отправляйте реальные персональные или конфиденциальные данные в AI.

npm run dev

Откройте http://localhost:3000. Перед показом на другом устройстве запустите приложение на сервере, доступном обоим устройствам; localhost на телефоне указывает на сам телефон, а не на компьютер.

Проверочный сценарий для demo

  1. На странице «Создать задачу» выберите короткий синтетический пример из списка и нажмите «Найти, чего не хватает».
  2. Просмотрите не менее трёх вопросов, ответьте на них и перейдите к карточке.
  3. Меняйте, например, поле «Данные и материалы»: рейтинг и подсказки должны меняться сразу. Формулировки «пока не предоставлены» и «нет данных» не получают баллы за доступные данные.
  4. Подтвердите публикацию, откройте карточку в каталоге и проверьте рейтинг. Измените её через раздел «Отклики» → «Изменить карточку» и убедитесь, что сохранённый рейтинг и позиция обновились.
  5. Откройте каталог в другом браузере или на другом устройстве, отправьте отклик и обновите экран откликов бизнеса. Выберите или отклоните предложение вручную.

Для быстрого показа можно использовать опубликованные синтетические задачи и отклики; конструктор предоставляет пять отдельных синтетических черновых описаний.

Формула рейтинга

Баллы начисляются за заполненные поля: контекст и потребность — 20 (по 10 за каждое поле), данные и материалы — 20, ожидаемый результат — 15, критерии успеха — 15, ограничения — 10, пользователи — 10, связь с бизнесом — 10 (по 5 за контакт и формат взаимодействия).

  • 0–39 — черновик.
  • 40–69 — рабочая.
  • 70–89 — готовая.
  • 90–100 — приоритетная.

Расчёт одинаков на клиенте и сервере, сервер пересчитывает баллы при создании и редактировании карточки. Явные ответы о недоступности сведений, например «нет данных», «не предоставлены», «пока не определили», считаются незаполненными. Это простая проверка известных формулировок, а не полноценная оценка смысла текста; перед публикацией карточку проверяет человек.

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

POST /api/clarify использует серверный OPENAI_API_KEY, Responses API и по умолчанию модель gpt-4.1-mini. Приложение передаёт исходное описание задачи внешнему API OpenAI и просит вернуть три или более вопросов и предложенные поля карточки по JSON Schema. Ответ валидируется; при ошибке, недоступном API или некорректном JSON возвращается демонстрационный fallback. API-ключ не передаётся в браузер и не должен попадать в GitHub. Маршрут ограничен 12 запросами за 10 минут на клиентский IP.

Доступ и ограничения MVP

  • Для короткого demo вход не требуется, отдельного разделения ролей бизнеса и студентов нет. API карточек и решений доступен клиентам приложения; это не система с производственными правами доступа.
  • Основной поток предназначен для синтетических или разрешённых к публикации данных. Не загружайте секреты, персональные и конфиденциальные сведения.
  • Ограничение частоты запросов — базовая защита для демонстрации, а не защита от целенаправленного злоупотребления.
  • Авторизация и подтверждение контакта существуют отдельно, но не обязательны для demo-сценария и не связывают карточки с владельцем.
  • Текущие карточки и отклики в одном серверном SQLite доступны всем клиентам этой демонстрации; для публичной эксплуатации потребуются роли, проверка владения, общая управляемая база данных, резервное копирование и защита от злоупотреблений.
  • Успешная отправка отклика не назначает команду автоматически; бизнес может выбрать несколько предложений, отклонить их или оставить без решения.

Основные маршруты

  • /business/new — конструктор задачи.
  • /business/tasks/{taskId}/edit — повторное редактирование опубликованной карточки.
  • /catalog — общий каталог.
  • /catalog/{taskId}/respond — отправка предложения.
  • /business/tasks/{taskId}/responses — решения по откликам.
  • src/features/tasks/scoring.ts — общая формула рейтинга.
  • src/lib/app-db.ts — SQLite-хранилище бизнес-данных.
Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
35
Авторы
3
Файлы
53
Ветки
5

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

BekmuratY 22Myrza 7Seeuagaen 6

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

  • 2026-09-23 17:57Final projectSeeuagaen
  • 2026-09-23 17:28Prepare MVP for submission with live readiness scoring and API limitsBekmuratY
  • 2026-09-23 17:13docs: expand README for catalog MVPMyrza
  • 2026-09-23 16:46merge: sync latest main into team responsesBekmuratY
  • 2026-09-23 16:46Merge remote-tracking branch 'origin/main' into codex/architecture-mvpMyrza
  • 2026-09-23 16:43style: improve text contrast and task stepsSeeuagaen
  • 2026-09-23 16:43merge: sync MVP demo stabilizationBekmuratY
  • 2026-09-23 16:38merge: stabilize MVP demo flowBekmuratY
Все коммиты (35)
  • 2026-09-23 16:33chore: finalize HackAlem MVPBekmuratY
  • 2026-09-23 16:32feat: stabilize MVP demo flowBekmuratY
  • 2026-09-23 15:58fix: polish catalog filters and scoringMyrza
  • 2026-09-23 15:37merge: integrate participant one particle interfaceBekmuratY
  • 2026-09-23 15:35feat: add particle theme and mobile layoutSeeuagaen
  • 2026-09-23 15:29merge: integrate latest catalog and business dashboardBekmuratY
  • 2026-09-23 15:27merge: integrate catalog improvementsBekmuratY
  • 2026-09-23 15:27merge: integrate interface animationsBekmuratY
  • 2026-09-23 15:22feat: add business responses dashboardBekmuratY
  • 2026-09-23 15:14fix: harden authentication and protected actionsBekmuratY
  • 2026-09-23 15:11Improve catalog scoring and scope stylesMyrza
  • 2026-09-23 15:09feat: add cohesive interface animationsSeeuagaen
  • 2026-09-23 14:55Merge main into codex/architecture-mvpMyrza
  • 2026-09-23 14:50merge: integrate complete HackAlem MVPBekmuratY
  • 2026-09-23 14:48fix: restore desktop styles after mergeBekmuratY
  • 2026-09-23 14:48merge: preserve all MVP flows with latest UIBekmuratY
  • 2026-09-23 14:46feat: polish AI Sana landing and business flowSeeuagaen
  • 2026-09-23 14:41Merge remote-tracking branch 'origin/feature/rating-catalog' into codex/architecture-mvpMyrza
  • 2026-09-23 14:39feat: add database-backed password authBekmuratY
  • 2026-09-23 14:35feat: add email and phone auth entryBekmuratY
  • 2026-09-23 14:28feat: connect task catalog with proposalsBekmuratY
  • 2026-09-23 14:28merge: integrate business task flowBekmuratY
  • 2026-09-23 14:27merge: integrate catalog and readiness scoringBekmuratY
  • 2026-09-23 14:27feat: add proposals and business decisionsBekmuratY
  • 2026-09-23 14:24feat: implement business task clarification flowSeeuagaen
  • 2026-09-23 14:24Implement readiness scoring and task catalogMyrza
  • 2026-09-23 13:56Scaffold HackAlem MVP project structureBekmuratY
Структура репозитория (53 файлов)
.env.example
.gitignore
AGENTS.md
CLAUDE.md
README.md
docs/DEMO.md
next.config.ts
package-lock.json
package.json
playwright.config.ts
src/app/api/auth/request/route.ts
src/app/api/auth/verify/route.ts
src/app/api/clarify/route.ts
src/app/api/proposals/[proposalId]/route.ts
src/app/api/proposals/route.ts
src/app/api/tasks/[taskId]/route.ts
src/app/api/tasks/route.ts
src/app/api/teams/route.ts
src/app/auth/page.tsx
src/app/business/layout.tsx
src/app/business/new/page.tsx
src/app/business/responses/page.tsx
src/app/business/tasks/[taskId]/edit/page.tsx
src/app/business/tasks/[taskId]/responses/page.tsx
src/app/catalog/[taskId]/layout.tsx
src/app/catalog/[taskId]/respond/page.tsx
src/app/catalog/[taskId]/responses/[proposalId]/page.tsx
src/app/catalog/catalog.module.css
src/app/catalog/catalog.tsx
src/app/catalog/page.tsx
src/app/globals.css
src/app/layout.tsx
src/app/page.tsx
src/components/ParticleBackground.tsx
src/features/demo/DemoDataInitializer.tsx
src/features/proposals/BusinessResponsesDashboard.tsx
src/features/proposals/ProposalForm.tsx
src/features/proposals/ProposalStatus.tsx
src/features/proposals/ResponseManager.tsx
src/features/proposals/types.ts
src/features/tasks/TaskEditor.tsx
src/features/tasks/TaskFieldsEditor.tsx
src/features/tasks/TaskReadinessPreview.tsx
src/features/tasks/scoring.ts
src/features/tasks/types.ts
src/lib/app-db.ts
src/lib/auth-db.ts
src/lib/demo-data.ts
src/lib/storage.ts
src/lib/use-shared-collection.ts
src/types/particles-js.d.ts
tests/submission.spec.ts
tsconfig.json
Ветки (5)

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

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

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