irikteu.
Веб-приложение, которое по 7 параметрам мероприятия подбирает до трёх специалистов или площадок, показывает «почему подходит» с дословной цитатой и…
О проекте
Команда: Works Somehow
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Рабочий MVP
Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор
Суть
Веб-приложение, которое по 7 параметрам мероприятия подбирает до трёх специалистов или площадок, показывает «почему подходит» с дословной цитатой и причины отсева.
Как устроено
Запрос → проверка ввода → город+категория → 5 фильтров (дата, бюджет, тип события, язык, длительность) → детерминированная сортировка → топ-3 с объяснениями и цитатами из профиля. Логика реализована на JS (podbor/js/core/matcher.js), есть Python-версия event-match (matching.py, server.py). Дополнительно: сравнение подборок на разные даты, проверка повторяемости, 5 демо-сценариев.
Ключевые решения
- hard filtering
- deterministic sorting
- evidence quotes
- сравнение дат
Особенности
Кнопки «Сравнить с другой датой» и «Проверить повторяемость» показывают, как занятость влияет на результат и что выдача детерминирована. Есть казахская версия интерфейса (index-kk.html) и внимание к доступности (aria-live, prefers-reduced-motion).
Стек
JavaScript · HTML · CSS · Python
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-57125816-works-somehow.
README
README.mdirikteu. — подбор специалистов и площадок для мероприятий
Выбери параметры → получи до 3 подходящих вариантов → пойми, почему они подходят.
Веб-приложение, которое по параметрам мероприятия подбирает до трёх специалистов или площадок из каталога и объясняет каждый выбор фактами из исходных данных.
HackAlem 2026
Проблема
Организатор свадьбы, тоя или корпоратива тратит часы на поиск ведущего, фотографа или зала. Он листает десятки профилей и только потом узнаёт, что специалист занят, выходит за бюджет или не работает с таким форматом. Обычный каталог показывает длинный список, но не объясняет, почему вариант подходит и почему другие отсеяны.
Решение
irikteu. превращает каталог в короткий и понятный ответ:
- показывает не больше трёх подходящих профилей;
- к каждому даёт объяснение «Почему подходит»;
- прикладывает дословную цитату из каталога, чтобы любое утверждение можно было проверить;
- для отсеянных кандидатов показывает точную причину отказа.
Цены, даты и характеристики берутся только из каталога. Приложение ничего не придумывает.
Основные возможности
Подбор по 7 параметрам
| Параметр | Обязательный |
|---|---|
| Город | да |
| Дата мероприятия (23.09.2026 – 31.12.2026) | да |
| Тип мероприятия | да |
| Категория специалиста или площадки | да |
| Бюджет, тенге | да |
| Язык работы | нет |
| Продолжительность, часы | нет |
Карточка профиля
Каждая из трёх карточек содержит:
- имя (анонимизированное) и категорию;
- город;
- начальную цену в формате «От … тенге», а не итоговую стоимость;
- блок «Почему подходит»: особенность из описания профиля и все пройденные проверки;
- языки работы и лимит часов на площадке;
- признаки происхождения данных: synthetic, city_imputed, price_imputed;
- подтверждение из каталога: дословную цитату из описания профиля.
Прозрачные причины отказа
Под результатами показано, сколько кандидатов не прошло отбор и почему:
- заняты в выбранную дату;
- начальная цена выше бюджета;
- не принимают этот тип события;
- выбранный язык не указан;
- превышен лимит длительности.
Можно раскрыть полный список исключённых профилей с причиной для каждого. Если в городе вообще нет выбранной категории, приложение прямо об этом говорит и объясняет, что изменение даты или бюджета здесь не поможет.
Сравнение дат
Одной кнопкой можно сравнить подборку на выбранную дату и на другой день. Все остальные параметры остаются прежними, поэтому сразу видно, как занятость влияет на результат.
Проверка повторяемости
Кнопка «Проверить повторяемость» заново выполняет тот же запрос и подтверждает, что профили, их порядок и объяснения полностью совпадают.
Готовые сценарии для демонстрации
Пять кнопок «Проверьте на примере» показывают все типы ответа системы (город Алматы, свадьба, 23.09.2026 и бюджет 2 000 000 тенге, если не указано иное):
| Сценарий | Запрос | Что покажет система |
|---|---|---|
| Популярная категория | Ведущий | 10 кандидатов, 4 прошли, показаны 3 самых доступных |
| Редкая услуга | Флорист, 12 ч | 2 кандидата, оба подходят |
| Все заняты | Флорист, 12 ч, 25.09.2026 | 0 результатов: оба заняты в эту дату |
| Категории нет | Декоратор, Астана | в городе нет такой категории |
| Маленький бюджет | Ведущий, 10 000 тенге | 0 результатов: у всех 10 цена выше бюджета |
Как работает алгоритм
Запрос → проверка ввода → город + категория → 5 фильтров → сортировка → топ-3 + объяснения Качество кода:
- любой текст выводится через textContent, что защищает от XSS;
- для доступности используются aria-live, aria-busy, aria-expanded, семантические теги и видимый фокус;
- при настройке prefers-reduced-motion анимации отключаются;
- вёрстка адаптивна от телефона до широкого экрана.
Сценарий показа (2 минуты)
- Нажать «Популярная категория». Система находит 10 ведущих в Алматы, 4 прошли все условия, показаны 3 самых доступных. Открыть «Почему подходит» и цитату из каталога.
- Нажать «Сравнить с другой датой» и выбрать 24.09.2026. Подходящих становится 2 вместо 4, потому что часть ведущих занята.
- Нажать «Все заняты». Результатов 0, и система объясняет причину: оба флориста заняты 25.09.
- Нажать «Маленький бюджет». Все 10 кандидатов отсеяны, причина указана для каждого.
- Нажать «Проверить повторяемость». Результат совпадает полностью.
Ограничения
Это локальный MVP. Сейчас в нём нет регистрации, бронирования, оплаты, переписки со специалистом и подключения к внешней базе данных. Для задачи хакатона это не нужно: цель проекта — показать быстрый и прозрачный подбор из заданного каталога.
- Указана начальная цена, а не итоговая стоимость.
- Если занятость не отмечена, это ещё не подтверждённое бронирование.
Итог
irikteu. превращает длинный каталог в три понятных варианта. У каждого есть объяснение, подтверждение из данных и причины, по которым остальные кандидаты не подошли. Алгоритм детерминированный, не зависит от внешних API и готов к демонстрации без установки.
Авторы коммитов
История коммитов
- 2026-09-23 17:58Обновить README с описанием приложения и его функцийAyaulym
- 2026-09-23 17:57Revise README for improved project descriptionAyaulym
- 2026-09-23 17:53logic: іріктеу логикасы, интерфейс және тесттерГүлсезім
- 2026-09-23 17:51Fix formatting in README.md for consistencyKyrmyzy
- 2026-09-23 17:45README.md for project overview and structureKyrmyzy
- 2026-09-23 17:40design: бет, стильдер және анимацияларГүлсезім
- 2026-09-23 16:08ReadMeKyrmyzy
- 2026-09-23 15:17README конфликтісі шешілдіГукаш
Все коммиты (9)
- 2026-09-23 15:11Өз файлдарымды қостымГукаш
Структура репозитория (33 файлов)
.gitignore HackAlem_AI_Хакатон_задача_умный_подбор_подрядчиков.docx README.md event-match/.gitignore event-match/catalog.py event-match/examples.py event-match/matching.py event-match/profile_facts.json event-match/server.py event-match/tests/test_http.py event-match/tests/test_matching.py hackathon dataset anonymized .csv hackathon dataset preview.html index-kk.html index.before-fix.html.bak index.html podbor/README.md podbor/css/app-refine.css podbor/css/app.css podbor/css/theme-images.css podbor/css/theme.css podbor/data/catalog.js podbor/index.html podbor/js/app.js podbor/js/core/format.js podbor/js/core/matcher.js podbor/js/core/validation.js podbor/js/fx/effects.js podbor/js/ui/compare-view.js podbor/js/ui/demos.js podbor/js/ui/dom.js podbor/js/ui/results-view.js podbor/tests/matcher.test.js
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.