TECHNICAL · DELIVERY · LEAD ·
iOS · WEB · AUTOMATION · AI · DOCKER · REACT · NODE ·
PRODUCT ARCHITECTURE · TEAM LEADERSHIP · MANAGEMENT ·
0%
←Все проекты
Мини-игры в программе лояльности Zetter — три игры, три модели честной игры

Мини-игры в программе лояльности Zetter — три игры, три модели честной игры

2026Full Cycleb2c-apps

Роль

Полный цикл: продуктовые решения, архитектура проверки честности, разработка и приёмка.

Технологии

Слой Решение
Игры и движки TypeScript в общем пакете, один код на клиенте и сервере
Физика укладки Собственная, на целых числах: фиксированный шаг, шесть итераций решателя, из плавающей арифметики только квадратный корень
Проверка честности Сервер как соперник, скрытый ответ, повтор партии по сиду и журналу ходов
Головоломка Перенесённый движок-донор, 82 его теста прошли без единой правки
Клиент React, Telegram Mini App, canvas для укладки, CSS-сетка для остальных
Сервер Node и Prisma, PostgreSQL
Экономика Ключи идемпотентности на каждое списание, компенсирующее начисление при сбое выдачи

Ключевые фичи

  • 01Три новые игры рядом с match-3
  • 02Три разные модели проверки честности
  • 03Своя целочисленная физика
  • 04Общая экономика и задания
  • 05Аналитика и сегменты по каждой игре
01

Проблема

Программе лояльности нужен повод открыть приложение сегодня, а не когда-нибудь. Одна игра «Три в ряд» такой повод давала — но исчерпывалась: игрок проходил её и переставал возвращаться.

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

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

02

Для кого

Роль Сценарий
Бренд-менеджер Больше поводов вернуться: не одна игра, а четыре, и задания недели можно вести по каждой отдельно.
Маркетолог Сегменты рассылок по прогрессу в конкретной игре — «дошёл до 10-го уровня», «рекорд в Суйке не ниже».
Продакт Метрики по каждой игре отдельно: кто во что играет, где отваливается, какая механика держит.
Разработчик, который придёт после Слаг игры один на все слои — событие, путь, ключ идемпотентности, каталог ассетов. Новая игра добавляется в реестр, а не в семь списков.
03

Чем отличается

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

От физики на общей библиотеке. Библиотеки общего назначения считают в числах с плавающей точкой, а такие вычисления не воспроизводятся одинаково на разных машинах. Повтор партии разошёлся бы с оригиналом, и честные победы система считала бы мошенничеством. Поэтому физика написана в целых числах: фиксированный шаг, фиксированный порядок обхода тел. Побочный выигрыш — минус 90 КБ к размеру приложения.

От «одна игра, потом ещё одна». Игры добавлялись не сбоку, а через общий реестр, который заодно починил уже существовавший дефект в рассылках. Экономика, задания и прогресс общие — новая игра получает их бесплатно.

Баланс проверен симуляцией, а не на глаз. Адаптивная сложность в крестиках-ноликах работала храповиком: игрок всегда ходил первым и проигрывал 0,3% партий, поэтому ветка «проиграл — отпустило» не срабатывала почти никогда, а лестница проходилась за четыре партии. Первый ход теперь чередуется, ступеней пять вместо трёх, спуск на одну вместо двух. Баланс закреплён симуляционным тестом.

04

Скриншоты

05

Кастомизация

  • 01Набор игр — реестр в одном файле, слаг один на все слои
  • 02Названия и порядок игр на экране выбора
  • 03Условия заданий: счёт, ступень, число слияний, победы подряд, решённые уровни
  • 04Цены платных действий — отмена хода, подсказка, замена фишки
  • 05Сложность соперника: число ступеней, шаг подъёма и спуска
  • 06Ассеты персонажей и фонов — заменяются по именам, код не меняется

Нужно что-то подобное?

Расскажите о задаче — предложу подход, подберу стек и оценю сроки.