Период уточняется

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

Краткое описание

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

В обновлённой версии добавил две браузерные игры: «Новогодний рейс» и «Парад снеговиков». Они продолжают праздничную тему и дают участникам повод возвращаться на сайт, играть вместе и сравнивать результаты. Весь сценарий доступен с компьютера и телефона, без установки приложения.

Для чего был нужен проект

Хотел превратить ежегодный обмен подарками в удобную семейную традицию: снять с организатора ручные проверки, сохранить интригу для участников и добавить общее новогоднее развлечение.

  • Организатор управляет семьями, участниками и розыгрышами в одном месте.
  • Участник открывает семейную ссылку и получает назначение без регистрации отдельного аккаунта.
  • История сохраняется по годам, поэтому состав и результаты прошлого праздника не теряются.
  • Игры дополняют основной сервис: на сайте можно провести время, а не только узнать получателя подарка.

Розыгрыш с правилами и историей

Распределение учитывает ограничения. Никто не дарит подарок самому себе. Подарки внутри одной семьи по умолчанию исключены, а повтор пары из предыдущего года запрещён. Среди более старых назначений алгоритм старается избежать повторов; если они неизбежны, выбирает наиболее давние.

Если при выбранных правилах распределить всех участников невозможно, сайт объясняет причину и сохраняет действующий розыгрыш. Ограничения не снимаются автоматически.

Для организатора реализовал:

  • редактирование состава и временное исключение семьи из следующего розыгрыша;
  • запуск нового года и переигрывание текущего с сохранением прежней версии;
  • архив и сравнение пар по годам;
  • отметки открытых секретов и резервную копию состояния.

Семейная ссылка открывает назначения участников этой семьи. Это семейный доступ, а не личная авторизация каждого человека.

Две игры внутри одного проекта

«Новогодний рейс». Игрок управляет санями, собирает подарки, меняет полосу, перепрыгивает препятствия и использует бонусы. В игре 50 уровней, пауза, разгон и управление с клавиатуры или телефона.

«Парад снеговиков». Игрок ведёт команду по зимней дорожке, выбирает ворота, собирает снег и увеличивает число друзей. Нужно довести команду до праздничной ёлки. Реализованы 20 уровней, препятствия и защитные бонусы.

Для обеих игр сделал общее игровое имя, отдельные таблицы результатов, выбор стартового уровня и полноэкранный режим. Игры работают независимо от розыгрыша и не меняют распределение подарков.

Интерфейс и атмосфера

Собрал светлую и тёмную темы, праздничные иллюстрации, снег и анимированный полёт саней. Дед Мороз задевает солнце или луну, и вслед за этим плавно меняется оформление всего сайта. Декоративное движение можно приостановить; интерфейс учитывает настройку уменьшения анимации и скрытие вкладки.

Как устроен проект

Серверная часть написана на PHP, интерфейс на HTML, CSS и JavaScript. Оба игровых движка разработал на JavaScript с отрисовкой в Canvas 2D. Перспектива создаёт ощущение движения и объёма без отдельного 3D-движка.

Участники, розыгрыши, архивы и игровые результаты хранятся в закрытых JSON-файлах. Изменения защищены от одновременной записи. Для запуска не нужны SQL-база, установка пакетов или сборка: проект рассчитан на обычный PHP-хостинг.

Добавил проверку доступа, защиту форм и ограничения частоты запросов. Подробные журналы доступны организатору, а публичные игровые таблицы показывают только имена и результаты. Логику розыгрыша, доступ и игровые сценарии проверяют автоматические тесты.

Моя роль и ценность проекта

Я спроектировал пользовательские сценарии, реализовал распределение пар, архивы, панель организатора, оформление и два игровых движка. Продолжаю развивать проект как единый продукт: от понятного первого экрана до правил, сохранения результатов и сопровождения.

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