Что такое скрытые медали
Скрытые медали 🎖 - это гейм-механика «найди и кликни», которая поощряет внимательное чтение блога и просмотр программ. На сайте всегда лежат 2 уникальных медали на двух случайных страницах:
- Архивный детектив - epic-бейдж за нахождение медали в блоге
- Каталожный охотник - epic-бейдж за нахождение медали в каталоге программ
Каждая медаль выдаётся только один раз в жизни - первый кликнувший её юзер получает бейдж навсегда. Затем медаль автоматически перекладывается на новую случайную страницу.
Где появляется медаль
Блог-медаль
Появляется в виде небольшого PNG-изображения в правом нижнем углу одного случайного блог-поста с пульсирующей аурой. Юзер видит её только когда заходит на этот конкретный пост.
Каталог-медаль
Появляется в правом нижнем углу одной случайной страницы программы. Тоже с пульсирующей аурой.
Медаль показывается только залогиненным юзерам - анонимам не отображается. Это сделано чтобы:
- Бот не мог найти медаль через парсинг
- Юзер сначала зарегистрировался
Как получить медаль
Когда юзер видит медаль на странице:
1. Кликнуть по картинке
2. Сервер атомарно записывает медаль в user_achievements
3. Анимация: PNG «улетает» в верх экрана с эффектом
4. Появляется фиолетовый тост: «🎖 Архивный детектив! Получен скрытый бейдж»
5. Медаль исчезает с этой страницы и переходит на новую случайную
Важно: первый кликнувший выигрывает. Если юзер увидел медаль и медлит - её может перехватить кто-то другой.
Анти-чит
Система защищена несколькими уровнями:
- HMAC-токен на странице - юзер не может имитировать клик через прямой POST к API
- FOR UPDATE на запись медали - параллельные клики обрабатываются строго по очереди
- UNIQUE (userid, badgeslug) - один юзер не может получить одну медаль дважды
- Rate limit 1 клик в 30 секунд - защита от ботов
- Только залогиненный юзер может получить
- Атомарная замена - после клика медаль СРАЗУ переходит на новую страницу, нет окна гонки
Перетасовка раз в сутки
Если медаль не была получена за сутки, она автоматически переходит на новую случайную страницу через cron-задачу cron/secret-medal-shuffle.php (запускается раз в сутки в 04:30).
Это гарантирует, что:
- Медаль не «застревает» на одной странице на месяц
- Юзеры регулярно проверяют разные страницы
- Нет смысла зубрить «медаль на странице X» - завтра она будет в другом месте
Админ может вручную передвинуть медаль на новую страницу через /admin/secret-medals.php или сбросить счётчик нахождений для тестов.
Где смотреть статус
Свой профиль
/profile?tab=achievements - в категории «Скрытые медали» видно, какие из 2 медалей получены, и дату нахождения.
Админка
/admin/secret-medals.php показывает админу:
- На какой странице сейчас лежит блог-медаль
- На какой странице сейчас лежит каталог-медаль
- Сколько раз каждая медаль уже находилась за всё время
- Лог последних находок (юзер, время, страница)
- Кнопка «Перетасовать сейчас» - принудительный сдвиг на новую страницу
Стратегия для охоты
Для поимки медали:
1. Регулярно читай блог - открывай разные посты, медаль всегда на одном из них
2. Просматривай страницы программ через систему Эксперт - заодно и медаль найдёшь
3. Проверяй правый нижний угол - там она появляется
4. Смотри тосты в profile - если медаль уже у кого-то взята, можно увидеть в логах админа когда
5. После клика - не радуйся слишком долго - сразу проверь, появилась ли медаль на следующей странице
Многие юзеры узнают про скрытые медали только когда видят их в чужих профилях. Это нормально - медали действительно «секретные» в смысле «не рекламируемые».