AI Sana: Платформа геймификации практических бизнес-задач
Веб-платформа на FastAPI. Конструктор задачи с AI-диалогом и спидометром готовности 0–100, каталог с фильтрами, кабинеты бизнеса (ручной выбор…
О проекте
Команда: mussels
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Веб-платформа на FastAPI. Конструктор задачи с AI-диалогом и спидометром готовности 0–100, каталог с фильтрами, кабинеты бизнеса (ручной выбор откликов, подтверждение этапов) и студенческих команд (XP, рекомендации).
Как устроено
Бизнес вводит потребность, AI (gpt-4o-mini или локальный детерминированный фолбэк) ищет пробелы и пошагово уточняет ТЗ, собирая паспорт задачи с тремя milestones. Рейтинг считается прозрачной аддитивной формулой из 7 критериев. Рекомендации задач командам взвешивают домен 40%, стек 40% и готовность 20%. Данные лежат в JSON-файлах с атомарной записью.
Ключевые решения
- аддитивная формула рейтинга
- взвешенные рекомендации 40/40/20
- dual-mode AI с фолбэком
- геймификация XP
Метрики
34 теста проходят
Особенности
Проектные решения записаны в 9 ADR (в том числе запрет автоназначения команд), есть экран-путеводитель для жюри. Разработка шла от PRD и tracer-bullet тикетов; проект мигрировал со Streamlit на FastAPI.
Стек
Python · FastAPI · Jinja2 · Tailwind CSS · Alpine.js · Pydantic · pytest
Модели
gpt-4o-mini (OpenAI)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0c02bd80-mussels.
README
README.mdAI Sana: Платформа геймификации практических бизнес-задач
Полный работающий MVP платформы для трансформации первичных потребностей бизнеса в качественные карточки задач, их объективного рейтингования (0–100) и открытого выбора студенческих команд.
Разработано в рамках хакатона AI Sana (трек: Education & Gamification).
Репозиторий проекта: https://github.com/BAITC-Hacks/hack-0c02bd80-mussels
1. Архитектура системы и дизайн
Платформа построена по принципу модульного монолита на Python со строгой технологичной дизайн-системой (Linear / Vercel style) на базе нейтральной палитры Zinc:
- Автономное веб-приложение (
server.py,templates/,run_web.sh): Основной веб-интерфейс на базе FastAPI, Jinja2, Tailwind CSS и Alpine.js на порту 8000. Отличается нулевым оверхедом сборки (No-Node build), быстрой реактивностью и чистой типографикой (Plus Jakarta Sans). - Ролевая навигация (ADR-0008):
- Левый продуктово-ролевой контур: ссылка на «Каталог» + сегментированный переключатель рабочих пространств участников
[Команда | Бизнес]; - Правый блок действий: первичная графитовая CTA-кнопка
[+ Конструктор], презентационный бейдж-чип[Демо жюри], бейдж статуса AI ядра и кнопка сброса базы к эталону.
- Левый продуктово-ролевой контур: ссылка на «Каталог» + сегментированный переключатель рабочих пространств участников
- Двухрежимный AI-движок (
services/ai_generator.py, ADR-0002):- Основной режим: OpenAI (
gpt-4o-mini) для контекстного анализа пробелов в описании и адаптивного пошагового уточнения ТЗ. - Резервный режим: Локальный детерминированный генератор (Local Fallback), обеспечивающий 100% стабильность демонстрации даже без сети или API-ключа.
- Основной режим: OpenAI (
- Движок скоринга (
services/scoring.py, ADR-0004): Прозрачная аддитивная формула расчета рейтинга (0–100 баллов) с генерацией подсказок и векторным SVG-спидометром. - Многомерный алгоритм рекомендаций (
services/recommendation.py): Персонализированный подбор задач для команд по доменным интересам (40%), профилю инженерных компетенций (40%) и уровню готовности ТЗ (20%). - Файловое хранилище (
services/storage.py): JSON-хранилище в директорииdata/с атомарной записью, поддержкой сидинга и кнопкой мгновенного сброса.
2. Формула рейтинга готовности задачи
Рейтинг отражает готовность конкретной бизнес-задачи к студенческой разработке и рассчитывается строго аддитивно по подтвержденным полям:
| Показатель | Макс. балл | Как начисляются баллы |
|---|---|---|
| Контекст и потребность | 20 | Понятно текущее положение дел и требуемые изменения |
| Данные и материалы | 20 | Указаны доступные датасеты, примеры диалогов, ссылки |
| Ожидаемый результат | 15 | Описан конкретный артефакт (бот, сервис, модель, дашборд) |
| Критерии успеха | 15 | Сформулированы измеримые метрики приемки решения |
| Ограничения | 10 | Зафиксированы сроки, стек технологий, безопасность |
| Пользователи | 10 | Определена целевая аудитория будущего решения |
| Связь с бизнесом | 10 | Указаны прямые контакты, формат синков и консультаций |
| ИТОГО | 100 | Полная шкала готовности |
Категории уровня готовности:
- 0–39 баллов — Черновик: задача видна в каталоге, но снабжена отметкой о необходимости доработки.
- 40–69 баллов — Рабочая: студенты могут подавать отклики, задача включается в рекомендации.
- 70–89 баллов — Готовая: задача занимает повышенную позицию в общем каталоге.
- 90–100 баллов — Приоритетная: задача полностью готова к работе и выделяется визуальным бейджем.
3. Ключевые разделы платформы
1. Конструктор задачи (/ или /constructor)
- Ввод первичной потребности бизнеса в свободной форме.
- Адаптивный пошаговый диалог с AI (выявление недостающих сведений, подсказки «Быстрый ответ для жюри»).
- Динамический спидометр готовности (0–100 баллов) и автоматическая сборка паспорта задачи с 3 контрольными этапами (milestones).
2. Общий каталог задач (/catalog)
- Единый открытый пул подтвержденных задач с ранжированием по рейтингу готовности.
- Живая фильтрация по отраслям бизнеса и уровням готовности («Приоритетная», «Готовая», «Рабочая», «Черновик»).
- Модальный паспорт задачи с детальной структурой ТЗ, критериями приемки и формой отклика команды.
3. Кабинет студенческой команды (/student, ADR-0009)
- Единый лаконичный селектор команды с отображением баланса XP.
- Сводный профиль команды со стеком технологий и счетчиками баллов: Подтверждено XP, Закрыто этапов, В разработке XP.
- Проектно-центричная структура прогресса:
Проект → Завершенные контрольные этапы (+XP) → Этапы в разработке (+XP). - Персональные AI-рекомендации задач с многомерным расчетом совместимости (домен 40%, стек 40%, готовность 20%) и текстовым объяснением.
4. Кабинет бизнеса и управление проектами (/business, ADR-0003, ADR-0007)
- Реестр задач компании и мониторинг проектного цикла.
- Принцип исключительно ручного выбора (ADR-0003): категорический запрет автоназначения платформой — представитель бизнеса лично принимает решение по откликам команд.
- Интерактивная шкала контрольных этапов и подтверждение с начислением баллов прогресса (+XP) команде.
5. Экспресс-демонстрация для жюри (/jury-demo или /demo)
- Интерактивный путеводитель по сквозному сценарию за 3 минуты: от ввода слабого черновика до начисления баллов XP.
- Памятка ключевых архитектурных решений хакатона.
4. Быстрый запуск
Требования:
- Python 3.9+
- Установленные зависимости
Установка:
# Клонирование репозитория
git clone https://github.com/BAITC-Hacks/hack-0c02bd80-mussels.git
cd hack-0c02bd80-mussels
# Создание и активация виртуального окружения
python3 -m venv venv
source venv/bin/activate
# Установка зависимостей
pip install -r requirements.txt
Запуск основного веб-приложения (FastAPI + Tailwind CSS, порт 8000):
./run_web.sh
# или напрямую:
uvicorn server:app --host 0.0.0.0 --port 8000 --reload
Приложение доступно по адресу: http://localhost:8000.
Запуск можно осуществлять как через ./run_web.sh, так и через ./run.sh (автоматически запускает веб-сервер FastAPI).
Запуск автоматических тестов:
./venv/bin/pytest tests/
# 34 passed
5. Архитектурные решения (Architecture Decision Records)
Все проектные развилки зафиксированы в директории docs/adr/:
- ADR-0001: Единая архитектура на базе Streamlit (устарело, заменено на ADR-0005)
- ADR-0002: Двухрежимный AI-движок (OpenAI + Local Fallback)
- ADR-0003: Категорический запрет автоназначения и ручной выбор бизнеса
- ADR-0004: Прозрачная аддитивная формула рейтинга готовности (0–100)
- ADR-0005: Выделение автономного веб-приложения на FastAPI
- ADR-0006: Минималистичная дизайн-система и палитра Zinc
- ADR-0007: Эргономичная иерархия действий и навигационные вкладки
- ADR-0008: Логическое разделение навигации и ролевой сегментированный контрол
- ADR-0009: Проектно-центричная структура кабинета студенческой команды
6. Структура репозитория
hack-0c02bd80-mussels/
├── CONTEXT.md # Доменный словарь платформы (Domain Modeling)
├── README.md # Финальная документация проекта
├── server.py # Основной веб-сервер FastAPI (порт 8000)
├── run_web.sh # Скрипт запуска веб-приложения FastAPI
├── run.sh # Алиас запуска основного приложения
├── config.py # Конфигурация, веса скоринга и справочники
├── conftest.py # Конфигурация фикстур pytest
├── requirements.txt # Зависимости проекта
├── case_doc.txt # Исходное задание хакатона (RU, KZ, EN)
├── docs/
│ └── adr/ # Архитектурные решения (ADR 0001 — 0009)
├── models/ # Pydantic модели данных (Task, Proposal, Team, Milestone)
├── services/ # Бизнес-логика (Scoring, Storage, AI Generator, Recommendation, Seed, UI)
├── static/ # Статические ресурсы
├── templates/ # Шаблоны Jinja2 + Tailwind CSS + Alpine.js
│ ├── base.html # Базовый каркас с ролевым навбаром и тостами
│ ├── index.html # Конструктор задачи с AI-диалогом и спидометром
│ ├── catalog.html # Общий каталог задач с живой фильтрацией
│ ├── student.html # Кабинет студенческой команды и проектный трекер XP
│ ├── business.html # Кабинет бизнеса и ручной выбор откликов
│ └── jury_demo.html # Экспресс-демонстрация и путеводитель для жюри
└── tests/ # Автоматические тесты (Scoring, Fallback, Web App, Emojis)
Авторы коммитов
История коммитов
- 2026-09-23 17:42chore: remove streamlit and standardize on fastapi web appBeksultan
- 2026-09-23 17:39docs: finalize production README with all 9 ADRs and architectureBeksultan
- 2026-09-23 17:35feat(design): declutter all pages and unify minimalist linear stylingBeksultan
- 2026-09-23 17:30feat(student): streamline team cabinet into project-centric hierarchy (ADR-0009)Beksultan
- 2026-09-23 17:21feat(nav): segment role navigation and elevate primary actions (ADR-0008)Beksultan
- 2026-09-23 17:01feat(ux): streamline catalog card actions and business cabinet tabsBeksultan
- 2026-09-23 16:49feat(design): implement minimal linear design system and milestone guardrailBeksultan
- 2026-09-23 16:00feat(web): jury express demo, run script and docsBeksultan
Все коммиты (21)
- 2026-09-23 15:48feat(web): student team cabinet with xp summary and ai recommendationsBeksultan
- 2026-09-23 15:42feat(web): business cabinet with milestone progress and manual team selectionBeksultan
- 2026-09-23 15:36feat(web): open task catalog with live filtering and compact gaugesBeksultan
- 2026-09-23 15:28feat(web): task constructor with ai dialogue and rating gaugeBeksultan
- 2026-09-23 15:22feat(web): fastapi core server and clean white shellBeksultan
- 2026-09-23 15:18docs: PRD spec, ADR-0005, and tracer-bullet tickets for FastAPI web appBeksultan
- 2026-09-23 15:08feat(prototype): radical light design variants with top switcher and live showcaseBeksultan
- 2026-09-23 15:02prototype(ui): 3 design and color variants with floating bottom switcherBeksultan
- 2026-09-23 14:55feat(ui): dynamic circular score gauge and milestone progress visualizerBeksultan
- 2026-09-23 14:34chore: add run.sh executable script for launching Streamlit via virtualenvBeksultan
- 2026-09-23 14:32feat(app): interactive Streamlit web application with end-to-end hackathon workflow and complete documentationBeksultan
- 2026-09-23 14:31feat(core): data models, 100-pt scoring engine, synthetic dataset, dual-mode AI and testsBeksultan
- 2026-09-23 14:29docs: domain model, context glossary and architecture decisionsBeksultan
Структура репозитория (63 файлов)
.gitignore .scratch/hackathon/issues/01-gamification-visual-dashboard.md .scratch/hackathon/issues/02-export-markdown-pdf.md .scratch/hackathon/issues/03-ai-guardrails-input-validation.md .scratch/hackathon/issues/04-pitch-demo-speaker-mode.md .scratch/web-app/issues/01-fastapi-core-white-shell.md .scratch/web-app/issues/02-task-constructor-ai-dialog-gauge.md .scratch/web-app/issues/03-open-task-catalog-filters.md .scratch/web-app/issues/04-business-cabinet-milestone-progress.md .scratch/web-app/issues/05-student-team-profile-xp-recommendations.md .scratch/web-app/issues/06-jury-express-demo-and-startup.md .scratch/web-app/issues/07-fix-milestone-xp-guardrail.md .scratch/web-app/issues/08-feat-student-proposal-submission.md .scratch/web-app/issues/09-feat-task-card-publish-confirmation.md .scratch/web-app/issues/10-refactor-deep-storage-milestone-smells.md .scratch/web-app/issues/11-standards-domain-vocabulary-and-clean-white.md .scratch/web-app/spec.md CONTEXT.md README.md case_doc.txt config.py conftest.py data/drafts.json data/milestones.json data/proposals.json data/tasks.json data/teams.json docs/adr/0001-streamlit-unified-architecture.md docs/adr/0002-dual-mode-ai-engine.md docs/adr/0003-manual-business-selection-guardrail.md docs/adr/0004-transparent-additive-rating-formula.md docs/adr/0005-fastapi-standalone-web-app.md docs/adr/0006-minimalist-visual-design-system.md docs/adr/0007-ergonomic-action-hierarchy-and-tabs.md docs/adr/0008-navbar-role-segmented-navigation.md docs/adr/0009-student-cabinet-project-centric-structure.md models/__init__.py models/milestone.py models/proposal.py models/task.py models/team.py requirements.txt run.sh run_web.sh server.py services/__init__.py services/ai_generator.py services/recommendation.py services/scoring.py services/seed_data.py services/storage.py services/ui_components.py static/.gitkeep templates/base.html templates/business.html templates/catalog.html templates/index.html templates/jury_demo.html templates/student.html tests/test_ai_generator.py tests/test_scoring.py tests/test_ui_components.py tests/test_web_app.py
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.