Problemly
Веб-сервис, где AI анализирует черновик бизнес-задачи и задаёт уточняющие вопросы, бизнес подтверждает поля и публикует карточку с рейтингом 0–100…
О проекте
Команда: Default Team
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Веб-сервис, где AI анализирует черновик бизнес-задачи и задаёт уточняющие вопросы, бизнес подтверждает поля и публикует карточку с рейтингом 0–100, а студенческие команды откликаются.
Как устроено
Черновик → AI-анализ через OpenRouter (qwen/qwen3-coder-next, structured output) с fallback-вопросами → редактируемая карточка с ручным подтверждением полей → детерминированный рейтинг 0–100 → каталог с фильтрами → отклики и ручные статусы pending/selected/rejected. Node.js API и SQLite, React/Vite за Nginx, Swagger на /api/docs.
Ключевые решения
- structured output
- детерминированный скоринг полей
- fallback-вопросы
- OpenAPI/Swagger
Особенности
Развёрнут на собственных доменах с отдельными health check; acceptance-тест проходит весь сценарий, включая сохранность SQLite после перезапуска.
Стек
React · Vite · Nginx · Node.js · SQLite · Docker Compose
Модели
Qwen3-Coder-Next (qwen/qwen3-coder-next через OpenRouter)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-900988fe-default-team.
README
README.mdProblemly
Problemly помогает бизнесу превратить краткое описание потребности в понятную, проверяемую задачу для студенческих команд. Бизнес отвечает на уточняющие вопросы, вручную подтверждает поля и публикует карточку; команда выбирает задачу из каталога и отправляет отклик. Решение о выборе команды всегда остаётся за бизнесом.
Что реализовано
- AI-анализ черновика через OpenRouter с fallback без внешнего ключа;
- редактируемая карточка с явным подтверждением полей и детерминированным рейтингом 0–100;
- каталог опубликованных задач, фильтры и прямые ссылки на карточки;
- пять тематических demo-задач с рейтингами 30, 50, 80, 90 и 100, а также пять профилей команд;
- отклики команд и ручные статусы
pending,selected,rejected, включая выбор нескольких команд; - Swagger-документация API:
/api/docs.
Технологии
- React, Vite и Nginx — frontend;
- Node.js 22, SQLite и Docker Compose — backend и развёртывание;
- OpenRouter, OpenAI-совместимый Chat Completions API и модель
qwen/qwen3-coder-next— AI-анализ. Если провайдер или ключ недоступны, приложение использует безопасные fallback-вопросы.
Архитектура
frontend/— React/Vite, в production раздаётся Nginx;backend/— Node.js API и SQLite;docker-compose.yaml— единый production-подобный запуск. Frontend доступен на хост-порту5380, backend — на3388.
Проверка сценария
Полный acceptance-сценарий backend покрывает: AI-анализ, сборку и ручное подтверждение карточки, публикацию без минимального порога рейтинга, два отклика, ручной выбор команды и сохранение SQLite после перезапуска. Также проверяются валидация, миграции и Docker health/smoke.
Подробная матрица соответствия требованиям и точные команды проверок находятся в backend/docs/requirements.md.
Запуск на сервере
Требуются Docker Engine и Docker Compose v2. Клонируйте или обновите репозиторий, затем создайте локальные env-файлы — они не попадают в Git:
cp frontend/.env.example frontend/.env
cp backend/.env.example backend/.env
В frontend/.env задайте production API. Корневой Compose передаст этот файл в Vite только на время сборки и не включит его в Docker-образ:
VITE_API_BASE_URL=https://haa-api.defaul7.net
В backend/.env минимум проверьте следующие значения:
PORT=3388
DATABASE_URL=file:/app/data/problemly.db
FRONTEND_ORIGIN=https://haa.defaul7.net
API_BASE_URL=https://haa-api.defaul7.net/api
Для AI-анализатора укажите LLM_API_KEY OpenRouter только при необходимости внешнего провайдера. Используемая модель — qwen/qwen3-coder-next. Без ключа backend использует fallback-вопросы.
Из корня проекта соберите и запустите оба сервиса:
docker compose up -d --build
Проверка статуса и логов:
docker compose ps
docker compose logs -f backend
Остановка:
docker compose down
Данные SQLite сохраняются в Docker volume backend-data. Чтобы удалить их вместе с контейнерами, используйте docker compose down -v.
Домены и reverse proxy
Направьте TLS reverse proxy на тот же сервер:
https://haa.defaul7.net→http://127.0.0.1:5380;https://haa-api.defaul7.net→http://127.0.0.1:3388.
После проксирования frontend должен открываться по https://haa.defaul7.net, а health check API — по https://haa-api.defaul7.net/api/health.
Развёрнутая версия
Problemly развёрнут на сервере в Германии. Production-домены: haa.defaul7.net для интерфейса и haa-api.defaul7.net/api/health для проверки API.
Локальная разработка
Смотрите frontend README и backend README. Для совместного запуска используйте те же команды Compose выше.
Ограничения MVP
- нет регистрации, чата, уведомлений и автоматического назначения команд;
- AI-поля не считаются подтверждёнными без действия пользователя;
- ключ OpenRouter хранится только в локальном
backend/.env; - внешний AI-провайдер может быть недоступен, поэтому fallback-вопросы остаются частью MVP.
Авторы коммитов
История коммитов
- 2026-09-23 17:45docs: finalize api contract integrationSariyev (yasball) Yesbol
- 2026-09-23 17:35docs: update problemly project overviewSariyev (yasball) Yesbol
- 2026-09-23 17:31Merge branch 'main' of github.com:BAITC-Hacks/hack-900988fe-default-teamYesbol (defaul7) Sariyev
- 2026-09-23 17:29feat: enhance scoring logic and recommendations for task fieldsTamerlan
- 2026-09-23 17:10feat(frontend): add themes and team profilesSariyev (yasball) Yesbol
- 2026-09-23 16:58feat: add demo teams and task drafts, enhance task schema and APITamerlan
- 2026-09-23 16:48fix(frontend): match business connection scoringSariyev (yasball) Yesbol
- 2026-09-23 16:42feat: Update scoring logic and validation for business connection fields; remove deprecated businessLinkTamerlan
Все коммиты (33)
- 2026-09-23 16:37Merge branch 'main' of github.com:BAITC-Hacks/hack-900988fe-default-teamYesbol (defaul7) Sariyev
- 2026-09-23 16:37chore: use backend dockerfile in composeSariyev (yasball) Yesbol
- 2026-09-23 16:35chore: add unified problemly compose setupSariyev (yasball) Yesbol
- 2026-09-23 16:24feat: Add request logging with safe metadata and update documentationTamerlan
- 2026-09-23 16:19Merge branch 'main' of github.com:BAITC-Hacks/hack-900988fe-default-teamYesbol (defaul7) Sariyev
- 2026-09-23 16:19chore(frontend): rename app for problemly domainsSariyev (yasball) Yesbol
- 2026-09-23 16:18feat: Add Docker HEALTHCHECK and implement smoke testing for backend APITamerlan
- 2026-09-23 16:14feat(frontend): align scoring and add URL routesSariyev (yasball) Yesbol
- 2026-09-23 16:05feat: Implement conservative field validation and enhance AI output mappingTamerlan
- 2026-09-23 15:58feat: Enhance AI analysis with structured output and improved question generationTamerlan
- 2026-09-23 15:49feat(frontend): add compose deployment on 5380Sariyev (yasball) Yesbol
- 2026-09-23 15:42chore(frontend): ignore local env fileSariyev (yasball) Yesbol
- 2026-09-23 15:11Merge branch 'main' of github.com:BAITC-Hacks/hack-900988fe-default-teamYesbol (defaul7) Sariyev
- 2026-09-23 15:09feat(frontend): add configurable API adapterSariyev (yasball) Yesbol
- 2026-09-23 15:05feat: add API_BASE_URL support for Swagger and update documentation; include tests for OpenAPI configurationTamerlan
- 2026-09-23 14:59feat: enhance AI analysis and validation; add integration tests and improve API error handlingTamerlan
- 2026-09-23 14:50chore(frontend): add Docker image buildSariyev (yasball) Yesbol
- 2026-09-23 14:48feat: add OpenAPI specification and Swagger UI supportTamerlan
- 2026-09-23 14:47feat(frontend): add task catalog and detail pageSariyev (yasball) Yesbol
- 2026-09-23 14:28feat(backend): enhance fallback analysis and validation for confirmed fields; add testsTamerlan
- 2026-09-23 14:20Merge branch 'main' of github.com:BAITC-Hacks/hack-900988fe-default-teamYesbol (defaul7) Sariyev
- 2026-09-23 14:19chore(frontend): ignore local build artifactsSariyev (yasball) Yesbol
- 2026-09-23 14:14feat(frontend): add AI task workflowSariyev (yasball) Yesbol
- 2026-09-23 14:12Implement backend MVP with scoring service, task analysis, and CRUD operations; add tests and documentation updatesTamerlan
- 2026-09-23 13:53Initial DYesbol (defaul7) Sariyev
Структура репозитория (60 файлов)
.gitignore AGENTS.md API_CONTRACT.md HACKATHON_PLAN.md README.md START_PROMPT_NALREMATVONESAH.md START_PROMPT_YASBALL.md backend/.dockerignore backend/.env.example backend/.gitignore backend/Dockerfile backend/README.md backend/dev.db backend/dev.db-shm backend/dev.db-wal backend/docs/requirements.md backend/fixtures/drafts.json backend/package-lock.json backend/package.json backend/scripts/smoke.js backend/src/ai.js backend/src/demo-tasks.js backend/src/demo-teams.js backend/src/llm.js backend/src/openapi.js backend/src/scoring.js backend/src/server.js backend/src/store.js backend/src/task-schema.js backend/test/acceptance.test.js backend/test/ai.test.js backend/test/api.test.js backend/test/llm.test.js backend/test/openapi.test.js backend/test/scoring.test.js backend/test/startup.test.js backend/test/store-migration.test.js docker-compose.yaml docs/progress/nalrematvonesah.md docs/progress/yasball.md frontend/.dockerignore frontend/.env.example frontend/.gitignore frontend/Dockerfile frontend/README.md frontend/compose.yaml frontend/eslint.config.js frontend/index.html frontend/nginx.conf frontend/package-lock.json frontend/package.json frontend/src/App.jsx frontend/src/api/adapter.js frontend/src/api/httpAdapter.js frontend/src/api/httpAdapter.test.js frontend/src/api/mockAdapter.js frontend/src/api/mockAdapter.test.js frontend/src/confirmation.css frontend/src/main.jsx frontend/src/styles.css
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.