AAYMA
RU
Войти

Ясно

Маркетплейс «от потребности к решению»: заказчик по сценарию уточняет и публикует карточку задачи с рейтингом готовности, исполнители находят её в…

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

О проекте

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

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

Суть

Маркетплейс «от потребности к решению»: заказчик по сценарию уточняет и публикует карточку задачи с рейтингом готовности, исполнители находят её в каталоге, присылают решения и переписываются, заказчик выбирает одно.

Как устроено

React + TypeScript + Vite через единый HTTP-адаптер обращается к модульному монолиту на Java 21 / Spring Boot (пользователи, потребности, предложения, чат). Данные в PostgreSQL с миграциями Flyway, авторизация через cookie-сессию и CSRF. Рейтинг готовности на 7 критериев (до 100 баллов) начисляется только за подтверждённые владельцем поля. Уточняющий диалог скриптовый, ИИ пока не подключён. Есть автономный mock-режим фронтенда.

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

  • rule-based readiness rating
  • scripted clarification dialog
  • session auth + CSRF
  • Flyway migrations

Особенности

Единственный в пачке Java/Spring-бэкенд с полноценной регистрацией, профилями исполнителей и перепиской. Правка сведений снимает подтверждение соответствующего критерия рейтинга.

Стек

Java 21 · Spring Boot · PostgreSQL · Flyway · React · TypeScript · Vite · Docker · Playwright · Maven


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

README

README.md

Ясно — от потребности к решению

MVP команды «А да нууууу». React-фронтенд подключён к Java/Spring backend через единый HTTP-адаптер.

Потребитель описывает идею → отвечает на уточняющие вопросы → проверяет и публикует карточку. Исполнитель находит её в каталоге → отправляет решение → обсуждает его с заказчиком. Заказчик выбирает исполнителя; в «Моих предложениях» обновляется статус. В текущем MVP уточняющий диалог работает по сценарию; подключение модели ИИ — следующий этап.

Возможности MVP

  • Регистрация, вход, личный и публичный профиль исполнителя.
  • Создание и дополнение карточки потребности, общий каталог с поиском и фильтрами.
  • Предложения решений, переписка заказчика с исполнителем и выбор одного решения.
  • Рейтинг готовности задачи: семь критериев, до 100 баллов, явное подтверждение владельцем.

Архитектура

Веб-клиент React + TypeScript + Vite обращается к REST API Java 21 / Spring Boot. Бэкенд организован как модульный монолит: пользователи, потребности, предложения и переписка. Данные хранятся в PostgreSQL, миграции применяются Flyway. Авторизация — серверная cookie-сессия с CSRF-защитой. В режиме разработки Vite перенаправляет /api на порт 8080.

КаталогСодержимое
frontend/Интерфейс, HTTP-адаптер и автономный деморежим
backend/Java API, миграции и тесты
scripts/Совместный запуск приложения
demo/Ранний JavaFX-пример, не используется веб-приложением

Полный запуск с backend

Нужны Docker Desktop, Java 21+ и Node.js 22.12+. Сначала запустите Docker Desktop, затем из корня проекта:

./scripts/start-dev.sh

Откройте http://127.0.0.1:5173. Скрипт запускает PostgreSQL на 5433, backend на 8080 и frontend на 5173. Остановка — Ctrl+C; контейнер базы сохраняет данные между запусками.

Если файл backend/.env отсутствует, для локальной базы используется пароль needboard-local-dev. Свой пароль можно задать в backend/.env по примеру backend/.env.example.

На Windows этот скрипт запускается в Git Bash. Альтернатива без Docker — установленный PostgreSQL 18 и два окна PowerShell из корня проекта.

Первое окно — база и бэкенд:

powershell -NoProfile -ExecutionPolicy Bypass -File .\backend\scripts\Start-Dev.ps1

Второе окно — фронтенд с настоящим API:

cd frontend
npm.cmd ci
$env:VITE_API_MODE = 'http'
$env:VITE_API_BASE_URL = '/api'
npm.cmd run dev -- --host 127.0.0.1 --port 5173 --strictPort

Путь к PostgreSQL при необходимости передаётся в Start-Dev.ps1 параметром -PostgresBin. Используйте один способ запуска базы; оба занимают порт 5433.

Рейтинг готовности

КритерийБаллы
Контекст и потребность20
Данные и материалы20
Ожидаемый результат15
Критерии успеха15
Ограничения10
Пользователи10
Связь с бизнесом10

