Точка Сборки
Веб-платформа на Go: бизнес вводит черновик проблемы и получает определение отрасли и три уточняющих вопроса, собирает карточку задачи с рейтингом…
О проекте
Команда: 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-хранилище. При первом запуске в пустую базу добавляются пять демонстрационных задач, пять команд и пять откликов.
Пользовательский сценарий
- Представитель бизнеса вводит черновик задачи и запускает анализ.
- Он отвечает на три уточняющих вопроса, затем собирает и редактирует карточку. Рейтинг обновляется по мере заполнения полей.
- После публикации задача становится доступна в каталоге студента.
- Студент выбирает задачу, команду, описывает идею решения и при необходимости прикладывает ссылку на прототип.
- Представитель бизнеса просматривает отклик и принимает или отклоняет его. Статус сохраняется в базе и сразу обновляется в интерфейсе.
Рейтинг готовности
| Поле | Баллы | Условие |
|---|---|---|
| Контекст и потребность | 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 секунды и автоматически переключается на эвристический анализатор при сетевой ошибке, таймауте или некорректном ответе.
Как проверить
Через интерфейс
- Запустите сервер и откройте
http://localhost:8080. - В кабинете бизнеса введите краткий черновик, например: «Хотим сократить время доставки заказов и уменьшить расходы на маршруты».
- Нажмите «Анализировать через AI». При отсутствии ключа появятся вопросы эвристического анализатора.
- Ответьте на вопросы, соберите карточку, заполните поля и проверьте, что рейтинг и список недостающих данных меняются при вводе.
- Опубликуйте задачу, переключитесь в каталог студента, выберите команду и отправьте предложение.
- Вернитесь в кабинет бизнеса, обновите список откликов и примите или отклоните предложение.
В начальных данных уже есть отклики к задачам 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.
Авторы коммитов
История коммитов
- 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 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.