AAYMA
RU
Войти

StartCard.ai

Платформа превращает короткую бизнес-задачу в карточку через уточняющие вопросы, считает рейтинг готовности 0–100, ведёт каталог, отклики студентов…

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

О проекте

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

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

Суть

Платформа превращает короткую бизнес-задачу в карточку через уточняющие вопросы, считает рейтинг готовности 0–100, ведёт каталог, отклики студентов, решения бизнеса и уведомления.

Как устроено

React/Vite фронтенд и Node-сервер (UI и API на одном порту) с файловым JSON-хранилищем. Уточняющие вопросы и карточку генерирует Gemini, без ключа работает резервный режим по правилам. Рейтинг готовности детерминированный, по заполненности семи полей, пересчитывается при правке. Профили без авторизации, уведомления внутри приложения.

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

  • детерминированный рейтинг по 7 полям
  • rule-based fallback вопросов
  • file store / memory store
  • Node test runner + Supertest

Особенности

Подробный пошаговый сценарий проверки для жюри (9 шагов). Честно указано, что AI-подбор команд не реализован, а реальный запрос к Gemini не подтверждён. Прошли 35/35 тестов.

Стек

TypeScript · React · Vite · Node.js · tsx

Модели

gemini-flash-latest · gpt-4o-mini


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

README

README.md

StartCard.ai — от задачи к команде

StartCard.ai

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

Быстрый запуск · Проверка проекта · Документация · API · Разработка

КомандаТрекКейс в материалах команды
bears07 — ОбразованиеAI Sana Challenge Hub: от бизнес-задач к решению

Байбусин Кайдар · Бейбитов Санжар · Ескендиров Масуд

Название трека и кейса взято из предварительных материалов и README команды. Полное официальное ТЗ в репозитории отсутствует. AI-подбор и ранжирование команд остаются расширением идеи и пока не реализованы.

Зачем нужен продукт

Бизнесу сложно получить подходящий результат, если задача описана одной фразой. Студентам нужны понятные данные, ограничения и критерии приёмки перед откликом. StartCard.ai помогает уточнить постановку, проверить карточку и собрать предложения. Экономия времени и качество подбора пока не измерялись.

Бизнес: описывает задачу → отвечает на вопросы → проверяет карточку → публикует → рассматривает отклики. Студент: создаёт профиль → выбирает задачу → предлагает решение → получает уведомление о решении бизнеса.

Возможности

ОбластьЧто можно сделать
ПрофилиСоздать, выбрать и отредактировать профиль студента или бизнеса. ID и роль сохраняются
КонструкторПолучить уточняющие вопросы, сформировать и отредактировать карточку перед публикацией
Готовность задачиПосмотреть рейтинг 0–100 и разбивку по семи полям; рейтинг пересчитывается при редактировании
КаталогИскать задачи, фильтровать по теме и готовности, отправлять предложения
Кабинет бизнесаВидеть задачи выбранного профиля и поступившие на них отклики, принять или отклонить команду
УведомленияБизнесу — новый отклик; студенту — принятие или отклонение. Счётчик непрочитанных, отметка прочтения, переход к событию
СохранениеПрофили, задачи, отклики, решения и уведомления сохраняются на сервере после обновления страницы и перезапуска

Профили работают без паролей и авторизации. Это открытый демонстрационный режим: любой посетитель может выбрать существующий профиль. Он не предназначен для приватных данных.

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

Быстрый запуск

Нужны Git, Node.js 22.12+ (рекомендуется Node.js 24 LTS) и npm. Проверки выполняются из корня репозитория.

git clone --branch main https://github.com/BAITC-Hacks/hack-97e25780-bears.git
cd hack-97e25780-bears
npm ci

Создайте локальный файл настроек — PowerShell:

Copy-Item .env.example .env

Для macOS/Linux: cp .env.example .env. Ключи можно оставить пустыми.

npm run dev

Откройте http://localhost:3000. UI и API работают на одном адресе. Терминал оставьте открытым; остановка — Ctrl+C.

Запуск собранной версии и отдельно API
npm run build
npm start

npm start требует папку dist/. Установка должна включать devDependencies: launcher использует tsx, поэтому npm ci --omit=dev для этой версии не подходит.

Только API: npm run start:api. Не запускайте его одновременно с общим сервером на том же порту.

Проверка сервера: http://localhost:3000/health. В PowerShell:

Invoke-RestMethod http://localhost:3000/health

При обычном запуске без ключей ожидаются status: "ok", storage: "file", aiConfigured: false и оба aiProviders равные false.

