Задача
Это портфельный проект – заказчика нет, есть холодный расчёт. Запросы «пасьянс косынка онлайн», «паук 2 масти» и родня собирают порядка двух миллионов показов в месяц, а выдача занята сайтами, которые выглядят как привет из нулевых и почти не вкладываются в продукт. План простой: сделать лучший продукт в нише, вырастить трафик, монетизировать рекламой и подпиской.
Требование к продукту одно, но жёсткое: игра обязана открываться мгновенно, работать на любом телефоне и не зависеть ни от одного внешнего сервиса. Аудитория пасьянсов не прощает «подождите, грузится».
Решение
Игра написана с нуля на чистом JavaScript – без игровых движков и тяжёлых фреймворков: 52 SVG-карты, перетаскивание мышью и пальцем, анимации, звук, подсказки, отмена хода. Страница со всей игрой весит меньше одной фотографии из мессенджера. Вокруг игры – продуктовый слой:
- три уровня игрока: гость играет сразу, авторизованный получает рекорды и рейтинг, подписчик «Мастер игры» за 49 ₽/мес – все рубашки и сукна, отключение рекламы, VIP-значок и личную статистику;
- вход в один клик – VK ID и Яндекс, сессия живёт год: зашёл раз – и играешь;
- честный рейтинг – таблицы за день, месяц и всё время, по ходам и по времени; у каждого результата есть серверное подтверждение (об этом ниже – это самая интересная часть);
- PWA – кнопка «Установить игру»: пасьянс встаёт на домашний экран и работает офлайн, как обычное приложение;
- оплата – ЮKassa прямо из игры: почта, кнопка, чек – и подписка активна.
Проект живой, можно разложить прямо сейчас: пасьянс косынка онлайн – без регистрации.
Анти-чит: сервер-рефери
Главная инженерная задача портала – рейтинг, которому можно верить. Игра целиком выполняется в браузере, а значит, любые числа – ходы, время – игрок теоретически может подделать через консоль. Запрещать бесполезно; вместо этого сервер не верит клиенту вообще.
Каждая раздача создаётся из случайного зерна (seed) детерминированным генератором: одно и то же зерно всегда даёт одну и ту же раскладку – и в браузере, и на сервере, где генератор воспроизведён бит в бит. Когда партия выиграна, клиент отправляет не результат, а зерно и полный список ходов. Сервер молча раскладывает ту же партию у себя, проигрывает ходы по правилам и сам считает и ходы, и время. Совпало и победа настоящая – результат идёт в рейтинг. Не совпало – до свидания: подделать пришлось бы саму выигрышную партию, а это и есть честная игра.
Как это работает
- шаг 01Игрок открывает страницу – из поиска или с иконки на домашнем экране. Раздача мгновенная, ждать нечего.
- шаг 02Играет – мышью или пальцем; каждый ход пишется в локальный журнал вместе с отметкой времени.
- шаг 03Побеждает – клиент отправляет зерно раздачи и журнал ходов на сервер.
- шаг 04Сервер-рефери переигрывает партию – подтверждённый результат попадает в рейтинги и личную статистику.
Результат
Портал запущен и обрастает контуром под SEO-марафон: две игры, главная, страницы рейтингов, PWA. Дальше – контент под запросы ниши и реклама РСЯ для бесплатных игроков; подписка работает уже сейчас. Это долгая игра в прямом смысле: ниша с двумя миллионами показов в месяц стоит терпения.
Стек
Ни движка, ни фреймворка, ни единого внешнего CDN: даже SDK авторизации лежит на своём сервере. HTTP/2, кэш статики, системные шрифты – игра открывается быстро даже на слабой мобильной сети.
Скорость как фича
В казуальных играх скорость загрузки – это конверсия в самом прямом смысле: человек пришёл разложить пасьянс, а не смотреть на спиннер. Поэтому у портала жёсткая диета: ни одного игрового движка, ни одного внешнего CDN – даже SDK авторизации ВКонтакте скачан и отдаётся со своего сервера, чтобы игра не зависела от чужой доступности. Шрифты системные, статика кэшируется на месяц, сервер отдаёт всё по HTTP/2 – 52 карты уезжают в браузер одним мультиплексированным соединением вместо очереди из полусотни запросов.
Отдельная работа – мобильная версия: раскладка пересчитывается под любой экран (карты сжимаются до размера, при котором всё поле видно без скролла), перетаскивание одинаково честно работает мышью и пальцем, а в горизонтальной ориентации поле перестраивается под низкий экран. Половина аудитории пасьянсов играет с телефона.
Пошагово
- Игрок находит портал по запросу «пасьянс косынка онлайн» и играет сразу, без регистрации и установки.
- Хочет рекорды и рейтинг – входит через ВК или Яндекс в один клик, сессия живёт год.
- Каждая победа отправляется на сервер и переигрывается им – в таблицы попадают только подтверждённые результаты.
- Увлёкся – оформляет подписку «Мастер игры» за 49 ₽/мес прямо в игре: рубашки, сукна, без рекламы, статистика, фоновая музыка (джаз).
Вопросы и ответы
Почему без игрового движка?
Пасьянсу движок не нужен: карты, стопки и анимации прекрасно живут на обычном JavaScript и CSS. Зато страница весит копейки, открывается мгновенно и не тянет за собой мегабайты чужого кода.
Как рейтинг защищён от накрутки?
Сервер не доверяет клиенту: получив зерно раздачи и список ходов, он переигрывает партию у себя по тем же правилам и сам считает результат. Подделать запись нельзя – пришлось бы честно выиграть.
Что даёт подписка за 49 ₽?
Все рубашки и сукна, отключение рекламы, VIP-значок в рейтинге, личную статистику с графиками и фоновую музыку – джаз. Бесплатная игра при этом полноценная – подписка про комфорт и статус, а не про «плати, чтобы играть».
Зачем игре PWA?
Кнопка «Установить игру» кладёт пасьянс на домашний экран, и он работает офлайн – в метро, в самолёте. Для казуальной игры это возврат игрока без магазинов приложений и их комиссий.
В чём бизнес-план, если игра бесплатная?
Двухслойная монетизация ниши с огромным трафиком: реклама для бесплатных игроков плюс недорогая подписка для увлечённых. Основной актив – позиция в выдаче по запросам, которые люди набирают миллионы раз в месяц.