TALAP
Веб-платформа, где бизнес через мастер создаёт карточку задачи с AI-уточняющими вопросами и рейтингом готовности, а студенческие команды…
О проекте
Команда: Burkit team
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Веб-платформа, где бизнес через мастер создаёт карточку задачи с AI-уточняющими вопросами и рейтингом готовности, а студенческие команды откликаются, сдают этапы и получают XP.
Как устроено
Бизнес вводит описание проблемы, FastAPI сохраняет черновик и запрашивает 3–5 уточняющих вопросов у OpenAI Responses API со Structured Outputs по JSON Schema (или детерминированный mock). Ответы раскладываются по полям карточки, серверная формула считает рейтинг 0–100 и уровень готовности (Черновик/Рабочая/Готовая/Приоритетная). Дальше отклики команд, выбор исполнителя, этапы с подтверждением и атомарным начислением XP в одной транзакции.
Ключевые решения
- OpenAI Responses API
- Structured Outputs JSON Schema
- rule-based readiness scoring
- atomic XP transactions
- mock AI mode
Особенности
Защита от повторного и конкурентного начисления XP (идемпотентное подтверждение этапа), отдельные тесты на конкурентность; режимы mock/openai переключаются переменной окружения.
Стек
Python · FastAPI · Pydantic · SQLite · Turso/libSQL · TypeScript · React 19 · Vite · Tailwind CSS · Vercel
Модели
gpt-5-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-f11703d9-burkit-team.
README
README.mdTALAP - платформа бизнес-задач для студенческих команд
TALAP (рабочее название репозитория - Burkit / AI Sana) - веб-платформа, которая помогает компаниям формулировать прикладные задачи, а студенческим командам - находить такие задачи, предлагать решения и сдавать результаты по этапам.
Проект решает две связанные проблемы:
- бизнесу сложно превратить общую проблему в понятную карточку с данными, ограничениями и измеримыми критериями успеха;
- студенческим командам не хватает единого каталога реальных задач и прозрачного процесса от отклика до подтверждённого результата.
AI-модуль задаёт уточняющие вопросы к черновику, а backend рассчитывает готовность карточки. После публикации команды могут отправлять отклики, бизнес - выбирать исполнителя и подтверждать этапы работы.
Что реализовано
Для бизнеса
- мастер создания задачи с пошаговым заполнением карточки;
- генерация 3-5 структурированных уточняющих вопросов в режимах
mockиopenai; - серверная оценка полноты карточки от 0 до 100;
- уровни готовности:
Черновик,Рабочая,Готовая,Приоритетная; - сохранение черновика, редактирование, публикация и отдельное закрытие задачи;
- просмотр откликов и однократный выбор либо отклонение команды;
- серверные этапы выбранного отклика: создание, отправка результата, запрос доработки и подтверждение;
- атомарное начисление XP с защитой от повторного и одновременного подтверждения.
Для студенческой команды
- каталог опубликованных бизнес-задач;
- карточка задачи с ожидаемым результатом, данными и критериями успеха;
- отправка отклика с идеей, планом, сроком и ссылкой на прототип;
- интерфейсы этапов, прогресса, истории XP и профиля команды;
- сохранение ссылки на результат этапа в backend.
Backend и качество
- REST API с OpenAPI-схемой и Swagger UI;
- единые структурированные ошибки валидации;
- SQLite для локальной разработки и Turso/libSQL для Vercel;
- начальные данные: 10 задач, 5 команд и 5 откликов;
- тесты API-контракта, AI-ответов, сидирования, облачного адаптера, переходов статусов и конкурентного начисления XP.
Как работает решение
Основной сценарий:
- Представитель бизнеса вводит исходное описание проблемы.
- FastAPI сохраняет черновик и запрашивает уточняющие вопросы у OpenAI либо возвращает детерминированные mock-вопросы.
- Ответы записываются в поля карточки: пользователи, данные, ограничения, ожидаемый результат и критерии успеха.
- Backend пересчитывает рейтинг готовности. Клиент получает готовое значение и список недостающих полей.
- После заполнения названия бизнес публикует задачу в каталоге.
- Студенческая команда отправляет отклик с идеей, планом, сроком и ссылкой на прототип.
- Бизнес выбирает отклик. Только после этого к нему можно привязать этапы выполнения.
- Команда отправляет ссылку на результат этапа. Бизнес подтверждает результат или возвращает его на доработку.
- При подтверждении backend в одной транзакции меняет статус этапа и начисляет XP. Повторный запрос не увеличивает баланс.
- Закрытие бизнес-задачи выполняется отдельным действием и не происходит автоматически после подтверждения этапа.
Технологии
| Область | Используется в проекте |
|---|---|
| Frontend | TypeScript, React 19, Vite 8 |
| UI | Tailwind CSS 4, Motion, Lucide React |
| Backend | Python, FastAPI, Pydantic, Uvicorn |
| AI | OpenAI Python SDK, Responses API, Structured Outputs по JSON Schema; модель задаётся через OPENAI_MODEL, значение по умолчанию - gpt-5-mini |
| Данные | SQLite локально, Turso/libSQL в облачном окружении |
| Деплой | Vercel: статическая Vite-сборка и Python Function api/index.py |
| Тестирование | unittest, FastAPI TestClient |
Пакет @google/genai присутствует в зависимостях frontend, но текущая реализация AI-вопросов использует OpenAI на стороне FastAPI.
Архитектура проекта
flowchart LR
U[Бизнес или команда] --> R[React-интерфейс]
R --> A[Frontend API-адаптер]
A --> F[FastAPI REST API]
F --> DB[(SQLite или Turso)]
F --> O[OpenAI Responses API]
F --> S[Рейтинг и правила XP]
S --> DB
Основные компоненты:
src/- React-интерфейс, экраны двух ролей и клиентские адаптеры данных;src/services/api.ts- запросы к реальному FastAPI для задач и откликов;src/api/talapApi.ts- адаптер экранов к реальному FastAPI-клиенту;backend/main.py- маршруты API и переходы статусов;backend/schemas.py- входные и выходные Pydantic-модели;backend/schema.sql- таблицы задач, команд, откликов, этапов и начислений;backend/services/ai_service.py- mock/OpenAI-генерация вопросов и проверка структуры ответа;backend/services/rating.pyиrating.py- единая формула рейтинга;api/index.py- точка входа FastAPI для Vercel Functions;tests/- автоматические backend-тесты.
Подробный контракт доступен после запуска backend в Swagger по адресу /docs.
Установка и запуск
Понадобятся Git, Node.js с npm и Python 3.10 или новее.
1. Получить проект
git clone https://github.com/BAITC-Hacks/hack-f11703d9-burkit-team.git
cd hack-f11703d9-burkit-team
2. Запустить backend
py -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r backend/requirements.txt
$env:AI_MODE = "mock"
uvicorn backend.main:app --reload
После запуска API будет доступен по адресу http://127.0.0.1:8000, Swagger - http://127.0.0.1:8000/docs.
Локальная SQLite-база создаётся автоматически при первом обращении к приложению.
3. Запустить frontend
В отдельном терминале:
npm install
$env:VITE_API_URL = "http://127.0.0.1:8000/api"
npm run dev
Frontend по умолчанию запускается на http://localhost:3000.
4. Включить реальный OpenAI-режим
Для локальной проверки:
$env:AI_MODE = "openai"
$env:OPENAI_API_KEY = "sk-..."
$env:OPENAI_MODEL = "gpt-5-mini"
$env:OPENAI_TIMEOUT_SECONDS = "20"
uvicorn backend.main:app --reload
Для production ключ должен быть задан только в Vercel Environment Variables. Его нельзя добавлять в frontend-переменные, Git, ответы API или логи.
Как проверить решение
Быстрая проверка через интерфейс
- Запустить backend и frontend.
- Открыть
http://localhost:3000. - Перейти в роль бизнеса.
- Создать или открыть задачу и заполнить поля карточки.
- Проверить, что карточка получает рейтинг готовности и список недостающих данных.
- Перейти в каталог задач от лица команды.
- Открыть опубликованную задачу и отправить отклик.
- Вернуться в бизнес-часть и выбрать отклик.
Проверка backend через Swagger
- Открыть
http://127.0.0.1:8000/docs. - Вызвать
POST /api/tasksс исходным описанием. - Вызвать
POST /api/tasks/{id}/questionsи проверить 3-5 вопросов с полямиfieldиtext. - Вызвать обновление задачи и заполнить недостающие поля.
- Опубликовать задачу.
- Создать отклик команды.
- Выбрать отклик.
- Создать этап для выбранного отклика.
- Отправить ссылку на результат этапа.
- Подтвердить этап.
- Повторить подтверждение и убедиться, что XP не начисляется второй раз.
Автоматические проверки
npm run lint
npm run build
.venv\Scripts\python.exe -m unittest discover -s tests -v
Данные и интеграции
В проекте используются:
- локальная SQLite-база для разработки;
- Turso/libSQL в production-окружении Vercel при наличии
TURSO_DATABASE_URLиTURSO_AUTH_TOKEN; - OpenAI API для генерации уточняющих вопросов в режиме
openai; - mock-режим AI для демонстрации без внешнего API;
- Vercel для размещения frontend и FastAPI serverless-функции.
Секреты и переменные окружения описаны в .env.example:
AI_MODE=mock
OPENAI_API_KEY=
OPENAI_MODEL=gpt-5-mini
OPENAI_TIMEOUT_SECONDS=20
TURSO_DATABASE_URL=
TURSO_AUTH_TOKEN=
APP_URL=http://localhost:5173
Ограничения текущей версии
- Авторизация и реальные роли пользователей не реализованы: сценарии бизнеса и команды доступны как режимы интерфейса.
- Основной сквозной сценарий задач, AI-вопросов и откликов подключён к FastAPI; профиль и часть отображения XP остаются демонстрационными.
- Серверные этапы и XP реализованы, но финальная связка всех milestone-действий с frontend вынесена за пределы основного сценария.
- Реальный OpenAI-режим требует корректного
OPENAI_API_KEYи доступной модели в окружении сервера. - В репозитории нет подтверждения внешних источников бизнес-данных: seed-данные создаются локально из кода.
- Закрытие задачи намеренно оставлено отдельным действием бизнеса и не привязано автоматически к этапам.
Deployed-версия
В репозитории указан Vercel-проект hack-f11703d9-burkit-team. Документация проекта ссылается на production-адрес:
https://hack-f11703d9-burkit-team.vercel.app
Для проверки production-деплоя рекомендуется открыть:
https://hack-f11703d9-burkit-team.vercel.app/api/health;https://hack-f11703d9-burkit-team.vercel.app/docs.
Если production использует OpenAI, в ответах API должен явно отображаться режим openai. Если ключ или модель не настроены, API должен вернуть понятную ошибку или работать в mock-режиме в зависимости от значения AI_MODE.
Авторы коммитов
История коммитов
- 2026-09-23 17:59Correct final project documentationYakowv
- 2026-09-23 17:58Новый РеадмеBucks888
- 2026-09-23 17:55Merge pull request #20 from BAITC-Hacks/codex/final-mvp-releaseYakowv
- 2026-09-23 17:54Add files via uploadBucks888
- 2026-09-23 17:51Connect final MVP flow to FastAPIYakowv
- 2026-09-23 17:35Merge pull request #16 from BAITC-Hacks/Design-v2Yakowv
- 2026-09-23 17:34Merge pull request #19 from BAITC-Hacks/TeamLeadAleksandr-source
- 2026-09-23 17:30Merge pull request #18 from BAITC-Hacks/codex/verify-openai-productionYakowv
Все коммиты (39)
- 2026-09-23 17:29feat(backend): persist milestones and calculate team pointsYakowv
- 2026-09-23 17:23feat: integrate API flows and improve student UXBucks888
- 2026-09-23 17:19Connect Design-v2 App to FastAPIAleksandr-source
- 2026-09-23 17:17Merge remote-tracking branch 'origin/main' into TeamLeadAleksandr-source
- 2026-09-23 17:16Merge pull request #15 from BAITC-Hacks/codex/verify-openai-productionYakowv
- 2026-09-23 17:14Verify OpenAI generation in productionYakowv
- 2026-09-23 17:09Add FastAPI client for Design-v2Aleksandr-source
- 2026-09-23 16:59Merge pull request #12 from BAITC-Hacks/codex/finalize-mvp-api-contractYakowv
- 2026-09-23 16:56Finalize MVP API contractYakowv
- 2026-09-23 16:39Merge pull request #8 from BAITC-Hacks/codex/mvp-integrationYakowv
- 2026-09-23 16:37Integrate team branches and align backend modulesYakowv
- 2026-09-23 16:33Merge TeamLead into MVP integrationYakowv
- 2026-09-23 16:33Merge remote-tracking branch 'origin/Design-v2' into codex/mvp-integrationYakowv
- 2026-09-23 16:33Merge remote-tracking branch 'origin/codex/configure-vercel-deployment' into codex/mvp-integrationYakowv
- 2026-09-23 16:30version 2 designBucks888
- 2026-09-23 16:19Configure Vercel deployment with Turso databaseYakowv
- 2026-09-23 15:53Обновлен seed_data.py под схему бэкенда: добавлены поля description, deadline, prototype_url, статус "open" и 5 откликов по ТЗ.Aleksandr-source
- 2026-09-23 15:50Merge pull request #6 from BAITC-Hacks/codex/initialize-sqlite-seed-dataYakowv
- 2026-09-23 15:49Initialize SQLite with seed dataYakowv
- 2026-09-23 15:47Document project modules and update rating fieldsAleksandr-source
- 2026-09-23 15:29Merge pull request #5 from BAITC-Hacks/codex/connect-openai-question-generationYakowv
- 2026-09-23 15:29Merge branch 'main' into codex/connect-openai-question-generationYakowv
- 2026-09-23 15:20Merge pull request #2 from BAITC-Hacks/codex/backend-fastapi-sqlite-scaffoldYakowv
- 2026-09-23 15:13Merge branch 'main' into codex/connect-openai-question-generationYakowv
- 2026-09-23 15:06feat: подключить OpenAI к генерации вопросовYakowv
- 2026-09-23 14:50Merge branch 'main' into codex/backend-fastapi-sqlite-scaffoldYakowv
- 2026-09-23 14:40feat: интегрировать расчет рейтинга задачYakowv
- 2026-09-23 14:37Add project seed dataAleksandr-source
- 2026-09-23 14:27feat: добавить каркас backend на FastAPI и SQLiteYakowv
- 2026-09-23 14:21DesignBucks888
- 2026-09-23 14:10Add task rating functionAleksandr-source
Структура репозитория (75 файлов)
.env.example .gitignore .vercelignore README.md api/index.py backend/__init__.py backend/cloud_database.py backend/database.py backend/main.py backend/requirements.txt backend/schema.sql backend/schemas.py backend/seed_data.py backend/services/__init__.py backend/services/ai_service.py backend/services/rating.py docs/API_CONTRACT.md docs/MVP_INTEGRATION.md docs/OPENAI_PRODUCTION_CHECK.md index.html metadata.json package-lock.json package.json rating.py requirements.txt scripts/verify_openai_production.py seed_data.py src/App.tsx src/api/talapApi.ts src/api/types.ts src/assets/images/talap_favicon_1790164529149.jpg src/assets/images/talap_main_logo_1790164512987.jpg src/assets/images/talap_watermark_1790164547803.jpg src/components/BrandKitModal.tsx src/components/CatalogScreen.tsx src/components/CreateTaskScreen.tsx src/components/EditTaskScreen.tsx src/components/Header.tsx src/components/MyProposalsScreen.tsx src/components/OverviewScreen.tsx src/components/ProposalsScreen.tsx src/components/RatingPanel.tsx src/components/Sidebar.tsx src/components/StudentTaskScreen.tsx src/components/TeamProfileScreen.tsx src/components/TeamProgressScreen.tsx src/components/WelcomeModal.tsx src/components/ui/Accordion.tsx src/components/ui/CollapsibleCard.tsx src/components/ui/ContextHelp.tsx src/components/ui/Disclosure.tsx src/components/ui/LevelUpModal.tsx src/components/ui/MilestoneRoadmap.tsx src/components/ui/Select.tsx src/components/ui/TalapLogo.tsx src/components/ui/Toast.tsx src/components/ui/XPProgressBar.tsx src/data/mockData.ts src/index.css src/main.tsx src/services/api.ts src/types/index.ts src/utils/ratingCalculator.ts src/utils/teamProgress.ts src/utils/useAsyncAction.ts tests/__init__.py tests/test_ai_service.py tests/test_api_contract.py tests/test_cloud_database.py tests/test_database_seed.py tests/test_milestones.py tests/test_mvp_integration.py tsconfig.json vercel.json vite.config.ts
Ветки (12)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.