TaskReady
SPA на React. Бизнес превращает черновик задачи в карточку из 11 полей с рейтингом готовности 0–100, публикует её в каталоге, команды откликаются…
О проекте
Команда: Prompt Chiefs
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
SPA на React. Бизнес превращает черновик задачи в карточку из 11 полей с рейтингом готовности 0–100, публикует её в каталоге, команды откликаются, бизнес вручную принимает отклики и подтверждает этапы (+10 баллов).
Как устроено
AI-диагностика находит пустые поля и задаёт три уточняющих вопроса; по умолчанию это детерминированная заглушка в браузере, опционально локальная qwen2.5:3b через Ollama и Node-прокси. Ответ проверяется, при любой ошибке или таймауте 20 с включается фолбэк. Рейтинг считает чистая формула из 7 критериев с проверками длины и наличия цифр. Рекомендации командам строятся по совпадению отрасли с интересами, данные хранятся в localStorage.
Ключевые решения
- аддитивная формула рейтинга
- рекомендации по интересам
- локальный LLM через Ollama
- фолбэк-заглушка
Особенности
AI работает только локально, без облачного API и ключа. Блок «Как работает AI-диагностика» показывает промпт и JSON запроса и ответа. Рейтинг защищён от мусорного ввода (минимум 4 разных символа, в критериях успеха нужна цифра).
Стек
TypeScript · React 19 · Vite 8 · Node.js · localStorage · node:test
Модели
qwen2.5:3b (Ollama)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0b120e34-prompt-chiefs.
README
README.mdTaskReady — AI Sana / Prompt Chiefs
Описание
Представителям бизнеса трудно описать задачу для студентов так, чтобы по ней можно было сразу начать работу. Студенческим командам трудно понять, какие задачи уже готовы.
TaskReady помогает бизнесу превратить черновое описание в полную карточку задачи. Сервис оценивает, насколько полно заполнена карточка (рейтинг 0–100), и публикует её в открытом каталоге. Студенческие команды сами выбирают задачи и откликаются. Бизнес вручную принимает или отклоняет отклики.
Для кого: представители бизнеса и студенческие команды (кейс хакатона AI Sana).
Что реализовано
- Конструктор задачи. Свободное описание, 5 примеров черновиков, демо-задача, редактируемая карточка из 11 полей, ручное подтверждение публикации.
- AI-диагностика задач. Три уточняющих вопроса о недостающих сведениях на языке интерфейса. Ответы человека копируются в карточку без изменений.
- Прозрачность AI. Блок «Как работает AI-диагностика» показывает режим, промпт, JSON-запрос и JSON-ответ.
- Рейтинг готовности 0–100. Расшифровка по 7 критериям, подсказки к каждому недостающему критерию, пересчёт при редактировании.
- 4 уровня готовности: Черновик, Рабочая, Готовая, Приоритетная.
- Каталог. Сортировка по рейтингу, фильтры по отрасли и уровню. Приоритетные задачи выделены, черновики помечены «Требует уточнения».
- Рекомендации командам. Задачи от 40 баллов, отрасль которых совпадает с интересами команды. Каталог при этом не ограничивается.
- Отклики команд. Идея, план, срок и ссылка на прототип, число откликов не ограничено.
- Решение бизнеса. Ручные «Принять» и «Отклонить»: можно выбрать несколько команд или ни одной, автоматического назначения нет.
- Подтверждённый прогресс. После подтверждения этапа команда получает +10 баллов, один раз за отклик. После этого решение окончательное.
- Интерфейс. Русский, казахский и английский языки; светлая и тёмная тема.
Как работает решение
- Бизнес вводит краткое описание или загружает пример.
- AI-диагностика определяет пустые поля и задаёт 3 вопроса.
- Ответы переносятся в карточку, бизнес дополняет и редактирует поля.
- Рейтинг пересчитывается, подсказки показывают, что поднимет балл.
- Бизнес подтверждает публикацию, и задача попадает в каталог на место по рейтингу.
- Команда выбирает задачу (сама или через рекомендации) и отправляет отклик.
- Бизнес сравнивает отклики и вручную принимает или отклоняет их.
- После выполненного этапа бизнес подтверждает его, и команда получает +10 баллов.
Технологии
- Язык и фреймворки: TypeScript, React 19, Vite 8.
- Тесты: встроенный
node:test(Node.js 22.16+). - AI по умолчанию: детерминированная локальная заглушка в браузере (
src/lib/ai.ts). - AI опционально: локальная модель
qwen2.5:3bчерез Ollama. Работает бесплатно и без API-ключа, подключается через проксиserver/task-doctor.mjsна Node.js без зависимостей. - Хранение: localStorage браузера.
Архитектура
| Компонент | Назначение |
|---|---|
src/App.tsx | Экраны: конструктор, каталог, отклики |
src/types/domain.ts | Модель данных: задача, команда, отклик |
src/lib/scoring.ts | Чистая формула рейтинга и уровней |
src/lib/ai.ts | AI-адаптер: локальная заглушка, вызов внешнего endpoint, проверка ответа, fallback |
src/lib/recommendations.ts | Рекомендации задач по интересам команды |
src/lib/proposals.ts | Правила решений бизнеса и прогресса |
src/lib/storage.ts | Сохранение в localStorage, восстановление после повреждённых данных |
src/lib/i18n.ts | Переводы (ru / kk / en) |
src/components/ | TaskEditor, ScorePanel, AiContract, DemoJourney, Preferences |
src/data/seed.ts | Синтетические демо-данные |
server/task-doctor.mjs | Опциональный локальный прокси: браузер → прокси → Ollama |
tests/domain.test.mjs | Автотесты бизнес-логики |
Как части связаны между собой. Браузер вызывает прокси, только если задана переменная VITE_TASK_DOCTOR_ENDPOINT. Любая ошибка — HTTP, неверный JSON, неизвестное поле, меньше 3 вопросов или таймаут 20 секунд — переключает сайт на локальные вопросы.
Установка и запуск
Нужны Node.js 22.16+ и npm.
npm ci
npm run dev
Откройте адрес из терминала (обычно http://localhost:5173).
Другие команды:
npm test # автотесты
npm run build # проверка TypeScript и сборка в dist
npm run preview # запуск собранной версии
Локальная AI-модель (необязательно, бесплатно)
# 1. Установить Ollama: https://ollama.com (Windows: winget install Ollama.Ollama)
ollama pull qwen2.5:3b
# 2. Запустить прокси (терминал 1)
npm run ai-proxy
# 3. Скопировать .env.example в .env.local и перезапустить сайт (терминал 2)
npm run dev
Без Ollama сайт полностью работает на локальной заглушке. Другую модель можно выбрать переменной TASK_DOCTOR_MODEL.
Как проверить решение
-
«Сбросить демо-данные» → «Создать задачу» → «Загрузить демо с анализом отзывов». Рейтинг 0.
-
«AI-диагностика задач». Ответить:
- потребность — «Выявлять повторяющиеся жалобы и передавать их ответственным сотрудникам»;
- данные — «Обезличенный CSV с 500 отзывами и категориями за последний месяц»;
- результат — «Веб-прототип группировки отзывов с фильтром по категории».
Нажать «Применить ответы к карточке»: рейтинг 55. Раскрыть «Как работает AI-диагностика».
-
Заполнить поля:
- «Пользователи» — «Руководитель клиентской поддержки»;
- «Критерии успеха» — «Не менее 80% верных категорий на 100 контрольных отзывах»;
- «Ограничения» — «Локальный прототип за две недели без персональных данных»;
- «Контакт» —
[email protected]; - «Формат взаимодействия с бизнесом» — «Две консультации в неделю, письменная обратная связь в течение суток».
Рейтинг 100. «Подтвердить и опубликовать» → «Опубликовать задачу».
-
В каталоге в «Рекомендациях для команды» выбрать Nova Stack, открыть новую задачу и отправить отклик со ссылкой вида
https://example.com/.... -
«Отклики» → «Принять».
-
Ввести описание выполненного этапа и подтвердить: +10 баллов, кнопки решения исчезают.
-
Перезагрузить страницу: данные сохранены.
Дополнительно можно проверить:
- текст «ааааааааааааааа» в «Ограничениях» не даёт баллов;
- критерии успеха без цифр не засчитываются;
- задача с рейтингом 0 видна в каталоге и принимает отклики.
Данные и интеграции
- Данные: синтетические, в
src/data/seed.ts— 5 черновиков, 5 карточек, 5 команд, 5 откликов на русском. Ссылки на прототипы (example.com) демонстрационные. - Внешние API и облачные сервисы не используются. Опциональная интеграция — только локальный сервер Ollama (
http://127.0.0.1:11434) через прокси на127.0.0.1:8787. - Формат обмена с AI. Запрос:
{"prompt": "...", "language": "ru", "task": {...}}. Ответ:{"questions": [{"field": "...", "question": "..."}]}.
Формула рейтинга
| Критерий | Баллы | Условие |
|---|---|---|
| Контекст и потребность | 20 | ≥20 символов в каждом поле |
| Данные и материалы | 20 | ≥15 символов |
| Ожидаемый результат | 15 | ≥15 символов |
| Критерии успеха | 15 | ≥15 символов и есть цифра |
| Ограничения | 10 | ≥10 символов |
| Пользователи | 10 | ≥10 символов |
| Связь с бизнесом | 10 | контакт (email, телефон или @ник) и формат взаимодействия ≥8 символов |
В каждом поле должно быть не меньше 4 разных букв или цифр.
Уровни: 0–39 — Черновик, 40–69 — Рабочая, 70–89 — Готовая, 90–100 — Приоритетная.
Ограничения
- Нет сервера и регистрации. Данные хранятся в localStorage одного браузера и не синхронизируются между устройствами. Роли переключаются действиями в интерфейсе.
- Рейтинг — эвристика полноты, а не проверка истинности фактов.
- Локальная заглушка AI задаёт шаблонные вопросы по пустым полям.
- Модель
qwen2.5:3bиспользуется только для русского и английского: вопросы появляются примерно за 3–9 секунд на тестовом ноутбуке. По-казахски модель пишет с ошибками, поэтому в казахском интерфейсе всегда работает локальная заглушка. - Прогресс учитывается одним этапом на отклик, полного трекера проекта нет.
- Мобильная адаптация базовая.
Deployed-версия
Нет. Проект запускается локально.
Авторы коммитов
История коммитов
- 2026-09-23 17:55Merge pull request #7 from BAITC-Hacks/feat/domain-hardeningRavil Serikuly
- 2026-09-23 17:551.0Ravil Serikuly
- 2026-09-23 17:54Merge pull request #6 from BAITC-Hacks/feat/domain-hardeningRavil Serikuly
- 2026-09-23 17:531.0Ravil Serikuly
- 2026-09-23 17:31Merge pull request #5 from BAITC-Hacks/feat/domain-hardeningRavil Serikuly
- 2026-09-23 17:280.9Ravil Serikuly
- 2026-09-23 17:01Merge pull request #4 from BAITC-Hacks/feat/domain-hardeningRavil Serikuly
- 2026-09-23 17:00UI/UX fixedRavil Serikuly
Все коммиты (21)
- 2026-09-23 16:37fix: isolate scoring from AI clarification flowkhannn06
- 2026-09-23 16:28Merge pull request #3 from BAITC-Hacks/codex/demo-presentationAtlaanttt
- 2026-09-23 16:18fix: remove remaining Russian localization leakskhannn06
- 2026-09-23 16:17refactor: localize interface and apply indigo design systemkhannn06
- 2026-09-23 15:51Merge pull request #2 from BAITC-Hacks/feat/domain-hardeningRavil Serikuly
- 2026-09-23 15:48Merge origin/feat/domain-hardening: combine parallel domain hardeningRavil Serikuly
- 2026-09-23 15:46feat: add localized display preferenceskhannn06
- 2026-09-23 15:410.3Ravil Serikuly
- 2026-09-23 15:32Merge pull request #1 from BAITC-Hacks/codex/demo-presentationAtlaanttt
- 2026-09-23 15:31feat: harden task domain and AI fallbackY3sh1
- 2026-09-23 15:22feat: localize demo presentation componentskhannn06
- 2026-09-23 15:070.2Y3sh1
- 2026-09-23 14:230.1khannn06
Структура репозитория (28 файлов)
.env.example .gitignore README.md docs/COMPLIANCE.md docs/DOMAIN_HANDOFF.md index.html package-lock.json package.json server/task-doctor.mjs src/App.tsx src/components/AiContract.tsx src/components/DemoJourney.tsx src/components/Preferences.tsx src/components/ScorePanel.tsx src/components/TaskEditor.tsx src/data/seed.ts src/lib/ai.ts src/lib/i18n.ts src/lib/proposals.ts src/lib/recommendations.ts src/lib/scoring.ts src/lib/storage.ts src/main.tsx src/styles.css src/types/domain.ts src/vite-env.d.ts tests/domain.test.mjs tsconfig.json
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.