Период уточняется
Тайный Санта: подарки, игры и семейная традиция

Реальные экраны проекта. Вымышленные участники, без личных данных.
Краткое описание
Разработал и развиваю семейный сайт «Тайный Санта». Организатор собирает участников, запускает розыгрыш и передаёт каждой семье закрытую ссылку. Участник выбирает своё имя и узнаёт, кому готовить подарок. Сайт сохраняет историю прошлых лет и помогает провести следующий праздник без ручного распределения пар.
В обновлённой версии добавил две браузерные игры: «Новогодний рейс» и «Парад снеговиков». Они продолжают праздничную тему и дают участникам повод возвращаться на сайт, играть вместе и сравнивать результаты. Весь сценарий доступен с компьютера и телефона, без установки приложения.
Для чего был нужен проект
Хотел превратить ежегодный обмен подарками в удобную семейную традицию: снять с организатора ручные проверки, сохранить интригу для участников и добавить общее новогоднее развлечение.
- Организатор управляет семьями, участниками и розыгрышами в одном месте.
- Участник открывает семейную ссылку и получает назначение без регистрации отдельного аккаунта.
- История сохраняется по годам, поэтому состав и результаты прошлого праздника не теряются.
- Игры дополняют основной сервис: на сайте можно провести время, а не только узнать получателя подарка.
Розыгрыш с правилами и историей
Распределение учитывает ограничения. Никто не дарит подарок самому себе. Подарки внутри одной семьи по умолчанию исключены, а повтор пары из предыдущего года запрещён. Среди более старых назначений алгоритм старается избежать повторов; если они неизбежны, выбирает наиболее давние.
Если при выбранных правилах распределить всех участников невозможно, сайт объясняет причину и сохраняет действующий розыгрыш. Ограничения не снимаются автоматически.
Для организатора реализовал:
- редактирование состава и временное исключение семьи из следующего розыгрыша;
- запуск нового года и переигрывание текущего с сохранением прежней версии;
- архив и сравнение пар по годам;
- отметки открытых секретов и резервную копию состояния.
Семейная ссылка открывает назначения участников этой семьи. Это семейный доступ, а не личная авторизация каждого человека.
Две игры внутри одного проекта
«Новогодний рейс». Игрок управляет санями, собирает подарки, меняет полосу, перепрыгивает препятствия и использует бонусы. В игре 50 уровней, пауза, разгон и управление с клавиатуры или телефона.
«Парад снеговиков». Игрок ведёт команду по зимней дорожке, выбирает ворота, собирает снег и увеличивает число друзей. Нужно довести команду до праздничной ёлки. Реализованы 20 уровней, препятствия и защитные бонусы.
Для обеих игр сделал общее игровое имя, отдельные таблицы результатов, выбор стартового уровня и полноэкранный режим. Игры работают независимо от розыгрыша и не меняют распределение подарков.
Интерфейс и атмосфера
Собрал светлую и тёмную темы, праздничные иллюстрации, снег и анимированный полёт саней. Дед Мороз задевает солнце или луну, и вслед за этим плавно меняется оформление всего сайта. Декоративное движение можно приостановить; интерфейс учитывает настройку уменьшения анимации и скрытие вкладки.
Как устроен проект
Серверная часть написана на PHP, интерфейс на HTML, CSS и JavaScript. Оба игровых движка разработал на JavaScript с отрисовкой в Canvas 2D. Перспектива создаёт ощущение движения и объёма без отдельного 3D-движка.
Участники, розыгрыши, архивы и игровые результаты хранятся в закрытых JSON-файлах. Изменения защищены от одновременной записи. Для запуска не нужны SQL-база, установка пакетов или сборка: проект рассчитан на обычный PHP-хостинг.
Добавил проверку доступа, защиту форм и ограничения частоты запросов. Подробные журналы доступны организатору, а публичные игровые таблицы показывают только имена и результаты. Логику розыгрыша, доступ и игровые сценарии проверяют автоматические тесты.
Моя роль и ценность проекта
Я спроектировал пользовательские сценарии, реализовал распределение пар, архивы, панель организатора, оформление и два игровых движка. Продолжаю развивать проект как единый продукт: от понятного первого экрана до правил, сохранения результатов и сопровождения.
Этот кейс показывает, как я соединяю прикладную задачу, алгоритмы и интерактивный интерфейс. Основная функция решает задачу обмена подарками, а игры и оформление создают вокруг неё опыт, к которому хочется возвращаться.