AAYMA
RU
Войти

SanaBridge

MVP Challenge Hub: бизнес вводит описание проблемы, AI извлекает факты и задаёт уточняющие вопросы, детерминированно считается готовность брифа…

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

О проекте

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

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

Суть

MVP Challenge Hub: бизнес вводит описание проблемы, AI извлекает факты и задаёт уточняющие вопросы, детерминированно считается готовность брифа, задача публикуется в каталог, команды подают заявки и бизнес выбирает одну.

Как устроено

FastAPI-бэкенд с SQLAlchemy/SQLite; OpenAI Responses API (responses.parse) извлекает структурированные поля (проблема, цель, пользователи, данные, результат, метрики, ограничения, сроки), значения сверяются с исходным текстом. Готовность — сумма весов 8 заполненных критериев, публикация только при 100%; необязательный технический отзыв через NVIDIA API. Доступ владельца по ключу рабочего пространства (SHA-256 в БД).

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

  • structured output parsing
  • source-text grounding
  • weighted readiness scoring
  • workspace key auth (SHA-256)

Особенности

Второй LLM (NVIDIA Llama 3.3 70B) выступает техническим рецензентом брифа отдельно от основного извлечения фактов; однако фронтенд и docs лежат в репозитории только в .rar/.zip-архивах, многие файлы удалены коммитами.

Стек

Python · FastAPI · Uvicorn · Pydantic · SQLAlchemy · SQLite · React 19 · Vite · Playwright · Pytest

Модели

GPT-4.1-mini · meta/llama-3.3-70b-instruct (NVIDIA)


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

README

README.md

SanaBridge — AI Sana Challenge Hub

Превращаем краткое описание бизнес-проблемы в понятную AI-задачу и соединяем её со студенческой командой.

Хакатонный MVP для кейса МНВО — AI Sana на HackAlem AI.

Для демонстрации без API-ключей запустите приложение и выберите «Создать задачу» → «Загрузить демо». Чтобы проверить AI-анализ собственного описания, настройте OpenAI API.

1. Краткое описание

Бизнес часто описывает задачу несколькими предложениями: из такого описания сложно понять, что нужно разработать, какие данные доступны и как оценить результат. Студенческие команды вынуждены самостоятельно восстанавливать недостающие требования.

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

Пользователи: представители бизнеса и организаций с задачами для AI-проектов; студенческие команды, ищущие практические проекты.

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

ВозможностьРеализация
Создание задачиВвод исходного описания, AI-анализ или ручное заполнение
Извлечение фактовПроблема, цель, пользователи, данные, результат, метрики, ограничения и сроки
Проверка AI-выводаPydantic-схема; извлечённые значения сверяются с исходным текстом
Уточнение брифаДо трёх вопросов за раунд; ответы сохраняются в соответствующие поля
ГотовностьДетерминированный процент, веса критериев, список пробелов и история баллов
Предложения AIНавыки команды и возможное направление решения, отмеченные отдельно от фактов
Технический отзывНеобязательная проверка NVIDIA: реализуемость, данные, риски и вопросы
ПубликацияДоступна после заполнения всех восьми критериев
КаталогКарточки задач и поиск по названию, проблеме и предложенным навыкам
ЗаявкиНазвание команды, число участников, навыки, GitHub и мотивация
Выбор командыОдин победитель; остальные заявки получают статус REJECTED, дальнейший приём закрывается
ХранениеSQLite сохраняет задачи, вопросы, баллы, отзывы и заявки
ИнтерфейсРусский язык, адаптивная вёрстка, состояния загрузки, ошибок и пустых списков
ДемоЯвно помеченный вымышленный кейс без вызова внешних AI-сервисов

Как считается готовность

Модель не назначает процент: backend суммирует веса заполненных полей.

КритерийВес
Проблема15
Цель бизнеса15
Пользователи10
Доступные данные15
Ожидаемый результат15
Метрики успеха15
Ограничения5
Сроки10
Всего100

Пустые строки, пробелы и предусмотренные заглушки, например unknown, не указано и TBD, не засчитываются. Конфигурация находится в readiness.py.

Пример расчёта: заполнена проблема — 15%; добавлены цель и данные — 45%; заполнены все критерии — 100%. Начальный балл AI-анализа не фиксируется заранее.

