Разработчик собрал браузерную игру за 2 часа 37 минут с двумя ИИ-моделями
Разработчик собрал браузерную игру про собеседование в вымышленной корпорации за 2 часа 37 минут от первого сообщения до запуска на своём домене. Игра проходится за 2–3 минуты и ничего не отправляет на сервер.
Работу разделили между двумя ИИ-моделями: одна отвечала за концепцию, визуальный образ, сценарий и генерацию картинок, вторая писала движок расчёта по дате и движок сцен. Первые 56 минут ушли не на код, а на документ с концепцией из 10 разделов — он дальше работал как техзадание.
Игра стилизована под русские FMV-квесты начала 2000-х: фотографии вместо графики, вспышка в лоб и нарочито плохая озвучка. Игрок заполняет анкету с именем и датой рождения, охранник проверяет его «вайбометром», а в конце рекрутер строит натальную карту и называет одну из 25 должностей или отказывает — в новолуние корпорация не нанимает. Всего 7 финалов, один секретный.
Стек — Vite и TypeScript без игрового движка, около 2 700 строк вместе с тестами. Сценарий лежит отдельно в JSON: 50 узлов, 6 сцен и 7 финалов, поэтому правки формулировок не требовали изменения кода. Бэкенда нет, прогресс хранится в localStorage.
Натальную карту считают по упрощённой версии алгоритмов Жана Миуса с точностью около 0,1°, время рождения не спрашивают и считают на полдень по Москве. Распределение проверили перебором всех 22 280 дат с 1950 по 2010 год: отказ выпадает в 10,96% случаев, легендарная роль — в 1,49%, остальные 24 роли — в 3,9–4,3%.
Результатом можно поделиться без сервера: роль, Луна, фаза, число, совместимость и флаг отказа укладываются в 22 бита и кодируются пятью символами base36 плюс контрольный символ в ссылке. Всего сгенерировали 24 изображения и 49 звуковых файлов, реплики озвучили через аудиомодель.
Руками пришлось поправить превью для соцсетей, слишком низкие и медленные голоса и неигравшую музыку, а также выбрать, что из предложенных шуток смешно. Сам разработчик объясняет скорость тремя решениями: концепция как техзадание до первой строки кода, сценарий в данных вместо кода и разделение моделей по ролям.