AAYMA
RU
Войти

Точка Сборки

Веб-платформа на Go: бизнес вводит черновик проблемы и получает определение отрасли и три уточняющих вопроса, собирает карточку задачи с рейтингом…

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

О проекте

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

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

Суть

Веб-платформа на Go: бизнес вводит черновик проблемы и получает определение отрасли и три уточняющих вопроса, собирает карточку задачи с рейтингом готовности и публикует её. Студенческие команды находят задачи по навыкам и отправляют отклики, бизнес их принимает или отклоняет.

Как устроено

POST /api/ai/analyze-draft обращается к OpenAI gpt-4o-mini (JSON-ответ, таймаут 4 с) либо к локальному эвристическому анализатору по ключевым словам. Рейтинг готовности считается по семи полям с весами 20/20/15/15/10/10/10 и уровнями DRAFT, IN_PROGRESS, READY, PRIORITY. Задачи подбираются командам по пересечению навыков и фокуса. Данные хранятся в SQLite, при первом запуске загружаются демо-записи.

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

  • OpenAI Chat Completions с JSON-ответом
  • эвристический fallback-анализатор
  • балльный рейтинг готовности карточки
  • подбор задач по навыкам команды

Особенности

Прозрачная балльная рубрика готовности задачи показывает, какие поля не заполнены. Полный цикл «бизнес → каталог → отклик → решение» собран на чистом Go без фреймворков. В репозиторий закоммичены .exe и app.db.

Стек

Go · net/http · SQLite (modernc.org/sqlite) · HTML · Vanilla JS · Tailwind CSS (CDN)

Модели

gpt-4o-mini (OpenAI)


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

README

README.md

Точка Сборки

Точка Сборки — веб-платформа, которая помогает компаниям превратить краткое описание бизнес-проблемы в понятную задачу для студенческого хакатона. Бизнес уточняет вводные и публикует карточку, студенческие команды находят задачи и отправляют предложения, а представитель бизнеса рассматривает отклики.

Что реализовано

  • Анализ черновика задачи: определение отрасли и генерация трёх уточняющих вопросов.
  • Два режима анализа: OpenAI gpt-4o-mini при наличии OPENAI_API_KEY и локальная эвристика без ключа.
  • Редактор карточки задачи с расчётом рейтинга готовности по семи полям.
  • Публикация карточек задач, просмотр каталога, поиск по теме и фильтр по уровню готовности.
  • Подбор задач для выбранной команды по навыкам из её профиля и фокусу; интерфейс показывает основания совпадения и не назначает задачу автоматически.
  • Просмотр тестовых студенческих команд и отправка предложения по задаче со ссылкой на прототип.
  • Кабинет бизнеса со списком откликов и действиями «Принять» и «Отклонить».
  • SQLite-хранилище. При первом запуске в пустую базу добавляются пять демонстрационных задач, пять команд и пять откликов.

Пользовательский сценарий

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

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

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

Уровни: DRAFT (0–39), IN_PROGRESS (40–69), READY (70–89), PRIORITY (90–100). Итоговый балл не заменяет оценку команды жюри и сам по себе не блокирует отправку отклика.

Технологии и интеграции

  • Go (версия модуля указана в go.mod) и стандартная библиотека net/http, database/sql, encoding/json.
  • SQLite через драйвер modernc.org/sqlite; файл базы данных — app.db в рабочей директории приложения.
  • HTML, Vanilla JavaScript и Tailwind CSS через CDN для одностраничного интерфейса в static/index.html.
  • OpenAI Chat Completions API, модель gpt-4o-mini, формат ответа JSON. Интеграция включается переменной окружения OPENAI_API_KEY.
  • Без API-ключа отрасль и вопросы формирует локальный эвристический анализатор. Внешние наборы данных не подключены; демонстрационные записи хранятся в локальной SQLite-базе.

Архитектура

Браузер (static/index.html)
        │ HTTP / JSON
        ▼
Go HTTP-сервер (main.go, internal/handler)
        ├── internal/rating — расчёт рейтинга
        ├── internal/ai — OpenAI или эвристический анализатор
        ├── internal/domain — структуры задач, команд и откликов
        └── internal/store — интерфейсы хранилища и SQLite-реализация
                    │
                    ▼
             SQLite (app.db)

main.go открывает базу, применяет схему, добавляет начальные данные при необходимости, собирает хранилище и анализатор, затем запускает HTTP-сервер на :8080. Роутер связывает API с обработчиками и раздаёт папку static по корневому пути.

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

Метод и путьНазначение
POST /api/ai/analyze-draftАнализ JSON {"draft_text":"..."} и возврат отрасли с вопросами
POST /api/tasks/calculateРасчёт рейтинга карточки без сохранения
GET /api/tasks?topic=...&level=...Каталог задач с необязательными фильтрами
POST /api/tasksСоздание и публикация задачи
GET /api/teamsСписок команд
POST /api/proposalsСоздание отклика со статусом PENDING
GET /api/tasks/{id}/proposalsОтклики по задаче
POST /api/proposals/{id}/decisionОбновление статуса на ACCEPTED или REJECTED

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