Готовность показывает полноту брифа, а не качество требований или доказанную реализуемость. AI-предложения и технический отзыв NVIDIA на баллы не влияют.

3. Как работает решение

  1. Описание. Бизнес вводит проблему своими словами.
  2. Анализ. Backend отправляет описание в OpenAI и получает структурированный ответ. Неизвестные поля остаются пустыми; значения, отсутствующие в исходном тексте, отбрасываются.
  3. Уточнение. Пользователь видит готовность и вопросы, добавляет ответы. Новые ответы сохраняются дословно; AI не перезаписывает ранее сохранённые факты. Есть сохранение без AI и ручное редактирование брифа.
  4. Проверка. Бизнес просматривает карточку и при желании запрашивает технический отзыв NVIDIA.
  5. Публикация. При 100% готовности задача появляется в каталоге. После публикации бриф фиксируется для команд.
  6. Заявка. Студенческая команда открывает карточку и отправляет сведения о себе.
  7. Выбор. Владелец открывает заявки и выбирает одну команду. Результат сохраняется в базе.

4. Технологии

КомпонентТехнологии
FrontendJavaScript, React 19, Vite 6, React Router, CSS, Lucide React
BackendPython, FastAPI, Uvicorn, Pydantic, pydantic-settings
База данныхSQLite, SQLAlchemy 2
Основной AIOpenAI Python SDK, Responses API, responses.parse, структурированный вывод
Технический отзывNVIDIA API, HTTPX, проверка результата через Pydantic
ТестированиеPytest, HTTPX, Playwright
ФорматированиеPrettier
АвтоматизацияGitHub Actions: .github/workflows/ci.yml

Модели по умолчанию в конфигурации:

  • OpenAI: gpt-4.1-mini, переменная OPENAI_MODEL.
  • NVIDIA: meta/llama-3.3-70b-instruct, переменная NVIDIA_MODEL.

Это настроенные идентификаторы, а не подтверждение доступности моделей в конкретном аккаунте. Версии Python-зависимостей закреплены в requirements.txt; версии frontend-зависимостей — в package-lock.json.

5. Архитектура проекта

flowchart TD
    Business["Бизнес"] --> UI["React / Vite"]
    Team["Студенческая команда"] --> UI
    UI --> API["FastAPI"]
    API --> DB["SQLite через SQLAlchemy"]
    API --> Score["Расчёт готовности"]
    API --> OpenAI["OpenAI: факты и уточнения"]
    API --> NVIDIA["NVIDIA: технический отзыв"]

Браузер обращается к относительному пути /api. Vite проксирует запросы на http://127.0.0.1:8000; это настроено и для режима разработки, и для локального preview. Backend проверяет данные и права владельца, вызывает AI-сервисы и сохраняет результат в SQLite. AI-ключи используются только на backend.

ПутьНазначение
backend/app/main.pyЗапуск API, подключение маршрутов, CORS, обработка ошибок
backend/app/config.pyПеременные окружения и настройки
backend/app/database.py, models.pyПодключение к базе и модели Challenge, Application
backend/app/schemas.pyВалидация запросов и структур ответов
backend/app/security.pyПроверка ключа рабочего пространства и владельца
backend/app/routes/Задачи, публикация, заявки, технические отзывы и демо
backend/app/services/AI-интеграции, промпты, готовность, работа с задачами
frontend/src/pages/Главная, каталог, создание, рабочее пространство и карточка задачи
frontend/src/components/Карточки, факты, готовность и общие элементы интерфейса
frontend/src/services/api.jsЕдиный API-клиент и ключ рабочего пространства
backend/tests/, frontend/e2e/Backend- и браузерные тесты
scripts/smoke_test.pyHTTP-сценарий с перезапуском сервера и проверкой сохранения

Доступ к задачам

Frontend создаёт случайный ключ рабочего пространства, хранит его в localStorage и отправляет в заголовке X-Business-Key. Backend хранит SHA-256 ключа. Черновики, редактирование, просмотр заявок и выбор команды доступны владельцу. Каталог и отправка заявки доступны без ключа.

Это упрощённый механизм доступа для MVP. Аккаунтов и восстановления доступа нет. Используйте один адрес сайта постоянно: localhost и 127.0.0.1 имеют разные хранилища браузера.

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

Подготовка

