AAYMA
RU
Войти

Netrix

Сервис подбора до трёх подрядчиков для мероприятия по городу, категории, дате, формату и бюджету.

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

О проекте

Команда: Netrix
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Рабочий MVP

Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор

Суть

Сервис подбора до трёх подрядчиков для мероприятия по городу, категории, дате, формату и бюджету. Бэкенд на FastAPI, интерфейс на React.

Как устроено

prepare_profiles.py собирает из анонимизированного CSV каталог из 66 профилей. matching.py валидирует запрос, отсеивает занятых и неподходящих по условиям исполнителей и детерминированно ранжирует оставшихся. POST /match возвращает статус, число подходящих, причины исключения и до трёх рекомендаций с флагами synthetic и imputed. Внешние AI-сервисы не используются.

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

  • rule-based filtering
  • deterministic ranking
  • exclusion reasons

Особенности

Ответ объясняет, почему кандидаты исключены, и помечает синтетические или дополненные поля (city_imputed, price_imputed).

Стек

Python · FastAPI · React · TypeScript · Vite


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

README

README.md

HackAlem — подбор подрядчиков для мероприятий

Сервис помогает найти подрядчиков по городу, категории, дате мероприятия, формату и бюджету. Бэкенд проверяет анкеты, исключает занятых и неподходящих по условиям исполнителей и возвращает до трёх рекомендаций. В проекте есть веб-интерфейс на React и API на FastAPI.

Каталог содержит 66 подготовленных профилей. Подбор детерминированный: одинаковый запрос при тех же данных даёт одинаковый результат. Внешние AI-сервисы не используются. Это демонстрационный проект: он не отправляет заявки и не оформляет бронирования.

Что нужно установить

  • Python 3.10 или новее
  • Node.js 22.22 или новее для фронтенда и его тестов

Запуск всего приложения в Windows

Откройте два окна PowerShell в корневой папке проекта.

В первом окне установите зависимости и запустите API:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -m uvicorn app:app --reload

Во втором окне установите зависимости фронтенда и запустите сайт:

cd frontend
npm ci
npm run dev

Откройте адрес, который Vite покажет в терминале (обычно http://localhost:5173). В режиме разработки фронтенд направляет запросы /api/* в API на http://127.0.0.1:8000; отдельная настройка CORS не нужна.

Оба сервера должны оставаться запущенными, пока вы пользуетесь сайтом. Остановить каждый можно сочетанием Ctrl+C в соответствующем окне.

Запуск в macOS и Linux

В первом терминале из корня проекта:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m uvicorn app:app --reload

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

cd frontend
npm ci
npm run dev

API

Интерактивная документация FastAPI доступна по адресу http://127.0.0.1:8000/docs. Основные маршруты:

  • GET /health — проверяет, что API запущен, и возвращает количество загруженных профилей.
  • POST /match — подбирает подрядчиков.

Пример тела запроса к POST /match:

{
  "city": "Алматы",
  "event_date": "2026-10-17",
  "event_format": "свадьба",
  "category": "Ведущий",
  "budget_kzt": 1000000,
  "duration_hours": 5,
  "language": "русский"
}

Поля city, event_date, event_format, category и budget_kzt обязательны. duration_hours и language можно не указывать. Названия города, категории и формата должны соответствовать значениям в каталоге. Допустимый диапазон дат по умолчанию: 23 сентября — 31 декабря 2026 года включительно. Неверный запрос получает HTTP 422.

API возвращает статус (matched, no_category_in_city или no_matches), число подходящих профилей, причины исключения кандидатов и до трёх рекомендаций. price_from_kzt — цена «от», а не итоговая смета. Флаги synthetic, city_imputed и price_imputed отмечают синтетические или дополненные данные.

Проверки

Backend-тесты из корневой папки:

.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.\.venv\Scripts\python.exe -m unittest discover -s tests -v

Для macOS/Linux замените путь к Python на .venv/bin/python.

Frontend-тесты и production-сборка из папки frontend:

npm run check

Команда проверяет TypeScript, запускает тесты и собирает production-версию.

Структура проекта

ПутьНазначение
app.pyFastAPI-маршруты /health и /match
matching.pyВалидация запроса, фильтрация и ранжирование профилей
profiles.jsonКаталог из 66 подготовленных профилей для бэкенда
prepare_profiles.pyПодготовка каталога из исходного CSV
data/hackathon_dataset_anonymized.csvИсходный анонимизированный набор данных
frontend/React-интерфейс и HTTP-адаптер к API
tests/Backend-тесты

Для локального предварительного просмотра UI предусмотрена страница /preview. Она доступна при запуске Vite в режиме разработки и использует фиксированные демонстрационные сценарии.

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

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

nurd3v 7Serik 1

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

  • 2026-09-23 17:05Read.me finalnurd3v
  • 2026-09-23 17:03final decisionnurd3v
  • 2026-09-23 16:03realoadnurd3v
  • 2026-09-23 15:31backnurd3v
  • 2026-09-23 14:53second commitnurd3v
  • 2026-09-23 14:33asdasdnurd3v
  • 2026-09-22 23:48add gitignore and well-planned frameworkSerik
  • 2026-09-17 13:09test commitnurd3v
Структура репозитория (46 файлов)
.gitignore
README.md
app.py
data/hackathon_dataset_anonymized.csv
frontend/.gitignore
frontend/AGENTS.md
frontend/BACKEND_INTEGRATION.md
frontend/README.md
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/src/components/Button.tsx
frontend/src/components/EmptyState.tsx
frontend/src/components/PageLayout.tsx
frontend/src/components/ResultsSkeleton.tsx
frontend/src/components/SearchForm.tsx
frontend/src/components/SearchResults.tsx
frontend/src/components/Surface.tsx
frontend/src/components/VendorCard.tsx
frontend/src/hooks/useVendorSearch.ts
frontend/src/main.tsx
frontend/src/mocks/profiles.json
frontend/src/mocks/scenarios.ts
frontend/src/mocks/vendors.json
frontend/src/mocks/vendors.ts
frontend/src/pages/PreviewPage.tsx
frontend/src/pages/SearchPage.tsx
frontend/src/services/apiVendorService.ts
frontend/src/services/contracts.ts
frontend/src/services/mockVendorService.ts
frontend/src/services/vendorService.ts
frontend/src/styles/global.css
frontend/src/styles/tokens.css
frontend/src/vite-env.d.ts
frontend/tests/demoReadiness.test.mjs
frontend/tests/mockVendorService.test.mjs
frontend/tests/searchForm.test.mjs
frontend/tests/searchResults.test.mjs
frontend/tsconfig.json
frontend/vite.config.ts
matching.py
prepare_profiles.py
profiles.json
requirements-dev.txt
requirements.txt
tests/test_matching.py
Ветки (2)

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

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

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