AAYMA
RU
Войти

AI Sana

Микросервисная платформа AI Sana: черновик бизнеса, AI-уточнение (не меньше 3 вопросов), редактируемая карточка с рейтингом 0–100, каталог по…

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

О проекте

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

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

Суть

Микросервисная платформа AI Sana: черновик бизнеса, AI-уточнение (не меньше 3 вопросов), редактируемая карточка с рейтингом 0–100, каталог по рейтингу, отклики студентов и ручной выбор 0/1/нескольких команд, интерфейс на ru/kk/en.

Как устроено

Nuxt 4/Nitro проксирует запросы в FastAPI API Gateway с rate limit. За ним стоят auth_service (роли business/student), catalog_service (черновики, вопросы, карточки, рейтинг, версии карточек, отклики, решения, награды) и ai_service для обращения к внешнему провайдеру. Рейтинг считается кодом по 7 полям с фиксированными весами. Есть fallback-вопросы без AI и защита версий карточек при конкурентных правках. Данные в SQLite/PostgreSQL через SQLAlchemy/Alembic, сервисы запускаются в Docker Compose.

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

  • API gateway
  • microservices
  • weighted readiness scoring
  • fallback questions
  • card versioning
  • Alembic migrations
  • i18n ru/kk/en

Особенности

Полноценная микросервисная архитектура за 5 часов с большим набором тестов (конкурентные вопросы, версии карточек, миграции). Командная доска задач в .team/*.json. Локализация на три языка.

Стек

Nuxt 4 · Vue 3 · TypeScript · Nuxt UI · Tailwind CSS · Python · FastAPI · SQLAlchemy · Alembic · SQLite · PostgreSQL · Docker Compose


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

README

README.md

AI Sana — каталог бизнес-задач с геймификацией

Команда: Prompt&Pray. Статус: MVP-прототип.

AI Sana помогает бизнесу превратить свободное описание проблемы в понятную задачу для студенческой команды. AI уточняет недостающие сведения, бизнес проверяет карточку, а студенты предлагают свои решения. Итоговый выбор исполнителей делает бизнес.

Этот README описывает замысел продукта, целевой сценарий и план MVP. Раздел «Прототип и запуск» относится к коду в репозитории. Критерии приёмки ниже — требования к результату, а не заявление о прохождении всех проверок.

Видео демонстрации

Посмотреть видео демонстрации AI Sana.

1. Проблема и ценность

Бизнес часто формулирует потребность слишком общо: «нужна аналитика», «хотим автоматизацию», «сделайте приложение». В таком описании не хватает данных, ожидаемого результата, ограничений и критериев успеха. Студентам трудно оценить задачу и предложить конкретный план, а бизнесу — сравнить предложения.

Платформа должна уменьшить этот разрыв:

  • Для бизнеса: помочь сформулировать потребность и получить сопоставимые отклики.
  • Для студентов: дать открытый каталог реальных задач с понятными условиями.
  • Для организаторов: сделать взаимодействие бизнеса и студенческих команд прозрачным.

Главный принцип: геймификация мотивирует бизнес улучшать описание задачи. Рейтинг не оценивает студентов и не назначает исполнителей автоматически.

2. Роли

РольЧто пользователь должен уметь
ПосетительПросматривать каталог и опубликованные карточки без входа
БизнесСоздавать свои черновики, отвечать на вопросы, редактировать и публиковать карточки, сравнивать отклики, принимать решения
Студент / командаИзучать задачи и отправлять предложение: идею, план и при наличии ссылку на прототип

Бизнес управляет только своими задачами. Студент не может менять чужую карточку, публиковать её или выбирать исполнителей. В MVP один аккаунт студента представляет команду; полноценный реестр команд и управление составом можно добавить позже.

3. Как продукт должен работать

Шаг 1. Свободное описание

Бизнес описывает проблему своими словами. На первом экране не нужно требовать готового технического задания.

Пример: «У нас кофейня. Продажи ведём в таблице, но не понимаем, какие товары приносят основную выручку. Хотим видеть понятный отчёт».

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

Шаг 2. Уточнение с AI

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

Вопросы должны быть конкретными и связанными с задачей. Пользователь отвечает только известными фактами; неизвестные сведения можно оставить незаполненными. AI не должен придумывать ответы за бизнес.

В идеальном взаимодействии вопросы учитывают предыдущие ответы, а ошибки сервиса не приводят к потере черновика.

Шаг 3. Карточка задачи

Из описания и ответов формируется редактируемая карточка:

ПолеЧто в нём должно быть
НазваниеКраткое описание задачи
Контекст и потребностьЧто происходит сейчас и какую проблему нужно решить
Данные и материалыКакие таблицы, примеры, документы или другие материалы доступны
Ожидаемый результатКакой конкретный результат должна подготовить команда
Критерии успехаПо каким признакам бизнес примет решение как успешное
ОграниченияСроки, бюджет, технологии и другие условия
ПользователиКто будет пользоваться результатом
Связь с бизнесомКто сможет отвечать на вопросы и давать обратную связь

Бизнес проверяет каждое поле и исправляет формулировки. Сборка карточки сама по себе не публикует задачу.

Шаг 4. Рейтинг готовности

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

Высокий рейтинг помогает задаче занимать более высокую позицию в каталоге. Низкий рейтинг показывает недостаток информации, но не запрещает публикацию и отклики.

Шаг 5. Подтверждение и публикация

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

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

Шаг 6. Отклики команд

Любая команда может предложить решение опубликованной задачи независимо от её рейтинга. Отклик содержит:

  • идею решения;
  • план реализации;
  • необязательную ссылку на прототип.

Отклик не означает автоматическое назначение команды.

Шаг 7. Ручной выбор бизнеса

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

4. Геймификация и рейтинг

Рейтинг карточки — от 0 до 100.

ПолеБаллы
Контекст и потребность20
Данные и материалы20
Ожидаемый результат15
Критерии успеха15
Ограничения10
Пользователи10
Связь с бизнесом10
Итого100
БаллыУровень
0–39Черновик
40–69Рабочая
70–89Готовая
90–100Приоритетная

В MVP расчёт простой: непустое поле получает весь свой вес, пустое — ноль. Название не добавляет баллы. Рейтинг рассчитывается кодом, а не произвольным решением AI.

Полнота не равна достоверности или качеству текста. Проверка содержательности может развиваться отдельно; она не должна незаметно менять заданную формулу.

5. Роль AI и границы автоматизации

Обязательная AI-функция проекта — анализ полноты описания и генерация уточняющих вопросов. Сборка карточки из ответов может выполняться обычным кодом.

Целевые дополнительные возможности:

ВозможностьНазначение
Последовательный диалогУточнять следующий вопрос с учётом уже сохранённых ответов
Предложение названияПомочь кратко сформулировать задачу с возможностью ручной правки
Подсказки по полнотеОбъяснить, каких сведений не хватает и как улучшить описание
Поиск похожих задачПомочь найти близкие потребности, не запрещая создание новой задачи
Разбор откликаВыделить соответствие задаче, пробелы и вопросы к команде
Рекомендации студентамПомочь найти подходящие задачи, сохраняя открытость каталога

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

6. Устройство системы

Предполагаемый путь запроса:

Браузер → Nuxt / Nitro → API Gateway → сервис → база данных
                                      └─ AI-сервис → внешний AI-провайдер
ЧастьОтветственность
Frontend: Nuxt 4, Vue 3, TypeScript, Nuxt UI, Tailwind CSSФормы, каталог, карточки, рейтинг, отклики и интерфейс выбора
NitroСерверное проксирование API и работа с сессиями
API Gateway: FastAPIМаршрутизация запросов, общие проверки и ограничение частоты
Auth serviceПользователи, роли, вход и токены
Catalog serviceЧерновики, карточки, рейтинг, публикация, отклики и решения
AI serviceОбращение к провайдеру и обработка ответа
SQLite / PostgreSQL, SQLAlchemy, AlembicХранение данных и обновление схемы каталога

Основные модели:

МодельНазначение
TaskDraftИсходное описание и владелец
ClarifyingQuestionУточняющий вопрос и ответ
TaskCardРедактируемое описание задачи
RatingBreakdownБаллы по семи полям
CatalogEntryПубликация подтверждённой карточки
ProposalПредложение команды
SelectionDecisionРучное решение бизнеса

7. План реализации MVP

Это план работ по продукту; строки не обозначают текущие статусы выполнения.

ЭтапЧто сделатьОжидаемый результат
1. ОсноваНастроить сервисы, базу, роли и взаимодействие frontend/backendПриложение запускается, действия разделены по ролям
2. Подготовка задачиСоздать черновики, подключить AI-вопросы и сохранение ответовБизнес проходит путь от свободного текста до структурированных сведений
3. Карточка и рейтингДобавить сборку, редактирование, расчёт баллов и подтверждениеПользователь видит готовность задачи и контролирует публикацию
4. КаталогОткрыть чтение опубликованных задач, сортировку и пагинациюЛюбая команда может найти задачу, включая задачи с низким рейтингом
5. Отклики и выборДобавить предложения и сравнение, ручное решение 0/1/несколькоСквозной сценарий завершается выбором бизнеса
6. Подготовка демонстрацииДобавить демоданные, обработку ошибок, инструкции и проверкиСценарий можно воспроизвести перед жюри

Приоритет — работающий сквозной сценарий. Дополнительные AI-подсказки и улучшения интерфейса развиваются после его основной реализации.

8. Критерии приёмки

MVP считается готовым к демонстрации, когда подтверждены следующие условия:

  • Бизнес может сохранить свободное описание и вернуться к черновику.
  • При реальном AI-вызове формируются минимум три вопроса по недостающим сведениям.
  • Из ответов собирается редактируемая карточка без добавления неизвестных фактов.
  • Рейтинг соответствует весам, остаётся в диапазоне 0–100 и пересчитывается при изменениях.
  • Публикация требует явного подтверждения владельца.
  • Опубликованная карточка видна без входа; каталог сортируется по рейтингу.
  • Низкий рейтинг не запрещает публикацию и отправку отклика.
  • Команда может отправить идею, план и ссылку на прототип.
  • Бизнес может вручную выбрать одну, несколько или ни одной команды.
  • Данные и решение сохраняются после обновления страницы.
  • Чужие черновики и операции изменения защищены проверкой роли и владельца.
  • Ошибки AI не приводят к потере уже сохранённой работы.

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

9. Прототип и запуск

В репозитории есть интерфейс бизнеса и студентов, сервисы авторизации, каталога и AI, локальные демоданные, поддержка ru/kk/en и автоматические проверки. Возможности проверяются на конкретной версии кода; этот документ не заменяет итоговую приёмку.

0. Подготовка на новом компьютере

  1. Установите Python 3.10+ и Node.js 22 (npm входит в установку Node.js). На Windows при установке Python включите Add python.exe to PATH. После установки откройте новый терминал.

  2. Установите закреплённую в проекте версию pnpm:

    npm install --global [email protected]
    node --version
    pnpm --version
    

    Ожидаемые версии: Node.js v22.x, pnpm 12.4.1. Python проверьте командой py -3 --version на Windows или python3 --version на Linux / macOS. На Linux также должны быть установлены модули venv и pip для выбранной версии Python.

  3. Скачайте и распакуйте ZIP репозитория либо клонируйте его через Git:

    git clone https://github.com/BAITC-Hacks/hack-a48bb046-prompt-pray.git
    cd hack-a48bb046-prompt-pray
    

    Git нужен только для клонирования. Если репозиторий закрытый, потребуется доступ к нему на GitHub.

  4. Откройте два терминала в корне проекта — папке с этим README и каталогами backend и frontend. В первом запустите backend, во втором frontend по шагам ниже. Оба терминала должны оставаться открытыми во время работы приложения.

Окружение

ИнструментВерсия
Python3.10+; для локальной разработки рекомендуется 3.12
Node.js22.19+ в ветке 22.x или 24.11+ в ветке 24.x
pnpm12.4.1, закреплена в frontend/package.json

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

Первый терминал — backend. Из корня репозитория, Windows PowerShell:

cd backend
.\start.bat

Linux / macOS:

cd backend
bash start.sh

Скрипт подготавливает .venv, зависимости и .env, затем запускает сервисы. Дождитесь сообщения «Бэкенд запущен». Данные сохраняются в backend/data/. В режиме development создаются демоданные; флаг --no-demo отключает их создание.

Второй терминал — frontend. Из корня репозитория:

cd frontend
pnpm install
pnpm dev

По умолчанию frontend обращается к http://127.0.0.1:8000. Если gateway запущен по другому адресу, скопируйте frontend/.env.example в frontend/.env и измените NUXT_GATEWAY_URL.

Страница или сервисАдрес
Приложениеhttp://localhost:3000
Каталогhttp://localhost:3000/catalog
Входhttp://localhost:3000/login
Личный кабинетhttp://localhost:3000/account
Создание задачиhttp://localhost:3000/tasks/new
Состояние backendhttp://localhost:8000/health
Swagger каталогаhttp://localhost:8004/api/v1/docs
Swagger авторизацииhttp://localhost:8001/api/v1/docs

Остановка — Ctrl+C в обоих терминалах. Запуск с PostgreSQL и Docker описан в backend/README.md.

Настройка AI и режим без ключа

Для реального AI укажите OPENAI_API_KEY в backend/.env; при необходимости настройте OPENAI_MODEL и перезапустите backend. Ключ используется на сервере; файл .env не должен попадать в Git.

При ошибке начальной генерации прототип может сохранить шесть заранее подготовленных вопросов на ru/kk/en. Это позволяет продолжить сценарий без внешнего AI. Резервные вопросы и демозадачи не являются результатом работы модели.

Сохранённый набор вопросов возвращается при повторном запросе. После подключения ключа создайте новый черновик для проверки реальной генерации. При использовании резервного набора в логах каталога появляется Using fallback clarification questions.

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

Сценарий демонстрации

На свежей локальной базе:

ЛогинРольПароль
user1Бизнесpassword123
user2Студент / командаpassword123
user3Студент / командаpassword123

Это публичные данные для локального демо. Также поддерживается вход по email, например [email protected].

  1. Открыть каталог без входа и показать задачи с разным рейтингом.
  2. Войти как user1, создать задачу и получить уточняющие вопросы.
  3. Сохранить ответы, ввести название, собрать карточку и проверить её.
  4. Дополнить поля, показать изменение рейтинга и подтвердить публикацию.
  5. Войти как user2 и отправить отклик: идею, план, при необходимости ссылку.
  6. Войти как user1, сравнить предложения и вручную сохранить решение.
  7. Обновить страницу и показать, что данные сохранились.

Для короткого демо можно использовать подготовленные задачи: продажи кофейни, заявки мастерской и отзывы магазина. На задаче кофейни уже есть два отклика. Повторный запуск сохраняет изменения, поэтому демобаза после показа может отличаться от первоначальной.

Команды проверок

Из backend/ в Windows:

.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.\.venv\Scripts\python.exe scripts/run_tests.py
.\.venv\Scripts\python.exe scripts/test_frontend.py

На Linux / macOS используйте .venv/bin/python.

Из frontend/:

pnpm lint
pnpm typecheck
node --test tests/*.test.mjs
pnpm build
pnpm exec playwright install chromium
pnpm test:browser

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

Частые затруднения

СитуацияЧто проверить
Не запускается frontendВерсии Node.js и pnpm, завершение pnpm install
Заняты порты backendПорты 8000–8004 и настройки backend/.env
Не загружается каталогСостояние gateway, логи backend, NUXT_GATEWAY_URL
Нет демоданныхENV=development, отсутствие --no-demo, сообщения подготовки данных
Появляются стандартные вопросыКлюч, модель, доступ к AI и логи; для новой генерации нужен новый черновик
Не собирается карточка без ключаНазвание заполнено вручную; дополнительные AI-действия отключены
Конфликт версии карточкиЗагрузить актуальную карточку и согласовать изменения перед сохранением

Первый вход и повторный запуск

Откройте http://localhost:3000/catalog — каталог доступен без регистрации. Для проверки действий бизнеса войдите на http://localhost:3000/login с логином user1 и паролем password123; для отклика студента используйте user2 с тем же паролем. Эти аккаунты создаются при первом локальном запуске с демоданными; создавать собственный аккаунт для знакомства с проектом не нужно.

При следующих запусках снова выполните start.bat / bash start.sh в backend и pnpm dev в frontend. Повторная установка pnpm не нужна; pnpm install повторяйте после обновления зависимостей проекта.

Если запуск не удался:

СимптомЧто сделать
Команда python, node или pnpm не найденаПроверьте установку нужного инструмента и PATH, затем откройте новый терминал. На Windows Python также доступен через py -3.
PowerShell блокирует npm.ps1 или pnpm.ps1Используйте npm.cmd и pnpm.cmd вместо npm и pnpm в командах выше.
Backend сообщает о занятом портеОстановите предыдущий экземпляр приложения. По умолчанию backend использует порты 8000–8004, frontend — 3000.
Интерфейс открыт, но каталог или вход не работаютДождитесь сообщения «Бэкенд запущен», проверьте http://localhost:8000/health и адрес NUXT_GATEWAY_URL, если меняли порт gateway.
При генерации вопросов появляется ai_unavailableПроверьте OPENAI_API_KEY в backend/.env, доступность AI-провайдера и перезапустите backend. Каталог и демосценарий можно проверять без ключа.

10. Границы MVP и развитие

В минимальный объём не входят полноценный проектный трекер, real-time чат, сложное управление ролями, обучение собственной модели и обязательная мобильная адаптация.

После MVP можно развивать управление составом команд, уведомления, обратную связь, аналитику качества описаний, более точные рекомендации и сопровождение совместной работы. Автоматический выбор команды за бизнес не является целью развития.

В коде могут сохраняться страницы исходного Nuxt SaaS Template, например блог и тарифы. Они не входят в продуктовый сценарий AI Sana.

11. Команда и документация

УчастникОсновное направление вклада
RiffaellsBackend, AI, бизнес-логика каталога и интеграция frontend/backend
Улан (Ulan71)Роли, каркас каталога, язык AI-уточнений и защита версий карточек
Ермухан (Kayniev)Frontend, локализация и браузерные проверки

Участки реализации пересекаются; подробнее — в описании вклада команды.

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

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

Riffaells 31Ulan71 12Kayniev 10

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

  • 2026-09-23 17:51merge: combine rewards, catalog decisions and demo updatesRiffaells
  • 2026-09-23 17:49docs: add demo video and README linkRiffaells
  • 2026-09-23 17:45FINALY READMEKayniev
  • 2026-09-23 17:42feat: add business rewards, engagement and template modeRiffaells
  • 2026-09-23 17:38Merge branch 'codex/demo-dataset'Ulan71
  • 2026-09-23 17:32docs(roadmap): plan AI task translations for ru kk enUlan71
  • 2026-09-23 17:32feat(demo): expand hackathon dataset and preserve user editsUlan71
  • 2026-09-23 17:09readmeKayniev
Все коммиты (46)
  • 2026-09-23 17:06Merge remote-tracking branch 'origin/main' into codex/docs-roadmapUlan71
  • 2026-09-23 17:05merge: sync remote main with task workflow updatesRiffaells
  • 2026-09-23 17:04chore: save latest configuration and documentation updatesRiffaells
  • 2026-09-23 17:04Merge remote-tracking branch 'origin/main' into codex/docs-roadmapUlan71
  • 2026-09-23 17:04docs: добавить ссылки на дорожную картуUlan71
  • 2026-09-23 17:03feat: update task workflow and interfaceRiffaells
  • 2026-09-23 17:02roadmapUlan71
  • 2026-09-23 16:53test: align browser checks with automatic draft language and dashboardKayniev
  • 2026-09-23 16:47Merge remote-tracking branch 'origin/main'Kayniev
  • 2026-09-23 16:45test: complete multilingual MVP browser coverage and SSR fixesKayniev
  • 2026-09-23 16:37feat: update AI task creation workflowRiffaells
  • 2026-09-23 16:32merge: sync main and preserve account dashboard with localizationRiffaells
  • 2026-09-23 16:21feat: update account dashboardRiffaells
  • 2026-09-23 16:18docs: sync backend contracts and add API test examplesRiffaells
  • 2026-09-23 16:16Merge origin/main and integrate localized task workflowsKayniev
  • 2026-09-23 16:05feat: localize MVP in ru kk en and refine frontend UIKayniev
  • 2026-09-23 16:05merge: integrate remote card versions and locale with catalog migrationsRiffaells
  • 2026-09-23 15:59feat: add demo data, catalog migrations and proxy fixesRiffaells
  • 2026-09-23 15:58feat(catalog): добавить язык AI-уточнений и защиту версий карточекUlan71
  • 2026-09-23 15:31Merge branch 'main' of https://github.com/BAITC-Hacks/hack-a48bb046-prompt-prayUlan71
  • 2026-09-23 15:09fix: integrate frontend task workflow with backendRiffaells
  • 2026-09-23 14:50newKayniev
  • 2026-09-23 14:47Merge branch 'feat/T-11-task-flow'Kayniev
  • 2026-09-23 14:42front 1vKayniev
  • 2026-09-23 14:35Merge branch 'feat/T-2-catalog-service' into mainRiffaells
  • 2026-09-23 14:27docs: добавить отчёт Улана по backend-задачамUlan71
  • 2026-09-23 14:18docs: обновить AI.md — фронтенд подключён к gatewayRiffaells
  • 2026-09-23 14:18chore(board): отметить T-1..T-14 in_progress с деталями реализацииRiffaells
  • 2026-09-23 14:18feat(frontend): подключить фронтенд к gateway (auth, каталог AI Sana)Riffaells
  • 2026-09-23 14:18test(backend): контрактные проверки формата ошибок в example_serviceRiffaells
  • 2026-09-23 14:18feat(catalog): сервис каталога бизнес-задач AI SanaRiffaells
  • 2026-09-23 14:18feat(auth): роли business/student и миграция существующей БДRiffaells
  • 2026-09-23 14:17test(backend): контрактные тесты ai_service и его маршрутизация в gatewayRiffaells
  • 2026-09-23 14:16feat(backend): добавить каркас catalog_serviceUlan71
  • 2026-09-23 14:04feat(auth): добавить роли business и studentUlan71
  • 2026-09-23 13:46new dayRiffaells
  • 2026-09-23 13:41newRiffaells
  • 2026-09-23 13:11firstRiffaells
Структура репозитория (360 файлов)
.gitignore
.team/done.json
.team/queue.json
.team/teams.json
AGENTS.md
AI.md
README.md
backend/.dockerignore
backend/.env.example
backend/.gitattributes
backend/.gitignore
backend/README.md
backend/ai_service/Dockerfile
backend/ai_service/app/__init__.py
backend/ai_service/app/core/__init__.py
backend/ai_service/app/core/config.py
backend/ai_service/app/main.py
backend/ai_service/app/schemas.py
backend/ai_service/app/services/__init__.py
backend/ai_service/app/services/generation.py
backend/ai_service/pytest.ini
backend/ai_service/requirements.txt
backend/ai_service/tests/conftest.py
backend/ai_service/tests/test_errors.py
backend/ai_service/tests/test_generation.py
backend/api_gateway/Dockerfile
backend/api_gateway/app/__init__.py
backend/api_gateway/app/api/__init__.py
backend/api_gateway/app/api/router.py
backend/api_gateway/app/api/routes/__init__.py
backend/api_gateway/app/api/routes/proxy.py
backend/api_gateway/app/core/__init__.py
backend/api_gateway/app/core/config.py
backend/api_gateway/app/core/health.py
backend/api_gateway/app/core/proxy.py
backend/api_gateway/app/main.py
backend/api_gateway/pytest.ini
backend/api_gateway/requirements.txt
backend/api_gateway/tests/conftest.py
backend/api_gateway/tests/test_gateway.py
backend/api_gateway/tests/test_rate_limit.py
backend/auth_service/Dockerfile
backend/auth_service/app/__init__.py
backend/auth_service/app/api/__init__.py
backend/auth_service/app/api/deps.py
backend/auth_service/app/api/router.py
backend/auth_service/app/api/routes/__init__.py
backend/auth_service/app/api/routes/auth.py
backend/auth_service/app/api/routes/users.py
backend/auth_service/app/core/__init__.py
backend/auth_service/app/core/config.py
backend/auth_service/app/core/security.py
backend/auth_service/app/db/__init__.py
backend/auth_service/app/db/migrations.py
backend/auth_service/app/db/session.py
backend/auth_service/app/main.py
backend/auth_service/app/models/__init__.py
backend/auth_service/app/models/user.py
backend/auth_service/app/repositories/__init__.py
backend/auth_service/app/repositories/user.py
backend/auth_service/app/schemas/__init__.py
backend/auth_service/app/schemas/auth.py
backend/auth_service/app/schemas/user.py
backend/auth_service/app/services/__init__.py
backend/auth_service/app/services/auth.py
backend/auth_service/pytest.ini
backend/auth_service/requirements.txt
backend/auth_service/tests/conftest.py
backend/auth_service/tests/test_auth_flow.py
backend/auth_service/tests/test_roles.py
backend/catalog_service/Dockerfile
backend/catalog_service/README.md
backend/catalog_service/app/__init__.py
backend/catalog_service/app/api/__init__.py
backend/catalog_service/app/api/assistance.py
backend/catalog_service/app/api/deps.py
backend/catalog_service/app/api/endpoints/__init__.py
backend/catalog_service/app/api/router.py
backend/catalog_service/app/core/__init__.py
backend/catalog_service/app/core/config.py
backend/catalog_service/app/db/__init__.py
backend/catalog_service/app/db/card_version_migration.py
backend/catalog_service/app/db/migrate.py
backend/catalog_service/app/db/migrations/__init__.py
backend/catalog_service/app/db/migrations/baseline.py
backend/catalog_service/app/db/migrations/env.py
backend/catalog_service/app/db/migrations/versions/0001_catalog.py
backend/catalog_service/app/db/migrations/versions/0002_locale_version.py
backend/catalog_service/app/db/migrations/versions/0003_catalog_decisions.py
backend/catalog_service/app/db/migrations/versions/0003_rewards.py
backend/catalog_service/app/db/migrations/versions/0004_engagement.py
backend/catalog_service/app/db/migrations/versions/0005_merge_rewards_decisions.py
backend/catalog_service/app/db/session.py
backend/catalog_service/app/main.py
backend/catalog_service/app/models/__init__.py
backend/catalog_service/app/models/domain.py
backend/catalog_service/app/repositories/__init__.py
backend/catalog_service/app/repositories/catalog.py
backend/catalog_service/app/schemas/__init__.py
backend/catalog_service/app/schemas/domain.py
backend/catalog_service/app/services/__init__.py
backend/catalog_service/app/services/assistance.py
backend/catalog_service/app/services/catalog.py
backend/catalog_service/app/services/draft_language.py
backend/catalog_service/app/services/fallback_questions.py
backend/catalog_service/app/services/questions.py
backend/catalog_service/app/services/rewards.py
backend/catalog_service/pytest.ini
backend/catalog_service/requirements.txt
backend/catalog_service/tests/conftest.py
backend/catalog_service/tests/test_ai_questions.py
backend/catalog_service/tests/test_assembly.py
backend/catalog_service/tests/test_assistance.py
backend/catalog_service/tests/test_assistance_concurrency.py
backend/catalog_service/tests/test_assistance_edges.py
backend/catalog_service/tests/test_card_version.py
backend/catalog_service/tests/test_card_version_migration.py
backend/catalog_service/tests/test_catalog_filters_decisions.py
backend/catalog_service/tests/test_concurrent_questions.py
backend/catalog_service/tests/test_decision_order.py
backend/catalog_service/tests/test_demo_seed.py
backend/catalog_service/tests/test_domain.py
backend/catalog_service/tests/test_draft_edit.py
backend/catalog_service/tests/test_draft_locale.py
backend/catalog_service/tests/test_engagement.py
backend/catalog_service/tests/test_locale_migration.py
backend/catalog_service/tests/test_migrations.py
backend/catalog_service/tests/test_reward_rating_isolation.py
backend/catalog_service/tests/test_rewards.py
backend/catalog_service/tests/test_workflow.py
backend/common/__init__.py
backend/common/app.py
backend/common/auth.py
backend/common/config.py
backend/common/db.py
backend/common/exceptions.py
backend/common/logger.py
backend/common/middleware.py
backend/common/requirements-db.txt
backend/common/requirements.txt
backend/common/security.py
backend/dev.bat
backend/dev.sh
backend/docker-compose.dev.yml
backend/docker-compose.yml
backend/down.bat
backend/down.sh
backend/example_service/Dockerfile
backend/example_service/app/__init__.py
backend/example_service/app/api/__init__.py
backend/example_service/app/api/deps.py
backend/example_service/app/api/endpoints/__init__.py
backend/example_service/app/api/endpoints/items.py
backend/example_service/app/api/router.py
backend/example_service/app/core/__init__.py
backend/example_service/app/core/config.py
backend/example_service/app/db/__init__.py
backend/example_service/app/db/session.py
backend/example_service/app/main.py
backend/example_service/app/models/__init__.py
backend/example_service/app/models/item.py
backend/example_service/app/repositories/__init__.py
backend/example_service/app/repositories/item.py
backend/example_service/app/schemas/__init__.py
backend/example_service/app/schemas/item.py
backend/example_service/pytest.ini
backend/example_service/requirements.txt
backend/example_service/tests/conftest.py
backend/example_service/tests/test_items.py
backend/logs.bat
backend/logs.sh
backend/postgres-init/01-create-databases.sh
backend/prod.bat
backend/prod.sh
backend/requirements-dev.txt
backend/requirements-local.txt
backend/scripts/browser_ai_fixture.py
backend/scripts/demo_data.json
backend/scripts/generate_secrets.py
backend/scripts/run_local.py
backend/scripts/run_tests.py
backend/scripts/seed_demo.py
backend/scripts/smoke_catalog.py
backend/scripts/test_frontend.py
backend/start-postgres.bat
backend/start-postgres.sh
backend/start.bat
backend/start.sh
demo.mp4
docs/README.md
docs/ai-assistance.md
docs/api-standards.md
docs/api-test-texts.json
docs/api-test-texts.md
docs/architecture.md
docs/catalog-api.md
docs/demo-data.md
docs/engagement.md
docs/error-handling-review.md
docs/roadmap.md
docs/team-contributions.md
docs/ulan-work-report.md
frontend/.editorconfig
frontend/.env.example
frontend/.github/workflows/ci.yml
frontend/.gitignore
frontend/FRONTEND_REVIEW.md
frontend/LICENSE
frontend/README.md
frontend/app/app.config.ts
frontend/app/app.vue
frontend/app/assets/css/main.css
frontend/app/components/AccountForm.vue
frontend/app/components/AppCard.vue
frontend/app/components/AppEmptyState.vue
frontend/app/components/AppFooter.vue
frontend/app/components/AppHeader.vue
frontend/app/components/AppLogo.vue
frontend/app/components/AppPageHeading.vue
frontend/app/components/AuthAvailability.vue
frontend/app/components/BusinessRewards.vue
frontend/app/components/HeroBackground.vue
frontend/app/components/ImagePlaceholder.vue
frontend/app/components/LanguageSwitcher.vue
frontend/app/components/OgImage/Saas.takumi.vue
frontend/app/components/ProgressLeaderboard.vue
frontend/app/components/PromotionalVideo.vue
frontend/app/components/README.md
frontend/app/components/StarsBg.vue
frontend/app/components/TemplateMenu.vue
frontend/app/components/catalog/CatalogTaskCard.vue
frontend/app/components/content/PictureAndText.vue
frontend/app/components/content/Pictures.vue
frontend/app/components/tasks/TaskAiAdvice.vue
frontend/app/components/tasks/TaskAiLoading.vue
frontend/app/components/tasks/TaskCardFields.vue
frontend/app/components/tasks/TaskDetails.vue
frontend/app/components/tasks/TaskProposalCard.vue
frontend/app/components/tasks/TaskProposalForm.vue
frontend/app/components/tasks/TaskProposalSelection.vue
frontend/app/components/tasks/TaskQuestion.vue
frontend/app/components/tasks/TaskRating.vue
frontend/app/components/tasks/TaskWorkflow.vue
frontend/app/composables/useApi.ts
frontend/app/composables/useApiMessages.ts
frontend/app/composables/useAppI18n.ts
frontend/app/composables/useAuthAvailability.ts
frontend/app/composables/useLocalizedForm.ts
frontend/app/composables/useRewardFeedback.ts
frontend/app/composables/useSession.ts
frontend/app/composables/useSessionApi.ts
frontend/app/composables/useTasks.ts
frontend/app/composables/useTemplateMode.ts
frontend/app/data/demo-tasks.ts
frontend/app/error.vue
frontend/app/i18n/config.ts
frontend/app/i18n/locales/en.ts
frontend/app/i18n/locales/kk.ts
frontend/app/i18n/locales/ru.ts
frontend/app/i18n/messages/en.ts
frontend/app/i18n/messages/kk.ts
frontend/app/i18n/messages/ru.ts
frontend/app/layouts/auth.vue
frontend/app/layouts/default.vue
frontend/app/layouts/docs.vue
frontend/app/middleware/00.template.global.ts
frontend/app/middleware/auth.ts
frontend/app/middleware/session.global.ts
frontend/app/pages/account.vue
frontend/app/pages/blog.vue
frontend/app/pages/blog/[slug].vue
frontend/app/pages/blog/index.vue
frontend/app/pages/catalog.vue
frontend/app/pages/changelog/index.vue
frontend/app/pages/docs/[...slug].vue
frontend/app/pages/index.vue
frontend/app/pages/login.vue
frontend/app/pages/pricing.vue
frontend/app/pages/signup.vue
frontend/app/pages/tasks/[id].vue
frontend/app/pages/tasks/[id]/proposals.vue
frontend/app/pages/tasks/new.vue
frontend/app/plugins/activity.client.ts
frontend/app/plugins/i18n.ts
frontend/app/types/api.ts
frontend/app/types/catalog.ts
frontend/app/types/index.d.ts
frontend/app/utils/api-error.ts
frontend/app/utils/auth-redirect.ts
frontend/app/utils/links.ts
frontend/app/utils/task-rating.ts
frontend/app/utils/task-validation.ts
frontend/bun.lock
frontend/content.config.ts
frontend/content/0.index.yml
frontend/content/1.docs/1.getting-started/.navigation.yml
frontend/content/1.docs/1.getting-started/1.index.md
frontend/content/1.docs/1.getting-started/2.installation.md
frontend/content/1.docs/1.getting-started/3.usage.md
frontend/content/1.docs/2.essentials/.navigation.yml
frontend/content/1.docs/2.essentials/1.markdown-syntax.md
frontend/content/1.docs/2.essentials/2.code-blocks.md
frontend/content/1.docs/2.essentials/3.prose-components.md
frontend/content/1.docs/2.essentials/4.images-embeds.md
frontend/content/2.pricing.yml
frontend/content/3.blog.yml
frontend/content/3.blog/1.asian-cuisine.md
frontend/content/3.blog/2.pyrenees.md
frontend/content/3.blog/3.james-webb.md
frontend/content/3.blog/4.meditation.md
frontend/content/3.blog/5.animals.md
frontend/content/3.blog/6.cryptocurrencies.md
frontend/content/4.changelog.yml
frontend/content/4.changelog/1.launch.md
frontend/content/4.changelog/10.fun.md
frontend/content/4.changelog/2.teams.md
frontend/content/4.changelog/3.dark-mode.md
frontend/content/4.changelog/4.integrations.md
frontend/content/4.changelog/5.mobile.md
frontend/content/4.changelog/6.performance.md
frontend/content/4.changelog/7.analytics.md
frontend/content/4.changelog/8.api.md
frontend/content/4.changelog/9.security.md
frontend/demo/TaskProposals.vue
frontend/deploy/nginx.conf.example
frontend/eslint.config.mjs
frontend/nuxt.config.ts
frontend/package.json
frontend/playwright.config.ts
frontend/pnpm-lock.yaml
frontend/pnpm-workspace.yaml
frontend/public/demo/prototypes.html
frontend/public/favicon.ico
frontend/renovate.json
frontend/server/api/gateway/[...path].ts
frontend/server/api/session/[action].post.ts
frontend/server/middleware/client-ip.ts
frontend/server/utils/request-origin.ts
frontend/shared/types/auth.ts
frontend/shared/types/tasks.ts
frontend/tests/ai-assistance.test.mjs
frontend/tests/auth-language.test.mjs
frontend/tests/auth.integration.mjs
frontend/tests/browser/README.md
frontend/tests/browser/mvp.spec.mjs
frontend/tests/card-version.test.mjs
frontend/tests/catalog.integration.mjs
frontend/tests/client-ip.test.mjs
frontend/tests/draft-locale.test.mjs
frontend/tests/helpers/i18n.mjs
frontend/tests/i18n.integration.mjs
frontend/tests/i18n.test.mjs
frontend/tests/reward-feedback.test.mjs
frontend/tests/run-browser.mjs
frontend/tests/service-availability.integration.mjs
frontend/tests/service-availability.test.mjs
frontend/tests/task-create.test.mjs
frontend/tests/tasks.test.mjs
frontend/tests/template-mode.test.mjs
frontend/tsconfig.json

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

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

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