Михаил Кругликов · Гостевая статья

Меня зовут Михаил Кругликов. В свободное от работы время я занимаюсь проблемами городского транспорта Ростова. Мы с командой пишем новости, предлагаем улучшения на основе исследований и опыта других городов, а с 2026 года проводим встречи ростовских чиновников и журналистов с экспертами — теоретиками и практиками из городов России, где смогли поднять общественный транспорт на достойный уровень.

Много лет мы ведём сайт «Ростовский городской транспорт», который работает и как новостной портал, и как справочник. Но ему всегда не хватало собственного сервиса, который показывал бы транспорт на карте и включал дополнительные функции.

Подобные сервисы уже существуют, но у каждого есть недостатки или ограничения. Например, при работе с официальным сайтом МБУ «Центр ИТС» я сталкивался с тем, что он не адаптирован для смартфонов и не всегда корректно открывается с мобильного интернета. На мобильном нельзя было посмотреть номера конкретных машин, а это может быть критично, если пассажир забыл внутри вещи. Не хватало и возможности выбрать несколько маршрутов для отображения.

Часть этих потребностей закрывал сторонний неофициальный сайт, но и к нему возникали вопросы: по скорости работы, адаптации и другим деталям. Нужен был свой сервис, который объединил бы необходимые функции. Всё упиралось во время и усилия: проект у нас некоммерческий, и потратить порядка 200 часов на разработку и тестирование было невозможно.

Работа с Codex стала сочетанием моих знаний о транспорте и «рук», которые на основе этих знаний делают сервис. Без «рук» я бы не дошёл до реализации. При этом сам Codex не смог бы учесть нюансы, которые я, как человек, глубоко погружённый в отрасль, понимаю, но никогда раньше не проговаривал.

От первого промпта до карты с маршрутами

Сначала на сайте появился новый дизайн, в «накатывании» которого поучаствовал Codex. Следующую задачу я сформулировал так: несколько сервисов работают на основе открытых данных «Центра ИТС», значит, нужно разобраться, где эти данные находятся и что собой представляют. Кроме того, требовался дизайн, который впишется в общий вид сайта: акцент на оранжевом цвете, фирменный шрифт и другие детали.

С одного промпта, после нескольких минут работы, Codex с моделью GPT-6.1 Sol выдал тестовую версию веб-сервиса, которую можно было запустить локально. В ней уже отображались маршруты на карте OpenStreetMap, были схемы и расписания с официального сайта. Правда, эти расписания часто не выполняются.

Для вычислений в сервисе используется Python, для хранения данных — SQLite. За интерфейс отвечают JavaScript и библиотека Leaflet. Положения машин обновляются без перезагрузки страницы.

Транспорт на карте Ростова и список маршрутов
Транспорт на карте Ростова и список маршрутов

Основной экран сервиса: карта, выбор маршрутов и количество машин относительно требований контракта.

Дальше, шаг за шагом, в диалоге мы начали «отсекать лишнее» и уточнять детали. В первую очередь я вспомнил, что в OpenStreetMap порой встречается вандализм. Не хочется однажды проснуться и увидеть, что улицы или дома переименовали в слова, которые в приличных местах не произносят.

Codex предложил хранить нужный участок карты на своём сервере. Тогда возникает вопрос актуальности данных. Но новые улицы появляются в Ростове не каждый месяц, поэтому для меня такое решение выглядит лучше.

Чтобы пользователи не воспринимали график как обещание точного прибытия, слово «Расписание» мы заменили на «Официальное расписание». Методом проб и ошибок переделали метки транспорта: первоначальные скруглённые прямоугольники превратились в кружки.

Список маршрутов «скрестили» с данными о необходимом количестве машин по контракту. Теперь рядом с каждым маршрутом отображаются количество машин и процент соответствия, например: «4 из 5, 80%». Это оценка по данным системы; сами по себе полученные координаты ещё не гарантируют, что машина перевозит пассажиров.

Автобусы-гармошки и интерфейс для остановки

Я посчитал важным отдельно отображать автобусы-гармошки. Причин две. До весны 2026 года транспорт особо большого класса не закупался в городе больше 25 лет, и тема «на хайпе». Кроме того, пассажир сможет отследить автобус-гармошку и поехать именно в нём с большим комфортом.

Я передал Codex список машин — всего 20 на весь город. Он добавил проверку: если гаражный номер автобуса есть в списке, машина отображается вытянутой меткой.

Вытянутая метка автобуса-гармошки на карте
Вытянутая метка автобуса-гармошки на карте

Автобус-гармошка выделяется формой метки на фоне остальных машин.

Много усилий ушло на внешний вид. Мы увеличивали и уменьшали список маршрутов и всплывающие окна, меняли шрифт, пока результат меня не устроил. Сделали быстрый переход к маршруту при нажатии на метку и кнопки перехода в начало и конец списка.

Сервис должен был корректно отображаться на смартфоне, чтобы им можно было пользоваться, стоя на остановке. Добавили холодную и тёплую цветовые схемы карты, а также переключение сайта между светлой и тёмной темами. Каждый может настроить его под себя.

Белым оставался только рекламный баннер. Рекламная система не позволяет автоматически выбирать оформление «как в системе»: тему нужно установить заранее. Codex нашёл изящное решение. В зависимости от выбранной пользователем цветовой схемы показывается один баннер или другой. Настройку соответствия баннеров светлой и тёмной темам он добавил прямо в админ-панель сайта.

Делал как для себя

После этого перешли к функциям, которыми хотелось пользоваться мне самому. В первую очередь нужна была возможность быстро переключаться с выбранных маршрутов на все и обратно. Если ждёшь транспорт и подходят несколько маршрутов, удобно убрать лишние метки.

