Команда разработала платформу «Сбор» (sbor.team) для детских футбольных школ, объединяющую расписание, посещаемость, сбор взносов и организацию матчей в едином приложении. Система работает на сервере с использованием Laravel 12, Livewire 3 и PostgreSQL, а мобильное приложение написано на Flutter. Разработчики столкнулись с проблемой, когда коммуникация между тренерами, родителями и директорами происходила в неструктурированных чатах, что приводило к ошибкам при подсчете посещаемости и сборе денег. Основная задача проекта заключалась в превращении разрозненных состояний в четкие данные, не превращая тренера в оператора CRM.
Первым решением стала автоматизация подтверждения участия в событиях. Вместо ручного подсчета плюсов в чате, родители получают push-уведомления с кнопками «Будет» и «Не будет». Система учитывает время начала тренировки: для утренних событий напоминание приходит накануне в 19:00, а для вечерних — в тот же день в 8:00, чтобы не нарушать «тихие часы» с 21:00 до 8:00. Логика отправки уведомлений унифицирована в одном классе, чтобы избежать рассинхронизации между сервером и клиентом, что ранее приводило к ситуации, когда сообщение приходило, но карточка события отсутствовала на экране.
Второй ключевой функцией стал журнал посещаемости, который формируется автоматически на основе ответов родителей. Тренеру не нужно заносить данные вручную; он видит только тех, кто не подтвердил присутствие, и может отметить их как отсутствующих или исправить ошибку. При подтверждении тренировки система автоматически закрывает статус неразмеченных строк, используя ответы родителей, если они есть. Различаются два вида пропуска: «Предупредил» (родитель заранее ответил «Не будет») и «Не ответил» (молчание или статус «может быть»), что помогает директорам анализировать дисциплину команд.
Для упрощения зачисления детей в команды была введена система постоянных кодов из восьми знаков, которые легко продиктовать вслух. Коды генерируются с использованием алфавита без похожих символов (I, L, O, U) для избежания путаницы, а кириллические символы в коде жестко отклоняются. Заявка на вступление требует одобрения тренера, а старые коды сразу становятся недействительными после перевыпуска, что защищает вход в систему. Также реализована система учета взносов, где скриншоты переводов привязываются к конкретным счетам, а не тонут в ленте чата. Если у ребенка два родителя, оплата может подтвердить только тот, на кого оформлен счет, чтобы избежать дублирования отметок.
Последним блоком функционала стало хранение информации о матчах. Вместо того чтобы спрашивать в чате о результатах прошлых игр или времени следующих, вся информация доступна в приложении. Система решает проблему, когда расписание приходит фотографией таблицы, а счет помнит только тренер, делая данные о турнирах и результатах доступными для всех участников процесса в реальном времени.