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

Код, интерфейс, редактор, аналитика и нагрузочные тесты я делал вместе с ИИ. Но самыми полезными оказались не строчки кода, а 290 неправильных ответов реальных игроков.
Поиграть можно тут:

Я не очень люблю бесцельные прогулки. Через двадцать минут мне обычно уже нужен ответ на вопрос: зачем я сюда иду?

Так появилась простая идея. Если человеку дать цель, следующую точку, загадку и понятный результат, обычная прогулка превращается в игру. Причём город не должен быть просто фоном. Ответ надо искать в вывеске, скульптуре, старом здании, незаметной детали или истории конкретного места.

Первым таким маршрутом стал «Сигнал Академгородка». Квест мы сделали вместе с Анастасией Безносовой-Близнюк и командой «АкадемБюро». Они много лет собирают истории Академгородка, а я отвечал за игровую механику и цифровую платформу.

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

Главная страница. Игрок сразу понимает, что можно пойти гулять или пройти квест дома.

Сначала я хотел сделать один квест

Первоначальная задача была довольно узкой: провести человека по Академгородку без ведущего и не потерять его по дороге.

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

На словах всё выглядит просто. На практике сразу появляются вопросы.

Что произойдёт, если GPS ошибётся возле здания? Что делать, если игрок закрыл вкладку? Как вернуть прохождение на другом телефоне? Как принять ответ «коллайдер», если в сценарии записано «ускоритель»? Как не списать попытку при временной ошибке сервера? Что будет с уже начатой игрой, если я поменяю маршрут?

Именно в этот момент один квест начал превращаться в платформу.

В итоговую версию «Сигнала Академгородка» вошли 8 точек и маршрут около 1,7 километра. Пешком он занимает от 1,5 до 2 часов. Есть и домашний режим, который можно пройти за 20 до 30 минут. Ничего устанавливать не нужно, игра открывается в браузере.

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

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

Как я делал это ИИшкой

Отдельной команды разработчиков у проекта не было. Разработку вёл я вместе с Codex.

Фраза «сделал с помощью ИИ» часто звучит так, будто человек написал один запрос, выпил кофе и получил готовый сервис. У меня всё было устроено иначе.

Я описывал поведение игрока, ограничения и критерии готовности. Например: после закрытия браузера прогресс не должен исчезнуть; повторная отправка ответа не должна дважды менять счёт; новая версия квеста не должна ломать уже начатые прохождения; оператору нужна статистика по каждой точке, а не только общее число игроков.

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

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

За это время репозиторий прошёл 15 содержательных выпусков. Первый публичный тест появился 25 августа, а к 5 сентября платформа уже умела безопасно обновляться без потери старых прохождений.

Что оказалось под капотом

Игрок видит обычную веб-страницу. Под ней работает серверная логика, которая хранит сессию, проверяет ответы и сама считает очки. Это важно: результат нельзя подменить простой кнопкой в браузере.

Приложение собрано на React и Vinext и работает в Cloudflare Worker. Прохождения и действия хранятся в D1, изображения в R2. У игрока есть токен сессии и код восстановления. Система помнит выбранную версию квеста, поэтому редактор может выпустить новое содержание, не меняя маршрут у человека, который уже играет.

Движок поддерживает восемь форматов заданий: текст, число, один вариант, несколько вариантов, порядок элементов, активные области на изображении, QR-код и фотографию.

Но важнее для меня оказался редактор. Квест можно собирать без пересборки приложения: менять точки, координаты, радиус GPS, персонажей, загадки, допустимые ответы, подсказки, начисление баллов и финал. Рядом находится живой предпросмотр телефона.

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

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

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

Синтетические игроки нашли первую проблему

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

В ускоренном прогоне получилось 1 755 HTTP-запросов, 30 завершённых сессий из 30 и ни одной ошибки. Затем я провёл длинный прогон, где игра продолжалась от 60 до 90 минут. Там было 2 274 запроса и две временные ошибки сервера.

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

При этом я не стал выдавать локальный тест за доказательство готовности к любой нагрузке. Он проходил на локальной среде, а не на боевом Cloudflare. Такой прогон хорошо проверяет логику, но не гарантирует, что 100 или 200 телефонов на реальном событии поведут себя так же.

Перед крупным обновлением 5 сентября я отдельно выгрузил рабочую базу, восстановил её локально и сравнил данные. После 121 автоматической проверки выпустил новую версию и ещё раз сверил старые записи. На месте остались 66 существовавших сессий и 3 298 действий игроков.

Это скучная часть разработки. Но именно она отделяет красивую демонстрацию от продукта, которому можно доверить живую игру.

Потом пришли люди и сломали мои красивые загадки

Первый содержательный срез я снял 27 августа. В системе было 12 запусков, из них завершились 5. Игроки отправили 264 ответа, и 120 оказались неправильными. При этом 11 запусков проходили дома и только один по реальному маршруту.

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

Самой показательной стала точка СЮН. В одной загадке я ожидал слово «дружелюбность». Люди отвечали «дружба», «дружелюбие», «друг», «верный друг». В среднем на задачу уходило 5,7 попытки, а подсказки использовали 67 процентов игроков.

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

Похожие истории были на других точках. Вместо «мурала» отвечали «граффити». Вместо «ускорителя» писали «коллайдер». У мамонта считали рёбра по данным из поисковика, хотя нужно было смотреть на конкретный скелет в НГУ. На Золотой Долине люди находили не тот фонарный столб, потому что рядом их десятки.

Я не стал оценивать это по ощущениям. В админке появились фильтры по режиму, версии и периоду, воронка маршрута, попытки, подсказки, время на каждом экране и сравнение версий.

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

Что показывают цифры сейчас

На 7 сентября у активной версии было 34 старта и 22 завершения. Это именно старты, а не 34 подтверждённых уникальных человека. Платформа не требует аккаунта и не склеивает разные браузеры по имени.

За эти прохождения игроки отправили 886 ответов. 290 были неправильными. Правильный ответ с первой попытки получался в 74 процентах случаев, подсказки использовали в 31 проценте этапов.

Разница между режимами хорошо видна.

По маршруту было 11 стартов и 6 завершений. Медианное время полного прохождения составило 1 час 37 минут, медианный результат 726 баллов. С первой попытки решали 80 процентов этапов, подсказки использовали в 15 процентах.

В телефоне было 23 старта и 16 завершений. Медианное время составило 36 минут, медианный результат 618 баллов. С первой попытки решали 72 процента этапов, подсказки использовали в 38 процентах.

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

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

Во что всё это превратилось

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

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

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

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

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