Используйте Python 3.12, Node.js 22 и npm — эти версии Python и Node указаны в CI-конфигурации. Распакуйте проект и откройте его корень: папку, содержащую backend, frontend и README.md.

Для работы нужны два одновременно открытых терминала: backend и frontend. Команды установки приведены для первого запуска; при последующих запусках достаточно запускать серверы.

macOS / Linux — backend

Из корня проекта:

python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.txt
cp backend/.env.example backend/.env

Если Python 3.12 установлен как python3, проверьте python3 --version и используйте его вместо python3.12.

Настройте backend/.env, затем запустите:

cd backend
../.venv/bin/python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

Windows — backend

Откройте PowerShell в корне проекта:

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend\requirements.txt
Copy-Item backend\.env.example backend\.env

Настройте backend/.env, затем запустите:

cd backend
..\.venv\Scripts\python.exe -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

Активация виртуального окружения не требуется: команды обращаются к его Python напрямую.

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

ПеременнаяНазначение
OPENAI_API_KEYКлюч для AI-анализа и уточнений. Не нужен для ручного режима и демо
OPENAI_MODELМодель OpenAI; по умолчанию gpt-4.1-mini
NVIDIA_API_KEYНеобязательный ключ технического рецензента
NVIDIA_MODELМодель NVIDIA; по умолчанию meta/llama-3.3-70b-instruct
DATABASE_URLПо умолчанию sqlite:///./sanabridge.db
CORS_ORIGINSJSON-массив разрешённых адресов; в шаблоне localhost и 127.0.0.1 на порту 5173

Шаблон: backend/.env.example. Замените заглушки ключами для нужных интеграций. Не публикуйте настоящий .env: он исключён через .gitignore.

Файл настроек читается из backend/.env. При запуске из backend база автоматически создаётся как backend/sanabridge.db. Относительный путь SQLite зависит от рабочей папки процесса, поэтому соблюдайте приведённые команды.

Frontend — второй терминал, обе системы

Откройте новый терминал в корне проекта:

cd frontend
npm ci
npm run dev

Оставьте оба сервера работающими и откройте:

Если порт 5173 занят, Vite может предложить другой адрес; для воспроизводимого демо освободите 5173. Остановить сервер можно сочетанием Ctrl+C в его терминале.

Локальная проверка сборки

Из папки frontend:

npm run build
npm run preview

Откройте адрес, выведенный Vite. Backend на порту 8000 должен продолжать работать: сборка frontend не включает Python-сервер.

7. Как проверить решение

Сценарий для жюри с AI

  1. Настройте OpenAI, запустите оба сервера и откройте приложение.

  2. Нажмите «Создать задачу» → «Попробовать пример». В форме появится:

    Мы хотим использовать AI для анализа отзывов студентов.

  3. Нажмите «Проанализировать с AI». Проверьте исходные факты, незаполненные поля, вопросы и готовность. Не ожидайте заранее заданного начального процента.

  4. Ответьте на вопросы через «Сохранить и уточнить с AI». При необходимости используйте «Изменить» в брифе. Для вымышленного демонстрационного бизнеса можно подтвердить следующие сведения:

ПолеДемонстрационный ответ
ПроблемаУчебный отдел вручную разбирает отзывы и пропускает повторяющиеся проблемы
ЦельСократить ежемесячный анализ с двух дней до двух часов
ПользователиУчебный отдел и руководители образовательных программ
Данные5000 обезличенных отзывов на русском языке в CSV; доступ с начала проекта
РезультатВеб-прототип с загрузкой CSV, темами, тональностью и экспортом отчёта
МетрикиMacro-F1 не ниже 0.80 на 300 размеченных отзывах, отчёт за 2 минуты
ОграниченияТолько обезличенные данные, без платной инфраструктуры
Сроки30 ноября 2026 года
  1. Проверьте изменение готовности после сохранения. При заполнении всех критериев она составит 100%.
  2. Просмотрите факты и отдельно AI-предложения. Нажмите «Проверить» в блоке NVIDIA. При настроенном ключе ожидается технический отзыв; без ключа отображается неблокирующее состояние недоступности.
  3. Нажмите «Опубликовать задачу», затем откройте её в каталоге.
  4. В отдельном браузере или приватном окне откройте тот же адрес сайта и отправьте заявку: название Qadam AI, 4 участника, навыки Python, NLP, React, ссылка https://github.com/qadam-demo, мотивация от 20 символов. Ссылка — пример для теста, принадлежность команде не подтверждается.
  5. В исходном окне бизнеса откройте «Мои задачи» → свою задачу. Если страница уже открыта, обновите её. В заявках нажмите «Выбрать команду».
  6. Обновите страницу и перезапустите backend с той же базой. Выбранная команда должна сохраниться; остальные заявки получают статус REJECTED.