Баллы начисляются за заполненные и подтверждённые владельцем сведения. После изменения сведений подтверждение соответствующего критерия снимается. Уровни: 0–39 — требует уточнения, 40–69 — рабочая, 70–89 — готовая, 90–100 — приоритетная. Низкий рейтинг не скрывает опубликованную задачу и не запрещает отклик. По умолчанию каталог поднимает готовые и приоритетные задачи выше; приоритетные также выделяются визуально.

Сервер возвращает итог и разбивку по критериям. Контракт рейтинга, REST API.

Сценарий демонстрации

  1. Зарегистрировать заказчика, создать потребность и ответить на вопросы.
  2. В редакторе указать ожидаемый результат и критерии успеха, сохранить карточку. Подтвердить заполненные критерии рейтинга и опубликовать задачу.
  3. В другом профиле браузера зарегистрировать исполнителя, найти задачу в каталоге и отправить предложение решения.
  4. Обменяться сообщениями и выбрать предложение со стороны заказчика.

Сборка

cd frontend
npm ci
npm run build
cd ../backend
./mvnw -DskipTests package

В PowerShell используйте npm.cmd и .\mvnw.cmd. Эти команды собирают приложение без запуска тестов. Инструкции проверки с отдельной тестовой базой приведены в backend/README.md.

Только frontend-демо

Нужен Node.js 22.12+ (проверено на Node.js 24).

cd frontend
npm ci
npm run dev

Открыть http://127.0.0.1:5173 и нажать «Открыть демо». Этот режим не требует Docker и Java.

По умолчанию используется mock без сервера. Данные сохраняются в браузере. ИИ и подготовленные демоисполнители отвечают по сценарию; между локальными аккаунтами можно отправлять свои предложения и сообщения. Кнопка «Демо исполнителя» открывает вторую сторону сценария. На опубликованную заявку также добавляются три демонстрационных предложения.

В серверном режиме регистрация автоматически выполняет вход, карточки и предложения хранятся в PostgreSQL, а сообщения передаются через backend. Уточняющий диалог пока использует локальный сценарий вопросов в браузере; итоговая карточка сохраняется на сервере.

Подробности: frontend/README.md, backend/README.md.

Технологии и архитектура описаны в техническом отчёте.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
12
Авторы
2
Файлы
118
Ветки
1

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

erasyl 7Anyar 5

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

  • 2026-09-23 17:47docs: add technical project reporterasyl
  • 2026-09-23 17:36feat: integrate task readiness rating and document MVP deliveryAnyar
  • 2026-09-23 17:19feat: add personal and public provider profileserasyl
  • 2026-09-23 17:01feat: integrate frontend with backend and add dev runerasyl
  • 2026-09-23 16:23Merge remote-tracking branch 'origin/main'erasyl
  • 2026-09-23 16:22feat: complete marketplace frontend flowerasyl
  • 2026-09-23 16:07Merge remote-tracking branch 'origin/main'Anyar
  • 2026-09-23 16:05BACKEND ANU2Anyar
Все коммиты (12)
  • 2026-09-23 16:03BACKEND ANUAnyar
  • 2026-09-23 15:38feat: add Yasno MVP frontenderasyl
  • 2026-09-23 15:36frontenderasyl
  • 2026-09-23 14:36new moduleAnyar