Профили и уведомления

  • Нажмите блок профиля в боковом меню. Можно выбрать существующий профиль, создать новый или изменить текущий.
  • У студента доступны имя, команда, вуз, специализация, навыки и контакты; у бизнеса — имя представителя, компания и должность.
  • Сервер выдаёт постоянный ID. Изменение имени не разрывает связь с задачами и откликами.
  • При отправке отклика уведомление получает профиль, опубликовавший задачу. При принятии или отклонении — профиль студента.
  • Колокольчик показывает фактическое число непрочитанных. Прочитать можно отдельное событие или весь список.
  • Уведомления и данные обновляются периодически и при возвращении к вкладке. Email, Telegram-рассылок и браузерных push-уведомлений нет.

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

Хранение данных

По умолчанию сервер создаёт data/runtime/startcard.json. Профили, карточки, отклики, решения и уведомления восстанавливаются из этого файла при следующем запуске. Каталог data/runtime/ исключён из Git.

  • Для резервной копии остановите сервер и скопируйте файл в отдельное место.
  • DATA_FILE позволяет выбрать другой путь; относительный путь отсчитывается от корня проекта.
  • DATA_FILE=:memory: включает временный режим: после перезапуска данные исчезают, /health показывает storage: "memory".
  • Файл рассчитан на один серверный процесс. На хостинге нужен постоянный диск; для нескольких экземпляров сервера потребуется общая БД.
  • При повреждённом файле сервер сообщает ошибку. Он не должен незаметно заменять пользовательские данные учебным примером.

Черновик до публикации, закладки и демонстрационный раздел поиска команд остаются локальными состояниями интерфейса.

Переменные окружения и AI

Настройки читаются сервером из .env рядом с package.json либо из окружения хостинга. После изменения перезапустите процесс.

ПеременнаяНазначениеЗначение в примере
PORTОбщий порт UI и API3000
CORS_ORIGINOrigin отдельного клиента APIhttp://localhost:3000
DATA_FILEЛокальное хранилищеdata/runtime/startcard.json
GEMINI_API_KEYAI-вопросы и карточка в текущем UIПусто, необязательно
GEMINI_MODELМодель конструктораgemini-flash-latest
GEMINI_TIMEOUT_MSТаймаут Gemini10000
OPENAI_API_KEYОтдельные API уточнений, не вызываемые текущим UIПусто, необязательно
OPENAI_MODELМодель отдельного сервисаgpt-4o-mini
OPENAI_TIMEOUT_MSТаймаут OpenAI10000

Для настоящего AI в конструкторе нужен Gemini-ключ. Один OpenAI-ключ не включает AI в этом интерфейсе. Модель можно заменить на доступную вашему аккаунту. Флаги /health подтверждают наличие настройки, но не доступ к модели или квоту.

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

.env.example содержит только пустые ключи; .env исключён из Git. Не помещайте секреты в React, переменные VITE_*, клиентскую сборку или commits. Ключи из переписки не используются; ранее опубликованный ключ следует отозвать у провайдера.

Реальный успешный запрос к Gemini/OpenAI при проверках без ключей не подтверждён. Тесты AI-сервисов используют подставные клиенты для успешного ответа, ошибки и таймаута.

Проверка для команды и жюри

  1. Запустите приложение. В режиме «Бизнес» откройте профили и создайте Учебная столовая с тестовым именем представителя. Отредактируйте должность и сохраните.
  2. Нажмите «Создать Карту + ИИ». Пустой черновик должен вызвать ошибку. Затем введите: Нужен сервис прогноза очередей в столовой кампуса для студентов и сотрудников.
  3. Получите вопросы. Без ключа проверьте подпись резервного режима. Ответьте: данные — обезличенный CSV; приёмка — прогноз пиковых часов на контрольной неделе; срок — две недели; куратор — [email protected]; пользователи — студенты; результат — веб-прототип и инструкция.
  4. Сформируйте карточку. Измените название, проверьте перенесённые ответы. Удалите и восстановите одно поле: рейтинг должен пересчитаться. Подтвердите публикацию.
  5. В режиме «Студент» создайте свой профиль с названием команды. Найдите опубликованную карточку, введите идею, план и срок. Ссылка на прототип необязательна.
  6. Переключитесь на бизнес-профиль владельца задачи. В колокольчике должно появиться уведомление о новом отклике. Откройте его и вручную выберите команду.
  7. Вернитесь к профилю студента: появится уведомление о принятии. Отметьте его прочитанным. Для другого отклика можно проверить отклонение.
  8. Обновите страницу, затем остановите и снова запустите сервер. Профили, задача, отклик, решение и прочтённое уведомление должны сохраниться при файловом режиме.
  9. Создайте второй профиль того же типа: у него не должно быть чужих личных откликов и уведомлений. Публичный каталог задач остаётся общим.

Данные примера вымышленные и предназначены для демонстрации. Полный сценарий основного MVP описан также в демо-сценарии.