Ожидаемый результат: опубликованная задача и одна выбранная команда в базе данных.

Сценарий без API-ключей

«Создать задачу» → «Загрузить демо» → «Опубликовать задачу» → каталог → заявка → «Мои задачи» → выбор команды.

Демо сразу создаёт заполненный бриф и явно помечает его как вымышленный. Это не результат AI-анализа. Для проверки роста готовности создайте задачу через «Заполнить бриф вручную» и добавляйте поля по частям.

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

Команды для macOS/Linux, начиная из корня проекта:

cd backend
../.venv/bin/python -m pytest -q
cd ..
.venv/bin/python scripts/smoke_test.py
cd frontend
npm run build
npx prettier --check src vite.config.js playwright.config.js e2e package.json
npx playwright install chromium
npm run test:e2e

На Windows замените .venv/bin/python на .\.venv\Scripts\python.exe, а ../.venv/bin/python — на ..\.venv\Scripts\python.exe. Для Playwright задайте путь к Python из корня проекта, затем перейдите в frontend:

$env:SANABRIDGE_PYTHON = '"' + (Resolve-Path .venv\Scripts\python.exe).Path + '"'
cd frontend
npx playwright install chromium
npm run test:e2e

Перед браузерными тестами остановите обычные серверы на 8000 и 5173: Playwright запускает свои процессы. Его backend использует backend/e2e.db и пустые AI-ключи. На Linux при нехватке системных библиотек используйте npx playwright install --with-deps chromium.

В проекте есть:

  • Backend-тесты расчёта готовности, API, прав владельца, заявок и обработки ошибок AI.
  • Тесты OpenAI SDK с подменённым HTTP-транспортом: строгая схема, разбор ответа, отказ и повреждённый JSON.
  • Проверки NVIDIA с тестовыми ответами и ошибками.
  • Браузерные сценарии бизнеса и студента, ручного заполнения и мобильной ширины.
  • smoke_test.py, который проходит настоящий HTTP-сценарий на порту 8123 с временной SQLite и проверяет сохранение после перезапуска.

В docs/VALIDATION.md зафиксирован предыдущий локальный прогон от 23 сентября 2026 года: 27 backend-тестов и 3 браузерных сценария прошли, сборка и smoke-проверка успешны. Это запись выполненной проверки, а не гарантия результата в другом окружении. При подготовке этого README новые функциональные тесты не запускались.

Workflow ci.yml настроен на push и pull_request: backend-тесты, smoke, сборка и Playwright. Подтверждения удалённого запуска GitHub Actions в проверенных материалах нет.

8. Данные и интеграции

Данные приложения

Источники — описание и ответы бизнеса, заявки студенческих команд и встроенный демо-кейс. Реальный набор студенческих отзывов, загрузка CSV и анализ самих отзывов в MVP не реализованы: они описывают пример задачи для будущей команды.

SQLite хранит брифы, исходные описания, готовность и её историю, вопросы, AI-предложения, технические отзывы, заявки и их статусы. Публикация открывает карточку и исходное описание через публичный API.

OpenAI

openai_service.py передаёт исходное описание и, при уточнении, подтверждённые поля в responses.parse. Ответ ограничен схемой Analysis. Для извлечённых фактов дополнительно проверяется наличие точной подстроки в предоставленных данных; несовпавшее значение становится null.

Тайм-аут клиента — 35 секунд, max_retries=1, лимит ответа — 3500 токенов, store=False. Ошибка возвращается пользователю как HTTP 503. При неудачном AI-уточнении новые ответы не записываются: их можно отправить повторно или сохранить без AI.

NVIDIA

nvidia_service.py вызывает:

POST https://integrate.api.nvidia.com/v1/chat/completions