Структура репозитория (118 файлов)
.gitignore
README.md
TECHNICAL_REPORT.md
backend/.env.example
backend/.gitattributes
backend/.gitignore
backend/.mvn/wrapper/maven-wrapper.properties
backend/README.md
backend/TEAM_TASKS.md
backend/compose.yaml
backend/docs/READINESS_RATING.md
backend/docs/api/READINESS.md
backend/docs/api/README.md
backend/mvnw
backend/mvnw.cmd
backend/pom.xml
backend/scripts/Demo-Api.ps1
backend/scripts/Start-Dev.ps1
backend/scripts/Test-Backend.ps1
backend/src/main/java/kz/needboard/NeedboardApplication.java
backend/src/main/java/kz/needboard/chat/ChatController.java
backend/src/main/java/kz/needboard/chat/ChatMessage.java
backend/src/main/java/kz/needboard/chat/ChatMessageRepository.java
backend/src/main/java/kz/needboard/chat/ChatMessageView.java
backend/src/main/java/kz/needboard/chat/ChatService.java
backend/src/main/java/kz/needboard/common/ApiError.java
backend/src/main/java/kz/needboard/common/ApiException.java
backend/src/main/java/kz/needboard/common/ApiExceptionHandler.java
backend/src/main/java/kz/needboard/common/PageResponse.java
backend/src/main/java/kz/needboard/config/PasswordConfig.java
backend/src/main/java/kz/needboard/config/SecurityConfig.java
backend/src/main/java/kz/needboard/identity/AuthController.java
backend/src/main/java/kz/needboard/identity/CurrentUser.java
backend/src/main/java/kz/needboard/identity/ProviderController.java
backend/src/main/java/kz/needboard/identity/ProviderProfileView.java
backend/src/main/java/kz/needboard/identity/UserAccount.java
backend/src/main/java/kz/needboard/identity/UserPrincipal.java
backend/src/main/java/kz/needboard/identity/UserRepository.java
backend/src/main/java/kz/needboard/identity/UserService.java
backend/src/main/java/kz/needboard/identity/UserView.java
backend/src/main/java/kz/needboard/needs/Need.java
backend/src/main/java/kz/needboard/needs/NeedController.java
backend/src/main/java/kz/needboard/needs/NeedRepository.java
backend/src/main/java/kz/needboard/needs/NeedService.java
backend/src/main/java/kz/needboard/needs/NeedStatus.java
backend/src/main/java/kz/needboard/needs/api/NeedCardDraft.java
backend/src/main/java/kz/needboard/needs/api/NeedCardRules.java
backend/src/main/java/kz/needboard/needs/api/NeedView.java
backend/src/main/java/kz/needboard/needs/api/NeedWriteRequest.java
backend/src/main/java/kz/needboard/needs/api/ReadinessConfirmationRequest.java
backend/src/main/java/kz/needboard/needs/api/ReadinessCriterion.java
backend/src/main/java/kz/needboard/needs/api/ReadinessRating.java
backend/src/main/java/kz/needboard/proposals/Proposal.java
backend/src/main/java/kz/needboard/proposals/ProposalController.java
backend/src/main/java/kz/needboard/proposals/ProposalRepository.java
backend/src/main/java/kz/needboard/proposals/ProposalRequest.java
backend/src/main/java/kz/needboard/proposals/ProposalService.java
backend/src/main/java/kz/needboard/proposals/ProposalStatus.java
backend/src/main/java/kz/needboard/proposals/ProposalView.java
backend/src/main/resources/application.yml
backend/src/main/resources/db/migration/V1__core.sql
backend/src/main/resources/db/migration/V2__frontend_compatibility.sql
backend/src/main/resources/db/migration/V3__provider_profiles.sql
backend/src/main/resources/db/migration/V4__need_readiness.sql
backend/src/test/java/kz/needboard/BackendIntegrationTests.java
backend/src/test/java/kz/needboard/ReadinessRatingTests.java
backend/src/test/resources/application-test.yml
demo/.mvn/wrapper/maven-wrapper.jar
demo/.mvn/wrapper/maven-wrapper.properties
demo/demo.iml
demo/mvnw
demo/mvnw.cmd
demo/pom.xml
demo/src/main/java/com/example/demo/HelloApplication.java
demo/src/main/java/com/example/demo/HelloController.java
demo/src/main/java/com/example/demo/Launcher.java
demo/src/main/java/module-info.java
demo/src/main/resources/com/example/demo/hello-view.fxml
frontend/.env.example
frontend/API.md
frontend/README.md
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/playwright.config.ts
frontend/public/favicon.svg
frontend/src/api/http.ts
frontend/src/api/index.ts
frontend/src/api/mock.ts
frontend/src/api/readiness.ts
frontend/src/api/types.ts
frontend/src/components/ChatPanel.tsx
frontend/src/components/NeedPreview.tsx
frontend/src/components/OfferForm.tsx
frontend/src/components/OfferSummary.tsx
frontend/src/components/Readiness.tsx
frontend/src/components/SearchBanner.tsx
frontend/src/components/Shell.tsx
frontend/src/components/ui.tsx
frontend/src/main.tsx
frontend/src/pages/Auth.tsx
frontend/src/pages/Catalog.tsx
frontend/src/pages/Dashboard.tsx
frontend/src/pages/Editor.tsx
frontend/src/pages/Messages.tsx
frontend/src/pages/MyOffers.tsx
frontend/src/pages/Profile.tsx
frontend/src/pages/RequestDetail.tsx
frontend/src/styles/App.module.css
frontend/src/styles/Profile.module.css
frontend/src/styles/global.css
frontend/src/vite-env.d.ts
frontend/tests/http.spec.ts
frontend/tests/journey.spec.ts
frontend/tests/marketplace.spec.ts
frontend/tsconfig.json
frontend/vite.config.ts
scripts/start-dev.sh

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

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

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