GitHub хранит код и сам не запускает Node-сервер. Жюри может клонировать проект и выполнить эти шаги локально. При отдельном размещении приложения ключ задаёт владелец сервера; посетителям вводить ключ не требуется. Публичный адрес развёрнутого приложения не заявлен.

Проверки проекта

npm run check

Команда последовательно выполняет npm run lint (TypeScript, не ESLint), npm test (Node test runner + Supertest) и npm run build (Vite). Тесты не обращаются к реальным AI API и не используют файл с пользовательскими данными.

Проверено 23 сентября 2026 года: TypeScript, 35/35 тестов, production-сборка и запуск; в браузере — создание и редактирование обоих типов профилей, отклик, принятие, уведомления, прочтение, переключение профилей, ошибка сети с повторным сохранением и восстановление после перезапуска. Интерфейс проверен при обычной ширине и на 390 px. Реальные AI-запросы не выполнялись.

При изменении интерфейса дополнительно проверяйте его в браузере: создание и редактирование двух типов профилей, получение и прочтение уведомлений, повторные действия, сетевые ошибки и сохранение после перезапуска. Подробности рабочего процесса — в CONTRIBUTING.md.

Структура репозитория

.github/                  Шаблон Pull Request
README.md                 Главная страница и запуск
CONTRIBUTING.md           Работа в команде
.env.example              Настройки без секретов
package.json              Зависимости и команды
package-lock.json         Зафиксированные версии
server.ts                 Общий сервер UI + API
src/
  App.tsx, main.tsx        React-приложение
  components/             Интерфейс, профили и уведомления
  api.ts, types/          Клиент запросов и типы
  utils/, data/           UI-рейтинг и учебные данные
  backend-app.js          Express API
  server.js               Настройка сервисов и хранилища
  routes/                 API интерфейса
  services/               Gemini, OpenAI и fallback
  storage/                Хранилище в памяти и запись на диск
  domain/                 Исходный backend-рейтинг
  *.test.js               Тесты API, сервисов и хранения
data/
  demo-seed.json          Продуктовые примеры
  runtime/                Локальные данные, НЕ в Git
docs/
  README.md               Навигатор документации
  architecture.md         Устройство приложения
  api-contract.md         Актуальные запросы и ответы
  assets/                 Оформление репозитория
  …                       Продуктовый контракт и демо

Frontend: React 19, TypeScript, Vite, Tailwind CSS, lucide-react. Backend: Node.js, Express, dotenv, Google GenAI SDK, OpenAI SDK. Данные: локальный JSON-файл; внешняя БД не требуется.

