Как я создал Quads, мобильную настольную игру, вместе с Claude — от двухчасового хакатона до App Store
Quads — мобильная настольная игра, аккуратное прочтение классической абстрактной игры Quarto, — начавшаяся как двухчасовой хакатон с другом в Колумбии и выпущенная в магазины приложений. Это полностью открытая версия того, как я строю с Claude: параллельные worktree-агенты, настоящий (не-LLM) игровой ИИ, offline-first дизайн и конкретные подводные камни, стоившие мне часов.
Каждую среду. 28 400+ читателей. Никакой воды.
✓ Проверьте почту — нажмите ссылку подтверждения, чтобы завершить подписку.
✓ Вы подписаны!
✓ Вы уже в списке.
Содержание
Обновлено в июле 2026 года.
Коротко: Quads — мобильная настольная игра, аккуратное прочтение классической абстрактной игры Quarto, — начавшаяся как двухчасовой хакатон с другом в Колумбии и выпущенная в магазины приложений. Это полностью открытая версия того, как я строю с Claude: параллельные worktree-агенты, настоящий (не-LLM) игровой ИИ, offline-first дизайн и конкретные подводные камни, стоившие мне часов.
[Взгляд оператора] Я управляю более чем 30 продакшн-агентами в рамках консалтингового бренда и Pickleland — моего пиклбол-центра в агломерации Остина. Большая часть того, что я строю, — это серьёзный бизнес-софт, плейбук по которому я держу в тайне. Quads — противоположность: весёлый сайд-проект, который я могу показать вам от и до. Если хотите увидеть, как именно я работаю с Claude, без единой зачищенной детали, — это тот самый пост. Найти игру можно на playquads.com.
Всё началось с двухчасового хакатона в Колумбии
Происхождение почти неловко-обыденное. Я был в поездке в Колумбию, и мы с другом устроили себе двухчасовой хакатон: выбрать что-нибудь небольшое, построить с ИИ, посмотреть, как далеко продвинемся. Мы остановились на Quarto — красивой маленькой абстрактной стратегии, которую легко освоить и которая удивительно глубока. Два часа спустя у нас был играбельный прототип, и идея была слишком хороша, чтобы оставить её на ноутбуке.
То, что начиналось как ограниченный по времени вызов, превратилось в настоящее, выпущенное мобильное приложение на iOS и Android. Именно эта дуга — шуточный прототип превращается в карточку в магазине — и есть вся причина, по которой я считаю этот проект достойным рассказа. Расстояние между «весёлой идеей» и «штукой, которую могут скачать незнакомцы» схлопнулось, и Quads — наглядный кейс о том, как именно.
Сначала небольшое отступление про название. Игра — это переработка Quarto, а это игра с товарным знаком, принадлежащим Gigamic. Так что самым первым некодовым решением было не называть её Quarto нигде, где это увидит клиент. Она прошла путь от Quarto (механика) через пару промежуточных названий к Quads — названию, которым я вправе пользоваться. Если вы перерабатываете классику, разберитесь с вопросом товарного знака, прежде чем влюбитесь в название.
Что такое Quads на самом деле
Для непосвящённых: в Quads играют на доске 4×4 с 16 уникальными фигурами. У каждой фигуры четыре бинарных атрибута — высокая или низкая, тёмная или светлая, квадратная или круглая, сплошная или полая, — и 16 фигур покрывают каждую возможную комбинацию ровно один раз. Вы побеждаете, завершив линию из четырёх фигур, которые разделяют любой один атрибут.
Изюминка, которая делает игру блестящей: вы не выбираете фигуру, которую ставите. Её вручает вам соперник. Затем вы вручаете фигуру ему. Так что каждый ход — это двойная ловушка: вы пытаетесь поставить доставшуюся вам фигуру, не подготовив победу сопернику, и при этом выбрать для передачи такую фигуру, которая не отдаст сопернику игру. Это изящно и по-настоящему сложно.
Приложение поставляется с четырьмя способами игры, все полностью офлайн: против компьютера на пяти уровнях сложности, «передай устройство» на одном устройстве, ежедневная головоломка и асинхронный режим «бросить вызов другу». Ни аккаунта, ни сервера, ни логина. Это решение в пользу offline-first во многом определило инженерию и во многом объясняет, почему сборка в одиночку оказалась посильной.
Игровая логика: целый свод правил, выпадающий из битовой математики
Это моя любимая часть, потому что это та штука, которая приносит удовлетворение независимо от того, писал её ИИ или нет.
Каждая из 16 фигур — это просто целое число от 0 до 15. Каждый из четырёх битов — один атрибут. Вот и всё — весь набор фигур это числа 0–15, потому что четыре бита дают ровно 16 комбинаций.
Определение победы тогда становится почти тривиальным. Для любой линии из четырёх фигур вы держите два бегущих накопителя: биты, равные 1 у каждой фигуры, и биты, равные 0 у каждой фигуры. Если после всех четырёх любой из накопителей ненулевой, значит, фигуры совпадают хотя бы по одному атрибуту — это победа. Весь свод правил схлопывается в пару побитовых операций AND.
Поскольку логика — это чистые функции над целыми числами (ни фреймворка, ни интерфейса, ни состояния), она напрямую тестируется юнит-тестами и её тривиально расширять. Quads даже поставляется с вариантом по домашним правилам, где девять квадратов 2×2 тоже считаются выигрышными фигурами, — это добавление в две строки поверх того же битового трюка. Когда вы и ИИ-партнёр держите ключевую логику настолько чистой, добавление функции становится радостью, а не риском.
ИИ-соперник — не LLM (и это правильное решение)
Вот обучающий момент, который мне важен: не всякий «ИИ» должен быть большой языковой моделью.
Соперник в Quads — это чистый классический игровой ИИ, и так и должно быть. Каждый ход он принимает два решения — куда поставить доставшуюся фигуру и какую фигуру вернуть, — а сложность масштабирует, насколько усердно он думает:
- Новичок играет практически случайно и подарит вам победу.
- Средние уровни добавляют эвристики: брать немедленную победу, если она есть, и избегать передачи фигуры, которой соперник может выиграть, предпочитая ту фигуру, что вооружает наименьшее число будущих угроз.
- Мастер и Гроссмейстер запускают ограниченный поиск negamax — настоящий поиск по дереву игры, — но с жёстким бюджетом узлов, чтобы ход никогда не мог подвесить основной поток телефона. В начале игры, где идеальный поиск невыполним, он откатывается к быстрым эвристикам; в конце игры, где дерево достаточно мало, он ищет по-настоящему.
Отсюда стоит украсть две вещи. Во-первых, языковая модель была бы здесь хуже — медленнее, дороже, недетерминирована и обыгрываема, — чем пятьдесят строк negamax. Подбирайте инструмент под задачу. Во-вторых, настоящая инженерия — это бюджет узлов: на мобильном устройстве «правильно, но иногда подвисает на четыре секунды» — это проваленная функция. Ограничение поиска так, чтобы ход всегда был быстрым, пусть и иногда неоптимальным, — вот разница между игрушкой и продуктом. Понимание, когда тянуться за LLM, — то же суждение, что я применяю к каждой автоматизации, и это суть статьи как я решаю, стоит ли ИИ-сборка того.
Как я на самом деле гоняю Claude: параллельные агенты в worktree
Теперь та часть, которую на более крупных продуктах я держу в тайне, но здесь могу показать полностью.
Я не строю по одной сессии Claude за раз. Я гоняю несколько параллельно, каждую в собственном git worktree на собственной ветке. Один агент добавляет интернационализацию, другой строит систему ежедневных головоломок, третий делает режим для дальтоников, четвёртый подключает звук — каждый изолирован в своей рабочей копии, так что они не могут затереть друг друга, и каждый вливается обратно, когда становится зелёным. История git у Quads — это стена коммитов Merge branch 'worktree-agent-…', что как раз и есть то, как этот воркфлоу выглядит снаружи.
Причина, почему worktree важны, проста: параллельные агенты, редактирующие один рабочий каталог, тут же наступают друг другу на ноги. Дайте каждому изолированный checkout — и вы действительно можете держать четыре функции в разработке одновременно, а потом сливать их, как любые другие ветки. Это единственное изменение с наивысшим рычагом в том, как я работаю: я перешёл от «одна беседа, одна функция» к небольшому флоту.
Если вам нужна дисциплина, стоящая за промптами, на которых работают эти агенты, — это та же, что я описываю в статье как писать системные промпты для ИИ-агентов, которые не подводят в продакшене: рычаг в ясных, актуальных спецификациях, а не в хитрой формулировке.
Подводный камень, стоивший мне часа (чтобы он не стоил часа вам)
Каждый проект учит одному глупому, дорогому уроку. На Quads он был таким: инструмент предпросмотра не всегда показывает ту ветку, которую вы думаете, что он показывает.
Когда вы гоняете несколько агентов в нескольких worktree и смотрите предпросмотр их работы, предпросмотр может запуститься из другого каталога, чем тот, в котором находится ваша текущая сессия, — так что вы делаете скриншот приложения, не видите ни одного из своих изменений и начинаете отлаживать «пропавший» интерфейс, который никуда не пропадал. С функцией всё было в порядке; предпросмотр был нацелен на неверный checkout. Я потерял на этом реальное время, прежде чем понял, что происходит, и записал это в собственные заметки проекта, чтобы будущий я (и любой агент, которому я передам репозиторий) проверял цель предпросмотра до отладки фантомных багов.
Смежная ловушка: конфигурационный файл, определяющий эти предпросмотры, общий для параллельных сессий, так что два агента, редактирующие его одновременно, могут молча перезаписать записи друг друга. Если собираетесь гонять флот, относитесь к общему конфигу как к оспариваемому ресурсу — он укусит вас ровно один раз, а затем никогда, если вы запишете урок.
Эта привычка — фиксировать каждый добытый потом подводный камень в устойчивом файле, который прочитает следующая сессия, — тихий хребет строительства с ИИ на любом масштабе. Контекст испаряется между сессиями; записанные уроки — нет.
Offline-first приёмы, которыми я горжусь
Поскольку у Quads нет бэкенда, нескольким проблемам потребовались хитрые бессерверные ответы:
- Ежедневная головоломка выбирается детерминированно из локального дня года, так что каждый игрок в мире получает одну и ту же головоломку при нулевой серверной координации. (Бонусный урок: я выпустил и тут же исправил ошибку на единицу из-за перехода на летнее время в этой арифметике дат. Даты всегда сложнее, чем кажутся.)
- «Бросить вызов другу» кодирует головоломку в короткий текстовый код — что-то вроде
QC1-01-03-3, — защищённый контрольной суммой, чтобы опечатка не могла породить валидный-но-неверный вызов. Ваш друг вводит его в собственную копию приложения и играет ровно ту же позицию, полностью офлайн. Ни аккаунтов, ни подбора соперников, ни сервера. - Богатые превью ссылок — единственное место, где я всё же использовал чуть-чуть серверного кода. Когда вы делитесь ссылкой на вызов, одна Cloudflare Pages Function рендерит теги Open Graph под конкретный код, чтобы ссылка красиво разворачивалась в iMessage или WhatsApp. Социальные краулеры не выполняют JavaScript, так что превью, отрендеренное на клиенте, выглядело бы одинаково для каждой ссылки, — одна маленькая функция чинит это без нужды в настоящем бэкенде.
Ничего из этого не сложно, стоит только увидеть, но каждое — то место, где ленивый ответ звучит как «поднять сервер и базу данных», а ответ получше — «сделать хитрую офлайновую штуку». Полный отказ от бэкенда — вот почему один человек смог выпустить и поддерживать это.
От хакатона до карточки в магазине
Последний отрезок — та часть, о которой никто не рассказывает вам про «двухчасовой проект», — это всё, что между «работает на моём телефоне» и «незнакомцы могут это скачать». Интернационализация на восемь языков за один заход. Тексты для магазина, которые нигде не используют товарный знак. Инструментарий для сборки под магазины, версионирование и платформенные зачистки разрешений, которые не дают ревью в магазине отфутболить вас. Это негламурно, и именно здесь тихо умирает множество сайд-проектов.
Делать это с Claude не сделало чек-лист короче, но сделало каждый пункт достаточно дешёвым, чтобы я реально дошёл до конца. В этом настоящая история Quads: не в том, что ИИ написал настольную игру — прототип такой может сделать множество людей, — а в том, что он снизил стоимость последней мили достаточно, чтобы хакатонная шутка стала выпущенным продуктом.
Если у вас есть маленькая идея, на которой вы сидите, — в этом весь мой посыл. Начните двухчасовую версию. Вы удивитесь, насколько ближе сдвинулась финишная черта. А если хотите увидеть, как высоко по масштабу заходит тот же стиль работы, — я довёл его до полноценного мультитенантного SaaS: как я создал Courtlines, платформу для управления клубами, вместе с Claude.
Играйте в Quads на playquads.com.
Частые вопросы
Что такое Quads?
Quads — мобильная настольная игра для iOS и Android, аккуратная переработка классической абстрактной стратегии Quarto. Вы играете на доске 4×4 с 16 уникальными фигурами, а изюминка в том, что фигуру, которую вам нужно поставить, выбирает соперник. Игра бесплатна, с режимами для одиночной игры, «передай устройство», ежедневной головоломки и асинхронных вызовов. Найти её можно на playquads.com.
Claude написал всю игру?
Claude написал подавляющее большинство кода, работая по дизайну и решениям, которые принадлежат мне. Я гонял несколько сессий Claude параллельно, каждую в собственном git worktree, строя разные функции, которые я сливал вместе. Игровая логика, ИИ-соперник, интернационализация, звуки и система головоломок были во многом построены так и отревьюены мной.
Внутриигровой ИИ-соперник работает на LLM?
Нет — и это сделано намеренно. Соперник использует классический игровой ИИ: эвристики на низких уровнях сложности и ограниченный поиск negamax на верхних уровнях, с жёстким бюджетом узлов, чтобы ход никогда не подвешивал устройство. Языковая модель была бы медленнее, дороже и слабее для этой задачи. Выбор правильного вида ИИ под задачу важнее, чем вечное стремление тянуться за самой большой моделью.
Сколько времени заняла разработка Quads?
Первый играбельный прототип вышел из двухчасового хакатона с другом в поездке в Колумбию. Превращение этого прототипа в отполированное, готовое к выпуску приложение в обоих магазинах — с интернационализацией, настоящим ИИ-соперником, офлайн-вызовами и соответствием требованиям магазинов — заняло существенно больше, но каждый отдельный шаг был с ИИ достаточно дешёвым, чтобы проект реально дошёл до финишной черты.
Какой самый главный урок из создания Quads с Claude?
Два. Во-первых, гоняйте агентов в изолированных git worktree, чтобы строить несколько функций параллельно, не давая им затирать друг друга. Во-вторых, записывайте каждый подводный камень в устойчивый файл, который прочитает следующая сессия, — контекст испаряется между сессиями, а записанные уроки накапливаются. Для более широкой картины этого стиля работы смотрите как я создал Courtlines вместе с Claude.
Каждую среду. 28 400+ читателей. Никакой воды.
✓ Проверьте почту — нажмите ссылку подтверждения, чтобы завершить подписку.
✓ Вы подписаны!
✓ Вы уже в списке.
Похожие статьи
Как я создал Courtlines: SaaS для управления клубами, разработанный вместе с Claude
История Courtlines — операционной системы для клубов и студий ракеточных видов спорта. Зачем я её создал, что она умеет и как использование Claude в роли моего главного инженерного партнёра позволило одному оператору выпустить полноценный мультитенантный SaaS.
AI AgentsКак писать системные промпты для ИИ-агентов, которые не ломаются в продакшене
Обновлено в 2026 году. Практическое руководство по написанию системных промптов для ИИ-агентов, которые выдерживают работу в продакшене — пять уровней, реальные примеры из 30+ агентов и привычки обслуживания, предотвращающие тихую деградацию.
AI AgentsROI ИИ-агентов: Как Я Решаю, Стоит ли Строить Автоматизацию
Обновлено для 2026 года. Фреймворк, который я использую для оценки целесообразности автоматизации на основе ИИ — количественный анализ ручных затрат, стоимости разработки, операционных расходов и формулы окупаемости.
Получайте ИИ-руководство на почту
Каждую среду. 28 400+ читателей. Никакой воды.
Проверьте почту.
Мы отправили письмо для подтверждения — нажмите на ссылку, чтобы завершить подписку. Проверьте папку «Спам», если не видите его в течение минуты.
Вы подписаны.
Добро пожаловать — следующий выпуск скоро придёт на вашу почту.
Вы уже в списке — ждите выпуск каждую среду.