В этом разделе я веду дневник о том, как строю это приложение с помощью искусственного интеллекта. Не обзоры инструментов и не прогнозы, а рабочий журнал: что я делал на этой неделе, что из этого сломалось, какое решение оказалось неверным и чем это ловится в следующий раз. Приложение живое, им пользуются три футбольных команды, и все примеры здесь — оттуда.
Читать это интересно двум разным людям. Организатору команды — чтобы понять, кто и как делает бота, которого ему предлагают пустить в свой чат. Тому, кто сам строит продукты с ИИ — потому что уроки здесь не про футбол: одновременная запись с трёх телефонов, несколько клиентов в одной базе, приватность, проверки, которым можно верить.
12 сентября 2026 · выпуск
Прежде чем строить своё, я разобрал, что уже есть в мире. Вывод оказался неожиданным: приложений для любительского футбола много, они хорошие — и ни одно не ведёт сам вечер на поле.
Я смотрел на всё, что попадалось: мировые сервисы для команд, отдельные «делители составов», маркетплейсы пикап-игр и десяток Telegram-ботов. Если убрать маркетинг, всё это делится на три группы, и у каждой свой пробел.

Три группы и разрыв между ними.
Самая зрелая и самая полезная. Spond — бесплатный, без рекламы и без лимита участников в команде, с приёмом платежей (комиссия берётся только за процессинг); в Британии он де-факто стандарт для любительских команд. TeamSnap — больше 24 миллионов пользователей, силён в детском и клубном спорте: расписания, родители, несколько команд. Heja — то же, но проще и целиком бесплатно.
Что они делают лучше нас, без оговорок: приложения в App Store и Google Play с настоящими пуш-уведомлениями, приём платежей картой внутри, расписания тренировок, несколько команд и возрастных групп, поддержка на десятках языков и годы полировки. Если вашей команде нужна именно организация — берите их, я так и говорю знакомым.
Чего в них нет. Они не делят состав по силе: в лучшем случае «поделить случайно» или руками. И они не ведут сам игровой вечер — тот, где команды играют не один матч, а серию мини-игр по семь минут, где победитель остаётся, где счёт нужно записать здесь и сейчас с чьего-то телефона, а не вспоминать вечером дома.
Отдельный класс приложений, которые умеют ровно одно — разбить пришедших на равные команды. FairSides ближе всех к нам по замыслу: анонимные оценки игроков друг другом, деление на равные составы, учёт голов, пасов и MVP. Есть и совсем простые «балансировщики», где вы сами ставите каждому оценку от одного до десяти.
Их пробел — они живут отдельно от команды. Оценки надо занести руками, игроков — тоже, а вечер после деления начинается и заканчивается без них. Это инструмент на пять минут перед игрой, а не то, что держит клуб весь сезон.
Footy Addicts в Лондоне, OpenSports с платными тарифами от двадцати долларов в месяц, FC Pickup — про то, как найти игру в своём городе, собрать случайных людей и взять с них деньги за место. Отличная модель, но она про другое: там нет постоянного состава, а значит нет ни сезона, ни рейтинга, ни истории, которая кому-то важна.
Их много, и почти все — про профессиональный футбол: счёт матчей, прогнозы, ставки. Боты для организации своей команды существуют, но это в основном учебные проекты на GitHub: собрать «плюс-минус» в чате и посчитать, хватает ли людей. Готового решения, которое живёт в чате команды и ведёт весь вечер, я не нашёл — и именно поэтому сел писать сам.
| Что умеет | Расписание и чат | Делители составов | Мы |
|---|---|---|---|
| Запись на игру в чате | да, в своём приложении | нет | да, в чате команды |
| Составы по силе игроков | нет | да | да, три источника силы |
| Вечер по мини-играм: ротация, таймер, счёт | нет | нет | да |
| Голы, пасы, минуты, вратари с поля | частично, после игры | частично | да, с любого телефона |
| Итоги в чат и страница вечера | нет | нет | да, через минуту |
| Приём платежей картой | да | нет | нет, только учёт кассы |
| Приложение в сторах и пуши | да | да | нет, живём в Telegram |
| Цена | от бесплатно до платных тарифов | чаще бесплатно | бесплатно |
Так что же мы делаем иначе. Одна фраза: мы не заводим ещё одно приложение рядом с командой, а живём внутри её чата — и ведём не расписание, а сам вечер. Запись кнопкой под анонсом в том же чате, где люди уже переписываются. Составы, которые считает алгоритм по силе, собранной из трёх источников — и формулу видно каждому. Серия мини-игр с ротацией и таймером. Гол, пас, минута и вратарь — с телефона любого играющего, а не одного «секретаря». И через минуту после последней игры итоги в чате и страница вечера, которой можно поделиться.
Честно о том, чего у нас нет и, возможно, не будет. Нет приложения в сторах — оно нам не нужно, Telegram есть у всех. Нет приёма платежей: касса считает, кто сколько должен, а деньги ходят как ходили. Нет детских команд, родителей и расписания тренировок. Нет поиска соперников и площадок. Это не «ещё не сделали» — это сознательно не наша задача.
Что я взял на заметку из разбора: у Spond стоит поучиться простоте первого экрана, у TeamSnap — работе с несколькими командами одного человека (у нас половина игроков играет в двух составах), у FairSides — аккуратности в объяснении рейтинга. А главный вывод для меня был другой: рынок большой, а пустое место в нём — именно там, где начинается игра. Все делают «до» и «после», а сам вечер оставляют людям с блокнотом.
Сравнение собрано по публичным материалам и страницам самих сервисов на 12 сентября 2026. Что-то могло поменяться уже к моменту, когда вы это читаете, — если увидели неточность, напишите.
— Байжан Канафин
12 сентября 2026 · часть 4 из 4
Одиннадцатого сентября мой клуб играл без меня. Я открыл приложение на следующий день и увидел вечер целиком: 16 мини-игр, 26 голов, у каждого автор, у двадцати из них пас, минута у всех. Записали сами игроки, со своих телефонов, за час сорок.
Это и есть результат, за который стоило воевать. Не «бот отправляет напоминания», а вечер, который сам себя описывает: через минуту после последней игры в чат уходят итоги — кто забил, с чьей подачи, кто отстоял на ноль, — и собирается страница, которой можно поделиться. Голосование за самый красивый гол закрывается через два часа, и победитель попадает в статистику вечера.
Теперь честная часть. За эти полтора месяца я отменил несколько своих же решений, и два — в тот же день, когда принял.
Самое показательное — про вратарей. Я разобрал данные вечера и увидел: 24 гола из 26 записаны без вратаря. Поле есть, подсветка есть, никто не заполняет. Решение казалось очевидным: не давать старт игры, пока вратари не названы. Сделал, выкатил. К вечеру того же дня мне объяснили, почему это неправильно: перед свистком в воротах ещё никто не стоит, и запрет останавливает игру ради записи. Отменил. Вопрос переехал в момент пропущенного мяча — там вратарь виден всем, и ответ стоит одного нажатия. Данные пошли.
Второе — жалоба игрока: «чуть тормозило, кнопки не нажимались с первого раза». Первое желание — искать медленный запрос. Я измерил: статика отвечает за 0,11 секунды, запрос с базой — за 0,22. Сервер был ни при чём. Причина оказалась в интерфейсе: экран перерисовывался целиком, а браузер отправляет нажатие только если палец опустился и поднялся на одном элементе. Перерисовка между этими мгновениями съедала нажатие. Плюс кнопки часов гасли на всё время отправки — после каждого гола на секунду. Вывод простой: сначала измерь, потом чини, иначе починишь не то.