Сохранена структура участников. backend-app.js заменяет прежнее имя app.js, конфликтовавшее с App.tsx на Windows. UI использует /api/ui/*; исходный общий API сохранён. Схемы контактов и рейтинга этих API отличаются — см. архитектуру и контракт.

Границы текущей версии

  • Профили без паролей не обеспечивают защиту доступа; это режим демонстрации. Общий API тоже не имеет авторизации.
  • Файловое хранилище предназначено для одного процесса и постоянного диска, не для распределённого развёртывания.
  • Нет AI-ранжирования команд, автоматического назначения, чата, внешних рассылок, полноценной аналитики, экспорта, вложений и второго языка.
  • Закрытие отбора без победителя есть в исходном API, но не отдельной кнопкой UI. Отмены решения по отклику нет.
  • Срок карточки по умолчанию — 14 дней. Срок из текста ограничений автоматически в deadline не разбирается.
  • Рейтинг основан на правилах заполненности и длине полей. Объединение формул UI и общего API требует отдельного согласования.
  • Раздел поиска команд и закладки остаются демонстрационными. Демо-примеры не обозначают реальных партнёров или обещанные награды.

Команда и происхождение материалов

УчастникЗона работы
Участник 1 — капитан и продуктовый лидерТема, границы MVP, продуктовые документы, README, сценарий проверки и интеграция
Участник 2 — технический лидерBackend, API, хранилище, AI-сервисы, рейтинг и тесты
Участник 3 — frontend / UX / testИнтерфейс StartCard.ai, конструктор, каталог, формы и кабинет бизнеса

История веток участников сохранена обычными merge. При разработке использовались Google AI Studio для исходного frontend и Codex для интеграции, профилей, уведомлений, документации и проверки. Runtime AI — Gemini и отдельный OpenAI-сервис. Иконки — lucide-react; стили — Tailwind CSS. Исходные учебные изображения профилей и команд заданы в данных frontend, оформление README создано как локальный SVG.

Архив HackAlem AI и сообщения организаторов использованы как контекст. Продуктовый контракт сохраняет первоначальные решения; актуальные возможности описаны здесь и в API-контракте. Следующие отдельные задачи: полноценная авторизация, общая БД для нескольких серверов и необязательные расширения продуктового плана.

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

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

logixx01 17mukpokz 5Sanzhar 5Sanzhar19 3Масуд 2Бейбитов Санжар 2

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

  • 2026-09-23 17:52Update project case name in README.mdmukpokz
  • 2026-09-23 17:47merge: add persistent profiles and in-app notificationslogixx01
  • 2026-09-23 17:47docs: refresh repository presentation and verification guidelogixx01
  • 2026-09-23 17:46feat: add profile management and notification inboxlogixx01
  • 2026-09-23 17:46feat: persist profiles and deliver in-app notificationslogixx01
  • 2026-09-23 17:21Fix formatting in README.mdmukpokz
  • 2026-09-23 17:20Rename project to StartCard.ai and update detailsmukpokz
  • 2026-09-23 17:16Update README to remove gamification detailsSanzhar19
Все коммиты (34)
  • 2026-09-23 17:07merge: include latest StartCard product naminglogixx01
  • 2026-09-23 17:05docs: document combined app setup and jury walkthroughlogixx01
  • 2026-09-23 17:05fix: connect frontend workflow to shared backendlogixx01
  • 2026-09-23 16:51merge: integrate StartCard frontendlogixx01
  • 2026-09-23 16:48merge: integrate Challenge Hub backendlogixx01
  • 2026-09-23 16:48merge: integrate product documentationlogixx01
  • 2026-09-23 16:34feat: upload StartCard frontend and add setup guideМасуд
  • 2026-09-23 16:29feat: complete Challenge Hub backendБейбитов Санжар
  • 2026-09-23 16:21Fix formatting in installation section of READMESanzhar19
  • 2026-09-23 16:02docs: add jury quickstart and verification stepslogixx01
  • 2026-09-23 15:48feat: add Challenge Hub task builder UIМасуд
  • 2026-09-23 15:27Remove AI Sana hackathon details from READMESanzhar19
  • 2026-09-23 15:26docs: update progress from team brancheslogixx01
  • 2026-09-23 15:22Update README.mdmukpokz
  • 2026-09-23 15:22feat: add deterministic task ratingБейбитов Санжар
  • 2026-09-23 15:02docs: merge team product materialslogixx01
  • 2026-09-23 14:59docs: document agreed Challenge Hub scopelogixx01
  • 2026-09-23 16:47Update README.mdlogixx
  • 2026-09-23 14:34docs: clarify backend-first MVP scopeSanzhar
  • 2026-09-23 14:32test: add taskCount validation caseSanzhar
  • 2026-09-23 14:26Revise README with new project title and tech stackmukpokz
  • 2026-09-23 14:25docs: update project description for business and student modesSanzhar
  • 2026-09-23 14:18chore: add env template and ignore local secretsSanzhar
  • 2026-09-23 14:14docs: define MVP product contract and demo datalogixx01
  • 2026-09-23 14:13feat: initialize backend MVPSanzhar
  • 2026-09-23 15:04Update team and participants in READMElogixx
Структура репозитория (63 файлов)
.env.example
.github/PULL_REQUEST_TEMPLATE.md
.gitignore
CONTRIBUTING.md
README.md
data/demo-seed.json
docs/README.md
docs/acceptance-checklist.md
docs/api-contract.md
docs/architecture.md
docs/assets/startcard-banner.svg
docs/demo-scenario.md
docs/product-spec.md
index.html
metadata.json
package-lock.json
package.json
server.ts
src/App.tsx
src/api.ts
src/backend-app.js
src/components/AiReadinessScoreIndicator.tsx
src/components/AiTaskCreatorModal.tsx
src/components/ApplyModal.tsx
src/components/BrandLogos.tsx
src/components/BusinessDashboard.tsx
src/components/EditProfileModal.tsx
src/components/Header.tsx
src/components/Logo.tsx
src/components/ModalFrame.tsx
src/components/NotificationsPanel.tsx
src/components/ProfileAvatar.tsx
src/components/ProfileManager.tsx
src/components/Sidebar.tsx
src/components/TaskCardItem.tsx
src/components/TaskConstructorModal.tsx
src/components/TaskDetailsModal.tsx
src/components/TaskFilters.tsx
src/components/TeamView.tsx
src/data/initialData.ts
src/domain/rating.js
src/frontend-ai-service.test.js
src/gemini-card-service.test.js
src/index.css
src/main.tsx
src/profile-seed.js
src/profiles-notifications.test.js
src/question-service.test.js
src/rating.test.js
src/routes/ui-router.js
src/seed.js
src/server.js
src/server.test.js
src/services/frontend-ai-service.js
src/services/gemini-card-service.js
src/services/question-service.js
src/storage/file-store.js
src/storage/memory-store.js
src/types/index.ts
src/ui-router.test.js
src/utils/scoreCalculator.ts
tsconfig.json
vite.config.ts
Ветки (6)

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

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

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