AAYMA
RU
Войти

AI Sana

Платформа, где бизнес с помощью GPT превращает описание задачи в структурированную карточку для студентов, а студенческие команды откликаются из…

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

О проекте

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

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

Суть

Платформа, где бизнес с помощью GPT превращает описание задачи в структурированную карточку для студентов, а студенческие команды откликаются из каталога. Есть веб-версия на Cloudflare и Android APK (WebView), плюс альтернативная реализация «Практика» на FastAPI+React.

Как устроено

Бизнес описывает задачу, GPT (OpenAI Responses API, gpt-4.1-mini, строгая JSON Schema) предлагает структуру и уточняющие вопросы. Фактические поля заполняются только найденными цитатами из исходного текста, сервер проверяет эти цитаты. Правила качества дают объяснимый рейтинг полноты 0–100 с проверкой заглушек и повторов; он считается одинаково на клиенте и сервере и влияет на позицию в каталоге. Студенты откликаются командами из 3–5 человек, бизнес выбирает команду вручную. Данные хранятся в Cloudflare D1 через Drizzle.

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

  • strict JSON Schema
  • проверка цитат-источников
  • rule-based рейтинг полноты
  • Drizzle migrations
  • optimistic concurrency (контроль версии)

Особенности

Предложения ИИ показываются рядом с цитатами из исходного описания, а фактические разделы заполняются только найденными цитатами. Так снижается риск галлюцинаций. Команды не назначаются автоматически, решение остаётся за бизнесом. Помимо веба собран Android APK (WebView-оболочка). В репозитории много дублирующих папок-снимков.

Стек

React · TypeScript · Next.js · Vite · Cloudflare Workers · Cloudflare D1 · SQLite · Drizzle · Zod · Java · Android · FastAPI · SQLAlchemy · Playwright

Модели

gpt-4.1-mini


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

README

README.md

AI Sana — бизнес-задачи и студенческие команды

Бизнес формулирует. Студенты выбирают.

Скачать APK · Открыть веб-версию · Исходники Android · Исходники веб-приложения

Навигация по репозиторию

ПапкаНазначение
айсана апк 2Актуальная поставка: APK 1.1, SHA-256, исходники Android и обновлённого веб-приложения в ZIP, подробный README
ai-sanaБолее ранние исходники веб-платформы
ai sana 2Отдельный сохранённый снимок веб-проекта
ai sana apkПредыдущая Android-поставка
test2Самостоятельная реализация «Практика — Business × Students» на FastAPI и React
service-desk«Поток»: пример решения студенческой задачи — панель клиентских заявок
тестирование сайтаОтчёты QA, тестовые сценарии, фикстуры и результаты

Для демонстрации основной версии используйте опубликованный сайт или APK из «айсана апк 2». Для воспроизведения последнего обновления распакуйте именно её web-source.zip. Старые папки сохранены как предыдущие варианты. Приложения имеют отдельные хранилища и запускаются независимо; единой команды запуска из корня нет.

1. Название проекта

AI Sana — MVP для практического хакатона HackAlem AI. Актуальная поставка в папке «айсана апк 2» содержит Android-приложение версии 1.1, versionCode 2, пакет kz.aisana.practice. Требуется Android 8.0 или новее и интернет.

2. Проблема и аудитория

Первоначальное описание бизнес-задачи часто не объясняет проблему, результат и условия работы. Студентам трудно оценить объём задачи и предложить подходящее решение.

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

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

  • Карточка задачи с тремя этапами заполнения, черновиком и публикацией.
  • Объяснимый рейтинг полноты описания 0–100; подробные задачи выше в каталоге.
  • Проверка заглушек, однообразных повторов и почти одинакового текста в ключевых полях.
  • Поиск, фильтры по навыкам и статусу; кабинеты бизнеса и студента.
  • Отклик команды из 3–5 разных участников, просмотр предложений владельцем и ручной выбор команды.
  • Сохранение в базе данных, разграничение доступа и контроль версии при редактировании.
  • Парольные аккаунты бизнеса и студента; в браузере также предусмотрен вход через ChatGPT.
  • GPT-помощник с просмотром и выборочным применением предложений. Заполненные поля бизнеса сохраняются.
  • Цитаты из исходного описания рядом с предложениями ИИ. Фактические разделы заполняются найденными цитатами; ИИ предлагает название, резюме и навыки.
  • Резервная копия несохранённых полей в текущей вкладке и восстановление после перезагрузки.
  • Автоматическое обновление откликов и статуса выбора; безопасный повтор одинаковой отправки после обрыва связи.

Android-приложение — WebView-оболочка опубликованного сайта с кнопками «Назад», обновления и открытия в браузере, индикатором загрузки и экраном повторной попытки при сетевой ошибке. Для обновления веб-функций переустановка APK не требуется.