Строк в репозитории на 12 сентября. Что менялось в приложении и когда — в журнале изменений.
Полтора месяца, если считать сухо: 55 миграций базы, 116 коммитов с тех пор, как я завёл историю, три живых клуба, платформа, на которую любая команда подключается сама за две минуты. Плюс сайт, витрина команд, страницы вечеров и этот дневник.
Главный вывод, который я забираю в свою основную работу. Узкое место в разработке с ИИ — не написание кода. Оно в том, чтобы знать, что правда: какие поля заполняются на самом деле, что именно сломалось, какое решение уже принято и почему. Скорость даёт ИИ, а возможность ей пользоваться дают три вещи — архитектура, в которой невозможное невозможно, проверки, умеющие краснеть, и записанная память проекта. Человек в этой схеме остаётся там, где принимаются решения. Это единственное место, где он и должен быть.
Дальше я буду писать раз в неделю, по одному разбору: у продукта недельный такт, и каждый вечер на поле даёт новый случай. Если сами строите с ИИ — напишите мне, чем вы проверяете то, что он написал. Это самый интересный вопрос из всех, что у меня остались.
— Байжан Канафин
12 сентября 2026 · часть 3 из 4
Когда бота попросил второй клуб, я сделал самое очевидное и самое неправильное: скопировал проект целиком.
Копия работала. Второй клуб играл, третий тоже — каждый со своим воркером, своей базой и своим ботом. И каждая правка, которую я делал для одного, теперь требовала трёх выкатов и трёх проверок. Через несколько дней стало понятно, что я строю не продукт, а зверинец, и что четвёртый клуб я просто не подключу.
Третьего сентября я отпочковал отдельный проект под многоклубность и принял решение, которое считаю одним из лучших за всю историю: живые клубы не трогать. Новая платформа строилась рядом, на своей базе и своём боте, а работающие клубы продолжали играть на старом коде, пока новое не будет доказано.