Требуется Go версии, поддерживающей директиву из go.mod (сейчас — Go 1.25.3), и доступ в интернет для загрузки Go-модулей. Для оформления страницы браузер загружает Tailwind CSS с CDN.

Из корня репозитория выполните:

go mod download
go run .

Откройте http://localhost:8080. База app.db и таблицы создаются при запуске. Начальные данные добавляются только когда таблица задач пуста.

Для использования OpenAI задайте ключ до запуска. В PowerShell:

$env:OPENAI_API_KEY = "ваш-api-ключ"
go run .

В Bash:

export OPENAI_API_KEY="ваш-api-ключ"
go run .

Без ключа анализ черновика работает локально. При установленном ключе сервер обращается к OpenAI с таймаутом 4 секунды и автоматически переключается на эвристический анализатор при сетевой ошибке, таймауте или некорректном ответе.

Как проверить

Через интерфейс

  1. Запустите сервер и откройте http://localhost:8080.
  2. В кабинете бизнеса введите краткий черновик, например: «Хотим сократить время доставки заказов и уменьшить расходы на маршруты».
  3. Нажмите «Анализировать через AI». При отсутствии ключа появятся вопросы эвристического анализатора.
  4. Ответьте на вопросы, соберите карточку, заполните поля и проверьте, что рейтинг и список недостающих данных меняются при вводе.
  5. Опубликуйте задачу, переключитесь в каталог студента, выберите команду и отправьте предложение.
  6. Вернитесь в кабинет бизнеса, обновите список откликов и примите или отклоните предложение.

В начальных данных уже есть отклики к задачам task-3, task-4 и task-5, поэтому работу бизнес-кабинета можно проверить без предварительной отправки предложения.

Через API

Пример расчёта рейтинга (Bash, curl):

curl -X POST http://localhost:8080/api/tasks/calculate \
  -H "Content-Type: application/json" \
  -d '{"context_and_need":"Компания тратит много времени на ручную обработку обращений клиентов.","data_and_materials":"CSV-файл с историей обращений за год","expected_result":"Интерактивный прототип панели обработки обращений","success_criteria":"Сократить среднее время обработки не менее чем на 20%","constraints":"Прототип должен работать локально","target_users":"Операторы поддержки","contact_and_feedback":"[email protected]"}'

Пример получения тестовых откликов:

curl http://localhost:8080/api/tasks/task-3/proposals

Чтобы принять один из них, используя ID из ответа:

curl -X POST http://localhost:8080/api/proposals/prop-1/decision \
  -H "Content-Type: application/json" \
  -d '{"status":"ACCEPTED"}'

Ограничения текущей версии

  • Авторизация, пользовательские аккаунты и разграничение ролей не реализованы. API задач, команд и откликов доступен без входа.
  • Команды являются демонстрационными записями: регистрация и редактирование команд через интерфейс не предусмотрены.
  • SQLite хранится локально в одном файле; для многопользовательской эксплуатации и горизонтального масштабирования отдельная серверная база не настроена.
  • Эвристический AI без внешнего API работает по ключевым словам и набору вопросов; он может определить отрасль неточно. При сбое OpenAI используется этот локальный fallback.
  • Tailwind CSS загружается с CDN, поэтому для стилизованного интерфейса нужен доступ браузера к этому внешнему сервису.
  • Условия размещения, CI/CD и автоматические тесты в репозитории не описаны.

Развёрнутая версия

Ссылка на deployed-версию в репозитории не указана. Для локального запуска используйте http://localhost:8080.

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

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

Zhasyn 9

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

  • 2026-09-23 17:52Russian UI redesign and accessibility improvementsZhasyn
  • 2026-09-23 17:25Refine biz tasks proposals UI and toggleZhasyn
  • 2026-09-23 17:15Refresh business and student UIZhasyn
  • 2026-09-23 17:06Add team-based task matching in catalogZhasyn
  • 2026-09-23 16:27Add OpenAI fallback, lower timeout, UI polishZhasyn
  • 2026-09-23 16:08Document AI Sana Challenge HubZhasyn
  • 2026-09-23 15:01Add AI analyzer, stores, handlers, and routerZhasyn
  • 2026-09-23 14:31Add backend API, AI draft analysis and SPAZhasyn
Все коммиты (9)
  • 2026-09-23 13:50add mainZhasyn
Структура репозитория (27 файлов)
README.md
app.db
go.mod
go.sum
hack-ecc2e194-future.exe
internal/ai/ai.go
internal/ai/ai_test.go
internal/ai/heuristic.go
internal/ai/openai.go
internal/domain/types.go
internal/handler/ai_handler.go
internal/handler/middleware.go
internal/handler/proposal_handler.go
internal/handler/router.go
internal/handler/task_handler.go
internal/handler/task_handler_test.go
internal/handler/team_handler.go
internal/rating/rating.go
internal/store/proposal_store.go
internal/store/schema.go
internal/store/seed.go
internal/store/store.go
internal/store/task_store.go
internal/store/team_store.go
main.go
server.exe
static/index.html

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

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

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