Другие приложения в репозитории

  • test2 / «Практика»: описание → три уточняющих вопроса → карточка из 10 полей → рейтинг → подтверждение и публикация; каталог с фильтрами и пагинацией; предложения с идеей, планом, сроком и контактом; принятие или отклонение команды. Переключение ролей демонстрационное, без настоящей авторизации.
  • service-desk / «Поток»: таблица клиентских заявок, статусы и ответственные, поиск и фильтры, сводка нагрузки, импорт и экспорт CSV. Начальные данные — 50 обезличенных заявок из example.csv.

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

  1. Бизнес входит и описывает потребность своими словами.
  2. По желанию отправляет описание GPT. Помощник предлагает структуру и уточняющие вопросы.
  3. Бизнес проверяет предложения, отмечает нужные поля и дополняет условия. Рейтинг пересчитывается по одним правилам на клиенте и сервере.
  4. Карточка сохраняется как черновик или публикуется в каталоге.
  5. Студент входит под своим аккаунтом, выбирает задачу и отправляет название команды, участников и план работы.
  6. Владелец задачи видит предложение и подтверждает выбор команды. Приём новых откликов завершается.

Команды не назначаются автоматически. Рейтинг описания не оценивает людей и не подтверждает ценность идеи.

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

КомпонентРеализация
AndroidJava, Android Activity и WebView; min SDK 26, compile/target SDK 35
Конфигурация AndroidAndroid Gradle Plugin 8.13.2, Java 8 source compatibility
ИнтерфейсReact 19, TypeScript, Lucide, CSS
Веб-сборкаVinext, Vite, маршруты Next App Router
СерверCloudflare Workers
ДанныеCloudflare D1 / SQLite, Drizzle для схемы и миграций
Проверка данныхZod, общая функция расчёта рейтинга
ИИOpenAI Responses API, строгая JSON Schema; модель по умолчанию gpt-4.1-mini, переопределяется OPENAI_MODEL

Дополнительные приложения:

ПапкаТехнологии
test2Python, FastAPI 0.115.14, SQLAlchemy 2.0.41, SQLite, Pydantic; React 19, TypeScript, React Router 7, Vite 7, Lucide; pytest и Playwright
service-deskHTML, CSS, JavaScript, localStorage; статический сервер Node.js и встроенный node:test

6. Архитектура

Android Activity → WebView → опубликованный React-интерфейс
                                 ↓
Браузер → тот же интерфейс → серверные маршруты API
                                 ├─ сессия, роль, владелец, проверка данных
                                 ├─ правила качества → рейтинг
                                 ├─ подготовленные SQL-запросы → D1
                                 └─ описание и черновик → OpenAI → проверка цитат

В архиве web-source.zip: app/components/ — экраны; app/api/ — API; lib/assistant.ts — GPT и проверка источников; lib/quality.ts — рейтинг; lib/repository.ts — операции базы; lib/draft-recovery.ts — восстановление; db/ и drizzle/ — схема и миграции.

Ключ OpenAI используется на сервере. APK и клиентский JavaScript не содержат ключа. Парольные сессии используют HttpOnly cookie; сервер хранит хэш токена. Резервная копия формы хранится в sessionStorage, отдельно для пользователя и задачи.

В test2 React обращается к FastAPI через прокси Vite /api; сервер сохраняет данные в SQLite. В service-desk обработка CSV и хранение выполняются в браузере; Node.js только раздаёт файлы. Эти приложения не подключены к базе основной AI Sana.

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

Установить APK

  1. Скачайте AI-Sana.apk на Android 8.0+.
  2. Откройте файл и разрешите установку из выбранного источника, если Android попросит.
  3. Запустите AI Sana при подключённом интернете.
  4. Войдите в предоставленный аккаунт бизнеса или студента. Пароли передаются отдельно.

Версия 1.1 подписана тем же ключом, что и ранее выложенная 1.0, и имеет более высокий код версии. При обычной установке она предназначена для обновления поверх прежнего приложения. Обновление на физическом устройстве пока не проверено.

Через Android Platform Tools:

adb install -r AI-Sana.apk

Контрольная сумма находится в AI-Sana.apk.sha256.

Запустить веб-приложение локально

Распакуйте web-source.zip, откройте каталог ai-sana. Требуются Node.js 22.13+ и npm; проверки выполнены на Node.js 24.20.

npm ci
npm run build
node --import ./scripts/sites-env.mjs ./node_modules/wrangler/bin/wrangler.js d1 execute DB --local --config dist/server/wrangler.json --persist-to .wrangler/state --file drizzle/0000_friendly_crusher_hogan.sql
node --import ./scripts/sites-env.mjs ./node_modules/wrangler/bin/wrangler.js d1 execute DB --local --config dist/server/wrangler.json --persist-to .wrangler/state --file drizzle/0001_concerned_may_parker.sql
node --import ./scripts/sites-env.mjs ./node_modules/wrangler/bin/wrangler.js d1 execute DB --local --config dist/server/wrangler.json --persist-to .wrangler/state --file drizzle/0002_kind_tarantula.sql
node scripts/create-demo-accounts.mjs ../private-accounts.json

