AAYMA
RU
Войти

SaNa

Развёрнутый веб-MVP Challenge Hub: AI задаёт бизнесу 3–5 уточняющих вопросов, собирает живую карточку задачи с детерминированным рейтингом…

Доведённый продукт
Команда «SaNa» 30💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: SaNa
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт

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

Суть

Развёрнутый веб-MVP Challenge Hub: AI задаёт бизнесу 3–5 уточняющих вопросов, собирает живую карточку задачи с детерминированным рейтингом готовности 0–100, студенты откликаются, бизнес вручную принимает команду и подтверждает этапы.

Как устроено

/api/analyze через OpenAI Responses API возвращает типизированный JSON: 3–5 вопросов и по три варианта ответа на каждый. /api/build-card собирает карточку, и сервер принимает каждое AI-поле только при точной цитате-доказательстве из ввода пользователя. /api/edit-card-field по команде пользователя точечно меняет поле, изменение применяется после предпросмотра. Рейтинг считается по весам полей (20/20/15/15/10/10/10). Хранение в PostgreSQL/Neon или локальных JSON, при недоступности AI работает fallback.

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

  • structured outputs (Pydantic)
  • проверка цитат-доказательств
  • AI-редактирование выбранного поля
  • детерминированный readiness rating
  • fallback mode

Особенности

Публичный деплой на Vercel и видео. В живой карточке можно выделить текст и дать AI команду («сократи», «добавь срок») с предпросмотром перед применением. Баллы команде начисляются только после подтверждения результата бизнесом.

Стек

Python · FastAPI · Uvicorn · React 19 · Vite · PostgreSQL · Neon · Vercel · pytest

Модели

gpt-6-astra


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

README

README.md

SaNa — AI-конструктор практических задач

От неструктурированной идеи бизнеса — к проверяемой задаче для студенческой команды.

Открыть работающий сайт · GitHub · Сценарий проверки

React 19 FastAPI OpenAI Responses API PostgreSQL Tests

Главная страница SaNa

Посмотреть мобильную версию

Мобильная версия SaNa

Видео проекта

Посмотреть короткое видео SaNa

▶ Открыть короткое Full HD видео SaNa

Коротко: что это за продукт

SaNa — рабочий веб-MVP по кейсу HackAlem AI о геймификации практических заданий и качестве бизнес-задач. Он соединяет две стороны:

  • бизнес формулирует реальную проблему, уточняет её вместе с AI, проверяет карточку и вручную публикует задачу;
  • студенческие команды видят открытый каталог, выбирают подходящую задачу и отправляют идею решения;
  • бизнес сам принимает решение, с какой командой работать — AI ничего не выбирает автоматически.

Главная ценность продукта: человеку не нужно заранее знать, как правильно составлять техническое задание. Достаточно описать проблему обычными словами. SaNa найдёт пробелы, задаст уточняющие вопросы, соберёт карточку и покажет прозрачный рейтинг готовности.

AI помогает формулировать. Факты подтверждает пользователь. Публикация и выбор команды всегда остаются за человеком.

Проблема и решение

ПроблемаКак решает SaNa
Бизнес описывает запрос слишком общоAI задаёт 3–5 контекстных вопросов о результате, данных, пользователях, критериях и ограничениях
В задаче появляются неподтверждённые догадкиКарточка собирается только из текста и ответов пользователя; неизвестные поля остаются пустыми
Непонятно, готова ли задача для командыДетерминированный рейтинг 0–100 объясняет каждый балл и показывает, чего не хватает
Исправления приходится вносить через длинную формуВ живой карточке можно нажать на блок или выделить текст и дать AI точную команду
Слабые задачи исчезают из отбораНизкий рейтинг не скрывает задачу: весь каталог остаётся открытым
Алгоритм может выбрать команду непрозрачноКоманды только предлагают решения, а бизнес принимает или отклоняет их вручную
Результаты сложно подтвердитьКоманда прикладывает ссылку на результат, баллы начисляются только после подтверждения бизнеса

Что уже работает

Для бизнеса

  • AI-диалог с минимум тремя уточняющими вопросами;
  • три примерных варианта ответа на каждый вопрос;
  • честный индикатор этапов обработки, пока AI отвечает;
  • живая карточка рядом с чатом и возможность свернуть её;
  • переключение между визуальной карточкой и обычными полями;
  • редактирование блока мышкой или выделением конкретного текста;
  • AI-команды вида «сократи», «сделай понятнее», «добавь срок 4 недели»;
  • предварительный просмотр AI-изменения перед кнопкой «Применить»;
  • автоматический пересчёт рейтинга после изменения полей;
  • только ручная публикация;
  • повторное редактирование уже опубликованной задачи;
  • просмотр, принятие и отклонение предложений команд;
  • подтверждение результата этапа и начисление баллов команде;
  • профиль бизнеса и перенос защищённого кода доступа на другое устройство.

Для студенческой команды

  • профиль с интересами, навыками и технологиями;
  • открытый каталог всех опубликованных задач;
  • фильтры по теме и уровню готовности, сортировка по рейтингу или дате;
  • рекомендации по совпадению с профилем без скрытия остальных задач;
  • подробная карточка с условиями и всеми подсказками рейтинга;
  • понятная форма предложения: идея, план, срок, ссылка на прототип;
  • история своих откликов и отправка результата этапа;
  • таблица подтверждённого прогресса.

Пользовательский путь

flowchart LR
    A[Бизнес описывает проблему] --> B[SaNa задаёт 3–5 вопросов]
    B --> C[Живая карточка]
    C --> D[Рейтинг 0–100]
    D --> E{Бизнес проверил?}
    E -- Нет --> F[Ручное или AI-редактирование]
    F --> C
    E -- Да --> G[Публикация в каталоге]
    G --> H[Команда предлагает решение]
    H --> I{Решение бизнеса}
    I -- Принять --> J[Работа и отчёт об этапе]
    I -- Отклонить --> G
    J --> K[Подтверждение и баллы]

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

Рейтинг оценивает полноту конкретной задачи, а не компанию и не качество идеи. Формула полностью детерминирована: AI не назначает баллы.

ПоказательПоля карточкиБаллы
Контекст и потребностьcontext, need20
Данные и материалыdata_materials20
Ожидаемый результатexpected_result15
Критерии успехаsuccess_criteria15
Ограниченияconstraints10
Пользователиusers10
Связь с бизнесомcontact, interaction_format10
Всего100

Поле считается заполненным при наличии не менее 15 символов после удаления пробелов. Если показатель состоит из двух полей, одно заполненное поле даёт половину его баллов.

БаллыУровень
0–39Нужны уточнения
40–69Рабочая
70–89Готовая
90–100Приоритетная

Низкий балл влияет только на метку и позицию при сортировке. Он не блокирует публикацию и не запрещает отклик.

Архитектура

flowchart TB
    Browser[React 19 · Vite] -->|JSON / HTTPS| API[FastAPI]
    API --> Rating[Детерминированный рейтинг]
    API --> AI[OpenAI Responses API]
    API --> Store{Хранилище}
    Store --> Neon[(PostgreSQL / Neon)]
    Store --> Local[(Локальные JSON-файлы)]
    AI --> Fallback[Безопасный fallback]
    API --> Static[Production-сборка app/static]

Как AI работает с данными

  1. /api/analyze получает черновик, тему и язык.
  2. Модель возвращает строго типизированный JSON с 3–5 вопросами и тремя вариантами ответа для каждого.
  3. /api/build-card получает черновик и ответы.
  4. Каждое AI-поле содержит точную цитату-доказательство из пользовательского ввода. Сервер принимает поле только при совпадении с исходным текстом.
  5. /api/edit-card-field изменяет только выбранное поле и только после отдельной команды пользователя.
  6. Перед применением пользователь видит предложенный текст и подтверждает изменение вручную.
  7. Если ключ отсутствует, сеть недоступна или ответ не прошёл схему, включается локальный fallback.

Промпты находятся в core/prompts.py, AI-логика — в core/ai.py, контракт — в docs/CONTRACT.md.

Технологии

СлойТехнологииНазначение
FrontendReact 19, Vite, CSSSPA, AI-чат, живая карточка, каталог, профили
BackendPython 3.11+, FastAPI, UvicornAPI, валидация, права доступа, бизнес-логика
AIOpenAI Python SDK, Responses API, Pydantic-схемыВопросы, сборка и точечное редактирование карточки
ДанныеPostgreSQL/Neon или локальный JSONЗадачи, команды, предложения, этапы
Проверкиpytest, httpxAPI, рейтинг, AI fallback и полный пользовательский сценарий
ДеплойVercelПубличная production-версия

Быстрый запуск

