Netrix
Сервис подбора до трёх подрядчиков для мероприятия по городу, категории, дате, формату и бюджету.
О проекте
Команда: 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.mdHackAlem — подбор подрядчиков для мероприятий
Сервис помогает найти подрядчиков по городу, категории, дате мероприятия, формату и бюджету. Бэкенд проверяет анкеты, исключает занятых и неподходящих по условиям исполнителей и возвращает до трёх рекомендаций. В проекте есть веб-интерфейс на 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.py | FastAPI-маршруты /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 в режиме разработки и использует фиксированные демонстрационные сценарии.
Авторы коммитов
История коммитов
- 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
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.