Эти команды миграций предназначены для новой локальной базы. Скрипт создаст локальные аккаунты и запишет случайные пароли в ../private-accounts.json, а конфигурацию аккаунтов — в .dev.vars. Сохраните файл с паролями вне репозитория. Не запускайте создание аккаунтов поверх уже настроенных.

npm run dev
npm test
npm run typecheck
npm run build

При отсутствии OPENAI_API_KEY ручное заполнение, рейтинг, публикация и отклики работают. Для реального ИИ задайте ключ в серверном окружении; не добавляйте .dev.vars в Git.

Пересобрать Android

Распакуйте android-source.zip, установите JDK 17+, Android SDK Platform 35 и совместимый Gradle. Укажите SDK в ANDROID_HOME или local.properties, затем из каталога проекта выполните:

gradle assembleDebug

Gradle Wrapper в архив не включён. Debug-сборка будет подписана локальным debug-ключом и не является заменой опубликованного APK для установки поверх него. Поставленный APK собран средствами aapt2, javac, D8 и подписан библиотекой apksig; приватный ключ подписи не распространяется.

Запустить test2

Из корня репозитория; требуется Python 3.9+ и Node.js 22.12+ (либо 20.19+). Пример для macOS/Linux:

cd test2
python3 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.txt
npm --prefix frontend ci
.venv/bin/python -m database.seed
.venv/bin/python -m uvicorn backend.main:app --host 127.0.0.1 --port 8000

Во втором терминале из test2:

cd frontend
npm run dev

Windows: используйте .venv\Scripts\python.exe вместо .venv/bin/python. Интерфейс: http://127.0.0.1:5173, документация API: http://127.0.0.1:8000/docs. По умолчанию работает локальный mock-провайдер ИИ без ключа. Для OpenAI нужны AI_PROVIDER=openai, OPENAI_API_KEY; модель по умолчанию gpt-4o-mini. Подробности: test2/README.md.

Запустить service-desk

Требуется Node.js 20+, сторонних npm-зависимостей нет:

cd service-desk
npm start

Откройте http://127.0.0.1:4173. Проверки: npm test. Подробности: service-desk/README.md.

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

  1. Откройте сайт или APK, войдите как бизнес и создайте задачу с пометкой [ТЕСТ].
  2. Введите: «У нас сервисная компания. Менеджеры ведут заявки в нескольких таблицах, теряют обращения и забывают отвечать клиентам. Хотим видеть статус, ответственного и срок ответа в одном месте. Срок проекта пока не определён».
  3. Нажмите «Помочь с описанием», проверьте цитаты, снимите отметку с одного поля и примените выбранное. Снятое поле должно остаться пустым.
  4. Дополните проблему, желаемый результат, данные, аудиторию, результат передачи, сроки и критерии проверки. Сохраните черновик.
  5. Измените название без сохранения, перезагрузите страницу и нажмите «Восстановить». Новое название должно вернуться. Сохраните его.
  6. Опубликуйте задачу, затем войдите как студент. Отправьте предложение команды из трёх участников с конкретным планом.
  7. Войдите как бизнес, откройте свою задачу в «Мои задачи» и выберите команду. Перезагрузите страницу — решение должно сохраниться.
  8. Под студентом проверьте результат в «Мои отклики» или карточке задачи.

Проверено для этой версии: 19 автоматических тестов логики; 16 локальных API-проверок с двумя отдельными аккаунтами; TypeScript и production build; реальные ответы OpenAI; выборочное применение в браузере; восстановление после первого сохранения, редактирования и перезагрузки; экран шириной 390 px без горизонтального переполнения. Проверены подпись APK и метаданные версии. На эмуляторе и физическом Android APK не запускался.

Для test2 повторите сценарий через демонстрационное переключение ролей; backend-тесты запускаются из этой папки командой .venv/bin/python -m pytest backend/tests -q. Для «Потока» измените статус заявки, перезагрузите страницу, экспортируйте CSV и импортируйте его обратно. Отчёты в папке тестирования относятся к указанным в них этапам; они не заменяют проверку текущей версии.

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

Источник бизнес-задач — пользовательский ввод. Карточки, отклики, сессии и лимиты хранятся в D1. Владелец видит отклики на свои задачи; студент — свои предложения.

OpenAI получает описание и текущий черновик только по нажатию кнопки. Используются store: false, таймаут 45 секунд и лимит 10 попыток на пользователя в час. Это не обещание полного отсутствия хранения данных у провайдера. Не отправляйте секретные сведения.

Учебные примеры обозначены как примеры. Внешнего датасета, RAG, обучения собственной модели, CRM-интеграции и импорта CSV в самой платформе нет. Контактная почта открывается через mailto:; адреса тестовых аккаунтов @demo.invalid вымышленные.

В test2 данные хранятся в локальной SQLite (database/app.db), демонстрационная роль — в localStorage. OpenAI используется опционально; при недоступности провайдера включаются локальные правила. Подтверждённый живой GPT-вызов для этого отдельного варианта не заявляется.

В «Потоке» данные хранятся в localStorage; CSV переносит их между браузерами. При поддержке браузером WebMCP регистрируются инструменты list_requests и update_request. Собственных вызовов GPT в этом приложении нет.

10. Ограничения

  • Для APK нужен интернет; это оболочка веб-приложения, а не отдельный офлайн-клиент.
  • Приложение не опубликовано в Google Play и не испытано на физическом Android.
  • Вход через ChatGPT в APK открывает внешний браузер; сессия не переносится в WebView. Внутри APK используйте парольные аккаунты.
  • Нет самостоятельной регистрации, восстановления пароля, чата, push/email-уведомлений, загрузки файлов и удаления задач через интерфейс.
  • Рейтинг проверяет полноту текста; он не доказывает достоверность, полезность или выполнимость задачи.
  • ИИ может ошибиться в названии, резюме, навыках или выборе раздела для цитаты. Бизнес проверяет итоговую карточку.
  • Резервная копия действует в той же вкладке до 24 часов; после её закрытия и на другом устройстве нужен серверный черновик. История изменений не ведётся.
  • Один отклик студента на задачу; участники команды записываются текстом. Выбор команды нельзя отменить через интерфейс.
  • Каталог ограничен 500 свежими записями. Нет пагинации и рекомендаций по профилю.
  • Нет подтверждённых метрик внедрения у реальных компаний. Победа на хакатоне не гарантируется.

Ограничения отдельных приложений:

  • test2: отсутствуют настоящая авторизация и проверка владельца, загрузка файлов, антиспам и контроль одновременных правок. После принятия команды новые предложения всё ещё разрешены. Рейтинг оценивает заполненность; низкая оценка не запрещает публикацию.
  • service-desk: нет сервера данных, аккаунтов и синхронизации между устройствами; данные привязаны к браузеру. Между вкладками побеждает последняя запись. CRM и отправка сообщений не реализованы.

11. Ссылки и состав поставки

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

Подтверждённая публичная версия указана для основной AI Sana. Для test2 и service-desk подтверждённые deployed-ссылки в просмотренных исходниках не указаны.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
43
Авторы
4
Файлы
402
Ветки
2

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

amiko32 23Yume-Haruu 10Temirlan0947 7Темирлан 3

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

  • 2026-09-23 17:56Publish AI Sana Android 1.1 and repository-wide Russian READMEamiko32
  • 2026-09-23 17:17docs: link AI Sana stage 3 QA resultsYume-Haruu
  • 2026-09-23 17:16Delete README.mdamiko32
  • 2026-09-23 17:16test: publish AI Sana stage 3 QA report and fixturesYume-Haruu
  • 2026-09-23 17:15Delete Инструкция_для_участников_HackAlem_AI.pdfamiko32
  • 2026-09-23 17:15Delete тест первый directoryamiko32
  • 2026-09-23 17:14Delete test1 directoryamiko32
  • 2026-09-23 17:14Delete образование directoryamiko32
Все коммиты (43)
  • 2026-09-23 17:14Delete Новая папка/Новая папка directoryamiko32
  • 2026-09-23 17:14Delete Новая папка (2) directoryamiko32
  • 2026-09-23 16:54Add ai sana apk package with Russian hackathon READMEAmir
  • 2026-09-23 16:49test: publish QA materials in тестирование сайтаYume-Haruu
  • 2026-09-23 16:49docs: create тестирование сайта folderYume-Haruu
  • 2026-09-23 16:44Upload installable AI Sana Android APKAmir
  • 2026-09-23 16:44Remove completed one-time ownership transfer operationAmir
  • 2026-09-23 16:42test: record browser import and persistence QAYume-Haruu
  • 2026-09-23 16:39Clarify task ownership, show AI quality gains, add Android app and demo guideAmir
  • 2026-09-23 16:00test: add service desk CSV boundary coverage and deadline bug reproductionYume-Haruu
  • 2026-09-23 15:56Add current MVP as separate ai sana 2 folderAmir
  • 2026-09-23 15:49Add business and student password accounts with isolated rolesAmir
  • 2026-09-23 15:39feat: add service desk prototype with CSV import and persistenceYume-Haruu
  • 2026-09-23 15:38docs: record service desk acceptance resultsYume-Haruu
  • 2026-09-23 15:31Add files via uploadYume-Haruu
  • 2026-09-23 15:23Re-upload AI Sana web MVP with refined UIAmir
  • 2026-09-23 15:21Delete ai-sana directoryamiko32
  • 2026-09-23 15:14Refine AI Sana interface and responsive task flowsAmir
  • 2026-09-23 14:57Restore AI Sana web MVP and update public demo linksAmir
  • 2026-09-23 14:51Delete ai-sana directoryamiko32
  • 2026-09-23 14:37Add AI Sana web MVP and hackathon documentationAmir
  • 2026-09-23 14:30Add files via uploadamiko32
  • 2026-09-23 14:28Добавить папку тест первыйAmir
  • 2026-09-23 14:28Add files via uploadYume-Haruu
  • 2026-09-23 10:12Добавить папку образованиеAmir
  • 2026-09-23 17:25Improve Praktika UX and reliability in test2Temirlan0947
  • 2026-09-23 16:53docs(test2): align README with hackathon judging criteriaТемирлан
  • 2026-09-23 16:51docs(test2): prepare final handoff and five-minute demoТемирлан
  • 2026-09-23 16:29Complete integration QA and seed team profiles in test2Temirlan0947
  • 2026-09-23 16:03Add complete demo frontend and handoff to test2Temirlan0947
  • 2026-09-23 15:19Add completed backend MVP under test2Temirlan0947
  • 2026-09-23 15:06Set page configuration for AI Sana appTemirlan0947
  • 2026-09-23 14:51Update ai_helper.pyTemirlan0947
  • 2026-09-23 14:15Add AI Sana MVP to test1Темирлан
  • 2026-09-23 10:22Create test1 folderTemirlan0947
