AI Sana
Веб-приложение, где бизнес создаёт задачу с AI-уточнениями, собирает и публикует карточку, а студенческие команды видят каталог и отправляют…
О проекте
Команда: d
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Веб-приложение, где бизнес создаёт задачу с AI-уточнениями, собирает и публикует карточку, а студенческие команды видят каталог и отправляют предложения, которые бизнес принимает или отклоняет.
Как устроено
Фронтенд на HTML/CSS/JS обращается к PHP JSON API, данные хранятся в SQLite с миграциями. ai_helper.php по промпту (prompts/card_assistant.txt) генерирует уточняющие вопросы и карточку через внешнюю модель (AI_API_KEY, AI_MODEL), при ошибке включается локальный помощник. Рейтинг считает сервер по рубрике 20/20/15/15/10/10/10, баллы идут только за поля, подтверждённые бизнесом. Команды AI не выбирает, это делает человек.
Ключевые решения
- рубрика рейтинга готовности
- уточняющие вопросы
- локальный fallback-помощник
- SQLite-миграции
Особенности
Баллы рейтинга начисляются только за поля, которые бизнес явно подтвердил, а любая правка карточки снимает её с публикации до повторного просмотра. router.php закрывает по HTTP доступ к базе, .env и служебным файлам.
Стек
PHP 8.2 · SQLite · HTML/CSS/JS · Node.js (тесты) · Playwright · Python (API-тесты)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9711a9ba-d.
README
README.mdAI Sana
Единое приложение для задач бизнеса и предложений студенческих команд: HTML/CSS/JavaScript → PHP JSON API → SQLite, с AI-помощником на сервере.
Бизнес создаёт черновик, получает уточняющие вопросы, собирает и проверяет карточку, подтверждает поля и публикует задачу. Команды видят общий каталог, отправляют предложения и получают решение бизнеса. Все рабочие данные сохраняются в SQLite; браузер хранит выбранные идентификаторы и ещё не отправленные правки.
Быстрый запуск на Windows
Запустите start.cmd двойным щелчком или из PowerShell:
.\start.cmd
Откройте http://127.0.0.1:8000/. Окно сервера должно оставаться открытым;
для остановки нажмите Ctrl+C. Другой порт: start.cmd -Port 8080.
Скрипт находит PHP в .tools/php/php.exe, PATH или XAMPP; можно задать полный путь
через PHP_BINARY. В текущей рабочей папке переносимый PHP уже подготовлен в
.tools/. Эта папка и база данных не входят в Git.
При переносе проекта нужен PHP 8.2+ с расширением pdo_sqlite.
Внешний AI дополнительно использует curl. Node.js нужен только для тестов,
сборки frontend нет. Без Windows-скрипта запуск такой:
php seed.php
php -S 127.0.0.1:8000 -t . router.php
seed.php создаёт схему и добавляет примеры только в пустую базу. Повторный запуск
сохраняет существующие задачи, команды и решения. Для обновления схемы без примеров
используйте php migrate.php. Открытие HTML через file:// не запускает backend.
AI
Без ключа работает локальный помощник: уточняющие вопросы и карточка на основе описания и ответов. Он не обращается к языковой модели и не выдумывает отсутствующие данные. Интерфейс показывает источник результата.
Для внешней модели скопируйте .env.example в .env, укажите свой AI_API_KEY
и при необходимости AI_MODEL, затем перезапустите сервер. Переменные окружения
имеют приоритет над .env, включая явно пустой ключ.
Запросы к внешнему AI выполняет PHP. При сетевой ошибке, отказе модели или некорректном ответе применяется локальный вариант. Ключ не передаётся в браузер. Фактический запрос с вашим ключом требует отдельной проверки; автоматические тесты проверяют транспорт на подменённых ответах и локальный режим без платных запросов.
Правила работы
- Рейтинг считает сервер: контекст 20, данные 20, результат 15, критерии успеха 15, ограничения 10, пользователи 10, связь с бизнесом 10. Баллы начисляются только за непустое поле, явно подтверждённое бизнесом.
- Уровни: 0–39 «Черновик», 40–69 «Рабочая», 70–89 «Готовая», 90–100 «Приоритетная».
- Название, тема, потребность и формат взаимодействия редактируются отдельно, баллов не дают. Публикация требует названия, контекста и подтверждения просмотра всей карточки. Минимального порога рейтинга нет.
- Изменение карточки снимает её с публикации до повторного просмотра.
- Бизнес может принять несколько предложений, отклонить любое или отменить своё решение. AI не выбирает команды.
- Профиль команды можно сохранить, повторно использовать и отредактировать с тем же идентификатором. «Мои предложения» показывает предложения выбранной команды.
Структура
| Путь | Назначение |
|---|---|
frontend/ | Единственный рабочий интерфейс, стили и HTTP-клиент |
index.html | Переход в основной интерфейс |
api/ | Задачи, карточки, публикация, каталог, команды и предложения |
ai_helper.php, prompts/ | Внешний AI, локальный помощник, проверка ответов |
rating.php | Единая формула рейтинга |
db.php, schema.sql, lib/migrations.php | SQLite и миграции |
config.php, .env.example | Серверная конфигурация AI |
seed.php, data/ | Примеры для первого запуска |
router.php, start.ps1, start.cmd | Общий запуск UI и API |
tests/ | Проверки PHP, HTTP, frontend и браузерного сценария |
Старые корневые копии JS/CSS удалены. ai-sana-frontend.zip — исходный исторический
архив; приложение его не использует. SOURCE_CODE.md обновляется командой
node scripts/export-source.cjs из рабочего frontend.
Проверки
Из корня проекта, когда PHP, Python 3 и Node.js доступны в PATH:
php -n tests/ai_helper_test.php
php -n tests/ai_transport_test.php
php tests/rating_test.php
php -n tests/config_test.php
python tests/api_test.py
python tests/ai_api_test.py --php php
npm ci
npm run test:frontend
npm run test:browser
В Windows для локально подготовленных инструментов:
$env:PHP_BINARY = (Resolve-Path .tools/php/php.exe).Path
$env:Path = "$(Resolve-Path .tools/node-v24.21.0-win-x64);$env:Path"
& $env:PHP_BINARY -n tests/ai_helper_test.php
& $env:PHP_BINARY -n tests/ai_transport_test.php
& $env:PHP_BINARY tests/rating_test.php
& $env:PHP_BINARY -n tests/config_test.php
python tests/api_test.py
python tests/ai_api_test.py --php $env:PHP_BINARY
npm.cmd run test:frontend
npm.cmd run test:browser
Браузерный тест использует установленный Microsoft Edge. Для другого окружения
установите поддерживаемый Playwright браузер и укажите BROWSER_CHANNEL, например
chromium или chrome. HTTP- и браузерные сценарии создают временные базы и не
изменяют рабочую database.sqlite.
Проект рассчитан на локальную демонстрацию. Переключение роли не является
авторизацией; для публичного сервиса нужна проверка пользователей и прав доступа.
Запуск через router.php закрывает по HTTP базу, .env, служебные PHP-файлы и архивы.
Контракты: API.md, AI: AI_HELPER.md, интерфейс: FRONTEND.md, демонстрация: DEMO.md, приёмка: INTEGRATION_CHECKLIST.md.
Авторы коммитов
История коммитов
- 2026-09-23 17:31finalNehonaYa
- 2026-09-23 17:13ggggdaniyar280407
- 2026-09-23 16:51измена 3daniyar280407
- 2026-09-23 16:42obonova ot promtaNehonaYa
- 2026-09-23 16:36dNehonaYa
- 2026-09-23 16:24Fix committed merge conflicts and preserve both API flowsNehonaYa
- 2026-09-23 16:20jNehonaYa
- 2026-09-23 16:18ai_obnovaNehonaYa
Все коммиты (26)
- 2026-09-23 16:15такdaniyar280407
- 2026-09-23 16:04фронтенд ждуdiko-cat
- 2026-09-23 16:03wNehonaYa
- 2026-09-23 15:52Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9711a9ba-ddaniyar280407
- 2026-09-23 15:51Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9711a9ba-ddaniyar280407
- 2026-09-23 15:50ъзхdaniyar280407
- 2026-09-23 15:37api И data обновленияdiko-cat
- 2026-09-23 14:50Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9711a9ba-ddiko-cat
- 2026-09-23 14:48api и datadiko-cat
- 2026-09-23 14:46измена11daniyar280407
- 2026-09-23 14:45Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9711a9ba-ddaniyar280407
- 2026-09-23 14:44readmeFinalNehonaYa
- 2026-09-23 14:42Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9711a9ba-ddaniyar280407
- 2026-09-23 14:42измена1daniyar280407
- 2026-09-23 14:38readme.trueNehonaYa
- 2026-09-23 14:23readme obnovaNehonaYa
- 2026-09-23 14:14база данныхdiko-cat
- 2026-09-23 14:02началоdaniyar280407
Структура репозитория (67 файлов)
.env.example .gitignore AI_HELPER.md API.md DEMO.md FRONTEND.md INTEGRATION_CHECKLIST.md README.md SOURCE_CODE.md ai-sana-frontend.zip ai_helper.php api/_common.php api/cards.php api/catalog.php api/choose.php api/generate.php api/proposals.php api/publish.php api/questions.php api/tasks.php api/teams.php config.php data/cards_seed.json data/proposals_seed.json data/tasks_seed.json data/teams_seed.json db.php frontend/business/card.html frontend/business/new-task.html frontend/business/proposals.html frontend/business/questions.html frontend/css/style.css frontend/index.html frontend/js/api.js frontend/js/business.js frontend/js/catalog.js frontend/js/navigation.js frontend/js/proposals.js frontend/js/ratings.js frontend/js/team.js frontend/js/ui.js frontend/team/catalog.html frontend/team/my-proposals.html frontend/team/profile.html frontend/team/task-view.html index.html lib/migrations.php migrate.php package-lock.json package.json prompts/card_assistant.txt rating.php router.php schema.sql scripts/export-source.cjs seed.php start.cmd start.ps1 tests/ai_api_test.py tests/ai_helper_test.php tests/ai_transport_test.php tests/api_test.py tests/config_test.php tests/fixtures/schema_v0.sql tests/frontend-flow.cjs tests/frontend.test.cjs tests/rating_test.php
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.