Требования

  • Python 3.11+;
  • Node.js 20+ и npm;
  • OpenAI API key — необязателен: без него работает fallback;
  • PostgreSQL/Neon — необязателен: без него данные сохраняются локально.

Windows PowerShell

git clone https://github.com/BAITC-Hacks/hack-2036a781-sana.git
cd hack-2036a781-sana

py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt

Copy-Item .env.example .env
npm install
npm run build

python -m uvicorn app.main:app --host 127.0.0.1 --port 8000

Откройте http://127.0.0.1:8000.

macOS / Linux

git clone https://github.com/BAITC-Hacks/hack-2036a781-sana.git
cd hack-2036a781-sana

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

cp .env.example .env
npm install
npm run build

python -m uvicorn app.main:app --host 127.0.0.1 --port 8000

Разработка интерфейса

В первом терминале запустите backend:

python -m uvicorn app.main:app --host 127.0.0.1 --port 8000

Во втором терминале запустите Vite:

npm run dev

Production-сборка создаётся командой npm run build и попадает в app/static/.

Переменные окружения

Скопируйте .env.example в .env. Сам .env исключён из Git.

ПеременнаяОбязательнаНазначение
OPENAI_API_KEYНетВключает реальные AI-ответы
OPENAI_MODELНетМодель; значение проекта по умолчанию — gpt-6-astra
OPENAI_REASONING_EFFORTНетmedium, high, xhigh или max
OPENAI_MAX_OUTPUT_TOKENSНетОграничение токенов ответа, по умолчанию 6000
REQUEST_TIMEOUT_SECONDSНетТаймаут запроса к AI, максимум 180 секунд
AI_MODE=fallbackНетГарантированная демонстрация без внешнего AI
DATABASE_URLНетPostgreSQL/Neon; без неё используется .sana-data/
SANA_DATA_DIRНетДругой путь для локальных данных
APP_PORTНетДокументированный порт приложения, по умолчанию 8000

Никогда не добавляйте API-ключи и строку подключения к базе в README, исходный код или коммит.

Как проверить за 7 минут

1. Проверить AI-конструктор

  1. Откройте production-сайт или локальную версию.
  2. Нажмите «Создать задачу».
  3. Нажмите «Загрузить пример» или напишите: Нужно сократить время проверки домашних работ по Python.
  4. Отправьте сообщение и ответьте на уточняющие вопросы. Можно выбирать один из трёх предложенных вариантов.
  5. Пока AI отвечает, убедитесь, что видны этапы обработки.

2. Проверить живую карточку и AI-редактирование

  1. После последнего ответа справа появится карточка.
  2. Нажмите «Карточка» для визуального режима.
  3. Нажмите мышкой на блок «Проблема» или выделите часть текста.
  4. Напишите команду: Сделай короче и понятнее.
  5. Нажмите «Предложить изменение».
  6. Проверьте результат и только затем нажмите «Применить».
  7. Переключитесь в режим «Поля», вручную измените текст и проверьте пересчёт рейтинга.

3. Проверить публикацию и каталог

  1. Нажмите «Подтвердить и опубликовать».
  2. Откройте «Каталог».
  3. Проверьте фильтры, сортировку и кнопку «Открыть задачу».
  4. Убедитесь, что незаполненные данные явно отмечены, а рейтинг показывает все советы.

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

  1. Переключитесь на роль «Команда».
  2. Нажмите «Создать команду» — откроется профиль.
  3. Заполните название, интересы, навыки и технологии.
  4. Вернитесь в каталог, откройте задачу и нажмите «Предложить решение».
  5. Укажите идею, план, срок и тестовую ссылку https://example.org/prototype.

5. Проверить решение бизнеса

  1. Вернитесь к роли «Бизнес».
  2. Откройте «Мои задачи».
  3. Примите или отклоните предложение вручную.
  4. Для принятой команды отправьте результат этапа, затем подтвердите его бизнесом.
  5. Проверьте начисление 10 баллов в таблице прогресса.

Надёжная демонстрация без интернета

Перед запуском установите в .env:

AI_MODE=fallback

В этом режиме полный сценарий доступен без OpenAI: используются локальные вопросы, варианты ответов и безопасная сборка карточки из введённых фактов.

Автоматические проверки

python -m pytest -q

Ожидаемый результат:

27 passed

Дополнительные проверки:

npm run build
curl http://127.0.0.1:8000/api/health

Ожидаемый health-check при Neon/PostgreSQL:

{"status":"ok","storage":"postgresql"}

Основные API-методы

МетодEndpointЧто проверяет
GET/api/healthСостояние сервера и тип хранилища
POST/api/analyzeАнализ черновика и уточняющие вопросы
POST/api/build-cardСборка карточки только из пользовательских фактов
POST/api/edit-card-fieldAI-редактирование выбранного поля
POST/api/ratingДетерминированный пересчёт рейтинга
GET/POST/api/tasksКаталог и публикация задач
PUT/api/tasks/{id}Изменение своей задачи по коду владельца
GET/POST/api/tasks/{id}/proposalsПредложения команд
POST/api/proposals/{id}/decisionРучное решение бизнеса
POST/api/proposals/{id}/progressОтчёт команды об этапе
POST/api/progress/{id}/decisionПодтверждение этапа бизнесом

Подробные структуры запросов и ответов: docs/CONTRACT.md.

Структура репозитория

Hackalem/
├── app/
│   ├── main.py                 # FastAPI endpoints и проверка доступа
│   └── static/                 # production-сборка React
├── core/
│   ├── ai.py                   # OpenAI, схемы и fallback
│   ├── prompts.py              # системные промпты
│   ├── rating.py               # формула рейтинга
│   └── store.py                # Neon/PostgreSQL и локальное хранилище
├── frontend/
│   ├── src/App.jsx             # интерфейс и пользовательские сценарии
│   └── src/styles.css          # адаптивный дизайн SaNa
├── tests/                      # 27 автоматических проверок
├── docs/                       # контракт, аудит кейса и документация
├── data/                       # синтетические примеры, не production-данные
├── api/index.py                # входная точка Vercel
├── requirements.txt
├── package.json
└── vercel.json

Хранение и безопасность

  • секреты читаются только из переменных окружения;
  • .env, .sana-data/ и локальные данные исключены из Git;
  • сервер валидирует длину и тип всех входных полей;
  • внешние ссылки принимаются только с безопасной схемой http/https;
  • коды владельца и команды хранятся на сервере только в виде хеша;
  • изменение задач, решений и прогресса требует соответствующий код доступа;
  • OpenAI-запросы выполняются с store=False;
  • неизвестные факты не должны автоматически попадать в карточку;
  • AI-изменение не применяется без явного нажатия пользователя.

Деплой

Рабочая версия: https://sana-hackalem.vercel.app

Vercel выполняет npm run build, публикует React-сборку из app/static/ и направляет API-запросы в api/index.py. Для production необходимо задать OPENAI_API_KEY и DATABASE_URL в переменных окружения проекта Vercel.

Ограничения MVP

  • нет полноценной регистрации: права восстанавливаются через личный код доступа;
  • при потере кода и очистке браузера доступ автоматически восстановить нельзя;
  • локальная версия доступна другим пользователям только пока запущен сервер;
  • AI зависит от доступности провайдера, поэтому предусмотрен fallback;
  • правила начисления 10 баллов за подтверждённый этап — механика MVP;
  • перед реальным использованием нужно добавить мониторинг, резервные копии базы, rate limiting и полноценную авторизацию.

Полезные документы


SaNa — саналы көмекші, сенің білім серігің.
AI помогает. Решение всегда за вами.

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

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

_Aisingl_ 27mansurkenma54 8wiw 6

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

  • 2026-09-23 17:58Delete ggd_Aisingl_
  • 2026-09-23 17:57feat: connect legacy data and AI solution coachAsizxs33
  • 2026-09-23 17:52merge: integrate account and delivery workflowAsizxs33
  • 2026-09-23 17:48feat: add account roles, team invites and reviewed solution workflowmansurkenma54
  • 2026-09-23 17:46docs: add SaNa project videoAsizxs33
  • 2026-09-23 17:31docs: create judge-ready project READMEAsizxs33
  • 2026-09-23 17:24merge: integrate latest catalog UX updatesAsizxs33
  • 2026-09-23 17:19feat: add AI-assisted card editingAsizxs33