Структура репозитория (402 файлов)
README.md
ai sana 2/.dev.vars.example
ai sana 2/.env.example
ai sana 2/.gitignore
ai sana 2/.npmrc
ai sana 2/DEMO.md
ai sana 2/DESIGN.md
ai sana 2/PRODUCT.md
ai sana 2/README.md
ai sana 2/ROADMAP.md
ai sana 2/android/.gitignore
ai sana 2/android/AndroidManifest.xml
ai sana 2/android/README.md
ai sana 2/android/build.gradle
ai sana 2/android/releases/AI-Sana.apk
ai sana 2/android/releases/AI-Sana.apk.sha256
ai sana 2/android/res/drawable/ic_launcher.xml
ai sana 2/android/settings.gradle
ai sana 2/android/src/kz/aisana/practice/MainActivity.java
ai sana 2/app/api/assistant/route.ts
ai sana 2/app/api/auth/chatgpt/route.ts
ai sana 2/app/api/auth/login/route.ts
ai sana 2/app/api/auth/logout/route.ts
ai sana 2/app/api/responses/[id]/route.ts
ai sana 2/app/api/responses/route.ts
ai sana 2/app/api/tasks/[id]/responses/route.ts
ai sana 2/app/api/tasks/[id]/route.ts
ai sana 2/app/api/tasks/route.ts
ai sana 2/app/chatgpt-auth.ts
ai sana 2/app/components/catalog.tsx
ai sana 2/app/components/editor.tsx
ai sana 2/app/components/task-detail.tsx
ai sana 2/app/globals.css
ai sana 2/app/layout.tsx
ai sana 2/app/login/login-form.tsx
ai sana 2/app/login/page.tsx
ai sana 2/app/page.tsx
ai sana 2/app/workspace.tsx
ai sana 2/cloudflare-env.d.ts
ai sana 2/components.json
ai sana 2/components/ui/accordion.tsx
ai sana 2/components/ui/alert-dialog.tsx
ai sana 2/components/ui/alert.tsx
ai sana 2/components/ui/aspect-ratio.tsx
ai sana 2/components/ui/attachment.tsx
ai sana 2/components/ui/avatar.tsx
ai sana 2/components/ui/badge.tsx
ai sana 2/components/ui/breadcrumb.tsx
ai sana 2/components/ui/bubble.tsx
ai sana 2/components/ui/button-group.tsx
ai sana 2/components/ui/button.tsx
ai sana 2/components/ui/calendar.tsx
ai sana 2/components/ui/card.tsx
ai sana 2/components/ui/carousel.tsx
ai sana 2/components/ui/chart.tsx
ai sana 2/components/ui/checkbox.tsx
ai sana 2/components/ui/collapsible.tsx
ai sana 2/components/ui/combobox.tsx
ai sana 2/components/ui/command.tsx
ai sana 2/components/ui/context-menu.tsx
ai sana 2/components/ui/dialog.tsx
ai sana 2/components/ui/direction.tsx
ai sana 2/components/ui/drawer.tsx
ai sana 2/components/ui/dropdown-menu.tsx
ai sana 2/components/ui/empty.tsx
ai sana 2/components/ui/field.tsx
ai sana 2/components/ui/form.tsx
ai sana 2/components/ui/hover-card.tsx
ai sana 2/components/ui/input-group.tsx
ai sana 2/components/ui/input-otp.tsx
ai sana 2/components/ui/input.tsx
ai sana 2/components/ui/item.tsx
ai sana 2/components/ui/kbd.tsx
ai sana 2/components/ui/label.tsx
ai sana 2/components/ui/marker.tsx
ai sana 2/components/ui/menubar.tsx
ai sana 2/components/ui/message-scroller.tsx
ai sana 2/components/ui/message.tsx
ai sana 2/components/ui/native-select.tsx
ai sana 2/components/ui/navigation-menu.tsx
ai sana 2/components/ui/pagination.tsx
ai sana 2/components/ui/popover.tsx
ai sana 2/components/ui/progress.tsx
ai sana 2/components/ui/radio-group.tsx
ai sana 2/components/ui/resizable.tsx
ai sana 2/components/ui/scroll-area.tsx
ai sana 2/components/ui/select.tsx
ai sana 2/components/ui/separator.tsx
ai sana 2/components/ui/sheet.tsx
ai sana 2/components/ui/sidebar.tsx
ai sana 2/components/ui/skeleton.tsx
ai sana 2/components/ui/slider.tsx
ai sana 2/components/ui/sonner.tsx
ai sana 2/components/ui/spinner.tsx
ai sana 2/components/ui/switch.tsx
ai sana 2/components/ui/table.tsx
ai sana 2/components/ui/tabs.tsx
ai sana 2/components/ui/textarea.tsx
ai sana 2/components/ui/toggle-group.tsx
ai sana 2/components/ui/toggle.tsx
ai sana 2/components/ui/tooltip.tsx
ai sana 2/db/index.ts
ai sana 2/db/schema.ts
ai sana 2/drizzle.config.ts
ai sana 2/drizzle/0000_friendly_crusher_hogan.sql
ai sana 2/drizzle/0001_concerned_may_parker.sql
ai sana 2/drizzle/0002_kind_tarantula.sql
ai sana 2/drizzle/meta/0000_snapshot.json
ai sana 2/drizzle/meta/0001_snapshot.json
ai sana 2/drizzle/meta/0002_snapshot.json
ai sana 2/drizzle/meta/_journal.json
ai sana 2/eslint.config.mjs
ai sana 2/examples/d1/app/api/notes/route.ts
ai sana 2/examples/d1/db/schema.ts
ai sana 2/hooks/use-mobile.ts
ai sana 2/lib/api.ts
ai sana 2/lib/app-auth.ts
ai sana 2/lib/assistant.ts
ai sana 2/lib/auth-crypto.test.ts
ai sana 2/lib/auth-crypto.ts
ai sana 2/lib/behavior.test.ts
ai sana 2/lib/client.ts
ai sana 2/lib/example.ts
ai sana 2/lib/fields.ts
ai sana 2/lib/merge-assistant.test.ts
ai sana 2/lib/merge-assistant.ts
ai sana 2/lib/quality.test.ts
ai sana 2/lib/quality.ts
ai sana 2/lib/repository.ts
ai sana 2/lib/server-tasks.ts
ai sana 2/lib/task-payload.ts
ai sana 2/lib/types.ts
ai sana 2/lib/utils.ts
ai sana 2/next.config.ts
ai sana 2/package-lock.json
ai sana 2/package.json
ai sana 2/postcss.config.mjs
ai sana 2/public/favicon.svg
ai sana 2/public/file.svg
ai sana 2/public/globe.svg
ai sana 2/public/window.svg
ai sana 2/scripts/build-verified.sh
ai sana 2/scripts/create-demo-accounts.mjs
ai sana 2/scripts/execution-profile.mjs
ai sana 2/scripts/install-ci.mjs
ai sana 2/scripts/install-ci.sh
ai sana 2/scripts/install-pnpm.sh
ai sana 2/scripts/npm-install.mjs
ai sana 2/scripts/pnpm-install.mjs
ai sana 2/scripts/run-framework.mjs
ai sana 2/scripts/sites-env.mjs
ai sana 2/scripts/sites-env.sh
ai sana 2/scripts/verify-accounts.mjs
ai sana 2/scripts/verify-local.mjs
ai sana 2/tsconfig.json
ai sana 2/vite.config.ts
ai sana apk/AI-Sana.apk
ai sana apk/AI-Sana.apk.sha256
ai sana apk/README.md
ai-sana/.dev.vars.example
ai-sana/.env.example
ai-sana/.gitignore
ai-sana/.npmrc
ai-sana/.openai/hosting.json
ai-sana/DEMO.md
ai-sana/DESIGN.md
ai-sana/PRODUCT.md
ai-sana/README.md
ai-sana/ROADMAP.md
ai-sana/app/api/assistant/route.ts
ai-sana/app/api/auth/chatgpt/route.ts
ai-sana/app/api/auth/login/route.ts
ai-sana/app/api/auth/logout/route.ts
ai-sana/app/api/responses/[id]/route.ts
ai-sana/app/api/responses/route.ts
ai-sana/app/api/tasks/[id]/responses/route.ts
ai-sana/app/api/tasks/[id]/route.ts
ai-sana/app/api/tasks/route.ts
ai-sana/app/chatgpt-auth.ts
ai-sana/app/components/catalog.tsx
ai-sana/app/components/editor.tsx
ai-sana/app/components/task-detail.tsx
ai-sana/app/globals.css
ai-sana/app/layout.tsx
ai-sana/app/login/login-form.tsx
ai-sana/app/login/page.tsx
ai-sana/app/page.tsx
ai-sana/app/workspace.tsx
ai-sana/cloudflare-env.d.ts
ai-sana/components.json
ai-sana/components/ui/accordion.tsx
ai-sana/components/ui/alert-dialog.tsx
ai-sana/components/ui/alert.tsx
ai-sana/components/ui/aspect-ratio.tsx
ai-sana/components/ui/attachment.tsx
ai-sana/components/ui/avatar.tsx
ai-sana/components/ui/badge.tsx
ai-sana/components/ui/breadcrumb.tsx
ai-sana/components/ui/bubble.tsx
ai-sana/components/ui/button-group.tsx
ai-sana/components/ui/button.tsx
ai-sana/components/ui/calendar.tsx
ai-sana/components/ui/card.tsx
ai-sana/components/ui/carousel.tsx
ai-sana/components/ui/chart.tsx
ai-sana/components/ui/checkbox.tsx
ai-sana/components/ui/collapsible.tsx
ai-sana/components/ui/combobox.tsx
ai-sana/components/ui/command.tsx
ai-sana/components/ui/context-menu.tsx
ai-sana/components/ui/dialog.tsx
ai-sana/components/ui/direction.tsx
ai-sana/components/ui/drawer.tsx
ai-sana/components/ui/dropdown-menu.tsx
ai-sana/components/ui/empty.tsx
ai-sana/components/ui/field.tsx
ai-sana/components/ui/form.tsx
ai-sana/components/ui/hover-card.tsx
ai-sana/components/ui/input-group.tsx
ai-sana/components/ui/input-otp.tsx
ai-sana/components/ui/input.tsx
ai-sana/components/ui/item.tsx
ai-sana/components/ui/kbd.tsx
ai-sana/components/ui/label.tsx
ai-sana/components/ui/marker.tsx
ai-sana/components/ui/menubar.tsx
ai-sana/components/ui/message-scroller.tsx
ai-sana/components/ui/message.tsx
ai-sana/components/ui/native-select.tsx
ai-sana/components/ui/navigation-menu.tsx
ai-sana/components/ui/pagination.tsx
ai-sana/components/ui/popover.tsx
ai-sana/components/ui/progress.tsx
ai-sana/components/ui/radio-group.tsx
ai-sana/components/ui/resizable.tsx
ai-sana/components/ui/scroll-area.tsx
ai-sana/components/ui/select.tsx
ai-sana/components/ui/separator.tsx
ai-sana/components/ui/sheet.tsx
ai-sana/components/ui/sidebar.tsx
ai-sana/components/ui/skeleton.tsx
ai-sana/components/ui/slider.tsx
ai-sana/components/ui/sonner.tsx
ai-sana/components/ui/spinner.tsx
ai-sana/components/ui/switch.tsx
ai-sana/components/ui/table.tsx
ai-sana/components/ui/tabs.tsx
ai-sana/components/ui/textarea.tsx
ai-sana/components/ui/toggle-group.tsx
ai-sana/components/ui/toggle.tsx
ai-sana/components/ui/tooltip.tsx
ai-sana/db/index.ts
ai-sana/db/schema.ts
ai-sana/drizzle.config.ts
ai-sana/drizzle/0000_friendly_crusher_hogan.sql
ai-sana/drizzle/0001_concerned_may_parker.sql
ai-sana/drizzle/0002_kind_tarantula.sql
ai-sana/drizzle/meta/0000_snapshot.json
ai-sana/drizzle/meta/0001_snapshot.json
ai-sana/drizzle/meta/0002_snapshot.json
ai-sana/drizzle/meta/_journal.json
ai-sana/eslint.config.mjs
ai-sana/examples/d1/app/api/notes/route.ts
ai-sana/examples/d1/db/schema.ts
ai-sana/hooks/use-mobile.ts
ai-sana/lib/api.ts
ai-sana/lib/app-auth.ts
ai-sana/lib/assistant.ts
ai-sana/lib/auth-crypto.test.ts
ai-sana/lib/auth-crypto.ts
ai-sana/lib/behavior.test.ts
ai-sana/lib/client.ts
ai-sana/lib/example.ts
ai-sana/lib/fields.ts
ai-sana/lib/merge-assistant.test.ts
ai-sana/lib/merge-assistant.ts
ai-sana/lib/quality.test.ts
ai-sana/lib/quality.ts
ai-sana/lib/repository.ts
ai-sana/lib/server-tasks.ts
ai-sana/lib/task-payload.ts
ai-sana/lib/types.ts
ai-sana/lib/utils.ts
ai-sana/next.config.ts
ai-sana/package-lock.json
ai-sana/package.json
ai-sana/postcss.config.mjs
ai-sana/public/favicon.svg
ai-sana/public/file.svg
ai-sana/public/globe.svg
ai-sana/public/window.svg
ai-sana/scripts/build-verified.sh
ai-sana/scripts/create-demo-accounts.mjs
ai-sana/scripts/execution-profile.mjs
ai-sana/scripts/install-ci.mjs
ai-sana/scripts/install-ci.sh
ai-sana/scripts/install-pnpm.sh
ai-sana/scripts/npm-install.mjs
ai-sana/scripts/pnpm-install.mjs
ai-sana/scripts/run-framework.mjs
ai-sana/scripts/sites-env.mjs
ai-sana/scripts/sites-env.sh
ai-sana/scripts/verify-accounts.mjs
ai-sana/scripts/verify-local.mjs
ai-sana/tsconfig.json
ai-sana/vite.config.ts
service-desk/README.md
service-desk/TEST-RESULTS.md
service-desk/app.js
service-desk/core.js
service-desk/core.test.mjs
service-desk/example.csv
service-desk/index.html
service-desk/package.json
service-desk/server.mjs
service-desk/style.css
test2/.env.example
test2/.gitignore
test2/.impeccable/critique/2026-09-23T12-11-12Z__frontend-src-pages-explore-tsx.md
test2/.impeccable/design.json
test2/.impeccable/review/assessment-b-detector.json
test2/.impeccable/review/catalog.png
test2/.impeccable/review/clarification.png
test2/.impeccable/review/create.png
test2/.impeccable/review/design-polish.md
test2/.impeccable/review/desktop.png
test2/.impeccable/review/details.png
test2/.impeccable/review/editor.png
test2/.impeccable/review/finish-review.md
test2/.impeccable/review/mobile.png
test2/.impeccable/review/proposal-form.png
test2/.impeccable/review/proposals.png
test2/.impeccable/surfaces/frontend-src-app-tsx.md
test2/DESIGN.md
test2/PRODUCT.md
test2/README.md
test2/backend/app/__init__.py
test2/backend/app/ai/__init__.py
test2/backend/app/ai/providers.py
test2/backend/app/ai/schemas.py
test2/backend/app/ai/service.py
test2/backend/app/database.py
test2/backend/app/main.py
test2/backend/app/models.py
test2/backend/app/schemas.py
test2/backend/app/services.py
test2/backend/main.py
test2/backend/requirements.txt
test2/backend/tests/conftest.py
test2/backend/tests/test_ai.py
test2/backend/tests/test_api.py
test2/backend/tests/test_integration_qa.py
test2/backend/tests/test_migration.py
test2/backend/tests/test_scenario_v2.py
test2/database/migrate.py
test2/database/seed.py
test2/database/seed_data.json
test2/database/team_profiles.json
test2/docs/API_CONTRACT.md
test2/docs/DEMO.md
test2/docs/HANDOFF.md
test2/docs/SPEC.md
test2/frontend/.env.example
test2/frontend/.gitignore
test2/frontend/index.html
test2/frontend/package-lock.json
test2/frontend/package.json
test2/frontend/playwright.config.ts
test2/frontend/public/favicon.svg
test2/frontend/src/App.tsx
test2/frontend/src/api.ts
test2/frontend/src/components.tsx
test2/frontend/src/content.ts
test2/frontend/src/hooks.ts
test2/frontend/src/main.tsx
test2/frontend/src/pages/Explore.tsx
test2/frontend/src/pages/Intake.tsx
test2/frontend/src/pages/Task.tsx
test2/frontend/src/styles.css
test2/frontend/src/types.ts
test2/frontend/src/workspace.tsx
test2/frontend/tests/demo.spec.ts
test2/frontend/tests/integration.spec.ts
test2/frontend/tests/refinements.spec.ts
test2/frontend/tests/robustness.spec.ts
test2/frontend/tsconfig.json
test2/frontend/vite.config.ts
айсана апк 2/AI-Sana.apk
айсана апк 2/AI-Sana.apk.sha256
айсана апк 2/README.md
айсана апк 2/android-source.zip
айсана апк 2/web-source.zip
тестирование сайта/QA-STAGE-01.md
тестирование сайта/QA-STAGE-02.md
тестирование сайта/QA-STAGE-03.md
тестирование сайта/README.md
тестирование сайта/qa-hour-01.test.mjs
тестирование сайта/qa-known-bugs.test.mjs
тестирование сайта/qa-stage-02-fixtures.mjs
тестирование сайта/qa-stage-02-results.json
тестирование сайта/qa-stage-03-fixture.json
тестирование сайта/qa-stage-03-results.json
Ветки (2)

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

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

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