Знакомые, которые хуже ориентируются в схемах маршрутов, подсказали: стоит показывать выбранные маршруты полупрозрачными линиями. Сделали это отдельной опцией, которую можно включать и выключать.

Для остановок добавили список избранного, чтобы быстро выбирать нужную. Маршруты и остановки в городе иногда меняются, обновляются и данные в системе «Центра ИТС». Я давно опытным путём выяснил, когда это происходит, и сообщил об этом Codex. Он создал задачу по расписанию для обновления данных в нашем сервисе.

Бывает, что машина отображается на маршруте, хотя транспортную работу не выполняет: стоит на территории автотранспортного предприятия или на заправке. Мы ввели категорию «Исключены». В неё попадают машины, которые, по расчётам системы, сейчас не работают на маршруте.

Подобная идея уже была у сервиса «Водителей.Нет», но мы её доработали. Помимо машин на территории предприятия или АЗС, из расчёта исключаются те, которые едут не по маршруту. Из-за проблем с геопозиционированием в городе машина исключается с задержкой, с некоторым люфтом. Пользователь может выбрать, оставлять исключённые машины на карте или убирать их. Такая автоматическая оценка может ошибаться.

Метка на карте ещё не обещает автобус

Следующая функция помогает решить, стоит ли ждать транспорт. В существующих сервисах пассажир может увидеть нужный автобус недалеко от остановки и начать его ожидать. Но данные от машины могли не передаваться уже несколько минут. За это время автобус мог уехать далеко по маршруту, сломаться и остаться на месте или отправиться в гараж.

Мы добавили время последней передачи данных от транспортного средства. Решение всё равно принимает пользователь, но теперь у него больше информации о том, стоит ли рассчитывать на приезд автобуса.

Карточка автобуса с гаражным номером, скоростью и временем получения данных
Карточка автобуса с гаражным номером, скоростью и временем получения данных

В карточке машины видны гаражный номер, скорость, время получения данных и ссылка на историю.

В дальнейшем хочется добавить автоматический прогноз. По моим наблюдениям, на действия водителя общественного транспорта в Ростове нередко сильнее влияет работа конкурирующего транспорта, чем дорожная ситуация и пробки. Пока неясно, как просчитать мысли и действия человека.

Промотать маршрут в прошлое

Для меня было важно видеть, как маршрут работал некоторое время назад, то есть «проматывать» карту в прошлое. Это помогает понять, как двигался транспорт и когда его можно ожидать.

Ещё такая история полезна пассажирам, которые забыли вещи в автобусе. У них может не быть привычки смотреть на гаражный номер машины, как у меня. Зато они примерно помнят, когда садились или выходили. История положений транспорта помогает определить нужную машину и быстрее найти потерянное.

Для этого сервис сохраняет «снимки» положений транспорта. Старые снимки постепенно прореживаются, чтобы база не разрасталась бесконечно. Открыть историю можно через метку автобуса: нажать на неё и выбрать «Смотреть историю».

Просмотр истории трамвайного маршрута № 7 с ползунком времени
Просмотр истории трамвайного маршрута № 7 с ползунком времени

История маршрута: можно выбрать момент времени и посмотреть, где находились машины.

Для анализа сделали отдельную часть сервиса, которая пока закрыта от общего доступа. В ней видно время работы машин на маршрутах, а также можно строить графики изменения количества машин по дням.

Есть фильтр, который убирает машины, числившиеся в системе меньше заданного времени. Он помогает отсечь короткие появления, за которыми могло не быть реальной работы на маршруте. Для графиков заранее готовятся сводные данные, чтобы при каждом открытии страницы не пересчитывать весь архив.

История работы машин за день с временными полосами и фильтром
История работы машин за день с временными полосами и фильтром

Закрытый раздел статистики: временные полосы по отдельным машинам и фильтр по длительности наблюдений.

История маршрутов потребовала отдельного сервера

Изначально весь сервис работал на обычном хостинге. Когда мы начали тестировать просмотр истории маршрута, провайдер возмутился нагрузкой. Вычислительную часть пришлось перенести на отдельный виртуальный сервер — VPS. Основной сайт остался на прежнем хостинге.

Отдельно пришлось уточнять вопросы безопасности. Первоначально предложенные моделью варианты я посчитал недостаточными для защиты данных и сервера от нагрузки. Codex настроил кэширование и фоновые расчёты для показа истории и статистики.

Теперь сервис транспорта Ростова доступен для использования. На смартфоне его можно добавить на экран «Домой»; инструкцию об этом красиво иллюстрировал Codex. Теперь давнюю идею можно открыть на телефоне и посмотреть, где едет нужный автобус.

Я задавал, что нужно, и проверял результат

В этой работе я выступал владельцем продукта, руководителем проекта и тестировщиком. Объяснял, что мне нужно, ИИ писал код, а я проверял работоспособность.

Без него идея осталась бы в голове. Но для результата понадобились и мои знания нюансов пассажирского транспорта в Ростове, системы «Центра ИТС», и сомнения относительно безопасности. Прочитав этот текст, Codex сформулировал это так:

ИИ дал возможность реализовать задуманное, а содержание и качество определяла ваша экспертиза.

Многое упирается в понимание того, как и что нужно сделать. Сергей Пименов в одном из постов сравнил ИИ с экзоскелетом, и этот образ хорошо описывает мой опыт. При этом я считаю, что серьёзные проекты «на продажу» требуют глубокой проверки и понимания того, как всё устроено.

Желаю всем, кто дочитал до конца, вдохновения, идей и достаточного количества токенов.


Если вы давно хотите превратить задачу из своей профессиональной области в работающий сервис, можно обсудить, что поручить ИИ и как проверять результат.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov