TASKER
Платформа бизнес-задач для студенческих команд: каталог опубликованных задач с серверным рейтингом готовности, паспорт задачи, команды, отклики; на…
О проекте
Команда: RM Edtech
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Прототип
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа бизнес-задач для студенческих команд: каталог опубликованных задач с серверным рейтингом готовности, паспорт задачи, команды, отклики; на backend есть AI-анализ задачи через OpenAI с локальным fallback.
Как устроено
Сервер на чистом Node.js без зависимостей хранит состояние в JSON-файле (атомарная запись через временный файл и rename). Рейтинг задачи правиловый: баллы за подтверждённые поля (контекст и потребность по 10, данные 20, результат и критерии успеха по 15 и т.д.), максимум 100, с уровнями «требует уточнения / рабочая / готовая / приоритетная». AI-анализ (src/ai) обращается к OpenAI с защитой и локальным fallback. В восстановленном интерфейсе формы создания задачи, AI и отклики не подключены, хотя серверные реализации есть.
Ключевые решения
- правиловый скоринг готовности задачи
- OpenAI-анализ с локальным fallback
- версионирование снимков задачи (защита от конфликтов)
- JSON-хранилище
Особенности
Прозрачная шкала готовности задачи с весами по полям и расшифровкой баллов в паспорте. 135 тестов при нуле сторонних зависимостей. Но из-за отката интерфейса ключевой AI-сценарий в UI не виден.
Стек
Node.js · JavaScript (ESM) · HTML/CSS · node:test
Модели
OpenAI
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-f0370cc6-rm-edtech.
README
README.mdTASKER
Платформа бизнес-задач для студенческих команд на HackAlem. Бизнес формулирует потребность, команды изучают условия в паспорте задачи. В одной сборке объединены актуальный backend и исходный интерфейс 3600d55^ с именем TASKER и увеличенными шрифтами. В браузере работают открытый каталог, серверный рейтинг, фильтры, команды, избранное и паспорт задачи. Формы создания, AI, подтверждения, публикации, отправки откликов и решений бизнеса в восстановленном интерфейсе отсутствуют; серверные реализации сохранены.
Запуск
Node.js 20 или новее. Сторонние зависимости не нужны.
node --version
npm start
Открыть http://127.0.0.1:3000/ без ?preview=1. Данные загружаются через API; в шапке отображается «API подключён». Сервер слушает только локальный адрес. Это демонстрационный проект с синтетическими примерами и переключателем ролей, без настоящей аутентификации.
npm test
135 тестов проверяют рейтинг, фильтры, HTTP API v1, хранение, AI и fallback, отклики и принятые этапы, внутренние сервисы v2 и транспорт интерфейса. POST не повторяется автоматически при неопределённом сетевом результате; preview не отправляет записи. Объединённая сборка проверена на Node 20.9.0; серверный автор также проверял Node 24.19.0.
Переменные окружения:
| Имя | По умолчанию | Назначение |
|---|---|---|
| PORT | 3000 | Локальный порт, целое число 1–65535 |
| DATA_FILE | data/state.json | JSON-база; относительный путь считается от рабочей папки процесса |
При первом запуске база создаётся из seed. На один DATA_FILE запускается только один сервер. База и секреты не входят в Git. PORT и DATA_FILE задаются окружением запуска. Настройки серверного AI описаны в src/ai/README.md; ключи и локальные .env не публикуются.
Для самостоятельного предпросмотра интерфейса: npm run preview, адрес http://127.0.0.1:4173/?preview=1. Этот явный режим читает статическую фикстуру и не используется вместо API при ошибках.
Архитектура
- public/ — интерфейс и транспорт API; официальный рейтинг не рассчитывается в браузере.
- server.mjs — стандартный HTTP-сервер Node и раздача public/.
- src/domain.mjs — поля, шкала, валидация и каталог.
- src/store.mjs — последовательная запись JSON через временный файл и rename.
- src/state.mjs — выдача состояния и расчёт баллов команд из подтверждённых этапов.
- src/seed.mjs — по пять синтетических черновиков, задач, команд и откликов.
- tests/ — серверные, интеграционные и транспортные тесты.
Backend 725948c сохранён целиком: реализованы все endpoints API v1 из docs/API_CONTRACT.md. Исходный app.js вызывает только GET /api/state и GET /api/catalog; createTask сохранён в транспорте для последующего подключения формы. Сервисы v2 пока не подключены к HTTP и экранам, живой Google-вход отложен. Актуальные границы готовности — docs/FRONTEND_STATUS.md и docs/BACKEND_STATUS.md.
Айдентика и продуктовые решения: docs/BRAND_DIRECTION.md. Исходная карточка показывает серверный балл, в паспорте раскрывается серверная расшифровка по семи группам. Баллы браузер не пересчитывает. Прежняя витрина /tasker-system.html сохранена для истории и больше не определяет рабочий дизайн.
Рейтинг
Баллы начисляются только за непустые подтверждённые поля. Контекст и потребность — по 10; данные — 20; результат и критерии успеха — по 15; ограничения и пользователи — по 10; контакт — 3, формат взаимодействия — 3, обратная связь — 4. Максимум 100. Название нужно для публикации, баллов не даёт.
0–39 — требует уточнения; 40–69 — рабочая; 70–89 — готовая; 90–100 — приоритетная. Каталог включает все опубликованные задачи, даже с нулевым рейтингом, и сортирует их по баллам. При равенстве раньше показана задача с более ранней публикацией. Поиск работает по полям, компании, отрасли и тегам. Неопубликованный черновик в каталог не попадает.
Проверка первого этапа вручную
- Открыть приложение без preview: пять задач с рейтингами 100, 90, 65, 45, 20.
- Найти «Карты»: остаётся туристическая задача. Сбросить фильтры: вернутся все пять.
- Открыть задачу студии с 20 баллами: увидеть заполненные и отсутствующие поля и причины рейтинга.
- Проверить фильтры отрасли и готовности, избранное и список команд.
- Повторно запустить сервер: существующая база читается без пересоздания seed.
- Проверить ширины 1440/664/390: каталог обоими видами, команды и диалог задачи, без горизонтального переполнения.
Работа команды
Правила и владельцы: AGENTS.md и docs/COORDINATION.md. Перед небольшим этапом выполнить npm run team:sync -- frontend или npm run team:sync -- backend. Команда получает опубликованные изменения и читает статус коллеги; рабочие файлы не меняет.
Авторы коммитов
История коммитов
- 2026-09-23 18:06Connect platform HTTP API and local portfolio assistanceamlrltd
- 2026-09-23 18:02Merge remote-tracking branch 'origin/feat/frontend' into feat/backendamlrltd
- 2026-09-23 18:01Preserve confirmed order readiness and safe editingamlrltd
- 2026-09-23 17:58Restore original TASKER interface on shared backendfoldichannel
- 2026-09-23 17:58Merge remote-tracking branch 'origin/feat/backend' into feat/frontendfoldichannel
- 2026-09-23 17:52Start complete three-page and AI integrationamlrltd
- 2026-09-23 17:50docs: reserve original TASKER rollback on shared backendfoldichannel
- 2026-09-23 17:43Verify integrated Commissioner design and functional ownershipamlrltd
Все коммиты (37)
- 2026-09-23 17:38Merge remote-tracking branch 'origin/feat/frontend' into feat/backendamlrltd
- 2026-09-23 17:38Assign design to frontend and functional integration to backendamlrltd
- 2026-09-23 17:33Add private platform services for Google accounts and student ordersamlrltd
- 2026-09-23 17:33Build Commissioner showcase with field lighting and weighted windowsfoldichannel
- 2026-09-23 17:21Propose three-page platform API and reserve account servicesamlrltd
- 2026-09-23 17:11docs: reserve Commissioner and field-lighting showcase revisionfoldichannel
- 2026-09-23 17:03Complete proposal lifecycle and add guarded OpenAI analysisamlrltd
- 2026-09-23 16:50docs: publish integrated preview and reserve remaining server flowsamlrltd
- 2026-09-23 16:46Merge remote-tracking branch 'origin/feat/frontend' into feat/backendamlrltd
- 2026-09-23 16:46docs: start integrated preview and remaining backend workamlrltd
- 2026-09-23 16:44Build isolated TASKER component showcase with fixed palettefoldichannel
- 2026-09-23 16:36docs: reserve approved TASKER component showcasefoldichannel
- 2026-09-23 16:35feat: publish confirmed tasks and record student experience decisionsamlrltd
- 2026-09-23 16:24docs: propose individual participation and evidence-based student casesamlrltd
- 2026-09-23 16:18docs: record shared product decisions and role-first entryamlrltd
- 2026-09-23 16:03feat: confirm task snapshots with version conflict protectionamlrltd
- 2026-09-23 16:01Build alem identity, readiness passports and business draft flowfoldichannel
- 2026-09-23 15:55docs: set practical learning goals and reserve confirmation stepamlrltd
- 2026-09-23 15:48feat: add validated local AI analysis with safe fallbackamlrltd
- 2026-09-23 15:45docs: reserve identity and draft-creation frontend workfoldichannel
- 2026-09-23 15:39docs: publish shared-base integration and AI stage scopeamlrltd
- 2026-09-23 15:38Merge remote-tracking branch 'origin/feat/frontend' into feat/backendamlrltd
- 2026-09-23 15:21feat: create validated persisted business draftsamlrltd
- 2026-09-23 15:18Merge published backend history and confirm stage-one integrationfoldichannel
- 2026-09-23 15:17docs: reserve backend draft-creation stepamlrltd
- 2026-09-23 15:16Integrate stage-one catalog UI and backendfoldichannel
- 2026-09-23 15:16docs: coordinate backend progress through GitHub branchesamlrltd
- 2026-09-23 15:01feat: serve persisted state and catalog with backend testsamlrltd
- 2026-09-23 14:55chore: import supplied team starter and frontend stage oneamlrltd
Структура репозитория (77 файлов)
.gitignore AGENTS.md README.md docs/API_CONTRACT.md docs/BACKEND_STATUS.md docs/BRAND_DIRECTION.md docs/COORDINATION.md docs/FIRST_CODEX_HANDOFF_PROMPT.md docs/FRONTEND_README.md docs/FRONTEND_STATUS.md docs/PLATFORM_V2_PROPOSAL.md docs/PRODUCT_QUALITY.md docs/SECOND_CODEX_PROMPT.md docs/STUDENT_CASES_PROPOSAL.md docs/TEAM_PLAN.md package.json public/api.js public/app.js public/favicon.svg public/index.html public/preview-data.json public/styles.css public/tasker-system.html public/tasker/fonts/Commissioner-Variable.woff2 public/tasker/fonts/OFL.txt public/tasker/fonts/README.md public/tasker/mark.svg public/tasker/system.css public/tasker/system.js public/tasker/tokens.css scripts/demo.mjs scripts/preview.mjs scripts/team-sync.mjs server.mjs src/ai/README.md src/ai/analyze.mjs src/ai/config.mjs src/ai/examples.json src/ai/local.mjs src/ai/openai.mjs src/ai/prompt.mjs src/domain.mjs src/http-json.mjs src/platform/README.md src/platform/assist.mjs src/platform/auth.mjs src/platform/cases.mjs src/platform/demo.mjs src/platform/files.mjs src/platform/http.mjs src/platform/orders.mjs src/platform/profile.mjs src/platform/reviews.mjs src/platform/store.mjs src/proposals.mjs src/seed.mjs src/state.mjs src/store.mjs src/tasks.mjs tests/backend/ai.test.mjs tests/backend/domain.test.mjs tests/backend/helpers.mjs tests/backend/http.test.mjs tests/backend/lifecycle.test.mjs tests/backend/platform-assist.test.mjs tests/backend/platform-auth.test.mjs tests/backend/platform-cases.test.mjs tests/backend/platform-files.test.mjs tests/backend/platform-http.test.mjs tests/backend/platform-journey.test.mjs tests/backend/platform-orders.test.mjs tests/backend/platform-profile.test.mjs tests/backend/platform-reviews.test.mjs tests/backend/proposals.test.mjs tests/backend/remote-ai.test.mjs tests/backend/store.test.mjs tests/e2e/catalog-api.test.mjs
Ветки (3)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.