Что заменило три копии проекта. Клубы витрины видно в разделе «Команды».
Многоклубность — это не «добавить колонку club_id». Это инвариант: ни один запрос не имеет права увидеть данные чужого клуба. Инвариант, который нельзя проверить глазами в двадцати тысячах строк кода. Поэтому вместе с колонкой появился сторож: скрипт, который разбирает весь код, находит каждый запрос к общим таблицам и краснеет, если в нём нет фильтра по клубу. Сегодня он видит 446 таких запросов, и у 33 исключений — письменное обоснование, почему это законно. Пока список исключений не пуст, проект честно считается переходным.
Четвёртого сентября платформа уехала в прод. Дальше три дня ушло на то, чего в плане не было: перенос живых клубов. Каждый переезд проверялся отдельным скриптом — сходятся ли люди, оценки, игры, голы и деньги, нет ли двойников, один ли текущий сезон. Седьмого сентября все три команды играли уже на платформе, а старые экземпляры остались целыми и выключенными — на случай, если что-то не сойдётся.
Тогда же появилось самоподключение: любая команда добавляет бота в свой чат, отвечает на три вопроса — как называется, когда играете, где играете — и всё. Ни заявки, ни очереди, ни моего участия. Это то место, где ИИ-разработка даёт настоящий выигрыш: мастер подключения, жизненный цикл клуба и все проверки прав вокруг него написаны за вечер. Но выкатить их к людям можно было только потому, что рядом стоял сторож, доказывающий изоляцию клубов, и симуляция, играющая вечер сразу за два клуба одновременно.
В последней части — как это выглядит сегодня: вечер, который записывают сами игроки с поля, и те решения, которые пришлось отменить в тот же день, когда они были приняты.
Читать дальше: Часть 4. Полтора месяца: что получилось и что я отменил ↑ (следующая часть выше — свежее сверху).
— Байжан Канафин
12 сентября 2026 · часть 2 из 4
Самое полезное, что случилось с проектом в августе, — у него появился заказчик, который играет со мной в одной команде и говорит прямо.
Первым делом попросили честные составы. Это оказалось не «поделить случайно», а маленькая задача про доверие: игроки оценивают друг друга, и если брать среднее, одна оценка из вредности двигает результат. Мы взяли медиану, ограничили влияние самооценки и добавили третий источник — результаты прошлых игр по шахматному принципу: выиграл у сильных, рейтинг вырос. Потом выяснилось, что люди начали занижать себе анкету, потому что балансировщик выравнивает средние по командам, и «слабый на бумаге» получал сильных партнёров. Пришлось сделать расчёт открытым — в приложении есть экран, где написано, сколько весит анкета, сколько оценки коллег и сколько результаты игр. Пока правило непрозрачно, его выгодно обходить.