Передаются структурированные факты и отдельно AI-предложения. Заявки команд и ключ рабочего пространства в этот запрос не включаются. Результат содержит реализуемость, готовность данных, риски, технические вопросы и краткое заключение.

Тайм-аут — 25 секунд, лимит ответа — 1800 токенов. Результат проверяется схемой TechnicalReview. Отсутствующий ключ, ошибка API или некорректный ответ дают состояние unavailable; основной сценарий продолжается. При редактировании брифа сохранённый отзыв сбрасывается.

Промпты обеих интеграций находятся в prompts.py. Внешние AI-сервисы вызываются только соответствующими действиями пользователя; демо не требует их вызова.

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

МетодПутьНазначение
GET/api/healthПроверка запуска
POST/api/challenges/analyzeAI-анализ с созданием задачи
POST/api/challengesРучное создание
GET/api/challengesОпубликованные задачи
GET/api/challenges?scope=mineЗадачи владельца
GET / PATCH/api/challenges/{id}Чтение / редактирование
POST/api/challenges/{id}/clarifyAI-уточнение по ответам
POST/api/challenges/{id}/reviewNVIDIA-отзыв
POST/api/challenges/{id}/publishПубликация
POST / GET/api/challenges/{id}/applicationsПодача / просмотр заявок
PATCH/api/applications/{id}/selectВыбор команды
POST/api/demoСоздание демонстрационного брифа

Для бизнес-запросов в Swagger используйте один и тот же случайный X-Business-Key длиной 32–128 символов. Браузерный клиент формирует его автоматически.

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

  • Живые AI-вызовы не подтверждены. В отчёте проверки указаны mock-интеграции; ключи провайдеров при том прогоне не предоставлялись. Перед демонстрацией с AI нужно проверить свои ключи и доступ к выбранным моделям.
  • Готовность бинарная. Она учитывает наличие ответа, но не оценивает его смысловую достаточность. Срок хранится текстом.
  • AI может ошибиться в интерпретации. Проверка цитат не доказывает корректность отнесения текста к полю; бизнес должен проверить бриф.
  • Нет полноценной аутентификации. Ключ в браузере заменяет аккаунт для MVP. Восстановление после утраты ключа не реализовано.
  • Нет защиты от массовых публичных заявок. CAPTCHA и ограничение частоты отсутствуют. GitHub проверяется как HTTPS-ссылка на github.com, без подтверждения владения. В одной задаче запрещены повторные заявки с одинаковым нормализованным GitHub URL.
  • Нет редактирования после публикации и смены победителя. Эти действия не предусмотрены API.
  • Нет кабинета студента, чата, уведомлений и realtime-обновлений. Для новых заявок нужно обновить страницу.
  • Списки ограничены 100 задачами. Постраничная навигация и автоматический подбор команд по навыкам не реализованы.
  • SQLite без миграций. Таблицы создаются при старте, но существующая схема автоматически не обновляется. PostgreSQL не настроен.
  • Интерфейс русский. Полной локализации нет; промпт анализа просит отвечать на языке описания, технический отзыв — по-русски.
  • Это сервис постановки задач. Обработка реальных отзывов, обучение моделей и выполнение самих студенческих проектов не входят в функциональность.

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

Подтверждённая публичная ссылка в проверенной версии проекта не указана. Для демонстрации доступны приведённые инструкции локального запуска.

npm run build создаёт frontend в frontend/dist, но не развёртывает приложение. Для внешнего размещения дополнительно потребуются запуск FastAPI, постоянное хранилище базы, серверные переменные окружения, маршрутизация /api и поддержка клиентских маршрутов React.

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

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

AyaulymBakyt 33JohnyOne 16mereyserpen 4

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

  • 2026-09-23 17:36zip file of ProjectJohnyOne
  • 2026-09-23 17:22Delete README.md1JohnyOne
  • 2026-09-23 17:21Добавить README.md с описанием проекта SanaBridgeJohnyOne
  • 2026-09-23 17:18Add files via uploadmereyserpen
  • 2026-09-23 17:15Delete README.mdJohnyOne
  • 2026-09-23 17:09Add files via uploadmereyserpen
  • 2026-09-23 17:08Add files via uploadAyaulymBakyt
  • 2026-09-23 17:02Delete downloadAyaulymBakyt