Все коммиты (41)
  • 2026-09-23 17:18fix: clarify task catalogue and connect team profile navigationmansurkenma54
  • 2026-09-23 17:12style: align task sheet with Sana themeAsizxs33
  • 2026-09-23 17:10feat: show AI processing progressAsizxs33
  • 2026-09-23 17:04feat: add dynamic task sheet previewAsizxs33
  • 2026-09-23 17:00merge: add landing page while preserving functionalityAsizxs33
  • 2026-09-23 16:56feat: expand chat when live card is collapsedAsizxs33
  • 2026-09-23 16:55Revert "feat: restructure live card visual hierarchy"Asizxs33
  • 2026-09-23 16:54feat: restructure live card visual hierarchyAsizxs33
  • 2026-09-23 16:49feat: introduce Sana landing page with animated mascot and nine-step journeymansurkenma54
  • 2026-09-23 16:46feat: toggle live card visibilityAsizxs33
  • 2026-09-23 16:43merge: update design while preserving functionalityAsizxs33
  • 2026-09-23 16:41fix: render Sana mascot with transparent pixel vectormansurkenma54
  • 2026-09-23 16:39fix: set Vercel build outputAsizxs33
  • 2026-09-23 16:38chore: configure Vercel deploymentAsizxs33
  • 2026-09-23 16:38design: simplify Sana with white sidebar and green-black panelsmansurkenma54
  • 2026-09-23 16:34Merge remote-tracking branch 'origin/design/ui-redesign' into feature/functionalityAsizxs33
  • 2026-09-23 16:30fix: align Sana identity and typography with supplied referencesmansurkenma54
  • 2026-09-23 16:20feat: redesign Sana interface and animated mascotmansurkenma54
  • 2026-09-23 16:19feat: add AI answer suggestionsAsizxs33
  • 2026-09-23 16:09feat: add Neon PostgreSQL storageAsizxs33
  • 2026-09-23 16:04feat: integrate OpenAI Responses APIAsizxs33
  • 2026-09-23 15:59feat: strengthen task workflow and team functionalityAsizxs33
  • 2026-09-23 15:50feat: rebuild Sana with React AI workspaceAsizxs33
  • 2026-09-23 15:39Merge pull request #3 from BAITC-Hacks/codex/sana-final-handoffwiw
  • 2026-09-23 15:38docs: align Sana handoff with verified releasewiw
  • 2026-09-23 15:33Merge pull request #2 from BAITC-Hacks/codex/sana-working-mvpwiw
  • 2026-09-23 15:32feat: secure Sana workflow and live datawiw
  • 2026-09-23 15:23Merge pull request #1 from BAITC-Hacks/codex/sana-working-mvpwiw
  • 2026-09-23 15:20feat: add Sana multilingual working MVPwiw
  • 2026-09-23 15:10vcvxzmansurkenma54
  • 2026-09-23 15:00feat: import working FastAPI MVPAsizxs33
  • 2026-09-23 14:25Merge remote-tracking branch 'origin/main'Asizxs33
  • 2026-09-23 14:25docs: add hackathon plan and agent guidelinesAsizxs33
Структура репозитория (60 файлов)
.codex/skills/pre-commit-check.md
.env.example
.gitignore
AGENTS.md
README.md
api/index.py
app/__init__.py
app/account_routes.py
app/main.py
app/static/assets/index-CM7TN6kB.css
app/static/assets/index-CwKI1f8l.js
app/static/assets/sana-brand-reference-7QTvPC_q.png
app/static/index.html
core/__init__.py
core/accounts.py
core/ai.py
core/prompts.py
core/rating.py
core/store.py
core/workflow.py
data/demo.json
data/drafts.json
data/progress.json
data/proposals.json
data/tasks.json
data/teams.json
docs/CASE_AUDIT.md
docs/CHECKLIST.md
docs/CODEX.md
docs/CONTRACT.md
docs/HACKATHON_PLAN.md
docs/IDEA_TOPICS.md
docs/INDEX.md
docs/PLAN.md
docs/ROLE-1-AI.md
docs/ROLE-2-UI.md
docs/ROLE-3-RATING-QA.md
docs/START.md
docs/images/sana-home.png
docs/images/sana-mobile.png
docs/images/sana-video-cover.jpg
docs/media/sana-platform-animation.mp4
frontend/index.html
frontend/src/AccountUI.jsx
frontend/src/App.jsx
frontend/src/assets/sana-brand-reference.png
frontend/src/assets/sana-character-reference.png
frontend/src/main.jsx
frontend/src/styles.css
frontend/vite.config.js
package-lock.json
package.json
pytest.ini
requirements.txt
tests/conftest.py
tests/test_accounts_workflow.py
tests/test_ai.py
tests/test_api.py
tests/test_rating.py
vercel.json
Ветки (6)

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

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

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