Так на поле записывают гол: автор, пас, вратарь — с телефона любого играющего. Разбор экранов — в инструкции по вечеру.
Дальше пошли просьбы по одной на вечер. Касса, которая делится до тенге и напоминает о долге сама, потому что человеку неприятно напоминать лично. Отметка явки на поле, когда половина уже приехала, а половина «в пути». Табло с таймером тайма — в манеже с эхом часы на вытянутой руке не работают. Ротация команд по правилу «победитель остаётся» — оно было у клуба и до бота, просто жило в головах. Прогноз вечера для тех, кто сегодня не играет. Жёлтые карточки за неявку — это попросили сами, и это, пожалуй, самая спорная функция из всех.
И вот здесь начинается то, ради чего я вообще пишу этот дневник. Когда код пишет ИИ, он пишет его быстрее, чем человек успевает прочитать. Через три недели такой работы у меня был продукт, который я уже не мог удержать в голове целиком. Дальше есть два пути: замедлиться до скорости чтения или выстроить вокруг ИИ то, что читает за тебя.
Вторая половина — память. У проекта есть журнал решений: каждое записано вместе с причиной и датой, и агент не имеет права переоткрывать его без моей просьбы. Рядом — журнал граблей: каждая ошибка, которая стоила нам живого вечера или часа поиска, описана так, чтобы её нельзя было повторить по незнанию. Сегодня в первом 116 записей, во втором 151. Без этого ИИ на следующей сессии уверенно ломает то, что вчера сам же и починил: он не помнит вчерашнего разговора, зато прекрасно помнит, «как обычно принято».
К концу августа у нас был бот, который вёл вечер от анонса до таблицы сезона, и я всё ещё считал это приложением для одной команды. В следующей части — что произошло, когда попросили вторая и третья.
Читать дальше: Часть 3. Второй клуб, который сломал архитектуру ↑ (следующая часть выше — свежее сверху).
— Байжан Канафин
12 сентября 2026 · часть 1 из 4
Начну с признания, без которого всё остальное будет выглядеть красивее, чем есть. Я пришёл к этому приложению не с нуля.
Больше года мы в Documentolog разрабатываем ИИ-агентов для нашей платформы d8n.ai — для документооборота, техподдержки, корпоративных процессов. Это не эксперименты в чате: у каждого клиента своя независимая база знаний, к ней золотой стандарт ответов, с которым агент сверяется, и процесс, который этот стандарт обновляет на живой обратной связи. Я прошёл через это как заказчик и как человек, принимающий архитектурные решения, и к августу у меня уже было понимание, которое здесь пригодилось целиком: как работает вайб-кодинг и где он ломается, почему архитектура важнее скорости и почему база знаний проекта — не бюрократия, а то единственное, что делает работу с ИИ воспроизводимой.
Поэтому честно: если бы за это сел человек без такого опыта, полтора месяца превратились бы в полгода. Или в красивый прототип, который умер бы на втором живом вечере. Недооценивать этот фон было бы нечестно по отношению к читателю, который решит попробовать так же.
Теперь про футбол. Наш клуб — ИТ-руководители Казахстана, играем в Астане чуть больше года. И всё это время организация каждой игры выглядела одинаково. Кто-то в чате спрашивает «кто идёт?». Половина не отвечает, потом отвечает в личку. Составы делим на месте, и почти всегда получается 12:2 — с вечной претензией «опять все сильные в одной команде». Счёт помнит тот, кто громче. Деньги за поле собирает организатор, напоминая каждому лично, и это самая неприятная часть вечера. Статистики нет вообще, хотя играем уже год. Гугл-таблица жила две недели и умерла, как умирают все таблицы, которые надо заполнять руками.

Сегодняшний экран начала вечера: отметить пришедших, собрать составы, дать свисток. В августе тут была одна кнопка «иду».
В начале августа я сел и начал писать. Инструмент — в основном Claude: код, разборы, рецензии правок. Стек выбрал так, чтобы у меня не появилось второй работы по обслуживанию: Telegram-бот плюс мини-приложение внутри Telegram, на Cloudflare Workers с базой D1. Ни одного сервера, который нужно обновлять, тариф в пять долларов в месяц, и приложение открывается у всех, у кого есть Telegram, — ничего не надо скачивать и ставить.
Первая версия делала одно: публиковала в чате анонс игры и собирала запись кнопкой. Этого хватило, чтобы через неделю в чате перестали спрашивать «кто идёт». Дальше клуб начал сам говорить, чего ему не хватает, — и следующие полтора месяца я работал по этим просьбам, а не по своему плану. Что из этого выросло, целиком можно потрогать в разделе «Демо»: там живая копия приложения с вымышленным клубом, нажимать можно всё.
Что я хочу показать в этой серии: не то, что ИИ умеет писать код. Это уже все видели. А то, что вокруг ИИ должно стоять, чтобы код, написанный за минуты, можно было выпустить к живым людям и не краснеть за него потом. В следующей части — как клуб стал заказчиком, и почему у проекта раньше кода появились две вещи: записанные решения и симуляции, которые ломают код нарочно.
Читать дальше: Часть 2. Клуб как заказчик ↑ (следующая часть выше — свежее сверху).
— Байжан Канафин
Всё, о чём здесь написано, работает не только у нас: бот подключается к любому чату команды за пару минут и бесплатно.
Бесплатно · Две минуты, ставить ничего не надо · Не подошло — удалили бота из чата, и всё