Все коммиты (53)
  • 2026-09-23 17:00Add files via uploadAyaulymBakyt
  • 2026-09-23 16:59Delete workspace.pngJohnyOne
  • 2026-09-23 16:59Delete mobile.pngJohnyOne
  • 2026-09-23 16:59Add files via uploadAyaulymBakyt
  • 2026-09-23 16:58Delete home.pngJohnyOne
  • 2026-09-23 16:58Delete VALIDATION.mdJohnyOne
  • 2026-09-23 16:53Add files via uploadAyaulymBakyt
  • 2026-09-23 16:49Delete README.mdJohnyOne
  • 2026-09-23 16:48Delete home.pngJohnyOne
  • 2026-09-23 16:48Delete mobile.pngJohnyOne
  • 2026-09-23 16:48Delete workspace.pngJohnyOne
  • 2026-09-23 16:48Delete VALIDATION.mdJohnyOne
  • 2026-09-23 16:47Add files via uploadmereyserpen
  • 2026-09-23 16:42scriptsJohnyOne
  • 2026-09-23 16:40Delete model.txtJohnyOne
  • 2026-09-23 16:39docsAyaulymBakyt
  • 2026-09-23 16:37Delete workspace.pngAyaulymBakyt
  • 2026-09-23 16:37Delete vite.config.jsAyaulymBakyt
  • 2026-09-23 16:37Delete style.cssAyaulymBakyt
  • 2026-09-23 16:36Delete playwright.config.jsAyaulymBakyt
  • 2026-09-23 16:36Delete package.jsonAyaulymBakyt
  • 2026-09-23 16:36Delete package-lock.jsonAyaulymBakyt
  • 2026-09-23 16:36Delete mobile.pngAyaulymBakyt
  • 2026-09-23 16:35Delete main.jsxAyaulymBakyt
  • 2026-09-23 16:35Delete journey.spec.jsAyaulymBakyt
  • 2026-09-23 16:35Delete index.htmlAyaulymBakyt
  • 2026-09-23 16:35Delete home.pngAyaulymBakyt
  • 2026-09-23 16:35Delete api.jsAyaulymBakyt
  • 2026-09-23 16:34Delete Workspace.jsxAyaulymBakyt
  • 2026-09-23 16:34Delete VALIDATION.mdAyaulymBakyt
  • 2026-09-23 16:34Delete Home.jsxAyaulymBakyt
  • 2026-09-23 16:34Delete Detail.jsxAyaulymBakyt
  • 2026-09-23 16:33Delete Create.jsxAyaulymBakyt
  • 2026-09-23 16:33Delete Common.jsxAyaulymBakyt
  • 2026-09-23 16:32Delete backend/requirements.txtAyaulymBakyt
  • 2026-09-23 16:31Delete Catalog.jsxAyaulymBakyt
  • 2026-09-23 16:31Delete App.jsxAyaulymBakyt
  • 2026-09-23 16:29frontendAyaulymBakyt
  • 2026-09-23 16:00docsAyaulymBakyt
  • 2026-09-23 15:59backendJohnyOne
  • 2026-09-23 15:21Update sanabridge.txtAyaulymBakyt
  • 2026-09-23 15:21Add files via uploadAyaulymBakyt
  • 2026-09-23 15:11Add files via uploadmereyserpen
  • 2026-09-23 13:31Update model.txtAyaulymBakyt
  • 2026-09-23 13:30prototypeAyaulymBakyt
Структура репозитория (30 файлов)
README.md
SANABRIDGE_DRAFT.txt
SanaBridge-MVP.zip
_github.rar
backend/app/__init__.py
backend/app/config.py
backend/app/database.py
backend/app/main.py
backend/app/models.py
backend/app/routes/__init__.py
backend/app/routes/applications.py
backend/app/routes/challenges.py
backend/app/routes/demo.py
backend/app/routes/reviews.py
backend/app/schemas.py
backend/app/security.py
backend/app/services/__init__.py
backend/app/services/challenge_service.py
backend/app/services/nvidia_service.py
backend/app/services/openai_service.py
backend/app/services/prompts.py
backend/app/services/readiness.py
backend/tests/conftest.py
backend/tests/test_api.py
backend/tests/test_integrations.py
backend/tests/test_readiness.py
docs.rar
frontend.rar
sanabridge.txt
scripts/smoke_test.py

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

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

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